summaryrefslogtreecommitdiff
path: root/pango/pangox.c
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>2000-05-05 23:30:41 +0000
committerOwen Taylor <otaylor@src.gnome.org>2000-05-05 23:30:41 +0000
commit20ab53bba42fa623824fe5fe98b2afcc13d93c76 (patch)
tree5fac2ca08fcd99db82ddf881958ffe1330c728c2 /pango/pangox.c
parent46ba6b62b8423d3a8e6223ebd516f1703d23aa56 (diff)
downloadpango-20ab53bba42fa623824fe5fe98b2afcc13d93c76.tar.gz
Add ZWS to hacky break algorithm.
Fri May 5 18:56:45 2000 Owen Taylor <otaylor@redhat.com> * pango/break.c (pango_break): Add ZWS to hacky break algorithm. * modules/basic/basic.c (basic_engine_shape): Special case zero-width-space as a temporary hack. (What's the right solution?) * modules/basic/tables-big.i: Added support for TIS-620 encoding. * configure.in pango/modules.[ch] pango/Makefile.am modules/**: First stab at support for linking modules directly into Pango. Add a --with-included-modules= flag that causes the specified modules to be built as convenience libraries and linked directly into libpangox. Tue May 2 22:59:52 2000 Owen Taylor <otaylor@redhat.com> * modules/basic/basic.c: Get rid of link list of masks in cache structure in favor of an array. (This is easy to do now since we already have linear indices for the masks from the new table format.) * pango/modules.c pango/pango-context.c pango/pangox.c: Modify _pango_find_map() to take quarks for the engine type and render type instead of strings. Get rid of the map hash table in favor of a GList with the most recently used map at the beginning. * pango/modules.[ch] pango/pango-context.c pango/pangox.c: Add some utility functions for getting the engine for a particular character in a map. Using modules.c knowledge of map structure, this allows us to save a bunch of useless strcmps. * pango/pango-context.c (add_engines): Remove unused lookup of shape mask. * modules/basic/tables-{small,big}.i modules/basic/basic.c tools/compress-table.pl: Reencode mask table to avoid binary searches and save a bit of space. * modules/basic/basic.c (find_converter): Get rid of gratuitous use of hash tables for looking up iconv converters. * modules/basic/tables-{small,big}.i modules/basic/basic.c: Use conv_ucs4 instead of conv_8bit for latin-1. * pango/pango-layout.c: Avoid calling pango_glyph_string_extents() - just add up the widths from shaping.
Diffstat (limited to 'pango/pangox.c')
-rw-r--r--pango/pangox.c42
1 files changed, 21 insertions, 21 deletions
diff --git a/pango/pangox.c b/pango/pangox.c
index 520ae7fb..c35e614e 100644
--- a/pango/pangox.c
+++ b/pango/pangox.c
@@ -2081,17 +2081,31 @@ free_coverages_foreach (gpointer key,
pango_coverage_unref (value);
}
+static PangoMap *
+pango_x_get_shaper_map (const char *lang)
+{
+ static guint engine_type_id = 0;
+ static guint render_type_id = 0;
+
+ if (engine_type_id == 0)
+ {
+ engine_type_id = g_quark_from_static_string (PANGO_ENGINE_TYPE_SHAPE);
+ render_type_id = g_quark_from_static_string (PANGO_RENDER_TYPE_X);
+ }
+
+ return _pango_find_map (lang, engine_type_id, render_type_id);
+}
+
static PangoCoverage *
pango_x_font_get_coverage (PangoFont *font,
const char *lang)
{
guint32 ch;
PangoMap *shape_map;
- PangoSubmap *submap;
- PangoMapEntry *entry;
PangoCoverage *coverage;
PangoCoverage *result;
PangoCoverageLevel font_level;
+ PangoMapEntry *entry;
GHashTable *coverage_hash;
PangoXFont *xfont = (PangoXFont *)font;
@@ -2106,20 +2120,17 @@ pango_x_font_get_coverage (PangoFont *font,
coverage_hash = g_hash_table_new (g_str_hash, g_str_equal);
- shape_map = _pango_find_map (lang, PANGO_ENGINE_TYPE_SHAPE,
- PANGO_RENDER_TYPE_X);
+ shape_map = pango_x_get_shaper_map (lang);
for (ch = 0; ch < 65536; ch++)
{
- submap = &shape_map->submaps[ch / 256];
- entry = submap->is_leaf ? &submap->d.entry : &submap->d.leaves[ch % 256];
-
+ entry = _pango_map_get_entry (shape_map, ch);
if (entry->info)
{
coverage = g_hash_table_lookup (coverage_hash, entry->info->id);
if (!coverage)
{
- PangoEngineShape *engine = (PangoEngineShape *)_pango_load_engine (entry->info->id);
+ PangoEngineShape *engine = (PangoEngineShape *)_pango_map_get_engine (shape_map, ch);
coverage = engine->get_coverage (font, lang);
g_hash_table_insert (coverage_hash, entry->info->id, coverage);
}
@@ -2151,20 +2162,9 @@ pango_x_font_find_shaper (PangoFont *font,
guint32 ch)
{
PangoMap *shape_map = NULL;
- PangoSubmap *submap;
- PangoMapEntry *entry;
-
- shape_map = _pango_find_map (lang, PANGO_ENGINE_TYPE_SHAPE,
- PANGO_RENDER_TYPE_X);
- submap = &shape_map->submaps[ch / 256];
- entry = submap->is_leaf ? &submap->d.entry : &submap->d.leaves[ch % 256];
-
- /* FIXME: check entry->is_exact */
- if (entry->info)
- return (PangoEngineShape *)_pango_load_engine (entry->info->id);
- else
- return NULL;
+ shape_map = pango_x_get_shaper_map (lang);
+ return (PangoEngineShape *)_pango_map_get_engine (shape_map, ch);
}
/* Utility functions */