summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTor Lillqvist <tml@iki.fi>2002-10-24 20:35:40 +0000
committerTor Lillqvist <tml@src.gnome.org>2002-10-24 20:35:40 +0000
commitba8f317864434deb515d4e14edf565b33d7e8585 (patch)
tree128855bcc753aa40ab51e0531026db9a08acb702
parent62db11bb5d57a762df1d055ba1c23043e3de9704 (diff)
downloadpango-ba8f317864434deb515d4e14edf565b33d7e8585.tar.gz
Update the non-Uniscribe ranges to cover some more simple scripts.
2002-10-24 Tor Lillqvist <tml@iki.fi> * modules/basic/basic-win32.c: Update the non-Uniscribe ranges to cover some more simple scripts. (itemize_shape_and_place): Handle unknown glyphs. (script_engine_list): Only return the "everything" range if Uniscribe is available. It would be nice to build up a more specific range list based on the information ScriptGetProperties() returns. That function lists information about each script the Uniscribe version used can handle. Unfortunately, though, the information is severely limited. It doesn't tell what Unicode blocks a script covers. It only gives one language that uses that script, and sometimes an charset number, but for most scripts just the totally useless DEFAULT_CHARSET.
-rw-r--r--ChangeLog19
-rw-r--r--ChangeLog.pre-1-1019
-rw-r--r--ChangeLog.pre-1-219
-rw-r--r--ChangeLog.pre-1-419
-rw-r--r--ChangeLog.pre-1-619
-rw-r--r--ChangeLog.pre-1-819
-rw-r--r--modules/basic/basic-win32.c145
7 files changed, 210 insertions, 49 deletions
diff --git a/ChangeLog b/ChangeLog
index 23a236d1..7c2fee45 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2002-10-24 Tor Lillqvist <tml@iki.fi>
+
+ * modules/basic/basic-win32.c: Update the non-Uniscribe ranges to
+ cover some more simple scripts.
+
+ (itemize_shape_and_place): Handle unknown glyphs.
+
+ (script_engine_list): Only return the "everything" range if
+ Uniscribe is available. It would be nice to build up a more
+ specific range list based on the information ScriptGetProperties()
+ returns. That function lists information about each script the
+ Uniscribe version used can handle. Unfortunately, though, the
+ information is severely limited. It doesn't tell what Unicode
+ blocks a script covers. It only gives one language that uses
+ that script, and sometimes an charset number, but for most scripts
+ just the totally useless DEFAULT_CHARSET.
+
2002-10-22 Tor Lillqvist <tml@iki.fi>
* configure.in: Add --with-usp10 flag to indicate where to find
@@ -35,7 +52,7 @@
DLL usp10.dll is present, use Uniscribe.
(uniscribe_shape, itemize_shape_and_place,
set_up_pango_log_clusters, convert_log_clusters_to_byte_offsets,
- make_langid): New functions.
+ make_langid, init_uniscribe): New functions.
(dump_glyphs_and_log_clusters, lang_name, charset_name): Debugging
functions.
diff --git a/ChangeLog.pre-1-10 b/ChangeLog.pre-1-10
index 23a236d1..7c2fee45 100644
--- a/ChangeLog.pre-1-10
+++ b/ChangeLog.pre-1-10
@@ -1,3 +1,20 @@
+2002-10-24 Tor Lillqvist <tml@iki.fi>
+
+ * modules/basic/basic-win32.c: Update the non-Uniscribe ranges to
+ cover some more simple scripts.
+
+ (itemize_shape_and_place): Handle unknown glyphs.
+
+ (script_engine_list): Only return the "everything" range if
+ Uniscribe is available. It would be nice to build up a more
+ specific range list based on the information ScriptGetProperties()
+ returns. That function lists information about each script the
+ Uniscribe version used can handle. Unfortunately, though, the
+ information is severely limited. It doesn't tell what Unicode
+ blocks a script covers. It only gives one language that uses
+ that script, and sometimes an charset number, but for most scripts
+ just the totally useless DEFAULT_CHARSET.
+
2002-10-22 Tor Lillqvist <tml@iki.fi>
* configure.in: Add --with-usp10 flag to indicate where to find
@@ -35,7 +52,7 @@
DLL usp10.dll is present, use Uniscribe.
(uniscribe_shape, itemize_shape_and_place,
set_up_pango_log_clusters, convert_log_clusters_to_byte_offsets,
- make_langid): New functions.
+ make_langid, init_uniscribe): New functions.
(dump_glyphs_and_log_clusters, lang_name, charset_name): Debugging
functions.
diff --git a/ChangeLog.pre-1-2 b/ChangeLog.pre-1-2
index 23a236d1..7c2fee45 100644
--- a/ChangeLog.pre-1-2
+++ b/ChangeLog.pre-1-2
@@ -1,3 +1,20 @@
+2002-10-24 Tor Lillqvist <tml@iki.fi>
+
+ * modules/basic/basic-win32.c: Update the non-Uniscribe ranges to
+ cover some more simple scripts.
+
+ (itemize_shape_and_place): Handle unknown glyphs.
+
+ (script_engine_list): Only return the "everything" range if
+ Uniscribe is available. It would be nice to build up a more
+ specific range list based on the information ScriptGetProperties()
+ returns. That function lists information about each script the
+ Uniscribe version used can handle. Unfortunately, though, the
+ information is severely limited. It doesn't tell what Unicode
+ blocks a script covers. It only gives one language that uses
+ that script, and sometimes an charset number, but for most scripts
+ just the totally useless DEFAULT_CHARSET.
+
2002-10-22 Tor Lillqvist <tml@iki.fi>
* configure.in: Add --with-usp10 flag to indicate where to find
@@ -35,7 +52,7 @@
DLL usp10.dll is present, use Uniscribe.
(uniscribe_shape, itemize_shape_and_place,
set_up_pango_log_clusters, convert_log_clusters_to_byte_offsets,
- make_langid): New functions.
+ make_langid, init_uniscribe): New functions.
(dump_glyphs_and_log_clusters, lang_name, charset_name): Debugging
functions.
diff --git a/ChangeLog.pre-1-4 b/ChangeLog.pre-1-4
index 23a236d1..7c2fee45 100644
--- a/ChangeLog.pre-1-4
+++ b/ChangeLog.pre-1-4
@@ -1,3 +1,20 @@
+2002-10-24 Tor Lillqvist <tml@iki.fi>
+
+ * modules/basic/basic-win32.c: Update the non-Uniscribe ranges to
+ cover some more simple scripts.
+
+ (itemize_shape_and_place): Handle unknown glyphs.
+
+ (script_engine_list): Only return the "everything" range if
+ Uniscribe is available. It would be nice to build up a more
+ specific range list based on the information ScriptGetProperties()
+ returns. That function lists information about each script the
+ Uniscribe version used can handle. Unfortunately, though, the
+ information is severely limited. It doesn't tell what Unicode
+ blocks a script covers. It only gives one language that uses
+ that script, and sometimes an charset number, but for most scripts
+ just the totally useless DEFAULT_CHARSET.
+
2002-10-22 Tor Lillqvist <tml@iki.fi>
* configure.in: Add --with-usp10 flag to indicate where to find
@@ -35,7 +52,7 @@
DLL usp10.dll is present, use Uniscribe.
(uniscribe_shape, itemize_shape_and_place,
set_up_pango_log_clusters, convert_log_clusters_to_byte_offsets,
- make_langid): New functions.
+ make_langid, init_uniscribe): New functions.
(dump_glyphs_and_log_clusters, lang_name, charset_name): Debugging
functions.
diff --git a/ChangeLog.pre-1-6 b/ChangeLog.pre-1-6
index 23a236d1..7c2fee45 100644
--- a/ChangeLog.pre-1-6
+++ b/ChangeLog.pre-1-6
@@ -1,3 +1,20 @@
+2002-10-24 Tor Lillqvist <tml@iki.fi>
+
+ * modules/basic/basic-win32.c: Update the non-Uniscribe ranges to
+ cover some more simple scripts.
+
+ (itemize_shape_and_place): Handle unknown glyphs.
+
+ (script_engine_list): Only return the "everything" range if
+ Uniscribe is available. It would be nice to build up a more
+ specific range list based on the information ScriptGetProperties()
+ returns. That function lists information about each script the
+ Uniscribe version used can handle. Unfortunately, though, the
+ information is severely limited. It doesn't tell what Unicode
+ blocks a script covers. It only gives one language that uses
+ that script, and sometimes an charset number, but for most scripts
+ just the totally useless DEFAULT_CHARSET.
+
2002-10-22 Tor Lillqvist <tml@iki.fi>
* configure.in: Add --with-usp10 flag to indicate where to find
@@ -35,7 +52,7 @@
DLL usp10.dll is present, use Uniscribe.
(uniscribe_shape, itemize_shape_and_place,
set_up_pango_log_clusters, convert_log_clusters_to_byte_offsets,
- make_langid): New functions.
+ make_langid, init_uniscribe): New functions.
(dump_glyphs_and_log_clusters, lang_name, charset_name): Debugging
functions.
diff --git a/ChangeLog.pre-1-8 b/ChangeLog.pre-1-8
index 23a236d1..7c2fee45 100644
--- a/ChangeLog.pre-1-8
+++ b/ChangeLog.pre-1-8
@@ -1,3 +1,20 @@
+2002-10-24 Tor Lillqvist <tml@iki.fi>
+
+ * modules/basic/basic-win32.c: Update the non-Uniscribe ranges to
+ cover some more simple scripts.
+
+ (itemize_shape_and_place): Handle unknown glyphs.
+
+ (script_engine_list): Only return the "everything" range if
+ Uniscribe is available. It would be nice to build up a more
+ specific range list based on the information ScriptGetProperties()
+ returns. That function lists information about each script the
+ Uniscribe version used can handle. Unfortunately, though, the
+ information is severely limited. It doesn't tell what Unicode
+ blocks a script covers. It only gives one language that uses
+ that script, and sometimes an charset number, but for most scripts
+ just the totally useless DEFAULT_CHARSET.
+
2002-10-22 Tor Lillqvist <tml@iki.fi>
* configure.in: Add --with-usp10 flag to indicate where to find
@@ -35,7 +52,7 @@
DLL usp10.dll is present, use Uniscribe.
(uniscribe_shape, itemize_shape_and_place,
set_up_pango_log_clusters, convert_log_clusters_to_byte_offsets,
- make_langid): New functions.
+ make_langid, init_uniscribe): New functions.
(dump_glyphs_and_log_clusters, lang_name, charset_name): Debugging
functions.
diff --git a/modules/basic/basic-win32.c b/modules/basic/basic-win32.c
index c85c5573..f2dedd98 100644
--- a/modules/basic/basic-win32.c
+++ b/modules/basic/basic-win32.c
@@ -110,15 +110,22 @@ static pScriptPlace script_place;
static pScriptFreeCache script_free_cache;
static const SCRIPT_PROPERTIES **scripts;
-int nscripts;
+static int nscripts;
#endif
-static PangoEngineRange basic_ranges[] = {
#ifdef HAVE_USP10_H
+static PangoEngineRange uniscribe_ranges[] = {
/* We claim to cover everything ;-) */
{ 0x0020, 0xffee, "*" }
-#else
+};
+#endif
+
+static PangoEngineRange basic_ranges[] = {
+ /* Those characters that can be rendered legibly without Uniscribe.
+ * I am not certain this list is correct.
+ */
+
/* Basic Latin, Latin-1 Supplement, Latin Extended-A, Latin Extended-B,
* IPA Extensions
*/
@@ -145,28 +152,35 @@ static PangoEngineRange basic_ranges[] = {
/* Thai */
{ 0x0e01, 0x0e5b, "" },
- /* Not covered: Lao, Tibetan, Myanmar, Georgian, Hangul Jamo, Ethiopic,
- * Cherokee, Unified Canadian Aboriginal Syllabics, Ogham, Runic,
- * Khmer, Mongolian
- */
+ /* Not covered: Lao, Tibetan, Myanmar */
+
+ /* Georgian */
+ { 0x10a0, 0x10ff, "*" },
+
+ /* Not covered: Hangul Jamo */
+
+ /* Ethiopic, Cherokee, Unified Canadian Aboriginal Syllabics, Ogham,
+ * Runic */
+ { 0x1200, 0x16ff, "*" },
+
+ /* Not covered: Khmer, Mongolian */
/* Latin Extended Additional, Greek Extended */
{ 0x1e00, 0x1fff, "*" },
- /* General Punctuation, Superscripts and Subscripts, Currency Symbols,
- * Combining Marks for Symbols, Letterlike Symbols, Number Forms,
- * Arrows, Mathematical Operators, Miscellaneous Technical,
- * Control Pictures, Optical Character Recognition, Enclosed Alphanumerics,
- * Box Drawing, Block Elements, Geometric Shapes, Miscellaneous Symbols,
- * Dingbats, Braille Patterns, CJK Radicals Supplement, Kangxi Radicals,
- * Ideographic Description Characters, CJK Symbols and Punctuation,
- * Hiragana, Katakana, Bopomofo, Hangul Compatibility Jamo, Kanbun,
- * Bopomofo Extended, Enclosed CJK Letters and Months, CJK Compatibility,
- * CJK Unified Ideographs Extension A, CJK Unified Ideographs
+ /* General Punctuation, Superscripts and Subscripts, Currency
+ * Symbols, Combining Marks for Symbols, Letterlike Symbols, Number
+ * Forms, Arrows, Mathematical Operators, Miscellaneous Technical,
+ * Control Pictures, Optical Character Recognition, Enclosed
+ * Alphanumerics, Box Drawing, Block Elements, Geometric Shapes,
+ * Miscellaneous Symbols, Dingbats, Braille Patterns, CJK Radicals
+ * Supplement, Kangxi Radicals, Ideographic Description Characters,
+ * CJK Symbols and Punctuation, Hiragana, Katakana, Bopomofo, Hangul
+ * Compatibility Jamo, Kanbun, Bopomofo Extended, Enclosed CJK
+ * Letters and Months, CJK Compatibility, CJK Unified Ideographs
+ * Extension A, CJK Unified Ideographs, Yi Syllables, Yi Radicals
*/
- { 0x2000, 0x9fff, "*" },
-
- /* Not covered: Yi Syllables, Yi Radicals */
+ { 0x2000, 0xa4c6, "*" },
/* Hangul Syllables */
{ 0xac00, 0xd7a3, "kr" },
@@ -176,16 +190,14 @@ static PangoEngineRange basic_ranges[] = {
/* CJK Compatibility Ideographs (partly) */
{ 0xf900, 0xfa0b, "kr" },
- /* Not covered: CJK Compatibility Ideographs (partly),
- * Alphabetic Presentation Forms, Arabic Presentation Forms-A,
- * Combining Half Marks, CJK Compatibility Forms,
- * Small Form Variants, Arabic Presentation Forms-B,
- * Specials
+ /* Not covered: CJK Compatibility Ideographs (partly), Alphabetic
+ * Presentation Forms, Arabic Presentation Forms-A, Combining Half
+ * Marks, CJK Compatibility Forms, Small Form Variants, Arabic
+ * Presentation Forms-B, Specials
*/
- /* Halfwidth and Fullwidth Forms (partly) */
- { 0xff00, 0xffe3, "*" }
-#endif
+ /* Halfwidth and Fullwidth Forms */
+ { 0xff00, 0xffed, "*" }
};
static PangoEngineInfo script_engines[] = {
@@ -193,16 +205,10 @@ static PangoEngineInfo script_engines[] = {
SCRIPT_ENGINE_NAME,
PANGO_ENGINE_TYPE_SHAPE,
PANGO_RENDER_TYPE_WIN32,
- basic_ranges, G_N_ELEMENTS(basic_ranges)
+ NULL, 0
}
};
-static gint n_script_engines = G_N_ELEMENTS (script_engines);
-
-/*
- * Win32 system script engine portion
- */
-
static PangoGlyph
find_char (PangoFont *font,
gunichar wc)
@@ -456,6 +462,8 @@ make_langid (PangoLanguage *lang)
return MAKELANGID (LANG_NEUTRAL, SUBLANG_NEUTRAL);
}
+#ifdef BASIC_WIN32_DEBUGGING
+
static void
dump_glyphs_and_log_clusters (gboolean rtl,
int itemlen,
@@ -541,6 +549,8 @@ dump_glyphs_and_log_clusters (gboolean rtl,
}
}
+#endif /* BASIC_WIN32_DEBUGGING */
+
static void
set_up_pango_log_clusters (gboolean rtl,
int itemlen,
@@ -666,7 +676,8 @@ convert_log_clusters_to_byte_offsets (const char *text,
}
static gboolean
-itemize_shape_and_place (HDC hdc,
+itemize_shape_and_place (PangoFont *font,
+ HDC hdc,
wchar_t *wtext,
int wlen,
PangoAnalysis *analysis,
@@ -774,10 +785,28 @@ itemize_shape_and_place (HDC hdc,
for (glyphix = 0; glyphix < nglyphs; glyphix++)
{
- glyphs->glyphs[ng+glyphix].glyph = iglyphs[glyphix];
- glyphs->glyphs[ng+glyphix].geometry.width = PANGO_SCALE * advances[glyphix];
- glyphs->glyphs[ng+glyphix].geometry.x_offset = PANGO_SCALE * offsets[glyphix].du;
- glyphs->glyphs[ng+glyphix].geometry.y_offset = PANGO_SCALE * offsets[glyphix].dv;
+ if (iglyphs[glyphix] != 0)
+ {
+ glyphs->glyphs[ng+glyphix].glyph = iglyphs[glyphix];
+ glyphs->glyphs[ng+glyphix].geometry.width = PANGO_SCALE * advances[glyphix];
+ glyphs->glyphs[ng+glyphix].geometry.x_offset = PANGO_SCALE * offsets[glyphix].du;
+ glyphs->glyphs[ng+glyphix].geometry.y_offset = PANGO_SCALE * offsets[glyphix].dv;
+ }
+ else
+ {
+ PangoRectangle logical_rect;
+ /* Should pass actual char that was not found to
+ * pango_win32_get_unknown_glyph(), but a bit hard to
+ * find out that at this point, so cheat and use 0.
+ */
+ PangoGlyph unk = pango_win32_get_unknown_glyph (font, 0);
+
+ glyphs->glyphs[ng+glyphix].glyph = unk;
+ pango_font_get_glyph_extents (font, unk, NULL, &logical_rect);
+ glyphs->glyphs[ng+glyphix].geometry.width = logical_rect.width;
+ glyphs->glyphs[ng+glyphix].geometry.x_offset = 0;
+ glyphs->glyphs[ng+glyphix].geometry.y_offset = 0;
+ }
}
nc += itemlen;
}
@@ -831,7 +860,7 @@ uniscribe_shape (PangoFont *font,
if (retval)
{
memset (script_cache, 0, sizeof (script_cache));
- retval = itemize_shape_and_place (hdc, wtext, wlen, analysis, glyphs, script_cache);
+ retval = itemize_shape_and_place (font, hdc, wtext, wlen, analysis, glyphs, script_cache);
for (i = 0; i < G_N_ELEMENTS (script_cache); i++)
if (script_cache[i])
(*script_free_cache)(&script_cache[i]);
@@ -1035,12 +1064,42 @@ init_uniscribe (void)
#define MODULE_ENTRY(func) func
#endif
-void
+void
MODULE_ENTRY(script_engine_list) (PangoEngineInfo **engines,
gint *n_engines)
{
+ init_uniscribe ();
+
+ script_engines[0].ranges = basic_ranges;
+ script_engines[0].n_ranges = G_N_ELEMENTS (basic_ranges);
+
+#ifdef HAVE_USP10_H
+ if (have_uniscribe)
+ {
+#if 0
+ int i;
+ GArray *ranges = g_array_new (FALSE, FALSE, sizeof (PangoEngineRange));
+
+ /* Walk through scripts supported by the Uniscribe implementation on this
+ * machine, and mark corresponding Unicode ranges.
+ */
+ for (i = 0; i < nscripts; i++)
+ {
+ }
+
+ /* Sort range array */
+ g_array_sort (ranges, compare_range);
+ script_engines[0].ranges = ranges;
+ script_engines[0].n_ranges = ranges->len;
+#else
+ script_engines[0].ranges = uniscribe_ranges;
+ script_engines[0].n_ranges = G_N_ELEMENTS (uniscribe_ranges);
+#endif
+ }
+#endif
+
*engines = script_engines;
- *n_engines = n_script_engines;
+ *n_engines = G_N_ELEMENTS (script_engines);
}
PangoEngine *