[pango/soft-hyphen: 1/3] break: Mark breaks induced by soft hyphens
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pango/soft-hyphen: 1/3] break: Mark breaks induced by soft hyphens
- Date: Sun, 7 Jul 2019 02:56:45 +0000 (UTC)
commit b5bf6a2efb7e1fa8147b02afd2567d709c22a2c9
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]