summaryrefslogtreecommitdiff
path: root/modules/indic/indic-ot.c
diff options
context:
space:
mode:
Diffstat (limited to 'modules/indic/indic-ot.c')
-rw-r--r--modules/indic/indic-ot.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/modules/indic/indic-ot.c b/modules/indic/indic-ot.c
index 941688f1..159cecdc 100644
--- a/modules/indic/indic-ot.c
+++ b/modules/indic/indic-ot.c
@@ -29,6 +29,7 @@ struct _Output
gunichar fMabove;
gunichar fMpost;
gunichar fLengthMark;
+ gunichar fVirama; /* to handle virama in sinhala split matras */
glong fMatraIndex;
gulong fMatraTags;
gboolean fMatraWordStart;
@@ -50,7 +51,7 @@ static void initOutput(Output *output, const glong *originalOffsets, gunichar *o
output->fOutIndex = 0;
output->fMatraTags = 0;
- output->fMpre = output->fMbelow = output->fMabove = output->fMpost = output->fLengthMark = 0;
+ output->fMpre = output->fMbelow = output->fMabove = output->fMpost = output->fLengthMark = output->fVirama = 0;
output->fMPreOutIndex = -1;
output->fMPreFixups = mpreFixups;
@@ -69,12 +70,14 @@ static void saveMatra(Output *output, gunichar matra, IndicOTCharClass matraClas
output->fMpost = matra;
} else if (IS_LENGTH_MARK(matraClass)) {
output->fLengthMark = matra;
+ } else if (IS_VIRAMA(matraClass)) {
+ output->fVirama = matra;
}
}
static void initMatra(Output *output, guint32 matraIndex, gulong matraTags, gboolean wordStart)
{
- output->fMpre = output->fMbelow = output->fMabove = output->fMpost = output->fLengthMark = 0;
+ output->fMpre = output->fMbelow = output->fMabove = output->fMpost = output->fLengthMark = output->fVirama = 0;
output->fMPreOutIndex = -1;
output->fMatraIndex = matraIndex;
output->fMatraTags = matraTags;
@@ -162,6 +165,13 @@ static void writeLengthMark(Output *output)
}
}
+static void writeVirama(Output *output)
+{
+ if (output->fVirama != 0) {
+ writeChar(output, output->fVirama, output->fMatraIndex, output->fMatraTags);
+ }
+}
+
static glong getOutputIndex(Output *output)
{
return output->fOutIndex;
@@ -230,6 +240,7 @@ glong indic_ot_reorder(const gunichar *chars, const glong *utf8_offsets, glong c
writeMabove(&output);
writeMpost(&output);
writeLengthMark(&output);
+ writeVirama(&output);
break;
case CC_CONSONANT:
@@ -414,6 +425,7 @@ glong indic_ot_reorder(const gunichar *chars, const glong *utf8_offsets, glong c
}
writeLengthMark(&output);
+ writeVirama(&output);
/* write reph */
if ((class_table->scriptFlags & SF_REPH_AFTER_BELOW) == 0) {