Bidi and diacritics support.
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Fri, 2 Jul 2010 20:16:35 +0000 (22:16 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Fri, 2 Jul 2010 20:16:35 +0000 (22:16 +0200)
* Makefile.in (widthspec.bin): New target.
(widthspec.h): Likewise.
(TARGET_CFLAGS): Add -DHAVE_UNIFONT_WIDTHSPEC=1 if font was available.
* autogen.sh: Generate unidata.c.
* commands/cat.c (grub_cmd_cat): Don't use grub_putchar.
* commands/ls.c (grub_ls_list_devices): Likewise.
(grub_ls_list_files): Likewise.
* commands/minicmd.c (grub_mini_cmd_cat): Likewise.
(grub_mini_cmd_lsmod): Likewise.
* commands/read.c: Likewise.
* kern/corecmd.c (grub_core_cmd_ls): Likewise.
* kern/rescue_reader.c (grub_rescue_read_line): Likewise.
* lib/arg.c (grub_arg_show_help): Likewise.
* lib/crypto.c (grub_password_get): Likewise.
* normal/auth.c (grub_username_get): Likewise.
* normal/misc.c (grub_normal_print_device_info): Likewise.
* commands/help.c (grub_cmd_help): Use grub_unicode_aglomerate_comb.
* conf/common.rmk (grub_mkfont_SOURCES): Add unidata.c.
(gfxmenu_mod_SOURCES): Add gfxmenu/font.c.
(normal/charset.c_DEPENDENCIES): New variable.
(normal_mod_SOURCES): Add normal/charset.c and unidata.c.
(pkglib_MODULES): Remove charset.mod.
(charset_mod_SOURCES): Removed.
(charset_mod_CFLAGS): Likewise.
(charset_mod_LDFLAGS): Likewise.
(pkglib_MODULES) [ieee1275]: Remove terminfo.mod.
* conf/powerpc-ieee1275.rmk (kernel_img_SOURCES): Add term/terminfo.c
and term/tparm.c.
* conf/sparc64-ieee1275.rmk (kernel_img_SOURCES): Likewise.
* conf/i386-ieee1275.rmk (kernel_img_SOURCES): Likewise.
(kernel_img_HEADERS): Add terminfo.h.
* font/font.c (ascii_glyph_lookup): Return NULL on failure.
Fill ->font. Reverse ascii bitmaps.
(grub_font_get_xheight): New function.
* font/font.c (grub_font_get_string_width): Moved from here ...
* gfxmenu/font.c (grub_font_get_string_width): ... here.
* font/font.c (grub_font_draw_string): Moved from here ...
* gfxmenu/font.c (grub_font_draw_string): ... here.
* font/font.c (grub_font_dup_glyph): New function.
(grub_font_blit_glyph): Likewise.
(grub_font_blit_glyph_mirror): Likewise.
(blit_comb): Likewise.
(grub_font_construct_dry_run): Likewise.
(grub_font_get_constructed_device_width): Likewise.
(grub_font_construct_glyph): Likewise.
* include/grub/charset.h (grub_ucs4_to_utf8): New proto.
* include/grub/misc.h (grub_utf8_to_ucs4): Moved from here ...
* include/grub/charset.h (grub_utf8_to_ucs4): ... here.
* include/grub/font.h (GRUB_FONT_CODE_CHAR_MASK): New constant.
(GRUB_FONT_CODE_RIGHT_JOINED): Likewise.
(GRUB_FONT_CODE_LEFT_JOINED): Likewise.
(grub_font_get_xheight): New proto.
(grub_font_get_constructed_device_width): Likewise.
(grub_font_construct_glyph): Likewise.
* include/grub/font.h (grub_font_get_string_width): Moved from here ...
* include/grub/gfxmenu_view.h (grub_font_get_string_width): ... here.
* include/grub/font.h (grub_font_draw_string): Moved from here ...
* include/grub/gfxmenu_view.h (grub_font_draw_string): ... here.
* include/grub/i386/vga_common.h (grub_console_putchar): Moved from here..
* include/grub/i386/pc/console.h (grub_console_putchar): ... here.
* include/grub/i386/vga_common.h (grub_console_real_putchar): Removed.
(grub_console_getcharwidth): Likewise.
* include/grub/misc.h (grub_xputs): New proto.
(grub_puts): Inlined.
* include/grub/normal.h (grub_print_ucs4): Add margin specification.
(grub_normal_get_line_counter): Removed.
(grub_install_newline_hook): Likewise.
(grub_normal_get_char_counter): New proto.
(grub_normal_reset_more): Likewise.
(grub_xputs_normal): Likewise.
* include/grub/powerpc/ieee1275/console.h: Removed.
* include/grub/sparc64/ieee1275/console.h: Likewise.
* include/grub/term.h (GRUB_TERM_CODE_TYPE_MASK): New definition.
(GRUB_TERM_CODE_TYPE_ASCII): Likewise.
(GRUB_TERM_CODE_TYPE_CP437): Likewise.
(GRUB_TERM_CODE_TYPE_UTF8_LOGICAL): Likewise.
(GRUB_TERM_CODE_TYPE_UTF8_VISUAL): Likewise.
(GRUB_TERM_CODE_TYPE_VISUAL_GLYPHS): Likewise.
(grub_term_input): Pass reference to self. All users updated.
(grub_term_output): Pass grub_unicode_glyph to putchar and getcharwidth.
Pass reference to self. New fields normal_color, highlight_color and
data. All users updated.
(grub_putchar): Removed.
(grub_putcode): Remove EXPORT_FUNC since it's not in kernel anymore.
(grub_unicode_estimate_width): New function.
(grub_term_getcharwidth): Add defaults.
(GRUB_TERM_DEFAULT_NORMAL_COLOR): New definition.
(GRUB_TERM_DEFAULT_HIGHLIGHT_COLOR): Likewise.
(GRUB_TERM_DEFAULT_STANDARD_COLOR): Likewise.
(grub_cls): Remove EXPORT_FUNC.
(grub_setcolorstate): Inline.
(grub_newline_hook): Removed.
* include/grub/terminfo.h: Rewritten. All users updated.
* include/grub/unicode.h: New file.
* include/grub/video.h (grub_video_signed_rect): New type.
* kern/emu/console.c (grub_console_highlight_color): Removed.
(grub_console_normal_color): Likewise.
(grub_console_standard_color): Made static.
(grub_ncurses_putchar): Remove mapping.
(grub_ncurses_getcharwidth): Removed.
(grub_ncurses_term_output): Declare as GRUB_TERM_CODE_TYPE_ASCII.
(grub_ncurses_setcolor): Removed.
(grub_ncurses_getcolor): Likewise.
* kern/i386/pc/startup.S (grub_console_real_putchar): Renamed to ...
(grub_console_putchar): ... this.
(grub_console_putchar): Handle argument difference.
* kern/ieee1275/init.c (grub_machine_init): Split console_init into
console_init_early and console_init_lately.
* kern/sparc64/ieee1275/init.c (grub_machine_init): Likewise.
* kern/misc.c (grub_puts): Removed.
(grub_vprintf): Store UTF-8 string instead of outputting it directly.
(grub_vsnprintf_real): Remove str = NULL support.
* kern/misc.c (grub_utf8_to_ucs4): Move from here ...
* normal/charset.c (grub_utf8_to_ucs4): ... here.
* kern/term.c (grub_putcode): Renamed to ...
(grub_putcode_dumb): ... this. Pass grub_unicode_glyph instead of code.
(grub_putchar): Removed.
(grub_xputs_dumb): New function.
(grub_xputs): New variable.
* lib/charset.c: Move from here ...
* normal/charset.c: ... to here.
(grub_ucs4_to_utf8): New function.
(grub_ucs4_to_utf8_alloc): Use grub_ucs4_to_utf8.
(join_types): New variable.
(unpack_join): New function.
(bidi_types): New variable.
(unpack_bidi): New function.
(get_bidi_type): Likewise.
(get_join_type): Likewise.
(is_mirrored): Likewise.
(grub_unicode_get_comb_type): Likewise.
(grub_unicode_estimate_width) [HAVE_UNIFONT_WIDTHSPEC]: Likewise.
(is_type_after): Likewise.
(grub_unicode_aglomerate_comb): Likewise.
(bidi_line_wrap): Likewise.
(grub_bidi_line_logical_to_visual): Likewise.
(grub_bidi_logical_to_visual): Likewise.
(grub_unicode_mirror_code): Likewise.
(grub_unicode_shape_code): Likewise.
* normal/cmdline.c (grub_cmdline_get): Reset more counter.
Don't use grub_putchar.
* normal/main.c (grub_normal_init_page): Use grub_putcode.
(grub_normal_reader_init): Likewise.
(grub_xputs_saved): New variable.
(GRUB_MOD_INIT): Set grub_xputs.
(GRUB_MOD_FINI): Restore grub_xputs.
* normal/menu.c (grub_wait_after_message): Don't use grub_putchar.
(menu_init): Avoid printing gfxmenu error.
(show_menu): Use grub_normal_get_char_counter.
* normal/menu_entry.c (update_screen): Fix out-of-array.
(complete): Avoid NULL dereferencing.
* grub_menu_entry_run (grub_menu_entry_run): Don't use putchar.
* normal/menu_text.c (print_spaces): Removed.
(grub_print_ucs4): Likewise.
(grub_print_message_indented): Use grub_print_ucs4.
(print_message): Use grub_putcode.
(print_entry): Hanlde diacritics.
* normal/term.c (term_state): New type.
(grub_more_lines): Removed.
(term_states): New variable.
(grub_normal_line_counter): Renamed to ..
(grub_normal_char_counter): ...this. All users updated.
(grub_normal_get_line_counter): Renamed to ...
(grub_normal_get_char_counter): ... this.
(grub_normal_reset_more): New function.
(process_newline): Removed.
(print_more): New function.
(grub_install_newline_hook): Removed.
(map_code): New function.
(grub_puts_terminal): Use grub_print_ucs4.
(putglyph): New function.
(putcode_real): Likewise.
(grub_putcode): Use putcode_real.
(get_maxwidth): New function.
(get_startwidth): Likewise.
(print_ucs4_terminal): Likewise.
(find_term_state): Likewise.
(put_glyphs_terminal): Likewise.
(print_backlog): Likewise.
(print_ucs4_real): Likewise.
(grub_print_ucs4): Likewise.
(grub_xputs_normal): Likewise.
* term/efi/console.c (grub_console_putchar): Output diacritics.
(grub_console_getcharwidth): Removed.
(grub_console_term_output): Declare as GRUB_TERM_CODE_TYPE_UCS4_VISUAL.
* term/gfxterm.c (clear_char): Free chars.
(scroll_up): Avoid leaking memory.
(grub_gfxterm_putchar): Support diacritics.
(grub_video_term): Declare as GRUB_TERM_CODE_TYPE_UCS4_VISUAL.
* term/i386/pc/console.c (grub_console_term_output): Declare as
GRUB_TERM_CODE_TYPE_VGA.
* term/i386/pc/vga.c (grub_vga_term): Declare as
GRUB_TERM_CODE_TYPE_VISUAL_GLYPHS.
* term/i386/pc/vga_text.c (grub_vga_text_term): Declare as
GRUB_TERM_CODE_TYPE_VGA.
* term/i386/vga_common.c (map_char): Removed.
(grub_console_putchar): Likewise.
(grub_console_getcharwidth): Likewise.
* term/ieee1275/ofconsole.c: Simplify using terminfo.
(colors): Reordered to match terminfo.
(grub_ofconsole_normal_color): Removed.
(grub_ofconsole_writeesc): Likewise.
(grub_ofconsole_highlight_color): Likewise.
(grub_ofconsole_getcharwidth): Likewise.
(grub_ofconsole_setcolorstate): Likewise.
(grub_ofconsole_setcolor): Likewise.
(grub_ofconsole_getcolor): Likewise.
(grub_ofconsole_readkey): Renamed to ...
(readkey): ... this. Remove escape sequence handling. Return -1 on no
key.
(grub_ofconsole_checkkey): Removed.
(grub_ofconsole_getkey): Likewise.
(grub_ofconsole_getxy): Likewise.
(grub_ofconsole_gotoxy): Likewise.
(grub_ofconsole_cls): Likewise.
(grub_ofconsole_refresh): Likewise.
(grub_ofconsole_terminfo_input): New struct.
(grub_ofconsole_terminfo_output): Likewise.
(grub_ofconsole_term_input): Use terminfo.
(grub_ofconsole_term_output): Likewise.
(grub_console_init): Split into ...
(grub_console_init_early): ...this and ...
(grub_console_init_lately): ...this. Use terminfo.
(grub_ofconsole_putchar): Renamed to ...
(put): ... this. Remove mapping.
(grub_ofconsole_term_output): Declare as GRUB_TERM_CODE_TYPE_ASCII.
* term/serial.c: Simplify using terminfo.
(xpos): Removed.
(ypos): Likewise.
(keep_track): Likewise.
(registered): Likewise.
(input_buf): Likewise.
(npending): Likewise.
(serial_translate_key_sequence): Likewise.
(fill_input_buf): Likewise.
(grub_serial_checkkey): Likewise.
(grub_serial_getkey): Likewise.
(grub_serial_getxy): Likewise.
(grub_serial_gotoxy): Likewise.
(grub_serial_putchar): Likewise.
(grub_serial_cls): Likewise.
(grub_serial_setcolorstate): Likewise.
(grub_serial_setcursor): Likewise.
(serial_hw_init): Use serial_hw_fetch.
(grub_serial_terminfo_input): New variable.
(grub_serial_terminfo_output): Likewise.
(grub_serial_term_input): Use terminfo.
(grub_serial_term_output): Likewise.
* term/terminfo.c (putstr): Use put.
(grub_terminfo_all_free): New function
(grub_terminfo_set_current): New types vt100-color, ieee1275 and dumb.
(grub_terminfo_output_register): New function.
(grub_terminfo_output_unregister): Likewise.
(grub_terminfo_getxy): Likewise.
(grub_terminfo_readkey): Likewise.
(grub_terminfo_checkkey): Likewise.
(grub_terminfo_getkey): Likewise.
(grub_terminfo_input_init): Likewise.
(print_terminfo): Likewise.
(grub_cmd_terminfo): Handle encoding.
(grub_terminfo_gotoxy): Track position.
(grub_terminfo_cls): Likewise.
(grub_terminfo_putchar): Likewise.
(grub_terminfo_setcolorstate): Handle colors
(grub_terminfo_cursor_on): This ...
(grub_terminfo_cursor_off): ... and this merged into ...
(grub_terminfo_setcursor): ... this.
* term/tparm.c (grub_terminfo_tparm): Avoid NULL dereferencing.
* unicode/ArabicShaping.txt: New file (imported from Unicode).
* unicode/BidiMirroring.txt: Likewise.
* unicode/UnicodeData.txt: Likewise.
* unicode/COPYING: Likewise.
* util/grub-editenv.c (grub_putchar): Removed.
(grub_xputs_real): New function.
(grub_xputs): New variable.
* util/grub-fstest.c (grub_putchar): Removed.
(grub_xputs_real): New function.
(grub_xputs): New variable.
* util/grub-mkdevicemap.c (grub_putchar): Removed.
(grub_xputs_real): New function.
(grub_xputs): New variable.
* util/grub-probe.c (grub_putchar): Removed.
(grub_xputs_real): New function.
(grub_xputs): New variable.
* util/grub-script-check.c (grub_putchar): Removed.
(grub_xputs_real): New function.
(grub_xputs): New variable.
* util/i386/pc/grub-setup.c (grub_putchar): Removed.
(grub_xputs_real): New function.
(grub_xputs): New variable.
* util/import_unicode.py: New file.
* util/grub-mkfont.c (ft_errmsgs): New array.
(grub_glyph_info): Make bitmap a pointer.
(file_formats): New type WIDTH_SPEC.
(grub_font_info): New members glyphs_unsorted, glyphs_sorted, num_glyphs.
(options): Add width-spec.
(help): Likewise.
(add_char): Renamed to ...
(add_glyph): ... this.
(add_glyph): Use index. Show freetype errors. Cut blank space at borders.
(glyph_replace): New type.
(subst_rightjoin), (subst_leftjoin), (subst_medijoin): New variables.
(add_char): New function.
(add_subst): Likewise.
(process_cursive): Likewise.
(add_font): Handle GSUB.
(write_font_width_spec): New function.
(main): Sort glyphs.
* commands/minicmd.c (grub_mini_cmd_clear): Moved from here ...
* normal/main.c (grub_mini_cmd_clear): ..here. All users updated.
* kern/term.c (grub_cls): Moved from here...
* normal/term.c (grub_cls): ... here.

1  2 
ChangeLog

diff --cc ChangeLog
+++ b/ChangeLog
@@@ -1,11 -1,3 +1,328 @@@
++2010-07-02  Vladimir Serbinenko  <phcoder@gmail.com>
++
++      Bidi and diacritics support.
++
++      * Makefile.in (widthspec.bin): New target.
++      (widthspec.h): Likewise.
++      (TARGET_CFLAGS): Add -DHAVE_UNIFONT_WIDTHSPEC=1 if font was available.
++      * autogen.sh: Generate unidata.c.
++      * commands/cat.c (grub_cmd_cat): Don't use grub_putchar.
++      * commands/ls.c (grub_ls_list_devices): Likewise.
++      (grub_ls_list_files): Likewise.
++      * commands/minicmd.c (grub_mini_cmd_cat): Likewise.
++      (grub_mini_cmd_lsmod): Likewise.
++      * commands/read.c: Likewise.
++      * kern/corecmd.c (grub_core_cmd_ls): Likewise.
++      * kern/rescue_reader.c (grub_rescue_read_line): Likewise.
++      * lib/arg.c (grub_arg_show_help): Likewise.
++      * lib/crypto.c (grub_password_get): Likewise.
++      * normal/auth.c (grub_username_get): Likewise.
++      * normal/misc.c (grub_normal_print_device_info): Likewise.
++      * commands/help.c (grub_cmd_help): Use grub_unicode_aglomerate_comb.
++      * conf/common.rmk (grub_mkfont_SOURCES): Add unidata.c.
++      (gfxmenu_mod_SOURCES): Add gfxmenu/font.c.
++      (normal/charset.c_DEPENDENCIES): New variable.
++      (normal_mod_SOURCES): Add normal/charset.c and unidata.c.
++      (pkglib_MODULES): Remove charset.mod.
++      (charset_mod_SOURCES): Removed.
++      (charset_mod_CFLAGS): Likewise.
++      (charset_mod_LDFLAGS): Likewise.
++      (pkglib_MODULES) [ieee1275]: Remove terminfo.mod.
++      * conf/powerpc-ieee1275.rmk (kernel_img_SOURCES): Add term/terminfo.c
++      and term/tparm.c.
++      * conf/sparc64-ieee1275.rmk (kernel_img_SOURCES): Likewise.
++      * conf/i386-ieee1275.rmk (kernel_img_SOURCES): Likewise.
++      (kernel_img_HEADERS): Add terminfo.h.
++      * font/font.c (ascii_glyph_lookup): Return NULL on failure.
++      Fill ->font. Reverse ascii bitmaps.
++      (grub_font_get_xheight): New function.
++      * font/font.c (grub_font_get_string_width): Moved from here ...
++      * gfxmenu/font.c (grub_font_get_string_width): ... here.
++      * font/font.c (grub_font_draw_string): Moved from here ...
++      * gfxmenu/font.c (grub_font_draw_string): ... here.
++      * font/font.c (grub_font_dup_glyph): New function.
++      (grub_font_blit_glyph): Likewise.
++      (grub_font_blit_glyph_mirror): Likewise.
++      (blit_comb): Likewise.
++      (grub_font_construct_dry_run): Likewise.
++      (grub_font_get_constructed_device_width): Likewise.
++      (grub_font_construct_glyph): Likewise.
++      * include/grub/charset.h (grub_ucs4_to_utf8): New proto.
++      * include/grub/misc.h (grub_utf8_to_ucs4): Moved from here ...
++      * include/grub/charset.h (grub_utf8_to_ucs4): ... here.
++      * include/grub/font.h (GRUB_FONT_CODE_CHAR_MASK): New constant.
++      (GRUB_FONT_CODE_RIGHT_JOINED): Likewise.
++      (GRUB_FONT_CODE_LEFT_JOINED): Likewise.
++      (grub_font_get_xheight): New proto.
++      (grub_font_get_constructed_device_width): Likewise.
++      (grub_font_construct_glyph): Likewise.
++      * include/grub/font.h (grub_font_get_string_width): Moved from here ...
++      * include/grub/gfxmenu_view.h (grub_font_get_string_width): ... here.
++      * include/grub/font.h (grub_font_draw_string): Moved from here ...
++      * include/grub/gfxmenu_view.h (grub_font_draw_string): ... here.
++      * include/grub/i386/vga_common.h (grub_console_putchar): Moved from here..
++      * include/grub/i386/pc/console.h (grub_console_putchar): ... here.
++      * include/grub/i386/vga_common.h (grub_console_real_putchar): Removed.
++      (grub_console_getcharwidth): Likewise.
++      * include/grub/misc.h (grub_xputs): New proto.
++      (grub_puts): Inlined.
++      * include/grub/normal.h (grub_print_ucs4): Add margin specification.
++      (grub_normal_get_line_counter): Removed.
++      (grub_install_newline_hook): Likewise.
++      (grub_normal_get_char_counter): New proto.
++      (grub_normal_reset_more): Likewise.
++      (grub_xputs_normal): Likewise.
++      * include/grub/powerpc/ieee1275/console.h: Removed.
++      * include/grub/sparc64/ieee1275/console.h: Likewise.
++      * include/grub/term.h (GRUB_TERM_CODE_TYPE_MASK): New definition.
++      (GRUB_TERM_CODE_TYPE_ASCII): Likewise.
++      (GRUB_TERM_CODE_TYPE_CP437): Likewise.
++      (GRUB_TERM_CODE_TYPE_UTF8_LOGICAL): Likewise.
++      (GRUB_TERM_CODE_TYPE_UTF8_VISUAL): Likewise.
++      (GRUB_TERM_CODE_TYPE_VISUAL_GLYPHS): Likewise.
++      (grub_term_input): Pass reference to self. All users updated.
++      (grub_term_output): Pass grub_unicode_glyph to putchar and getcharwidth.
++      Pass reference to self. New fields normal_color, highlight_color and
++      data. All users updated.
++      (grub_putchar): Removed.
++      (grub_putcode): Remove EXPORT_FUNC since it's not in kernel anymore.
++      (grub_unicode_estimate_width): New function.
++      (grub_term_getcharwidth): Add defaults.
++      (GRUB_TERM_DEFAULT_NORMAL_COLOR): New definition.
++      (GRUB_TERM_DEFAULT_HIGHLIGHT_COLOR): Likewise.
++      (GRUB_TERM_DEFAULT_STANDARD_COLOR): Likewise.
++      (grub_cls): Remove EXPORT_FUNC.
++      (grub_setcolorstate): Inline.
++      (grub_newline_hook): Removed.
++      * include/grub/terminfo.h: Rewritten. All users updated.
++      * include/grub/unicode.h: New file.
++      * include/grub/video.h (grub_video_signed_rect): New type.
++      * kern/emu/console.c (grub_console_highlight_color): Removed.
++      (grub_console_normal_color): Likewise.
++      (grub_console_standard_color): Made static.
++      (grub_ncurses_putchar): Remove mapping.
++      (grub_ncurses_getcharwidth): Removed.
++      (grub_ncurses_term_output): Declare as GRUB_TERM_CODE_TYPE_ASCII.
++      (grub_ncurses_setcolor): Removed.
++      (grub_ncurses_getcolor): Likewise.
++      * kern/i386/pc/startup.S (grub_console_real_putchar): Renamed to ...
++      (grub_console_putchar): ... this.
++      (grub_console_putchar): Handle argument difference.
++      * kern/ieee1275/init.c (grub_machine_init): Split console_init into
++      console_init_early and console_init_lately.
++      * kern/sparc64/ieee1275/init.c (grub_machine_init): Likewise.
++      * kern/misc.c (grub_puts): Removed.
++      (grub_vprintf): Store UTF-8 string instead of outputting it directly.
++      (grub_vsnprintf_real): Remove str = NULL support.
++      * kern/misc.c (grub_utf8_to_ucs4): Move from here ...
++      * normal/charset.c (grub_utf8_to_ucs4): ... here.
++      * kern/term.c (grub_putcode): Renamed to ...
++      (grub_putcode_dumb): ... this. Pass grub_unicode_glyph instead of code.
++      (grub_putchar): Removed.
++      (grub_xputs_dumb): New function.
++      (grub_xputs): New variable.
++      * lib/charset.c: Move from here ...
++      * normal/charset.c: ... to here.
++      (grub_ucs4_to_utf8): New function.
++      (grub_ucs4_to_utf8_alloc): Use grub_ucs4_to_utf8.
++      (join_types): New variable.
++      (unpack_join): New function.
++      (bidi_types): New variable.
++      (unpack_bidi): New function.
++      (get_bidi_type): Likewise.
++      (get_join_type): Likewise.
++      (is_mirrored): Likewise.
++      (grub_unicode_get_comb_type): Likewise.
++      (grub_unicode_estimate_width) [HAVE_UNIFONT_WIDTHSPEC]: Likewise.
++      (is_type_after): Likewise.
++      (grub_unicode_aglomerate_comb): Likewise.
++      (bidi_line_wrap): Likewise.
++      (grub_bidi_line_logical_to_visual): Likewise.
++      (grub_bidi_logical_to_visual): Likewise.
++      (grub_unicode_mirror_code): Likewise.
++      (grub_unicode_shape_code): Likewise.
++      * normal/cmdline.c (grub_cmdline_get): Reset more counter.
++      Don't use grub_putchar.
++      * normal/main.c (grub_normal_init_page): Use grub_putcode.
++      (grub_normal_reader_init): Likewise.
++      (grub_xputs_saved): New variable.
++      (GRUB_MOD_INIT): Set grub_xputs.
++      (GRUB_MOD_FINI): Restore grub_xputs.
++      * normal/menu.c (grub_wait_after_message): Don't use grub_putchar.
++      (menu_init): Avoid printing gfxmenu error.
++      (show_menu): Use grub_normal_get_char_counter.
++      * normal/menu_entry.c (update_screen): Fix out-of-array.
++      (complete): Avoid NULL dereferencing.
++      * grub_menu_entry_run (grub_menu_entry_run): Don't use putchar.
++      * normal/menu_text.c (print_spaces): Removed.
++      (grub_print_ucs4): Likewise.
++      (grub_print_message_indented): Use grub_print_ucs4.
++      (print_message): Use grub_putcode.
++      (print_entry): Hanlde diacritics.
++      * normal/term.c (term_state): New type.
++      (grub_more_lines): Removed.
++      (term_states): New variable.
++      (grub_normal_line_counter): Renamed to ..
++      (grub_normal_char_counter): ...this. All users updated.
++      (grub_normal_get_line_counter): Renamed to ...
++      (grub_normal_get_char_counter): ... this.
++      (grub_normal_reset_more): New function.
++      (process_newline): Removed.
++      (print_more): New function.
++      (grub_install_newline_hook): Removed.
++      (map_code): New function.
++      (grub_puts_terminal): Use grub_print_ucs4.
++      (putglyph): New function.
++      (putcode_real): Likewise.
++      (grub_putcode): Use putcode_real.
++      (get_maxwidth): New function.
++      (get_startwidth): Likewise.
++      (print_ucs4_terminal): Likewise.
++      (find_term_state): Likewise.
++      (put_glyphs_terminal): Likewise.
++      (print_backlog): Likewise.
++      (print_ucs4_real): Likewise.
++      (grub_print_ucs4): Likewise.
++      (grub_xputs_normal): Likewise.
++      * term/efi/console.c (grub_console_putchar): Output diacritics.
++      (grub_console_getcharwidth): Removed.
++      (grub_console_term_output): Declare as GRUB_TERM_CODE_TYPE_UCS4_VISUAL.
++      * term/gfxterm.c (clear_char): Free chars.
++      (scroll_up): Avoid leaking memory.
++      (grub_gfxterm_putchar): Support diacritics.
++      (grub_video_term): Declare as GRUB_TERM_CODE_TYPE_UCS4_VISUAL.
++      * term/i386/pc/console.c (grub_console_term_output): Declare as
++      GRUB_TERM_CODE_TYPE_VGA.
++      * term/i386/pc/vga.c (grub_vga_term): Declare as
++      GRUB_TERM_CODE_TYPE_VISUAL_GLYPHS.
++      * term/i386/pc/vga_text.c (grub_vga_text_term): Declare as
++      GRUB_TERM_CODE_TYPE_VGA.
++      * term/i386/vga_common.c (map_char): Removed.
++      (grub_console_putchar): Likewise.
++      (grub_console_getcharwidth): Likewise.
++      * term/ieee1275/ofconsole.c: Simplify using terminfo.
++      (colors): Reordered to match terminfo.
++      (grub_ofconsole_normal_color): Removed.
++      (grub_ofconsole_writeesc): Likewise.
++      (grub_ofconsole_highlight_color): Likewise.
++      (grub_ofconsole_getcharwidth): Likewise.
++      (grub_ofconsole_setcolorstate): Likewise.
++      (grub_ofconsole_setcolor): Likewise.
++      (grub_ofconsole_getcolor): Likewise.
++      (grub_ofconsole_readkey): Renamed to ...
++      (readkey): ... this. Remove escape sequence handling. Return -1 on no
++      key.
++      (grub_ofconsole_checkkey): Removed.
++      (grub_ofconsole_getkey): Likewise.
++      (grub_ofconsole_getxy): Likewise.
++      (grub_ofconsole_gotoxy): Likewise.
++      (grub_ofconsole_cls): Likewise.
++      (grub_ofconsole_refresh): Likewise.
++      (grub_ofconsole_terminfo_input): New struct.
++      (grub_ofconsole_terminfo_output): Likewise.
++      (grub_ofconsole_term_input): Use terminfo.
++      (grub_ofconsole_term_output): Likewise.
++      (grub_console_init): Split into ...
++      (grub_console_init_early): ...this and ...
++      (grub_console_init_lately): ...this. Use terminfo.
++      (grub_ofconsole_putchar): Renamed to ...
++      (put): ... this. Remove mapping.
++      (grub_ofconsole_term_output): Declare as GRUB_TERM_CODE_TYPE_ASCII.
++      * term/serial.c: Simplify using terminfo.
++      (xpos): Removed.
++      (ypos): Likewise.
++      (keep_track): Likewise.
++      (registered): Likewise.
++      (input_buf): Likewise.
++      (npending): Likewise.
++      (serial_translate_key_sequence): Likewise.
++      (fill_input_buf): Likewise.
++      (grub_serial_checkkey): Likewise.
++      (grub_serial_getkey): Likewise.
++      (grub_serial_getxy): Likewise.
++      (grub_serial_gotoxy): Likewise.
++      (grub_serial_putchar): Likewise.
++      (grub_serial_cls): Likewise.
++      (grub_serial_setcolorstate): Likewise.
++      (grub_serial_setcursor): Likewise.
++      (serial_hw_init): Use serial_hw_fetch.
++      (grub_serial_terminfo_input): New variable.
++      (grub_serial_terminfo_output): Likewise.
++      (grub_serial_term_input): Use terminfo.
++      (grub_serial_term_output): Likewise.
++      * term/terminfo.c (putstr): Use put.
++      (grub_terminfo_all_free): New function
++      (grub_terminfo_set_current): New types vt100-color, ieee1275 and dumb.
++      (grub_terminfo_output_register): New function.
++      (grub_terminfo_output_unregister): Likewise.
++      (grub_terminfo_getxy): Likewise.
++      (grub_terminfo_readkey): Likewise.
++      (grub_terminfo_checkkey): Likewise.
++      (grub_terminfo_getkey): Likewise.
++      (grub_terminfo_input_init): Likewise.
++      (print_terminfo): Likewise.
++      (grub_cmd_terminfo): Handle encoding.
++      (grub_terminfo_gotoxy): Track position.
++      (grub_terminfo_cls): Likewise.
++      (grub_terminfo_putchar): Likewise.
++      (grub_terminfo_setcolorstate): Handle colors
++      (grub_terminfo_cursor_on): This ...
++      (grub_terminfo_cursor_off): ... and this merged into ...
++      (grub_terminfo_setcursor): ... this.
++      * term/tparm.c (grub_terminfo_tparm): Avoid NULL dereferencing.
++      * unicode/ArabicShaping.txt: New file (imported from Unicode).
++      * unicode/BidiMirroring.txt: Likewise.
++      * unicode/UnicodeData.txt: Likewise.
++      * unicode/COPYING: Likewise.
++      * util/grub-editenv.c (grub_putchar): Removed.
++      (grub_xputs_real): New function.
++      (grub_xputs): New variable.
++      * util/grub-fstest.c (grub_putchar): Removed.
++      (grub_xputs_real): New function.
++      (grub_xputs): New variable.
++      * util/grub-mkdevicemap.c (grub_putchar): Removed.
++      (grub_xputs_real): New function.
++      (grub_xputs): New variable.
++      * util/grub-probe.c (grub_putchar): Removed.
++      (grub_xputs_real): New function.
++      (grub_xputs): New variable.
++      * util/grub-script-check.c (grub_putchar): Removed.
++      (grub_xputs_real): New function.
++      (grub_xputs): New variable.
++      * util/i386/pc/grub-setup.c (grub_putchar): Removed.
++      (grub_xputs_real): New function.
++      (grub_xputs): New variable.
++      * util/import_unicode.py: New file.
++      * util/grub-mkfont.c (ft_errmsgs): New array.
++      (grub_glyph_info): Make bitmap a pointer.
++      (file_formats): New type WIDTH_SPEC.
++      (grub_font_info): New members glyphs_unsorted, glyphs_sorted, num_glyphs.
++      (options): Add width-spec.
++      (help): Likewise.
++      (add_char): Renamed to ...
++      (add_glyph): ... this.
++      (add_glyph): Use index. Show freetype errors. Cut blank space at borders.
++      (glyph_replace): New type.
++      (subst_rightjoin), (subst_leftjoin), (subst_medijoin): New variables.
++      (add_char): New function.
++      (add_subst): Likewise.
++      (process_cursive): Likewise.
++      (add_font): Handle GSUB.
++      (write_font_width_spec): New function.
++      (main): Sort glyphs.
++      * commands/minicmd.c (grub_mini_cmd_clear): Moved from here ...
++      * normal/main.c (grub_mini_cmd_clear): ..here. All users updated.
++      * kern/term.c (grub_cls): Moved from here...
++      * normal/term.c (grub_cls): ... here.
++
 +2010-07-02  Colin Watson  <cjwatson@ubuntu.com>
 +
 +      * include/grub/types.h: Define the C99-style PRIxGRUB_SIZE macro,
 +      suitable for using within the format argument of printf when
 +      converting grub_size_t.
 +      * disk/usbms.c (grub_usbms_transfer): Use PRIxGRUB_SIZE rather than
 +      "x" to convert grub_size_t arguments.
 +
  2010-07-02  Vladimir Serbinenko  <phcoder@gmail.com>
  
        * gfxmenu/gui_list.c (draw_menu): Use viewport to simplify code and fix