diff options
author | Behdad Esfahbod <behdad@gnome.org> | 2007-05-16 01:46:05 +0000 |
---|---|---|
committer | Behdad Esfahbod <behdad@src.gnome.org> | 2007-05-16 01:46:05 +0000 |
commit | defbcdeb2101cd054d2a629a3eb88cb8572c848a (patch) | |
tree | 176e9e149a8d7bfd34f38abb05e1093e7e4c4740 /modules/thai/thai-ot.c | |
parent | 1190fec1855ac8e663b827bae442d154bb60881c (diff) | |
download | pango-defbcdeb2101cd054d2a629a3eb88cb8572c848a.tar.gz |
Port to new OpenType APIs and cleanup a bit. Add standard features.
2007-05-15 Behdad Esfahbod <behdad@gnome.org>
* modules/thai/Makefile.am:
* modules/thai/thai-fc.c (thai_get_font_info), (thai_engine_shape),
(thai_make_unknown_glyph):
* modules/thai/thai-shaper.c (get_glyphs_list), (add_cluster),
(thai_set_glyphs):
* modules/thai/thai-shaper.h:
Port to new OpenType APIs and cleanup a bit. Add standard features.
* modules/thai/thai-ot.c:
* modules/thai/thai-ot.h:
Removed. Not needed anymore.
svn path=/trunk/; revision=2309
Diffstat (limited to 'modules/thai/thai-ot.c')
-rw-r--r-- | modules/thai/thai-ot.c | 253 |
1 files changed, 0 insertions, 253 deletions
diff --git a/modules/thai/thai-ot.c b/modules/thai/thai-ot.c deleted file mode 100644 index d947d1f7..00000000 --- a/modules/thai/thai-ot.c +++ /dev/null @@ -1,253 +0,0 @@ -/* Pango - * thai-ot.c: - * - * Copyright (C) 2004 Theppitak Karoonboonyanan - * Author: Theppitak Karoonboonyanan <thep@linux.thai.net> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include <config.h> -#include <string.h> - -#include "thai-ot.h" - -static gint -maybe_add_gsub_feature (PangoOTRuleset *ruleset, - PangoOTInfo *info, - guint script_index, - PangoOTTag feature_tag, - gulong property_bit) -{ - guint feature_index; - - if (pango_ot_info_find_feature (info, PANGO_OT_TABLE_GSUB, - feature_tag, script_index, PANGO_OT_DEFAULT_LANGUAGE, &feature_index)) - { - pango_ot_ruleset_add_feature (ruleset, PANGO_OT_TABLE_GSUB, feature_index, - property_bit); - return 1; - } - return 0; -} - -static gint -maybe_add_gpos_feature (PangoOTRuleset *ruleset, - PangoOTInfo *info, - guint script_index, - PangoOTTag feature_tag, - gulong property_bit) -{ - guint feature_index; - - if (pango_ot_info_find_feature (info, PANGO_OT_TABLE_GPOS, - feature_tag, script_index, PANGO_OT_DEFAULT_LANGUAGE, &feature_index)) - { - pango_ot_ruleset_add_feature (ruleset, PANGO_OT_TABLE_GPOS, feature_index, - property_bit); - return 1; - } - return 0; -} - -PangoOTRuleset * -thai_ot_get_ruleset (PangoFont *font) -{ - PangoFcFont *fc_font; - FT_Face face; - PangoOTInfo *info; - PangoOTRuleset *ruleset = NULL; - - g_return_val_if_fail (font != NULL, NULL); - - fc_font = PANGO_FC_FONT (font); - face = pango_fc_font_lock_face (fc_font); - if (!face) - return NULL; - - info = pango_ot_info_get (face); - if (info != NULL) - { - static GQuark ruleset_quark = 0; - - if (!ruleset_quark) - ruleset_quark = g_quark_from_string ("thai-ot-ruleset"); - - ruleset = g_object_get_qdata (G_OBJECT (info), ruleset_quark); - if (!ruleset) - { - PangoOTTag thai_tag = FT_MAKE_TAG ('t', 'h', 'a', 'i'); - guint script_index; - gint n = 0; - - ruleset = pango_ot_ruleset_new (info); - - if (pango_ot_info_find_script (info, PANGO_OT_TABLE_GSUB, - thai_tag, &script_index)) - { - n += maybe_add_gsub_feature (ruleset, info, script_index, - FT_MAKE_TAG ('c','c','m','p'), - PANGO_OT_ALL_GLYPHS); - n += maybe_add_gsub_feature (ruleset, info, script_index, - FT_MAKE_TAG ('l','i','g','a'), - PANGO_OT_ALL_GLYPHS); - } - - if (pango_ot_info_find_script (info, PANGO_OT_TABLE_GPOS, - thai_tag, &script_index)) - { - n += maybe_add_gpos_feature (ruleset, info, script_index, - FT_MAKE_TAG ('k','e','r','n'), - PANGO_OT_ALL_GLYPHS); - n += maybe_add_gpos_feature (ruleset, info, script_index, - FT_MAKE_TAG ('m','a','r','k'), - PANGO_OT_ALL_GLYPHS); - n += maybe_add_gpos_feature (ruleset, info, script_index, - FT_MAKE_TAG ('m','k','m','k'), - PANGO_OT_ALL_GLYPHS); - } - - if (n > 0) - g_object_set_qdata_full (G_OBJECT (info), ruleset_quark, ruleset, - (GDestroyNotify)g_object_unref); - else - { - g_object_unref (ruleset); - ruleset = NULL; - } - } - } - - pango_fc_font_unlock_face (fc_font); - - return ruleset; -} - -static PangoOTRuleset * -lao_ot_get_ruleset (PangoFont *font) -{ - PangoFcFont *fc_font; - FT_Face face; - PangoOTInfo *info; - PangoOTRuleset *ruleset = NULL; - - g_return_val_if_fail (font != NULL, NULL); - - fc_font = PANGO_FC_FONT (font); - face = pango_fc_font_lock_face (fc_font); - if (!face) - return NULL; - - info = pango_ot_info_get (face); - if (info != NULL) - { - static GQuark ruleset_quark = 0; - - if (!ruleset_quark) - ruleset_quark = g_quark_from_string ("lao-ot-ruleset"); - - ruleset = g_object_get_qdata (G_OBJECT (info), ruleset_quark); - if (!ruleset) - { - PangoOTTag thai_tag = FT_MAKE_TAG ('l', 'a', 'o', ' '); - guint script_index; - gint n = 0; - - ruleset = pango_ot_ruleset_new (info); - - if (pango_ot_info_find_script (info, PANGO_OT_TABLE_GSUB, - thai_tag, &script_index)) - { - n += maybe_add_gsub_feature (ruleset, info, script_index, - FT_MAKE_TAG ('c','c','m','p'), - PANGO_OT_ALL_GLYPHS); - n += maybe_add_gsub_feature (ruleset, info, script_index, - FT_MAKE_TAG ('l','i','g','a'), - PANGO_OT_ALL_GLYPHS); - } - - if (pango_ot_info_find_script (info, PANGO_OT_TABLE_GPOS, - thai_tag, &script_index)) - { - n += maybe_add_gpos_feature (ruleset, info, script_index, - FT_MAKE_TAG ('k','e','r','n'), - PANGO_OT_ALL_GLYPHS); - n += maybe_add_gpos_feature (ruleset, info, script_index, - FT_MAKE_TAG ('m','a','r','k'), - PANGO_OT_ALL_GLYPHS); - n += maybe_add_gpos_feature (ruleset, info, script_index, - FT_MAKE_TAG ('m','k','m','k'), - PANGO_OT_ALL_GLYPHS); - } - - if (n > 0) - g_object_set_qdata_full (G_OBJECT (info), ruleset_quark, ruleset, - (GDestroyNotify)g_object_unref); - else - { - g_object_unref (ruleset); - ruleset = NULL; - } - } - } - - pango_fc_font_unlock_face (fc_font); - - return ruleset; -} - - -void -thai_ot_shape (PangoFont *font, - PangoGlyphString *glyphs) -{ - PangoOTRuleset *th_ruleset; - PangoOTRuleset *lo_ruleset; - - th_ruleset = thai_ot_get_ruleset (font); - lo_ruleset = lao_ot_get_ruleset (font); - - if (th_ruleset != NULL || lo_ruleset != NULL) - { - gint i; - PangoOTBuffer *buffer; - - /* prepare ot buffer */ - buffer = pango_ot_buffer_new (PANGO_FC_FONT (font)); - for (i = 0; i < glyphs->num_glyphs; i++) - { - pango_ot_buffer_add_glyph (buffer, - glyphs->glyphs[i].glyph, - 0, - glyphs->log_clusters[i]); - } - - if (th_ruleset != NULL) - { - pango_ot_ruleset_substitute (th_ruleset, buffer); - pango_ot_ruleset_position (th_ruleset, buffer); - } - if (lo_ruleset != NULL) - { - pango_ot_ruleset_substitute (lo_ruleset, buffer); - pango_ot_ruleset_position (lo_ruleset, buffer); - } - - pango_ot_buffer_output (buffer, glyphs); - pango_ot_buffer_destroy (buffer); - } -} - |