From 1fcd5ae9a9dfd3a7c5ccacd11ffd54a3ad93e643 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sat, 28 Aug 2021 11:12:35 -0400 Subject: Cosmetic Improve the itemization code to have all variants take the same code paths, so we can do fixups in one place. --- pango/itemize.c | 38 ++++++++++++++++---------------------- pango/pango-context-private.h | 3 +++ pango/pango-context.c | 5 ++++- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/pango/itemize.c b/pango/itemize.c index 27a9865d..bd699bce 100644 --- a/pango/itemize.c +++ b/pango/itemize.c @@ -700,7 +700,7 @@ itemize_state_add_character (ItemizeState *state, break; } - state->item->analysis.flags = state->centered_baseline ? PANGO_ANALYSIS_FLAG_CENTERED_BASELINE : 0; + state->item->analysis.flags |= state->centered_baseline ? PANGO_ANALYSIS_FLAG_CENTERED_BASELINE : 0; state->item->analysis.script = state->script; state->item->analysis.language = state->derived_lang; @@ -1021,21 +1021,24 @@ itemize_state_finish (ItemizeState *state) /* }}} */ /* {{{ Public API */ -/* Like pango_itemize, but takes a font description */ +/* Like pango_itemize_with_base_dir, but takes a font description */ GList * pango_itemize_with_font (PangoContext *context, + PangoDirection base_dir, const char *text, int start_index, int length, + PangoAttrList *attrs, + PangoAttrIterator *cached_iter, const PangoFontDescription *desc) { ItemizeState state; - if (length == 0) + if (length == 0 || g_utf8_get_char (text + start_index) == '\0') return NULL; - itemize_state_init (&state, context, text, context->base_dir, start_index, length, - NULL, NULL, desc); + itemize_state_init (&state, context, text, base_dir, start_index, length, + attrs, cached_iter, desc); do itemize_state_process_run (&state); @@ -1079,26 +1082,15 @@ pango_itemize_with_base_dir (PangoContext *context, PangoAttrList *attrs, PangoAttrIterator *cached_iter) { - ItemizeState state; - g_return_val_if_fail (context != NULL, NULL); g_return_val_if_fail (start_index >= 0, NULL); g_return_val_if_fail (length >= 0, NULL); g_return_val_if_fail (length == 0 || text != NULL, NULL); - if (length == 0 || g_utf8_get_char (text + start_index) == '\0') - return NULL; - - itemize_state_init (&state, context, text, base_dir, start_index, length, - attrs, cached_iter, NULL); - - do - itemize_state_process_run (&state); - while (itemize_state_next (&state)); - - itemize_state_finish (&state); - - return g_list_reverse (state.result); + return pango_itemize_with_font (context, base_dir, + text, start_index, length, + attrs, cached_iter, + NULL); } /** @@ -1142,8 +1134,10 @@ pango_itemize (PangoContext *context, g_return_val_if_fail (length >= 0, NULL); g_return_val_if_fail (length == 0 || text != NULL, NULL); - return pango_itemize_with_base_dir (context, context->base_dir, - text, start_index, length, attrs, cached_iter); + return pango_itemize_with_font (context, context->base_dir, + text, start_index, length, + attrs, cached_iter, + NULL); } /* }}} */ diff --git a/pango/pango-context-private.h b/pango/pango-context-private.h index 240c07d4..d65406e1 100644 --- a/pango/pango-context-private.h +++ b/pango/pango-context-private.h @@ -51,9 +51,12 @@ struct _PangoContext }; GList * pango_itemize_with_font (PangoContext *context, + PangoDirection base_dir, const char *text, int start_index, int length, + PangoAttrList *attrs, + PangoAttrIterator *cached_iter, const PangoFontDescription *desc); diff --git a/pango/pango-context.c b/pango/pango-context.c index d76b0ae2..2301138f 100644 --- a/pango/pango-context.c +++ b/pango/pango-context.c @@ -712,7 +712,10 @@ pango_context_get_metrics (PangoContext *context, sample_str = pango_language_get_sample_string (language); text_len = strlen (sample_str); - items = pango_itemize_with_font (context, sample_str, 0, text_len, desc); + items = pango_itemize_with_font (context, context->base_dir, + sample_str, 0, text_len, + NULL, NULL, + desc); update_metrics_from_items (metrics, language, sample_str, text_len, items); -- cgit v1.2.1