]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Handle initial position in bidi
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Tue, 16 Mar 2010 09:55:06 +0000 (10:55 +0100)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Tue, 16 Mar 2010 09:55:06 +0000 (10:55 +0100)
gfxmenu/font.c
include/grub/unicode.h
normal/charset.c

index 9209cbaa5e0d9b981af04d25aa73e9856aff835f..0c973620addf16a5d2784997216ebd6d72ed37fc 100644 (file)
@@ -50,7 +50,8 @@ grub_font_draw_string (const char *str, grub_font_t font,
   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;
index 733bb02794ee8f7158221c8df7112b6a12b295c8..e7f176d0f0443e2574a9ea0b22fcf8be142aa6a4 100644 (file)
@@ -104,7 +104,8 @@ 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_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);
index ddedeaa61849b9349d9e9d2270269938156110fa..98d89ff4e58e24dbf3e99bbd056b40601d204535 100644 (file)
@@ -548,7 +548,7 @@ 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_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};
@@ -861,7 +861,7 @@ grub_bidi_line_logical_to_visual (const grub_uint32_t *logical,
   {
     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++)
@@ -925,7 +925,7 @@ 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_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;
@@ -940,7 +940,10 @@ grub_bidi_logical_to_visual (const grub_uint32_t *logical,
                                                  ptr - line_start,
                                                  visual_ptr,
                                                  getcharwidth,
-                                                 max_length);
+                                                 max_length,
+                                                 startwidth);
+         startwidth = 0;
+
          if (ret < 0)
            {
              grub_free (*visual_out);
@@ -1095,7 +1098,8 @@ grub_print_ucs4 (const grub_uint32_t * str,
                                                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 ();