Fix few wrapping problems

This commit is contained in:
Vladimir 'phcoder' Serbinenko 2010-03-16 15:21:50 +01:00
parent 8b4ca08868
commit 3830c087bb

View file

@ -597,10 +597,15 @@ bidi_line_wrap (struct grub_unicode_glyph *visual_out,
unsigned j; unsigned j;
unsigned i; unsigned i;
if (last_space > (signed) line_start) if (k != visual_len && last_space > (signed) line_start)
k = last_space; k = last_space;
else if (k != visual_len && line_start == 0 && startwidth != 0)
{
k = 0;
last_space_width = startwidth;
}
else else
line_width -= last_width; last_space_width = line_width - last_width;
for (i = line_start; i < k; i++) for (i = line_start; i < k; i++)
{ {
@ -627,6 +632,8 @@ bidi_line_wrap (struct grub_unicode_glyph *visual_out,
if (is_mirrored (visual[i].base) && levels[i]) if (is_mirrored (visual[i].base) && levels[i])
visual[i].attributes |= GRUB_UNICODE_GLYPH_ATTRIBUTE_MIRROR; visual[i].attributes |= GRUB_UNICODE_GLYPH_ATTRIBUTE_MIRROR;
grub_memcpy (outptr, &visual[line_start],
(k - line_start) * sizeof (visual[0]));
outptr += k - line_start; outptr += k - line_start;
if (k != visual_len) if (k != visual_len)
{ {
@ -986,6 +993,7 @@ grub_bidi_logical_to_visual (const grub_uint32_t *logical,
grub_memset (visual_ptr, 0, sizeof (visual_ptr[0])); grub_memset (visual_ptr, 0, sizeof (visual_ptr[0]));
visual_ptr->base = '\n'; visual_ptr->base = '\n';
visual_ptr++; visual_ptr++;
line_start++;
} }
} }
} }
@ -1140,7 +1148,6 @@ grub_print_ucs4 (const grub_uint32_t * str,
grub_print_spaces (term, margin_left - ((term->getxy () >> 8) & 0xff)); grub_print_spaces (term, margin_left - ((term->getxy () >> 8) & 0xff));
startwidth = ((term->getxy () >> 8) & 0xff) - margin_left; startwidth = ((term->getxy () >> 8) & 0xff) - margin_left;
startwidth = 0;
if ((term->flags & GRUB_TERM_CODE_TYPE_MASK) if ((term->flags & GRUB_TERM_CODE_TYPE_MASK)
== GRUB_TERM_CODE_TYPE_UCS4_VISUAL == GRUB_TERM_CODE_TYPE_UCS4_VISUAL
@ -1236,6 +1243,12 @@ grub_print_ucs4 (const grub_uint32_t * str,
if (line_width > max_width && last_space > line_start) if (line_width > max_width && last_space > line_start)
ptr = last_space; ptr = last_space;
else if (line_width > max_width
&& line_start == str && startwidth != 0)
{
ptr = str;
lastspacewidth = startwidth;
}
else else
lastspacewidth = line_width - last_width; lastspacewidth = line_width - last_width;