diff options
Diffstat (limited to 'modules/indic/myanmar.c')
-rw-r--r-- | modules/indic/myanmar.c | 236 |
1 files changed, 0 insertions, 236 deletions
diff --git a/modules/indic/myanmar.c b/modules/indic/myanmar.c deleted file mode 100644 index 214ebac5..00000000 --- a/modules/indic/myanmar.c +++ /dev/null @@ -1,236 +0,0 @@ -/* Pango - Myanmar module - * myanmar.c: - * - * Copyright (C) 2000 SuSE Linux Ltd - * Author: Robert Brady <robert@suse.co.uk> - * - * 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. - */ - -/* - * This is the renderer for the Burmese (Myanmar) script. This - * script is used to write the following languages : - * - * my Burmese - * shn Shan - * mkh Mon - * pi Pali - * - */ - - -#include <glib.h> -#include <stdio.h> -#include <string.h> - -#include "pangox.h" -#include "pango-indic.h" -#include "pango-engine.h" - -#define RANGE_START 0x1000 -#define RANGE_SIZE 0x80 -#define SCRIPT_STRING "Myanmar" -#define VIRAMA 0x1039 - -#include "pango-indic-script.h" - -static gboolean is_prefixing_vowel (gunichar i); -static gboolean is_vowel_sign (gunichar i); -static gunichar vowel_sign_to_matra (gunichar i); - -static PangoIndicScript script = { - SCRIPT_STRING, - &is_prefixing_vowel, - &is_vowel_sign, - &vowel_sign_to_matra, -}; - -static char *default_charset = "iso10646-brm"; - -static PangoEngineRange pango_indic_range[] = -{ - {RANGE_START, RANGE_END, "*"}, -}; - -SCRIPT_ENGINE_DEFINITION - -static PangoCoverage * -pango_engine_get_coverage (PangoFont * font, const char *lang) -{ - gunichar i; - PangoCoverage *result = pango_coverage_new (); - PangoXSubfont subfont; - - int dev_font = pango_x_find_first_subfont (font, &default_charset, 1, &subfont); - - if (dev_font) - { - for (i = RANGE_START; i <= RANGE_END; i++) - pango_coverage_set (result, i, PANGO_COVERAGE_EXACT); - - } - - return result; -} - -static gboolean -is_vowel_sign (gunichar i) -{ - /* one that combines, whether or not it spaces */ - return (i >= 0x102c && i <= 0x1032) || (i >= 0x1056 && i <= 0x1059); -} - -static gunichar -vowel_sign_to_matra (gunichar i) -{ - if (i >= 0x102d && i <= 0x1032) - return i - 0x102d + 0x1023; - return i; -} - -static int -is_consonant (int i) -{ - return (i >= 0x1000 && i <= 0x1020) || (i >= 0x1052 && i <= 0x1053); -} - -static int -is_ind_vowel (int i) -{ - return (i >= 0x1021 && i <= 0x102a); -} - -static int -is_prefixing_vowel (gunichar what) -{ - return (what == 0x1031); -} - -static void -pango_engine_shape (PangoFont * font, - const char *text, - int length, - PangoAnalysis * analysis, PangoGlyphString * glyphs) -{ - PangoXSubfont subfont; - - int n_chars, n_glyph; - int lvl; - int i; - gunichar *wc; - int sb; - int n_syls; - gunichar **syls = g_malloc (sizeof (gunichar **)); - - g_return_if_fail (font != NULL); - g_return_if_fail (text != NULL); - g_return_if_fail (length >= 0); - g_return_if_fail (analysis != NULL); - - n_chars = n_glyph = g_utf8_strlen (text, length); - lvl = pango_x_find_first_subfont (font, &default_charset, 1, &subfont); - if (!lvl) - { - pango_x_fallback_shape (font, glyphs, text, n_chars); - return; - } - - pango_indic_split_out_characters (&script, text, n_chars, &wc, - &n_glyph, glyphs); - pango_indic_convert_vowels (&script, FALSE, &n_glyph, wc, FALSE); - - n_syls = 1; - syls[0] = wc; - sb = glyphs->log_clusters[0]; - for (i = 0; i < n_glyph; i++) - { - if (i && (is_consonant (wc[i]) | is_ind_vowel (wc[i])) - && wc[i - 1] != VIRAMA) - { - syls = g_realloc (syls, ((n_syls + 2) * sizeof (gunichar **))); - syls[n_syls] = wc + i; - n_syls++; - sb = glyphs->log_clusters[i]; - } - glyphs->log_clusters[i] = sb; - } - syls[n_syls] = wc + i; - - for (i = 0; i < n_syls; i++) - { - pango_indic_shift_vowels (&script, syls[i], syls[i + 1]); - } - - pango_indic_compact (&script, &n_glyph, wc, glyphs->log_clusters); - while ((i=pango_x_apply_ligatures (font, subfont, &wc, &n_glyph, &glyphs->log_clusters))) - { - pango_indic_compact (&script, &n_glyph, wc, glyphs->log_clusters); - } - pango_indic_compact (&script, &n_glyph, wc, glyphs->log_clusters); - pango_glyph_string_set_size (glyphs, n_glyph); - - for (i = 0; i < n_glyph; i++) - { - PangoRectangle logical_rect; - glyphs->glyphs[i].glyph = PANGO_X_MAKE_GLYPH (subfont, wc[i]); - pango_font_get_glyph_extents (font, glyphs->glyphs[i].glyph, - NULL, &logical_rect); - glyphs->glyphs[i].geometry.x_offset = 0; - glyphs->glyphs[i].geometry.y_offset = 0; - glyphs->glyphs[i].geometry.width = logical_rect.width; - } - g_free (syls); -} - -static PangoEngine * -pango_engine_x_new () -{ - PangoEngineShape *result; - result = g_new (PangoEngineShape, 1); - result->engine.id = SCRIPT_STRING "ScriptEngine"; - result->engine.type = PANGO_ENGINE_TYPE_SHAPE; - result->engine.length = sizeof (result); - result->script_shape = pango_engine_shape; - result->get_coverage = pango_engine_get_coverage; - return (PangoEngine *) result; -} - -#ifdef MYANMAR_MODULE_PREFIX -#define MODULE_ENTRY(func) _pango_myanmar_##func -#else -#define MODULE_ENTRY(func) func -#endif - -void -MODULE_ENTRY(script_engine_list) (PangoEngineInfo ** engines, int *n_engines) -{ - *engines = script_engines; - *n_engines = n_script_engines; -} - -PangoEngine * -MODULE_ENTRY(script_engine_load) (const char *id) -{ - if (!strcmp (id, SCRIPT_STRING "ScriptEngineX")) - return pango_engine_x_new (); - else - return NULL; -} - -void -MODULE_ENTRY(script_engine_unload) (PangoEngine * engine) -{ -} |