From defbcdeb2101cd054d2a629a3eb88cb8572c848a Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 16 May 2007 01:46:05 +0000 Subject: Port to new OpenType APIs and cleanup a bit. Add standard features. 2007-05-15 Behdad Esfahbod * 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 --- modules/thai/thai-ot.c | 253 ------------------------------------------------- 1 file changed, 253 deletions(-) delete mode 100644 modules/thai/thai-ot.c (limited to 'modules/thai/thai-ot.c') 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 - * - * 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 -#include - -#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); - } -} - -- cgit v1.2.1