diff options
author | Owen Taylor <otaylor@redhat.com> | 2003-08-02 18:07:30 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 2003-08-02 18:07:30 +0000 |
commit | 85cb529088899889a65a99d3a00f6035eecb4c98 (patch) | |
tree | 5524eccd3af9ececd7884b7ea22f29193c3f71d4 /modules/hebrew | |
parent | bcf10a1085bdf9344e513785c1082f9b82278619 (diff) | |
download | pango-85cb529088899889a65a99d3a00f6035eecb4c98.tar.gz |
Remove old X font shapers.
Sat Aug 2 13:17:45 2003 Owen Taylor <otaylor@redhat.com>
* configure.in
modules/arabic/{Makefile.am arconv.[ch],langboxfont.[ch],
mulefont.[ch],naqshfont.[ch],arabic-x.c}
modules/hangul/{Makefile.am,hangul-x.c,tables-johabfont.i,
tables-ksc5601.i}
modules/hebrew/{Makefile.am,hebrew-x.c}
modules/indic/{Makefile.am,*-x.c}
modules/tamil
modules/thai/{Makefile.am,thai-x.c}:
Remove old X font shapers.
Diffstat (limited to 'modules/hebrew')
-rw-r--r-- | modules/hebrew/Makefile.am | 17 | ||||
-rw-r--r-- | modules/hebrew/hebrew-x.c | 446 |
2 files changed, 0 insertions, 463 deletions
diff --git a/modules/hebrew/Makefile.am b/modules/hebrew/Makefile.am index 33355ab6..f4480151 100644 --- a/modules/hebrew/Makefile.am +++ b/modules/hebrew/Makefile.am @@ -19,23 +19,6 @@ noinst_LTLIBRARIES = common_sources = hebrew-shaper.c hebrew-shaper.h -if HAVE_X -INCLUDES += $(X_CFLAGS) -if INCLUDE_HEBREW_X -noinst_LTLIBRARIES += libpango-hebrew-x.la -else -module_LTLIBRARIES += pango-hebrew-x.la -endif -endif - -hebrew_x_sources = $(common_sources) hebrew-x.c - -pango_hebrew_x_la_LDFLAGS = -export-dynamic -avoid-version -module -pango_hebrew_x_la_LIBADD = $(pangoxlibs) -pango_hebrew_x_la_SOURCES = $(hebrew_x_sources) -libpango_hebrew_x_la_SOURCES = $(hebrew_x_sources) -libpango_hebrew_x_la_CFLAGS = -DPANGO_MODULE_PREFIX=_pango_hebrew_x - if HAVE_XFT INCLUDES += $(XFT_CFLAGS) diff --git a/modules/hebrew/hebrew-x.c b/modules/hebrew/hebrew-x.c deleted file mode 100644 index 70c5e95d..00000000 --- a/modules/hebrew/hebrew-x.c +++ /dev/null @@ -1,446 +0,0 @@ -/* Pango - * hebrew-x.c: - * - * Copyright (C) 1999 Red Hat Software - * Author: Owen Taylor <otaylor@redhat.com> - * - * Copyright (c) 1996-2000 by Sun Microsystems, Inc. - * Author: Chookij Vanatham <Chookij.Vanatham@Eng.Sun.COM> - * - * Hebrew points positioning improvements 2001 - * Author: Dov Grobgeld <dov@imagic.weizmann.ac.il> - * - * 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 <string.h> - -#include <glib.h> -#include <string.h> -#include "pangox.h" -#include "pango-engine.h" -#include "hebrew-shaper.h" - -#define ucs2iso8859_8(wc) (unsigned int)((unsigned int)(wc) - 0x0590 + 0x10) -#define iso8859_8_2uni(c) ((gunichar)(c) - 0x10 + 0x0590) - -#define SCRIPT_ENGINE_NAME "HebrewScriptEngineX" -#define MAX_CLUSTER_CHRS 20 - -static const gint iso_8859_8_shape_table[128] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, - 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, - 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, - 0xF8, 0xF9, 0xFA, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; - -/* Unicode Hebrew Font Layout - */ -static const gint Unicode_shape_table[128] = { - /* 00 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - - /* cantillation marks followed by accents */ - /* 10 */ 0x0000, 0x0591, 0x0592, 0x0593, 0x0594, 0x0595, 0x0596, 0x0597, - 0x0598, 0x0599, 0x059A, 0x059B, 0x059C, 0x059D, 0x059E, 0x059F, - /* 20 */ 0x05A0, 0x05A1, 0x0000, 0x05A3, 0x05A4, 0x05A5, 0x05A6, 0x05A7, - 0x05A8, 0x05A9, 0x05AA, 0x05AB, 0x05AC, 0x05AD, 0x05AE, 0x05AF, - /* 30 */ 0x05B0, 0x05B1, 0x05B2, 0x05B3, 0x05B4, 0x05B5, 0x05B6, 0x05B7, - 0x05B8, 0x05B9, 0x0000, 0x05BB, 0x05BC, 0x05BD, 0x05BE, 0x05BF, - /* 40 */ 0x05C0, 0x05C1, 0x05C2, 0x05C3, 0x05C4, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - - /* Aleph-Tav, Yiddish ligatures, and punctuation */ - /* 50 */ 0x05D0, 0x05D1, 0x05D2, 0x05D3, 0x05D4, 0x05D5, 0x05D6, 0x05D7, - 0x05D8, 0x05D9, 0x05DA, 0x05DB, 0x05DC, 0x05DD, 0x05DE, 0x05DF, - /* 60 */ 0x05E0, 0x05E1, 0x05E2, 0x05E3, 0x05E4, 0x05E5, 0x05E6, 0x05E7, - 0x05E8, 0x05E9, 0x05EA, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - /* 70 */ 0x05F0, 0x05F1, 0x05F2, 0x05F3, 0x05F4, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, -}; - -/* We handle the range U+0591 to U+05f4 exactly - */ -static PangoEngineRange hebrew_ranges[] = { - { 0x0591, 0x05f4, "*" }, /* Hebrew */ - { 0xfb1d, 0xfb4f, "*" } /* Hebrew presentation forms */ -}; - -static PangoEngineInfo script_engines[] = { - { - SCRIPT_ENGINE_NAME, - PANGO_ENGINE_TYPE_SHAPE, - PANGO_RENDER_TYPE_X, - hebrew_ranges, G_N_ELEMENTS(hebrew_ranges) - } -}; - -/* - * X window system script engine portion - */ - -typedef struct _HebrewFontInfo HebrewFontInfo; - -/* The type of encoding that we will use - */ -typedef enum { - HEBREW_FONT_NONE, - HEBREW_FONT_ISO8859_8, - HEBREW_FONT_ISO10646 -} HebrewFontType; - -struct _HebrewFontInfo -{ - PangoFont *font; - HebrewFontType type; - PangoXSubfont subfont; -}; - -/* Returns a structure with information we will use to rendering given the - * #PangoFont. This is computed once per font and cached for later retrieval. - */ -static HebrewFontInfo * -get_font_info (PangoFont *font) -{ - static const char *charsets[] = { - "iso8859-8", - "iso10646-1", - }; - - static const int charset_types[] = { - HEBREW_FONT_ISO8859_8, - HEBREW_FONT_ISO10646, - }; - - HebrewFontInfo *font_info; - GQuark info_id = g_quark_from_string ("hebrew-font-info"); - - font_info = g_object_get_qdata (G_OBJECT (font), info_id); - - if (!font_info) - { - /* No cached information not found, so we need to compute it - * from scratch - */ - PangoXSubfont *subfont_ids; - gint *subfont_charsets; - gint n_subfonts, i; - - font_info = g_new (HebrewFontInfo, 1); - font_info->font = font; - font_info->type = HEBREW_FONT_NONE; - - g_object_set_qdata_full (G_OBJECT (font), info_id, font_info, (GDestroyNotify)g_free); - - n_subfonts = pango_x_list_subfonts (font, (char **)charsets, G_N_ELEMENTS (charsets), - &subfont_ids, &subfont_charsets); - - for (i=0; i < n_subfonts; i++) - { - HebrewFontType font_type = charset_types[subfont_charsets[i]]; - - if (font_type == HEBREW_FONT_ISO10646 && - pango_x_has_glyph (font, PANGO_X_MAKE_GLYPH (subfont_ids[i], 0x05D0))) - { - font_info->type = font_type; - font_info->subfont = subfont_ids[i]; - - break; - } - else if (font_type == HEBREW_FONT_ISO8859_8 && - pango_x_has_glyph (font, PANGO_X_MAKE_GLYPH (subfont_ids[i], 0xE0))) - { - font_info->type = font_type; - font_info->subfont = subfont_ids[i]; - - break; - } - } - g_free (subfont_ids); - g_free (subfont_charsets); - } - - return font_info; -} - -static void -add_glyph (HebrewFontInfo *font_info, - PangoGlyphString *glyphs, - gint cluster_start, - PangoGlyph glyph, - gboolean is_combining, - gint width, - gint x_offset, - gint y_offset - ) -{ - gint index = glyphs->num_glyphs; - - pango_glyph_string_set_size (glyphs, index + 1); - - glyphs->glyphs[index].glyph = glyph; - glyphs->glyphs[index].attr.is_cluster_start = is_combining ? 0 : 1; - - glyphs->log_clusters[index] = cluster_start; - - glyphs->glyphs[index].geometry.x_offset = x_offset; - glyphs->glyphs[index].geometry.y_offset = y_offset; - glyphs->glyphs[index].geometry.width = width; - -#if 0 - { - PangoRectangle ink_rect, logical_rect; - - pango_font_get_glyph_extents (font_info->font, - glyphs->glyphs[index].glyph, &ink_rect, &logical_rect); - - printf("width logical_rect.width x_offset y_offset = %d %d %d %d\n", width, logical_rect.width, x_offset, y_offset); - glyphs->glyphs[index].geometry.x_offset = 0; - glyphs->glyphs[index].geometry.y_offset = 0; - glyphs->glyphs[index].geometry.width = width; - } -#endif -} - -static PangoGlyph -get_glyph(HebrewFontInfo *font_info, - int glyph_num) -{ - return PANGO_X_MAKE_GLYPH (font_info->subfont, glyph_num); -} - -static void -add_cluster(HebrewFontInfo *font_info, - PangoFont *font, - PangoGlyphString *glyphs, - int cluster_size, - int cluster_start, - int glyph_num[], - PangoGlyph glyph[], - int width[], - int x_offset[], - int y_offset[]) -{ - int i; - - for (i=0; i<cluster_size; i++) - { - add_glyph (font_info, glyphs, cluster_start, glyph[i], - i == 0 ? FALSE : TRUE, width[i], x_offset[i], y_offset[i]); - } -} - -static gint -get_glyph_num(HebrewFontInfo *font_info, - PangoFont *font, - gunichar uch) -{ - if (font_info->type == HEBREW_FONT_ISO8859_8) - { - return iso_8859_8_shape_table[ucs2iso8859_8(uch)]; - } - else - { - return Unicode_shape_table[ucs2iso8859_8(uch)]; - } -} - -static void -get_cluster_glyphs(HebrewFontInfo *font_info, - PangoFont *font, - gunichar cluster[], - gint cluster_size, - /* output */ - gint glyph_num[], - PangoGlyph glyph[], - gint widths[], - PangoRectangle ink_rects[]) -{ - int i; - for (i=0; i<cluster_size; i++) - { - PangoRectangle logical_rect; - glyph_num[i] = get_glyph_num(font_info, font, cluster[i]); - glyph[i] = get_glyph(font_info, glyph_num[i]); - - pango_font_get_glyph_extents (font_info->font, - glyph[i], &ink_rects[i], &logical_rect); - - /* Assign the base char width to the last character in the cluster */ - if (i==0) - { - widths[i] = 0; - widths[cluster_size-1] = logical_rect.width; - } - else if (i < cluster_size-1) - widths[i] = 0; - } -} - -static void -hebrew_engine_shape (PangoFont *font, - const char *text, - gint length, - PangoAnalysis *analysis, - PangoGlyphString *glyphs) -{ - HebrewFontInfo *font_info; - const char *p; - const char *log_cluster; - gunichar cluster[MAX_CLUSTER_CHRS]; - gint cluster_size; - gint glyph_num[MAX_CLUSTER_CHRS]; - gint glyph_width[MAX_CLUSTER_CHRS], x_offset[MAX_CLUSTER_CHRS], y_offset[MAX_CLUSTER_CHRS]; - PangoRectangle ink_rects[MAX_CLUSTER_CHRS]; - PangoGlyph glyph[MAX_CLUSTER_CHRS]; - - pango_glyph_string_set_size (glyphs, 0); - - font_info = get_font_info (font); - - p = text; - while (p < text + length) - { - log_cluster = p; - p = hebrew_shaper_get_next_cluster (p, text + length - p, - /* output */ - cluster, &cluster_size); - get_cluster_glyphs(font_info, - font, - cluster, - cluster_size, - /* output */ - glyph_num, - glyph, - glyph_width, - ink_rects); -#if 0 - { - int i; - for (i=0; i< cluster_size; i++) - { - printf("cluster %d: U+%04x %d\n", i, glyph_num[i], glyph_width[i]); - } - } -#endif - - /* Kern the glyphs! */ - hebrew_shaper_get_cluster_kerning(cluster, - cluster_size, - /* Input and output */ - ink_rects, - glyph_width, - /* output */ - x_offset, - y_offset); - - -#if 0 - old_add_cluster (font_info, glyphs, log_cluster - text, cluster, cluster_size); -#endif - add_cluster(font_info, - font, - glyphs, - cluster_size, - log_cluster - text, - glyph_num, - glyph, - glyph_width, - x_offset, - y_offset); - - } - - /* Simple bidi support */ - if (analysis->level % 2) - hebrew_shaper_bidi_reorder(glyphs); -} - -static PangoCoverage * -hebrew_engine_get_coverage (PangoFont *font, - PangoLanguage *lang) -{ - PangoCoverage *result = pango_coverage_new (); - - HebrewFontInfo *font_info = get_font_info (font); - - if (font_info->type != HEBREW_FONT_NONE) - { - gunichar wc; - - for (wc = 0x590; wc <= 0x5f4; wc++) - pango_coverage_set (result, wc, PANGO_COVERAGE_EXACT); - } - - return result; -} - -static PangoEngine * -hebrew_engine_x_new () -{ - PangoEngineShape *result; - - result = g_new (PangoEngineShape, 1); - - result->engine.id = SCRIPT_ENGINE_NAME; - result->engine.type = PANGO_ENGINE_TYPE_SHAPE; - result->engine.length = sizeof (result); - result->script_shape = hebrew_engine_shape; - result->get_coverage = hebrew_engine_get_coverage; - - return (PangoEngine *)result; -} - -/* List the engines contained within this module - */ -void -PANGO_MODULE_ENTRY(list) (PangoEngineInfo **engines, - int *n_engines) -{ - *engines = script_engines; - *n_engines = G_N_ELEMENTS (script_engines); -} - -/* Load a particular engine given the ID for the engine - */ -PangoEngine * -PANGO_MODULE_ENTRY(load) (const char *id) -{ - if (!strcmp (id, SCRIPT_ENGINE_NAME)) - return hebrew_engine_x_new (); - else - return NULL; -} - -void -PANGO_MODULE_ENTRY(unload) (PangoEngine *engine) -{ -} |