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,
}
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')
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,
{
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);
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)
{
ptr - line_start,
visual_ptr,
getcharwidth,
+ getcharwidth_arg,
max_length,
startwidth,
contchar,
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,
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),
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,