diff options
author | Matthias Clasen <mclasen@redhat.com> | 2019-07-06 22:54:38 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2019-07-07 11:28:33 -0400 |
commit | 50b1e8532c5211cebd3cea935f9ac91a087d5c35 (patch) | |
tree | af1ca619f55780c9e64991e1ed97740774fe5eaa | |
parent | 78eb39adf81e2c0de43ae7e3e33ca13cea46330a (diff) | |
download | pango-50b1e8532c5211cebd3cea935f9ac91a087d5c35.tar.gz |
break: Mark breaks induced by soft hyphens
Use a bit in PangoLogAttr to mark line breaks
that are due to soft hyphens; we want to insert
hyphens here later, if the break is taken.
-rw-r--r-- | pango/break.c | 9 | ||||
-rw-r--r-- | pango/pango-break.h | 5 |
2 files changed, 12 insertions, 2 deletions
diff --git a/pango/break.c b/pango/break.c index 11f4079e..13ccbdaf 100644 --- a/pango/break.c +++ b/pango/break.c @@ -984,6 +984,7 @@ pango_default_break (const gchar *text, attrs[i].is_char_break = FALSE; attrs[i].is_line_break = FALSE; attrs[i].is_mandatory_break = FALSE; + attrs[i].is_soft_hyphen = FALSE; /* Rule LB1: assign a line breaking class to each code point of the input. */ @@ -1364,9 +1365,15 @@ pango_default_break (const gchar *text, case BREAK_ALLOWED: attrs[i].is_line_break = TRUE; - break; + /* fall through */ case BREAK_ALREADY_HANDLED: + if (attrs[i].is_line_break) + { + /* After Soft Hyphen */ + if (prev_wc == 0x00AD) + attrs[i].is_soft_hyphen = TRUE; + } break; default: diff --git a/pango/pango-break.h b/pango/pango-break.h index 92af390b..66d81631 100644 --- a/pango/pango-break.h +++ b/pango/pango-break.h @@ -79,6 +79,9 @@ G_BEGIN_DECLS * This flag implements Unicode's * <ulink url="http://www.unicode.org/reports/tr29/">Word * Boundaries</ulink> semantics. (Since: 1.22) + * @is_soft_hyphen: is a line break due to a Soft Hyphen (0x00AD). + * This indicates a position where a hyphen should be inserted + * if the break is taken. * * The #PangoLogAttr structure stores information * about the attributes of a single character. @@ -86,7 +89,6 @@ G_BEGIN_DECLS struct _PangoLogAttr { guint is_line_break : 1; /* Can break line in front of character */ - guint is_mandatory_break : 1; /* Must break line in front of character */ guint is_char_break : 1; /* Can break here when doing char wrap */ @@ -130,6 +132,7 @@ struct _PangoLogAttr /* Word boundary as defined by UAX#29 */ guint is_word_boundary : 1; /* is NOT in the middle of a word */ + guint is_soft_hyphen : 1; /* line break due to a soft hyphen */ }; /* Determine information about cluster/word/line breaks in a string |