diff options
author | Owen Taylor <otaylor@redhat.com> | 2000-05-05 23:30:41 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 2000-05-05 23:30:41 +0000 |
commit | 20ab53bba42fa623824fe5fe98b2afcc13d93c76 (patch) | |
tree | 5fac2ca08fcd99db82ddf881958ffe1330c728c2 /pango/pangox.c | |
parent | 46ba6b62b8423d3a8e6223ebd516f1703d23aa56 (diff) | |
download | pango-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.c | 42 |
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 */ |