summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2019-07-06 22:54:38 -0400
committerMatthias Clasen <mclasen@redhat.com>2019-07-07 11:28:33 -0400
commit50b1e8532c5211cebd3cea935f9ac91a087d5c35 (patch)
treeaf1ca619f55780c9e64991e1ed97740774fe5eaa
parent78eb39adf81e2c0de43ae7e3e33ca13cea46330a (diff)
downloadpango-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.c9
-rw-r--r--pango/pango-break.h5
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