if (logical_len < 0)
return grub_errno;
- visual_len = grub_bidi_logical_to_visual (logical, logical_len, &visual, 0, 0);
+ visual_len = grub_bidi_logical_to_visual (logical, logical_len, &visual,
+ 0, 0, 0);
grub_free (logical);
if (visual_len < 0)
return grub_errno;
grub_size_t logical_len,
struct grub_unicode_glyph **visual_out,
grub_ssize_t (*getcharwidth) (const struct grub_unicode_glyph *visual),
- grub_size_t max_length);
+ grub_size_t max_width,
+ grub_size_t start_width);
enum grub_comb_type
grub_unicode_get_comb_type (grub_uint32_t c);
grub_size_t logical_len,
struct grub_unicode_glyph *visual_out,
grub_ssize_t (*getcharwidth) (const struct grub_unicode_glyph *visual),
- grub_size_t maxwidth)
+ grub_size_t maxwidth, grub_size_t startwidth)
{
enum grub_bidi_type type = GRUB_BIDI_TYPE_L;
enum override_status {OVERRIDE_NEUTRAL = 0, OVERRIDE_R, OVERRIDE_L};
{
struct grub_unicode_glyph *outptr = visual_out;
unsigned line_start = 0;
- grub_ssize_t line_width = 0;
+ grub_ssize_t line_width = startwidth;
unsigned k;
for (k = 0; k <= visual_len; k++)
grub_size_t logical_len,
struct grub_unicode_glyph **visual_out,
grub_ssize_t (*getcharwidth) (const struct grub_unicode_glyph *visual),
- grub_size_t max_length)
+ grub_size_t max_length, grub_size_t startwidth)
{
const grub_uint32_t *line_start = logical, *ptr;
struct grub_unicode_glyph *visual_ptr;
ptr - line_start,
visual_ptr,
getcharwidth,
- max_length);
+ max_length,
+ startwidth);
+ startwidth = 0;
+
if (ret < 0)
{
grub_free (*visual_out);
last_position - str,
&visual,
term->getcharwidth,
- grub_term_width (term));
+ grub_term_width (term),
+ (term->getxy () >> 8) & 0xff);
if (visual_len < 0)
{
grub_print_error ();