summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>2004-07-30 18:28:24 +0000
committerOwen Taylor <otaylor@src.gnome.org>2004-07-30 18:28:24 +0000
commit8f9039be34e3aef8d18863d7b42761143eaa53cd (patch)
tree7814b44c1490c2f8546b5dec6222e3e7163acd65
parentf0eaa347abd1e686a08d334ae93a3218988c1e64 (diff)
downloadpango-8f9039be34e3aef8d18863d7b42761143eaa53cd.tar.gz
Improve handling of decomposed two-part vowels (#121882, Jungshik Shin)
Fri Jul 30 14:05:25 2004 Owen Taylor <otaylor@redhat.com> Improve handling of decomposed two-part vowels (#121882, Jungshik Shin) * modules/indic/indic-ot-class-tables.c (stateTable): allow a dependent vowel to be followed by another dependent vowel. * modules/indic/indic-ot.c (indic_ot_reorder): Handle multiple vowel matras.
-rw-r--r--ChangeLog12
-rw-r--r--ChangeLog.pre-1-1012
-rw-r--r--ChangeLog.pre-1-612
-rw-r--r--ChangeLog.pre-1-812
-rw-r--r--modules/indic/indic-ot-class-tables.c2
-rw-r--r--modules/indic/indic-ot.c19
6 files changed, 63 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 666fa640..b2f9f10d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+Fri Jul 30 14:05:25 2004 Owen Taylor <otaylor@redhat.com>
+
+ Improve handling of decomposed two-part vowels
+ (#121882, Jungshik Shin)
+
+ * modules/indic/indic-ot-class-tables.c (stateTable):
+ allow a dependent vowel to be followed by another
+ dependent vowel.
+
+ * modules/indic/indic-ot.c (indic_ot_reorder): Handle
+ multiple vowel matras.
+
Fri Jul 30 13:33:49 2004 Owen Taylor <otaylor@redhat.com>
* modules/indic/indic-ot.c (indic_ot_reorder): Suppress
diff --git a/ChangeLog.pre-1-10 b/ChangeLog.pre-1-10
index 666fa640..b2f9f10d 100644
--- a/ChangeLog.pre-1-10
+++ b/ChangeLog.pre-1-10
@@ -1,3 +1,15 @@
+Fri Jul 30 14:05:25 2004 Owen Taylor <otaylor@redhat.com>
+
+ Improve handling of decomposed two-part vowels
+ (#121882, Jungshik Shin)
+
+ * modules/indic/indic-ot-class-tables.c (stateTable):
+ allow a dependent vowel to be followed by another
+ dependent vowel.
+
+ * modules/indic/indic-ot.c (indic_ot_reorder): Handle
+ multiple vowel matras.
+
Fri Jul 30 13:33:49 2004 Owen Taylor <otaylor@redhat.com>
* modules/indic/indic-ot.c (indic_ot_reorder): Suppress
diff --git a/ChangeLog.pre-1-6 b/ChangeLog.pre-1-6
index 666fa640..b2f9f10d 100644
--- a/ChangeLog.pre-1-6
+++ b/ChangeLog.pre-1-6
@@ -1,3 +1,15 @@
+Fri Jul 30 14:05:25 2004 Owen Taylor <otaylor@redhat.com>
+
+ Improve handling of decomposed two-part vowels
+ (#121882, Jungshik Shin)
+
+ * modules/indic/indic-ot-class-tables.c (stateTable):
+ allow a dependent vowel to be followed by another
+ dependent vowel.
+
+ * modules/indic/indic-ot.c (indic_ot_reorder): Handle
+ multiple vowel matras.
+
Fri Jul 30 13:33:49 2004 Owen Taylor <otaylor@redhat.com>
* modules/indic/indic-ot.c (indic_ot_reorder): Suppress
diff --git a/ChangeLog.pre-1-8 b/ChangeLog.pre-1-8
index 666fa640..b2f9f10d 100644
--- a/ChangeLog.pre-1-8
+++ b/ChangeLog.pre-1-8
@@ -1,3 +1,15 @@
+Fri Jul 30 14:05:25 2004 Owen Taylor <otaylor@redhat.com>
+
+ Improve handling of decomposed two-part vowels
+ (#121882, Jungshik Shin)
+
+ * modules/indic/indic-ot-class-tables.c (stateTable):
+ allow a dependent vowel to be followed by another
+ dependent vowel.
+
+ * modules/indic/indic-ot.c (indic_ot_reorder): Handle
+ multiple vowel matras.
+
Fri Jul 30 13:33:49 2004 Owen Taylor <otaylor@redhat.com>
* modules/indic/indic-ot.c (indic_ot_reorder): Suppress
diff --git a/modules/indic/indic-ot-class-tables.c b/modules/indic/indic-ot-class-tables.c
index f0eff95c..7d75d429 100644
--- a/modules/indic/indic-ot-class-tables.c
+++ b/modules/indic/indic-ot-class-tables.c
@@ -399,7 +399,7 @@ static const gint8 stateTable[][CC_COUNT] =
{-1, 6, 1, -1, -1, -1, -1, 5, 4, -1},
{-1, 6, 1, -1, -1, -1, 2, 5, 4, -1},
{-1, -1, -1, -1, 3, 2, -1, -1, -1, 8},
- {-1, 6, 1, -1, -1, -1, -1, -1, -1, -1},
+ {-1, 6, 1, -1, -1, -1, -1, 5, -1, -1},
{-1, 7, 1, -1, -1, -1, -1, -1, -1, -1},
{-1, -1, 1, -1, -1, -1, -1, -1, -1, -1},
{-1, -1, -1, -1, 3, 2, -1, -1, -1, -1}
diff --git a/modules/indic/indic-ot.c b/modules/indic/indic-ot.c
index 95a8bf01..6670ae4a 100644
--- a/modules/indic/indic-ot.c
+++ b/modules/indic/indic-ot.c
@@ -71,14 +71,17 @@ static void saveMatra(Output *output, gunichar matra, IndicOTCharClass matraClas
}
}
-static void noteMatra(Output *output, const IndicOTClassTable *classTable, gunichar matra, guint32 matraIndex, gulong matraTags)
+static void initMatra(Output *output, guint32 matraIndex, gulong matraTags)
{
- IndicOTCharClass matraClass = indic_ot_get_char_class(classTable, matra);
-
output->fMpre = output->fMbelow = output->fMabove = output->fMpost = output->fLengthMark = 0;
output->fMPreOutIndex = -1;
output->fMatraIndex = matraIndex;
output->fMatraTags = matraTags;
+}
+
+static gboolean noteMatra(Output *output, const IndicOTClassTable *classTable, gunichar matra)
+{
+ IndicOTCharClass matraClass = indic_ot_get_char_class(classTable, matra);
if (IS_MATRA(matraClass)) {
if (IS_SPLIT_MATRA(matraClass)) {
@@ -94,7 +97,10 @@ static void noteMatra(Output *output, const IndicOTClassTable *classTable, gunic
} else {
saveMatra(output, matra, matraClass);
}
- }
+
+ return TRUE;
+ } else
+ return FALSE;
}
static void noteBaseConsonant(Output *output)
@@ -184,7 +190,10 @@ glong indic_ot_reorder(const gunichar *chars, const glong *utf8_offsets, glong c
}
matra = vmabove - 1;
- noteMatra(&output, class_table, chars[matra], /*matra*/ prev, blwf_p);
+ initMatra(&output, prev, blwf_p);
+ while (noteMatra(&output, class_table, chars[matra]) &&
+ matra != prev)
+ matra--;
switch (indic_ot_get_char_class(class_table, chars[prev]) & CF_CLASS_MASK) {
case CC_RESERVED: