From 40aa6e1f0dd197ec198d209d912df8ca8e693c0e Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Tue, 25 Jan 2022 20:52:58 -0500 Subject: attributes: Centralize classification Make the 'affects itemization' etc classification available in one place, so we can use it elsewhere. --- pango/pango-attributes-private.h | 5 ++++ pango/pango-attributes.c | 59 +++++++++++++++++++++++++++++++++++++++ pango/pango-line-breaker.c | 60 ++-------------------------------------- 3 files changed, 66 insertions(+), 58 deletions(-) diff --git a/pango/pango-attributes-private.h b/pango/pango-attributes-private.h index 4c427695..7d311082 100644 --- a/pango/pango-attributes-private.h +++ b/pango/pango-attributes-private.h @@ -50,4 +50,9 @@ gboolean pango_attr_iterator_advance (PangoAttrIterator *iterator, int index); +gboolean pango_attribute_affects_itemization (PangoAttribute *attr, + gpointer data); +gboolean pango_attribute_affects_break_or_shape (PangoAttribute *attr, + gpointer data); + #endif diff --git a/pango/pango-attributes.c b/pango/pango-attributes.c index 8d93e5ab..1a2061d3 100644 --- a/pango/pango-attributes.c +++ b/pango/pango-attributes.c @@ -523,6 +523,65 @@ pango_attr_shape_equal (const PangoAttribute *attr1, shape_attr1->data == shape_attr2->data); } /* }}} */ +/* }}} */ +/* {{{ Private API */ + +gboolean +pango_attribute_affects_itemization (PangoAttribute *attr, + gpointer data) +{ + switch ((int)attr->klass->type) + { + /* These affect font selection */ + case PANGO_ATTR_LANGUAGE: + case PANGO_ATTR_FAMILY: + case PANGO_ATTR_STYLE: + case PANGO_ATTR_WEIGHT: + case PANGO_ATTR_VARIANT: + case PANGO_ATTR_STRETCH: + case PANGO_ATTR_SIZE: + case PANGO_ATTR_FONT_DESC: + case PANGO_ATTR_SCALE: + case PANGO_ATTR_FALLBACK: + case PANGO_ATTR_ABSOLUTE_SIZE: + case PANGO_ATTR_GRAVITY: + case PANGO_ATTR_GRAVITY_HINT: + case PANGO_ATTR_FONT_SCALE: + /* These need to be constant across runs */ + case PANGO_ATTR_LETTER_SPACING: + case PANGO_ATTR_SHAPE: + case PANGO_ATTR_RISE: + case PANGO_ATTR_BASELINE_SHIFT: + case PANGO_ATTR_LINE_HEIGHT: + case PANGO_ATTR_ABSOLUTE_LINE_HEIGHT: + case PANGO_ATTR_TEXT_TRANSFORM: + return TRUE; + default: + return FALSE; + } +} + +gboolean +pango_attribute_affects_break_or_shape (PangoAttribute *attr, + gpointer data) +{ + switch ((int)attr->klass->type) + { + /* Affects breaks */ + case PANGO_ATTR_ALLOW_BREAKS: + case PANGO_ATTR_WORD: + case PANGO_ATTR_SENTENCE: + case PANGO_ATTR_PARAGRAPH: + /* Affects shaping */ + case PANGO_ATTR_INSERT_HYPHENS: + case PANGO_ATTR_FONT_FEATURES: + case PANGO_ATTR_SHOW: + return TRUE; + default: + return FALSE; + } +} + /* }}} */ /* {{{ Public API */ diff --git a/pango/pango-line-breaker.c b/pango/pango-line-breaker.c index 3461e021..05c905aa 100644 --- a/pango/pango-line-breaker.c +++ b/pango/pango-line-breaker.c @@ -160,62 +160,6 @@ item_is_paragraph_separator (PangoLineBreaker *self, return ch == '\r' || ch == '\n' || ch == 0x2029; } -static gboolean -affects_itemization (PangoAttribute *attr, - gpointer data) -{ - switch ((int)attr->klass->type) - { - /* These affect font selection */ - case PANGO_ATTR_LANGUAGE: - case PANGO_ATTR_FAMILY: - case PANGO_ATTR_STYLE: - case PANGO_ATTR_WEIGHT: - case PANGO_ATTR_VARIANT: - case PANGO_ATTR_STRETCH: - case PANGO_ATTR_SIZE: - case PANGO_ATTR_FONT_DESC: - case PANGO_ATTR_SCALE: - case PANGO_ATTR_FALLBACK: - case PANGO_ATTR_ABSOLUTE_SIZE: - case PANGO_ATTR_GRAVITY: - case PANGO_ATTR_GRAVITY_HINT: - case PANGO_ATTR_FONT_SCALE: - /* These need to be constant across runs */ - case PANGO_ATTR_LETTER_SPACING: - case PANGO_ATTR_SHAPE: - case PANGO_ATTR_RISE: - case PANGO_ATTR_BASELINE_SHIFT: - case PANGO_ATTR_LINE_HEIGHT: - case PANGO_ATTR_ABSOLUTE_LINE_HEIGHT: - case PANGO_ATTR_TEXT_TRANSFORM: - return TRUE; - default: - return FALSE; - } -} - -static gboolean -affects_break_or_shape (PangoAttribute *attr, - gpointer data) -{ - switch ((int)attr->klass->type) - { - /* Affects breaks */ - case PANGO_ATTR_ALLOW_BREAKS: - case PANGO_ATTR_WORD: - case PANGO_ATTR_SENTENCE: - case PANGO_ATTR_PARAGRAPH: - /* Affects shaping */ - case PANGO_ATTR_INSERT_HYPHENS: - case PANGO_ATTR_FONT_FEATURES: - case PANGO_ATTR_SHOW: - return TRUE; - default: - return FALSE; - } -} - static void apply_attributes_to_items (GList *items, PangoAttrList *attrs) @@ -299,8 +243,8 @@ ensure_items (PangoLineBreaker *self) self->render_attrs = pango_attr_list_copy (self->data->attrs); if (self->render_attrs) { - shape_attrs = pango_attr_list_filter (self->render_attrs, affects_break_or_shape, NULL); - itemize_attrs = pango_attr_list_filter (self->render_attrs, affects_itemization, NULL); + shape_attrs = pango_attr_list_filter (self->render_attrs, pango_attribute_affects_break_or_shape, NULL); + itemize_attrs = pango_attr_list_filter (self->render_attrs, pango_attribute_affects_itemization, NULL); } self->items = pango_itemize_with_font (self->context, -- cgit v1.2.1