[pango/soft-hyphen: 6/8] break: Mark breaks induced by soft hyphens



commit 50b1e8532c5211cebd3cea935f9ac91a087d5c35
Author: Matthias Clasen <mclasen redhat com>
Date:   Sat Jul 6 22:54:38 2019 -0400

    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.

 pango/break.c       | 9 ++++++++-
 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


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]