summaryrefslogtreecommitdiff
path: root/modules/thai
diff options
context:
space:
mode:
Diffstat (limited to 'modules/thai')
-rw-r--r--modules/thai/thai-fc.c14
-rw-r--r--modules/thai/thai-shaper.c72
-rw-r--r--modules/thai/thai-shaper.h12
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
*/