From a8cf486e737e91b508d9a5135b887eb93062b7a1 Mon Sep 17 00:00:00 2001 From: Vladimir 'phcoder' Serbinenko Date: Sat, 2 Mar 2013 11:47:59 +0100 Subject: [PATCH 182/471] * grub-core/normal/charset.c (grub_bidi_logical_to_visual): Add hook pass-through parameter. All users updated and unnested. --- grub-core/gfxmenu/font.c | 2 +- grub-core/normal/charset.c | 14 +++++++++----- grub-core/normal/term.c | 14 +++++++------- include/grub/unicode.h | 3 ++- 4 files changed, 19 insertions(+), 14 deletions(-) diff --git a/grub-core/gfxmenu/font.c b/grub-core/gfxmenu/font.c index 81a689d..7174837 100644 --- a/grub-core/gfxmenu/font.c +++ b/grub-core/gfxmenu/font.c @@ -52,7 +52,7 @@ grub_font_draw_string (const char *str, grub_font_t font, return grub_errno; visual_len = grub_bidi_logical_to_visual (logical, logical_len, &visual, - 0, 0, 0, 0, 0, 0); + 0, 0, 0, 0, 0, 0, 0); grub_free (logical); if (visual_len < 0) return grub_errno; diff --git a/grub-core/normal/charset.c b/grub-core/normal/charset.c index bd9fbf4..ab3101b 100644 --- a/grub-core/normal/charset.c +++ b/grub-core/normal/charset.c @@ -512,7 +512,8 @@ static grub_ssize_t bidi_line_wrap (struct grub_unicode_glyph *visual_out, struct grub_unicode_glyph *visual, grub_size_t visual_len, unsigned *levels, - grub_ssize_t (*getcharwidth) (const struct grub_unicode_glyph *visual), + grub_ssize_t (*getcharwidth) (const struct grub_unicode_glyph *visual, void *getcharwidth_arg), + void *getcharwidth_arg, grub_size_t maxwidth, grub_size_t startwidth, grub_uint32_t contchar, struct grub_term_pos *pos, int primitive_wrap, @@ -577,7 +578,7 @@ bidi_line_wrap (struct grub_unicode_glyph *visual_out, } if (getcharwidth && k != visual_len) - line_width += last_width = getcharwidth (&visual[k]); + line_width += last_width = getcharwidth (&visual[k], getcharwidth_arg); if (k != visual_len && (visual[k].base == ' ' || visual[k].base == '\t') @@ -752,7 +753,8 @@ static grub_ssize_t grub_bidi_line_logical_to_visual (const grub_uint32_t *logical, grub_size_t logical_len, struct grub_unicode_glyph *visual_out, - grub_ssize_t (*getcharwidth) (const struct grub_unicode_glyph *visual), + grub_ssize_t (*getcharwidth) (const struct grub_unicode_glyph *visual, void *getcharwidth_arg), + void *getcharwidth_arg, grub_size_t maxwidth, grub_size_t startwidth, grub_uint32_t contchar, struct grub_term_pos *pos, @@ -1116,7 +1118,7 @@ grub_bidi_line_logical_to_visual (const grub_uint32_t *logical, { grub_ssize_t ret; ret = bidi_line_wrap (visual_out, visual, visual_len, levels, - getcharwidth, maxwidth, startwidth, contchar, + getcharwidth, getcharwidth_arg, maxwidth, startwidth, contchar, pos, primitive_wrap, log_end); grub_free (levels); grub_free (visual); @@ -1128,7 +1130,8 @@ grub_ssize_t grub_bidi_logical_to_visual (const grub_uint32_t *logical, grub_size_t logical_len, struct grub_unicode_glyph **visual_out, - grub_ssize_t (*getcharwidth) (const struct grub_unicode_glyph *visual), + grub_ssize_t (*getcharwidth) (const struct grub_unicode_glyph *visual, void *getcharwidth_arg), + void *getcharwidth_arg, grub_size_t max_length, grub_size_t startwidth, grub_uint32_t contchar, struct grub_term_pos *pos, int primitive_wrap) { @@ -1147,6 +1150,7 @@ grub_bidi_logical_to_visual (const grub_uint32_t *logical, ptr - line_start, visual_ptr, getcharwidth, + getcharwidth_arg, max_length, startwidth, contchar, diff --git a/grub-core/normal/term.c b/grub-core/normal/term.c index dc03268..ae91071 100644 --- a/grub-core/normal/term.c +++ b/grub-core/normal/term.c @@ -840,6 +840,12 @@ print_backlog (struct grub_term_output *term, return 0; } +static grub_ssize_t +getcharwidth (const struct grub_unicode_glyph *c, void *term) +{ + return grub_term_getcharwidth (term, c); +} + static int print_ucs4_real (const grub_uint32_t * str, const grub_uint32_t * last_position, @@ -881,14 +887,8 @@ print_ucs4_real (const grub_uint32_t * str, int ret; struct grub_unicode_glyph *vptr; - auto grub_ssize_t getcharwidth (const struct grub_unicode_glyph *c); - grub_ssize_t getcharwidth (const struct grub_unicode_glyph *c) - { - return grub_term_getcharwidth (term, c); - } - visual_len = grub_bidi_logical_to_visual (str, last_position - str, - &visual, getcharwidth, + &visual, getcharwidth, term, get_maxwidth (term, margin_left, margin_right), diff --git a/include/grub/unicode.h b/include/grub/unicode.h index eb5051a..5a96a19 100644 --- a/include/grub/unicode.h +++ b/include/grub/unicode.h @@ -240,7 +240,8 @@ grub_ssize_t grub_bidi_logical_to_visual (const grub_uint32_t *logical, grub_size_t logical_len, struct grub_unicode_glyph **visual_out, - grub_ssize_t (*getcharwidth) (const struct grub_unicode_glyph *visual), + grub_ssize_t (*getcharwidth) (const struct grub_unicode_glyph *visual, void *getcharwidth_arg), + void *getcharwidth_arg, grub_size_t max_width, grub_size_t start_width, grub_uint32_t codechar, struct grub_term_pos *pos, -- 1.8.2.1