diff options
Diffstat (limited to 'modules/thai')
-rw-r--r-- | modules/thai/thai-fc.c | 14 | ||||
-rw-r--r-- | modules/thai/thai-shaper.c | 72 | ||||
-rw-r--r-- | modules/thai/thai-shaper.h | 12 |
3 files changed, 39 insertions, 59 deletions
diff --git a/modules/thai/thai-fc.c b/modules/thai/thai-fc.c index 9a9839a9..65351ac1 100644 --- a/modules/thai/thai-fc.c +++ b/modules/thai/thai-fc.c @@ -44,8 +44,8 @@ typedef PangoEngineShapeClass ThaiEngineFcClass ; /* We handle the range U+0e01 to U+0e5b exactly */ -static PangoEngineRange thai_ranges[] = { - { 0x0e01, 0x0e5b, "*" }, /* Thai */ +static PangoEngineScriptInfo thai_scripts[] = { + { PANGO_SCRIPT_THAI, "*" } }; static PangoEngineInfo script_engines[] = { @@ -53,7 +53,7 @@ static PangoEngineInfo script_engines[] = { SCRIPT_ENGINE_NAME, PANGO_ENGINE_TYPE_SHAPE, RENDER_TYPE, - thai_ranges, G_N_ELEMENTS(thai_ranges) + thai_scripts, G_N_ELEMENTS(thai_scripts) } }; @@ -196,14 +196,6 @@ thai_make_unknown_glyph (ThaiFontInfo *font_info, unsigned int c) return pango_fc_font_get_unknown_glyph ((PangoFcFont *)font_info->font, c); } -/* Unused; used only for X backend and XTIS encoding - */ -gboolean -thai_has_glyph (ThaiFontInfo *font_info, PangoGlyph glyph) -{ - return TRUE; -} - static void thai_engine_fc_class_init (PangoEngineShapeClass *class) { diff --git a/modules/thai/thai-shaper.c b/modules/thai/thai-shaper.c index 4cd98283..5fcbc429 100644 --- a/modules/thai/thai-shaper.c +++ b/modules/thai/thai-shaper.c @@ -561,8 +561,6 @@ get_glyphs_list (ThaiFontInfo *font_info, gint num_chrs, PangoGlyph *glyph_lists) { - PangoGlyph glyph; - gint xtis_index; gint i; switch (font_info->font_set) @@ -572,26 +570,6 @@ get_glyphs_list (ThaiFontInfo *font_info, glyph_lists[i] = thai_make_unknown_glyph (font_info, glyph_lists[i]); return num_chrs; - case THAI_FONT_XTIS: - /* If we are rendering with an XTIS font, we try to find a precomposed - * glyph for the cluster. - */ - xtis_index = 0x100 * (cluster[0] - 0xe00 + 0x20) + 0x30; - if (cluster[1]) - xtis_index +=8 * group1_map[cluster[1] - 0xe30]; - if (cluster[2]) - xtis_index += group2_map[cluster[2] - 0xe30]; - glyph = thai_make_glyph (font_info, xtis_index); - if (thai_has_glyph (font_info, glyph)) { - glyph_lists[0] = glyph; - return 1; - } - for (i=0; i < num_chrs; i++) - glyph_lists[i] = - thai_make_glyph (font_info, - 0x100 * (cluster[i] - 0xe00 + 0x20) + 0x30); - return num_chrs; - case THAI_FONT_TIS: /* TIS620-0 + Wtt2.0 Extension */ @@ -629,11 +607,21 @@ add_cluster (ThaiFontInfo *font_info, PangoGlyph glyphs_list[MAX_GLYPHS]; gint num_glyphs; gint i; - - num_glyphs = get_glyphs_list(font_info, cluster, num_chrs, glyphs_list); - for (i=0; i<num_glyphs; i++) - add_glyph (font_info, glyphs, cluster_start, glyphs_list[i], - i == 0 ? FALSE : TRUE); + + if (!isthai (cluster[0])) + { + g_assert (num_chrs == 1); + add_glyph (font_info, glyphs, cluster_start, + thai_make_glyph (font_info, cluster[0]), + FALSE); + } + else + { + num_glyphs = get_glyphs_list(font_info, cluster, num_chrs, glyphs_list); + for (i=0; i<num_glyphs; i++) + add_glyph (font_info, glyphs, cluster_start, glyphs_list[i], + i == 0 ? FALSE : TRUE); + } } static gboolean @@ -669,16 +657,26 @@ get_next_cluster(const char *text, while (p < text + length && n_chars < 3) { gunichar current = g_utf8_get_char (p); - - if (n_chars == 0 || - is_wtt_composible ((gunichar)(cluster[n_chars - 1]), current) || - (n_chars == 1 && - is_char_type (cluster[0], Cons) && - is_char_type (current, SaraAm)) || - (n_chars == 2 && - is_char_type (cluster[0], Cons) && - is_char_type (cluster[1], Tone) && - is_char_type (current, SaraAm))) + + /* Non-thai characters get split into a single character cluster */ + if (!isthai (current)) + { + if (n_chars == 0) + { + cluster[n_chars++] = current; + p = g_utf8_next_char (p); + } + break; + } + else if (n_chars == 0 || + is_wtt_composible ((gunichar)(cluster[n_chars - 1]), current) || + (n_chars == 1 && + is_char_type (cluster[0], Cons) && + is_char_type (current, SaraAm)) || + (n_chars == 2 && + is_char_type (cluster[0], Cons) && + is_char_type (cluster[1], Tone) && + is_char_type (current, SaraAm))) { cluster[n_chars++] = current; p = g_utf8_next_char (p); diff --git a/modules/thai/thai-shaper.h b/modules/thai/thai-shaper.h index b745da86..8055ce85 100644 --- a/modules/thai/thai-shaper.h +++ b/modules/thai/thai-shaper.h @@ -1,10 +1,7 @@ #ifndef __THAI_SHAPER_H__ #define __THAI_SHAPER_H__ -#ifdef HAVE_X -#include "pangox.h" -#endif - +#define isthai(wc) (wc >= 0xE00 && wc < 0xE80) #define ucs2tis(wc) (unsigned int)((unsigned int)(wc) - 0x0E00 + 0xA0) #define tis2uni(c) ((gunichar)(c) - 0xA0 + 0x0E00) @@ -14,7 +11,6 @@ typedef struct _ThaiFontInfo ThaiFontInfo; */ typedef enum { THAI_FONT_NONE, - THAI_FONT_XTIS, THAI_FONT_TIS, THAI_FONT_TIS_MAC, THAI_FONT_TIS_WIN, @@ -30,9 +26,6 @@ struct _ThaiFontInfo { PangoFont *font; ThaiFontSet font_set; -#ifdef HAVE_X - PangoXSubfont subfont; /* For X backend */ -#endif }; /* @@ -47,9 +40,6 @@ thai_make_glyph (ThaiFontInfo *font_info, unsigned int c); PangoGlyph thai_make_unknown_glyph (ThaiFontInfo *font_info, unsigned int c); -gboolean -thai_has_glyph (ThaiFontInfo *font_info, PangoGlyph glyph); - /* * Public functions */ |