*** empty log message ***
authornisikimi <nisikimi>
Fri, 9 Apr 2010 04:48:25 +0000 (04:48 +0000)
committernisikimi <nisikimi>
Fri, 9 Apr 2010 04:48:25 +0000 (04:48 +0000)
41 files changed:
FLT/ARAB-OTF-NO-GPOS.fltx [new file with mode: 0644]
FLT/ARAB-OTF.fltx [new file with mode: 0644]
FLT/ARAB.fltx [new file with mode: 0644]
FLT/BENG-OTF.fltx [new file with mode: 0644]
FLT/CHAM-GENERIC.fltx [new file with mode: 0644]
FLT/COMBINING.fltx [new file with mode: 0644]
FLT/DEVA-CDAC.fltx [new file with mode: 0644]
FLT/DEVA-OTF.fltx [new file with mode: 0644]
FLT/GUJR-OTF.fltx [new file with mode: 0644]
FLT/GURU-OTF.fltx [new file with mode: 0644]
FLT/HEBR-FF.fltx [new file with mode: 0644]
FLT/HEBR.fltx [new file with mode: 0644]
FLT/KHMR-ANLONG.fltx [new file with mode: 0644]
FLT/KHMR-MULE.fltx [new file with mode: 0644]
FLT/KHMR-OTF.fltx [new file with mode: 0644]
FLT/KNDA-OTF.fltx [new file with mode: 0644]
FLT/LAOO-ALICE.fltx [new file with mode: 0644]
FLT/LAOO-GENERIC.fltx [new file with mode: 0644]
FLT/LAOO-MULE.fltx [new file with mode: 0644]
FLT/LAOO-OTF.fltx [new file with mode: 0644]
FLT/MLYM-CDAC.fltx [new file with mode: 0644]
FLT/MLYM-OTF.fltx [new file with mode: 0644]
FLT/MLYM-RACHANA.fltx [new file with mode: 0644]
FLT/MYMR-MYAZEDI.fltx [new file with mode: 0644]
FLT/NO-CTL.fltx [new file with mode: 0644]
FLT/ORYA-OTF.fltx [new file with mode: 0644]
FLT/SINH-OTF.fltx [new file with mode: 0644]
FLT/SYRC-OTF.fltx [new file with mode: 0644]
FLT/TAML-CDAC.fltx [new file with mode: 0644]
FLT/TAML-OTF.fltx [new file with mode: 0644]
FLT/TELU-OTF.fltx [new file with mode: 0644]
FLT/THAA-OTF.fltx [new file with mode: 0644]
FLT/THAI-GENERIC.fltx [new file with mode: 0644]
FLT/THAI-NORASI.fltx [new file with mode: 0644]
FLT/THAI-OTF.fltx [new file with mode: 0644]
FLT/THAI-TIS620.fltx [new file with mode: 0644]
FLT/TIBT-MTIB.fltx [new file with mode: 0644]
FLT/TIBT-MULE.fltx [new file with mode: 0644]
FLT/TIBT-OTF.fltx [new file with mode: 0644]
FLT/expr.rng [new file with mode: 0644]
FLT/flt-expr.rng [new file with mode: 0644]

diff --git a/FLT/ARAB-OTF-NO-GPOS.fltx b/FLT/ARAB-OTF-NO-GPOS.fltx
new file mode 100644 (file)
index 0000000..cf5d3f9
--- /dev/null
@@ -0,0 +1,1073 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="arab-otf-no-gpos" key1="nil">
+  <font registry="unicode-bmp" family="nil" foundry="nil">
+    <otf-specification script="arab">
+      <gsub-features>
+        <positive-list>
+          <feature>init</feature>
+          <feature>medi</feature>
+          <feature>fina</feature>
+          <feature>liga</feature>
+        </positive-list>
+      </gsub-features>
+      <gpos-features>
+        <negative-list>
+          <feature>mark</feature>
+        </negative-list>
+      </gpos-features>
+    </otf-specification>
+  </font>
+  <first-stage>
+    <category-table>
+      <category category-value="x">
+        <from-code>
+          <integer>0x0600</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06FF</integer>
+        </to-code>
+      </category>
+      <category category-value="p">
+        <from-code>
+          <integer>0x0674</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0678</integer>
+        </to-code>
+      </category>
+      <category category-value="n">
+        <glyph-code>
+          <integer>0x0643</integer>
+        </glyph-code>
+      </category>
+      <category category-value="n">
+        <glyph-code>
+          <integer>0x06AF</integer>
+        </glyph-code>
+      </category>
+      <category category-value="n">
+        <glyph-code>
+          <integer>0x06D5</integer>
+        </glyph-code>
+      </category>
+      <category category-value="x">
+        <from-code>
+          <integer>0x0750</integer>
+        </from-code>
+        <to-code>
+          <integer>0x077F</integer>
+        </to-code>
+      </category>
+      <category category-value="x">
+        <glyph-code>
+          <integer>0x200C</integer>
+        </glyph-code>
+      </category>
+      <category category-value="x">
+        <glyph-code>
+          <integer>0x200D</integer>
+        </glyph-code>
+      </category>
+      <category category-value="x">
+        <glyph-code>
+          <integer>0x25CC</integer>
+        </glyph-code>
+      </category>
+      <category category-value="X">
+        <from-code>
+          <integer>0xFB50</integer>
+        </from-code>
+        <to-code>
+          <integer>0xFDFF</integer>
+        </to-code>
+      </category>
+      <category category-value="X">
+        <from-code>
+          <integer>0xFE70</integer>
+        </from-code>
+        <to-code>
+          <integer>0xFEFC</integer>
+        </to-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=".*X.*">
+            <copy-glyph/>
+            <repeat/>
+          </regexp-block>
+          <regexp-block regexp=".*p.*">
+            <cond-block>
+              <regexp-block regexp=".*n.*">
+                <funcall fname="rmhamza"/>
+                <repeat/>
+              </regexp-block>
+              <match-block match-index="0">
+                <direct-code>
+                  <integer>0x674</integer>
+                </direct-code>
+                <funcall fname="rmhamza"/>
+                <repeat/>
+              </match-block>
+            </cond-block>
+          </regexp-block>
+          <match-block match-index="0">
+            <copy-glyph/>
+            <repeat/>
+          </match-block>
+        </cond-block>
+      </match-block>
+      <defmacro fname="rmhamza">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0674</integer>
+            </source-pattern>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0675</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0627</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0676</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0648</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0677</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x06C7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0678</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0649</integer>
+            </direct-code>
+          </subst-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+      </defmacro>
+    </generator>
+  </first-stage>
+  <stage>
+    <category-table>
+      <category category-value="U">
+        <from-code>
+          <integer>0x060B</integer>
+        </from-code>
+        <to-code>
+          <integer>0x060F</integer>
+        </to-code>
+      </category>
+      <category category-value="T">
+        <from-code>
+          <integer>0x0610</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0615</integer>
+        </to-code>
+      </category>
+      <category category-value="U">
+        <glyph-code>
+          <integer>0x061B</integer>
+        </glyph-code>
+      </category>
+      <category category-value="U">
+        <from-code>
+          <integer>0x061E</integer>
+        </from-code>
+        <to-code>
+          <integer>0x061F</integer>
+        </to-code>
+      </category>
+      <category category-value="U">
+        <glyph-code>
+          <integer>0x0621</integer>
+        </glyph-code>
+      </category>
+      <category category-value="R">
+        <from-code>
+          <integer>0x0622</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0623</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x0624</integer>
+        </glyph-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x0625</integer>
+        </glyph-code>
+      </category>
+      <category category-value="D">
+        <glyph-code>
+          <integer>0x0626</integer>
+        </glyph-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x0627</integer>
+        </glyph-code>
+      </category>
+      <category category-value="D">
+        <glyph-code>
+          <integer>0x0628</integer>
+        </glyph-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x0629</integer>
+        </glyph-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x062A</integer>
+        </from-code>
+        <to-code>
+          <integer>0x062E</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <from-code>
+          <integer>0x062F</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0632</integer>
+        </to-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x0633</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0647</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x0648</integer>
+        </glyph-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x0649</integer>
+        </from-code>
+        <to-code>
+          <integer>0x064A</integer>
+        </to-code>
+      </category>
+      <category category-value="T">
+        <from-code>
+          <integer>0x064B</integer>
+        </from-code>
+        <to-code>
+          <integer>0x065E</integer>
+        </to-code>
+      </category>
+      <category category-value="U">
+        <from-code>
+          <integer>0x0660</integer>
+        </from-code>
+        <to-code>
+          <integer>0x066D</integer>
+        </to-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x066E</integer>
+        </from-code>
+        <to-code>
+          <integer>0x066F</integer>
+        </to-code>
+      </category>
+      <category category-value="T">
+        <glyph-code>
+          <integer>0x0670</integer>
+        </glyph-code>
+      </category>
+      <category category-value="R">
+        <from-code>
+          <integer>0x0671</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0673</integer>
+        </to-code>
+      </category>
+      <category category-value="U">
+        <from-code>
+          <integer>0x0674</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0678</integer>
+        </to-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x0679</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0687</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <from-code>
+          <integer>0x0688</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0699</integer>
+        </to-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x069A</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06C3</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <from-code>
+          <integer>0x06C4</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06CB</integer>
+        </to-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x06CC</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06CE</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x06CF</integer>
+        </glyph-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x06D0</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06D3</integer>
+        </to-code>
+      </category>
+      <category category-value="U">
+        <glyph-code>
+          <integer>0x06D4</integer>
+        </glyph-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x06D5</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <from-code>
+          <integer>0x06D6</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06E4</integer>
+        </to-code>
+      </category>
+      <category category-value="U">
+        <from-code>
+          <integer>0x06E5</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06E6</integer>
+        </to-code>
+      </category>
+      <category category-value="T">
+        <from-code>
+          <integer>0x06E7</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06E8</integer>
+        </to-code>
+      </category>
+      <category category-value="U">
+        <glyph-code>
+          <integer>0x06E9</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <from-code>
+          <integer>0x06EA</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06ED</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <from-code>
+          <integer>0x06EE</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06EF</integer>
+        </to-code>
+      </category>
+      <category category-value="U">
+        <from-code>
+          <integer>0x06F0</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06F9</integer>
+        </to-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x06FA</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06FC</integer>
+        </to-code>
+      </category>
+      <category category-value="U">
+        <from-code>
+          <integer>0x06FD</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06FE</integer>
+        </to-code>
+      </category>
+      <category category-value="D">
+        <glyph-code>
+          <integer>0x06FF</integer>
+        </glyph-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x0750</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0758</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <from-code>
+          <integer>0x0759</integer>
+        </from-code>
+        <to-code>
+          <integer>0x075B</integer>
+        </to-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x075C</integer>
+        </from-code>
+        <to-code>
+          <integer>0x076A</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <from-code>
+          <integer>0x076B</integer>
+        </from-code>
+        <to-code>
+          <integer>0x076C</integer>
+        </to-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x076D</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0770</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x0771</integer>
+        </glyph-code>
+      </category>
+      <category category-value="D">
+        <glyph-code>
+          <integer>0x0772</integer>
+        </glyph-code>
+      </category>
+      <category category-value="R">
+        <from-code>
+          <integer>0x0773</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0774</integer>
+        </to-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x0775</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0777</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <from-code>
+          <integer>0x0778</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0779</integer>
+        </to-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x077A</integer>
+        </from-code>
+        <to-code>
+          <integer>0x077F</integer>
+        </to-code>
+      </category>
+      <category category-value="U">
+        <glyph-code>
+          <integer>0x200C</integer>
+        </glyph-code>
+      </category>
+      <category category-value="D">
+        <glyph-code>
+          <integer>0x200D</integer>
+        </glyph-code>
+      </category>
+      <category category-value="U">
+        <glyph-code>
+          <integer>0x25CC</integer>
+        </glyph-code>
+      </category>
+      <category category-value="X">
+        <from-code>
+          <integer>0xFB50</integer>
+        </from-code>
+        <to-code>
+          <integer>0xFDFF</integer>
+        </to-code>
+      </category>
+      <category category-value="X">
+        <from-code>
+          <integer>0xFE70</integer>
+        </from-code>
+        <to-code>
+          <integer>0xFEFC</integer>
+        </to-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=".*X.*">
+            <cond-block>
+              <regexp-block regexp="[DRUX]T*">
+                <start-cluster/>
+                <copy-glyph/>
+                <repeat/>
+                <end-cluster/>
+              </regexp-block>
+              <regexp-block regexp=".">
+                <copy-glyph/>
+              </regexp-block>
+            </cond-block>
+            <repeat/>
+          </regexp-block>
+          <regexp-block regexp="D.*">
+            <cond-block>
+              <regexp-block regexp="(.)(T*)([DR].*)">
+                <start-cluster/>
+                <match-block match-index="1">
+                  <otf-specification script="arab">
+                    <gsub-features>
+                      <positive-list>
+                        <feature>init</feature>
+                      </positive-list>
+                    </gsub-features>
+                    <gpos-features>
+                      <negative-list/>
+                    </gpos-features>
+                  </otf-specification>
+                </match-block>
+                <match-block match-index="2">
+                  <copy-glyph/>
+                  <repeat/>
+                </match-block>
+                <end-cluster/>
+                <match-block match-index="3">
+                  <funcall fname="join"/>
+                </match-block>
+              </regexp-block>
+              <regexp-block regexp="(.)(T*)(.*)">
+                <start-cluster/>
+                <match-block match-index="1">
+                  <otf-specification script="arab">
+                    <gsub-features>
+                      <positive-list>
+                        <feature>isol</feature>
+                      </positive-list>
+                    </gsub-features>
+                    <gpos-features>
+                      <negative-list/>
+                    </gpos-features>
+                  </otf-specification>
+                </match-block>
+                <match-block match-index="2">
+                  <copy-glyph/>
+                  <repeat/>
+                </match-block>
+                <end-cluster/>
+                <match-block match-index="3">
+                  <funcall fname="disjoin"/>
+                </match-block>
+              </regexp-block>
+            </cond-block>
+          </regexp-block>
+          <regexp-block regexp="([RU])(T*)(.*)">
+            <start-cluster/>
+            <match-block match-index="1">
+              <otf-specification script="arab">
+                <gsub-features>
+                  <positive-list>
+                    <feature>isol</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <end-cluster/>
+            <match-block match-index="3">
+              <funcall fname="disjoin"/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="(T+)(.*)">
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="disjoin"/>
+            </match-block>
+          </regexp-block>
+        </cond-block>
+      </match-block>
+      <defmacro fname="join">
+        <cond-block>
+          <regexp-block regexp="D.*">
+            <cond-block>
+              <regexp-block regexp="(.)(T*)([DR].*)">
+                <start-cluster/>
+                <match-block match-index="1">
+                  <otf-specification script="arab">
+                    <gsub-features>
+                      <positive-list>
+                        <feature>medi</feature>
+                      </positive-list>
+                    </gsub-features>
+                    <gpos-features>
+                      <negative-list/>
+                    </gpos-features>
+                  </otf-specification>
+                </match-block>
+                <match-block match-index="2">
+                  <copy-glyph/>
+                  <repeat/>
+                </match-block>
+                <end-cluster/>
+                <match-block match-index="3">
+                  <funcall fname="join"/>
+                </match-block>
+              </regexp-block>
+              <regexp-block regexp="(.)(T*)(.*)">
+                <start-cluster/>
+                <match-block match-index="1">
+                  <otf-specification script="arab">
+                    <gsub-features>
+                      <positive-list>
+                        <feature>fina</feature>
+                      </positive-list>
+                    </gsub-features>
+                    <gpos-features>
+                      <negative-list/>
+                    </gpos-features>
+                  </otf-specification>
+                </match-block>
+                <match-block match-index="2">
+                  <copy-glyph/>
+                  <repeat/>
+                </match-block>
+                <end-cluster/>
+                <match-block match-index="3">
+                  <funcall fname="disjoin"/>
+                </match-block>
+              </regexp-block>
+            </cond-block>
+          </regexp-block>
+          <regexp-block regexp="(.)(T*)(.*)">
+            <start-cluster/>
+            <match-block match-index="1">
+              <otf-specification script="arab">
+                <gsub-features>
+                  <positive-list>
+                    <feature>fina</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <end-cluster/>
+            <match-block match-index="3">
+              <funcall fname="disjoin"/>
+            </match-block>
+          </regexp-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="disjoin">
+        <cond-block>
+          <regexp-block regexp="D.*">
+            <cond-block>
+              <regexp-block regexp="(.)(T*)([DR].*)">
+                <start-cluster/>
+                <match-block match-index="1">
+                  <otf-specification script="arab">
+                    <gsub-features>
+                      <positive-list>
+                        <feature>init</feature>
+                      </positive-list>
+                    </gsub-features>
+                    <gpos-features>
+                      <negative-list/>
+                    </gpos-features>
+                  </otf-specification>
+                </match-block>
+                <match-block match-index="2">
+                  <copy-glyph/>
+                  <repeat/>
+                </match-block>
+                <end-cluster/>
+                <match-block match-index="3">
+                  <funcall fname="join"/>
+                </match-block>
+              </regexp-block>
+              <regexp-block regexp="(.)(T*)(.*)">
+                <start-cluster/>
+                <match-block match-index="1">
+                  <otf-specification script="arab">
+                    <gsub-features>
+                      <positive-list>
+                        <feature>isol</feature>
+                      </positive-list>
+                    </gsub-features>
+                    <gpos-features>
+                      <negative-list/>
+                    </gpos-features>
+                  </otf-specification>
+                </match-block>
+                <match-block match-index="2">
+                  <copy-glyph/>
+                  <repeat/>
+                </match-block>
+                <end-cluster/>
+                <match-block match-index="3">
+                  <funcall fname="disjoin"/>
+                </match-block>
+              </regexp-block>
+            </cond-block>
+          </regexp-block>
+          <regexp-block regexp="(.)(T*)(.*)">
+            <start-cluster/>
+            <match-block match-index="1">
+              <otf-specification script="arab">
+                <gsub-features>
+                  <positive-list>
+                    <feature>isol</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <end-cluster/>
+            <match-block match-index="3">
+              <funcall fname="disjoin"/>
+            </match-block>
+          </regexp-block>
+        </cond-block>
+      </defmacro>
+    </generator>
+  </stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0651</integer>
+              <integer>0x0650</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0x064E</integer>
+            </direct-code>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0x0651</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0651</integer>
+              <integer>0x064D</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0x064B</integer>
+            </direct-code>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0x0651</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <from-code>
+              <integer>0x0610</integer>
+            </from-code>
+            <to-code>
+              <integer>0x0615</integer>
+            </to-code>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x064B</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x064C</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x064D</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x064E</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x064F</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0650</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <from-code>
+              <integer>0x0651</integer>
+            </from-code>
+            <to-code>
+              <integer>0x0654</integer>
+            </to-code>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0655</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0656</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <from-code>
+              <integer>0x0657</integer>
+            </from-code>
+            <to-code>
+              <integer>0x065B</integer>
+            </to-code>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x065C</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x065D</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x065E</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0670</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <from-code>
+              <integer>0x06D6</integer>
+            </from-code>
+            <to-code>
+              <integer>0x06DC</integer>
+            </to-code>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <from-code>
+              <integer>0x06DF</integer>
+            </from-code>
+            <to-code>
+              <integer>0x06E2</integer>
+            </to-code>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06E3</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06E4</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06E7</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06E8</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06EA</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06EB</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06EC</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06ED</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x200C</integer>
+            </source-pattern>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x200D</integer>
+            </source-pattern>
+            <copy-glyph/>
+          </subst-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/ARAB-OTF.fltx b/FLT/ARAB-OTF.fltx
new file mode 100644 (file)
index 0000000..f433768
--- /dev/null
@@ -0,0 +1,857 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="arab-otf" key1="nil">
+  <font registry="unicode-bmp" family="nil" foundry="nil">
+    <otf-specification script="arab">
+      <gsub-features>
+        <positive-list>
+          <feature>init</feature>
+          <feature>medi</feature>
+          <feature>fina</feature>
+          <feature>liga</feature>
+        </positive-list>
+      </gsub-features>
+      <gpos-features>
+        <positive-list>
+          <feature>mark</feature>
+        </positive-list>
+      </gpos-features>
+    </otf-specification>
+  </font>
+  <first-stage>
+    <category-table>
+      <category category-value="x">
+        <from-code>
+          <integer>0x0600</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06FF</integer>
+        </to-code>
+      </category>
+      <category category-value="p">
+        <from-code>
+          <integer>0x0674</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0678</integer>
+        </to-code>
+      </category>
+      <category category-value="n">
+        <glyph-code>
+          <integer>0x0643</integer>
+        </glyph-code>
+      </category>
+      <category category-value="n">
+        <glyph-code>
+          <integer>0x06AF</integer>
+        </glyph-code>
+      </category>
+      <category category-value="n">
+        <glyph-code>
+          <integer>0x06D5</integer>
+        </glyph-code>
+      </category>
+      <category category-value="x">
+        <from-code>
+          <integer>0x0750</integer>
+        </from-code>
+        <to-code>
+          <integer>0x077F</integer>
+        </to-code>
+      </category>
+      <category category-value="x">
+        <glyph-code>
+          <integer>0x200C</integer>
+        </glyph-code>
+      </category>
+      <category category-value="x">
+        <glyph-code>
+          <integer>0x200D</integer>
+        </glyph-code>
+      </category>
+      <category category-value="x">
+        <glyph-code>
+          <integer>0x25CC</integer>
+        </glyph-code>
+      </category>
+      <category category-value="X">
+        <from-code>
+          <integer>0xFB50</integer>
+        </from-code>
+        <to-code>
+          <integer>0xFDFF</integer>
+        </to-code>
+      </category>
+      <category category-value="X">
+        <from-code>
+          <integer>0xFE70</integer>
+        </from-code>
+        <to-code>
+          <integer>0xFEFC</integer>
+        </to-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=".*X.*">
+            <copy-glyph/>
+            <repeat/>
+          </regexp-block>
+          <regexp-block regexp=".*p.*">
+            <cond-block>
+              <regexp-block regexp=".*n.*">
+                <funcall fname="rmhamza"/>
+                <repeat/>
+              </regexp-block>
+              <match-block match-index="0">
+                <direct-code>
+                  <integer>0x674</integer>
+                </direct-code>
+                <funcall fname="rmhamza"/>
+                <repeat/>
+              </match-block>
+            </cond-block>
+          </regexp-block>
+          <match-block match-index="0">
+            <copy-glyph/>
+            <repeat/>
+          </match-block>
+        </cond-block>
+      </match-block>
+      <defmacro fname="rmhamza">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0674</integer>
+            </source-pattern>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0675</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0627</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0676</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0648</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0677</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x06C7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0678</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0649</integer>
+            </direct-code>
+          </subst-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+      </defmacro>
+    </generator>
+  </first-stage>
+  <stage>
+    <category-table>
+      <category category-value="U">
+        <from-code>
+          <integer>0x060B</integer>
+        </from-code>
+        <to-code>
+          <integer>0x060F</integer>
+        </to-code>
+      </category>
+      <category category-value="T">
+        <from-code>
+          <integer>0x0610</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0615</integer>
+        </to-code>
+      </category>
+      <category category-value="U">
+        <glyph-code>
+          <integer>0x061B</integer>
+        </glyph-code>
+      </category>
+      <category category-value="U">
+        <from-code>
+          <integer>0x061E</integer>
+        </from-code>
+        <to-code>
+          <integer>0x061F</integer>
+        </to-code>
+      </category>
+      <category category-value="U">
+        <glyph-code>
+          <integer>0x0621</integer>
+        </glyph-code>
+      </category>
+      <category category-value="R">
+        <from-code>
+          <integer>0x0622</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0623</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x0624</integer>
+        </glyph-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x0625</integer>
+        </glyph-code>
+      </category>
+      <category category-value="D">
+        <glyph-code>
+          <integer>0x0626</integer>
+        </glyph-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x0627</integer>
+        </glyph-code>
+      </category>
+      <category category-value="D">
+        <glyph-code>
+          <integer>0x0628</integer>
+        </glyph-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x0629</integer>
+        </glyph-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x062A</integer>
+        </from-code>
+        <to-code>
+          <integer>0x062E</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <from-code>
+          <integer>0x062F</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0632</integer>
+        </to-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x0633</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0647</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x0648</integer>
+        </glyph-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x0649</integer>
+        </from-code>
+        <to-code>
+          <integer>0x064A</integer>
+        </to-code>
+      </category>
+      <category category-value="T">
+        <from-code>
+          <integer>0x064B</integer>
+        </from-code>
+        <to-code>
+          <integer>0x065E</integer>
+        </to-code>
+      </category>
+      <category category-value="U">
+        <from-code>
+          <integer>0x0660</integer>
+        </from-code>
+        <to-code>
+          <integer>0x066D</integer>
+        </to-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x066E</integer>
+        </from-code>
+        <to-code>
+          <integer>0x066F</integer>
+        </to-code>
+      </category>
+      <category category-value="T">
+        <glyph-code>
+          <integer>0x0670</integer>
+        </glyph-code>
+      </category>
+      <category category-value="R">
+        <from-code>
+          <integer>0x0671</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0673</integer>
+        </to-code>
+      </category>
+      <category category-value="U">
+        <from-code>
+          <integer>0x0674</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0678</integer>
+        </to-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x0679</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0687</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <from-code>
+          <integer>0x0688</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0699</integer>
+        </to-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x069A</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06C3</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <from-code>
+          <integer>0x06C4</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06CB</integer>
+        </to-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x06CC</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06CE</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x06CF</integer>
+        </glyph-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x06D0</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06D3</integer>
+        </to-code>
+      </category>
+      <category category-value="U">
+        <glyph-code>
+          <integer>0x06D4</integer>
+        </glyph-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x06D5</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <from-code>
+          <integer>0x06D6</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06E4</integer>
+        </to-code>
+      </category>
+      <category category-value="U">
+        <from-code>
+          <integer>0x06E5</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06E6</integer>
+        </to-code>
+      </category>
+      <category category-value="T">
+        <from-code>
+          <integer>0x06E7</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06E8</integer>
+        </to-code>
+      </category>
+      <category category-value="U">
+        <glyph-code>
+          <integer>0x06E9</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <from-code>
+          <integer>0x06EA</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06ED</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <from-code>
+          <integer>0x06EE</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06EF</integer>
+        </to-code>
+      </category>
+      <category category-value="U">
+        <from-code>
+          <integer>0x06F0</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06F9</integer>
+        </to-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x06FA</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06FC</integer>
+        </to-code>
+      </category>
+      <category category-value="U">
+        <from-code>
+          <integer>0x06FD</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06FE</integer>
+        </to-code>
+      </category>
+      <category category-value="D">
+        <glyph-code>
+          <integer>0x06FF</integer>
+        </glyph-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x0750</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0758</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <from-code>
+          <integer>0x0759</integer>
+        </from-code>
+        <to-code>
+          <integer>0x075B</integer>
+        </to-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x075C</integer>
+        </from-code>
+        <to-code>
+          <integer>0x076A</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <from-code>
+          <integer>0x076B</integer>
+        </from-code>
+        <to-code>
+          <integer>0x076C</integer>
+        </to-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x076D</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0770</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x0771</integer>
+        </glyph-code>
+      </category>
+      <category category-value="D">
+        <glyph-code>
+          <integer>0x0772</integer>
+        </glyph-code>
+      </category>
+      <category category-value="R">
+        <from-code>
+          <integer>0x0773</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0774</integer>
+        </to-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x0775</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0777</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <from-code>
+          <integer>0x0778</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0779</integer>
+        </to-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x077A</integer>
+        </from-code>
+        <to-code>
+          <integer>0x077F</integer>
+        </to-code>
+      </category>
+      <category category-value="U">
+        <glyph-code>
+          <integer>0x200C</integer>
+        </glyph-code>
+      </category>
+      <category category-value="D">
+        <glyph-code>
+          <integer>0x200D</integer>
+        </glyph-code>
+      </category>
+      <category category-value="U">
+        <glyph-code>
+          <integer>0x25CC</integer>
+        </glyph-code>
+      </category>
+      <category category-value="X">
+        <from-code>
+          <integer>0xFB50</integer>
+        </from-code>
+        <to-code>
+          <integer>0xFDFF</integer>
+        </to-code>
+      </category>
+      <category category-value="X">
+        <from-code>
+          <integer>0xFE70</integer>
+        </from-code>
+        <to-code>
+          <integer>0xFEFC</integer>
+        </to-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=".*X.*">
+            <cond-block>
+              <regexp-block regexp="[DRUX]T*">
+                <start-cluster/>
+                <copy-glyph/>
+                <repeat/>
+                <end-cluster/>
+              </regexp-block>
+              <regexp-block regexp=".">
+                <copy-glyph/>
+              </regexp-block>
+            </cond-block>
+            <repeat/>
+          </regexp-block>
+          <regexp-block regexp="D.*">
+            <cond-block>
+              <regexp-block regexp="(.)(T*)([DR].*)">
+                <start-cluster/>
+                <match-block match-index="1">
+                  <otf-specification script="arab">
+                    <gsub-features>
+                      <positive-list>
+                        <feature>init</feature>
+                      </positive-list>
+                    </gsub-features>
+                    <gpos-features>
+                      <positive-list/>
+                    </gpos-features>
+                  </otf-specification>
+                </match-block>
+                <match-block match-index="2">
+                  <copy-glyph/>
+                  <repeat/>
+                </match-block>
+                <end-cluster/>
+                <match-block match-index="3">
+                  <funcall fname="join"/>
+                </match-block>
+              </regexp-block>
+              <regexp-block regexp="(.)(T*)(.*)">
+                <start-cluster/>
+                <match-block match-index="1">
+                  <otf-specification script="arab">
+                    <gsub-features>
+                      <positive-list>
+                        <feature>isol</feature>
+                      </positive-list>
+                    </gsub-features>
+                    <gpos-features>
+                      <positive-list/>
+                    </gpos-features>
+                  </otf-specification>
+                </match-block>
+                <match-block match-index="2">
+                  <copy-glyph/>
+                  <repeat/>
+                </match-block>
+                <end-cluster/>
+                <match-block match-index="3">
+                  <funcall fname="disjoin"/>
+                </match-block>
+              </regexp-block>
+            </cond-block>
+          </regexp-block>
+          <regexp-block regexp="([RU])(T*)(.*)">
+            <start-cluster/>
+            <match-block match-index="1">
+              <otf-specification script="arab">
+                <gsub-features>
+                  <positive-list>
+                    <feature>isol</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <end-cluster/>
+            <match-block match-index="3">
+              <funcall fname="disjoin"/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="(T+)(.*)">
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="disjoin"/>
+            </match-block>
+          </regexp-block>
+        </cond-block>
+      </match-block>
+      <defmacro fname="join">
+        <cond-block>
+          <regexp-block regexp="D.*">
+            <cond-block>
+              <regexp-block regexp="(.)(T*)([DR].*)">
+                <start-cluster/>
+                <match-block match-index="1">
+                  <otf-specification script="arab">
+                    <gsub-features>
+                      <positive-list>
+                        <feature>medi</feature>
+                      </positive-list>
+                    </gsub-features>
+                    <gpos-features>
+                      <positive-list/>
+                    </gpos-features>
+                  </otf-specification>
+                </match-block>
+                <match-block match-index="2">
+                  <copy-glyph/>
+                  <repeat/>
+                </match-block>
+                <end-cluster/>
+                <match-block match-index="3">
+                  <funcall fname="join"/>
+                </match-block>
+              </regexp-block>
+              <regexp-block regexp="(.)(T*)(.*)">
+                <start-cluster/>
+                <match-block match-index="1">
+                  <otf-specification script="arab">
+                    <gsub-features>
+                      <positive-list>
+                        <feature>fina</feature>
+                      </positive-list>
+                    </gsub-features>
+                    <gpos-features>
+                      <positive-list/>
+                    </gpos-features>
+                  </otf-specification>
+                </match-block>
+                <match-block match-index="2">
+                  <copy-glyph/>
+                  <repeat/>
+                </match-block>
+                <end-cluster/>
+                <match-block match-index="3">
+                  <funcall fname="disjoin"/>
+                </match-block>
+              </regexp-block>
+            </cond-block>
+          </regexp-block>
+          <regexp-block regexp="(.)(T*)(.*)">
+            <start-cluster/>
+            <match-block match-index="1">
+              <otf-specification script="arab">
+                <gsub-features>
+                  <positive-list>
+                    <feature>fina</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <end-cluster/>
+            <match-block match-index="3">
+              <funcall fname="disjoin"/>
+            </match-block>
+          </regexp-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="disjoin">
+        <cond-block>
+          <regexp-block regexp="D.*">
+            <cond-block>
+              <regexp-block regexp="(.)(T*)([DR].*)">
+                <start-cluster/>
+                <match-block match-index="1">
+                  <otf-specification script="arab">
+                    <gsub-features>
+                      <positive-list>
+                        <feature>init</feature>
+                      </positive-list>
+                    </gsub-features>
+                    <gpos-features>
+                      <positive-list/>
+                    </gpos-features>
+                  </otf-specification>
+                </match-block>
+                <match-block match-index="2">
+                  <copy-glyph/>
+                  <repeat/>
+                </match-block>
+                <end-cluster/>
+                <match-block match-index="3">
+                  <funcall fname="join"/>
+                </match-block>
+              </regexp-block>
+              <regexp-block regexp="(.)(T*)(.*)">
+                <start-cluster/>
+                <match-block match-index="1">
+                  <otf-specification script="arab">
+                    <gsub-features>
+                      <positive-list>
+                        <feature>isol</feature>
+                      </positive-list>
+                    </gsub-features>
+                    <gpos-features>
+                      <positive-list/>
+                    </gpos-features>
+                  </otf-specification>
+                </match-block>
+                <match-block match-index="2">
+                  <copy-glyph/>
+                  <repeat/>
+                </match-block>
+                <end-cluster/>
+                <match-block match-index="3">
+                  <funcall fname="disjoin"/>
+                </match-block>
+              </regexp-block>
+            </cond-block>
+          </regexp-block>
+          <regexp-block regexp="(.)(T*)(.*)">
+            <start-cluster/>
+            <match-block match-index="1">
+              <otf-specification script="arab">
+                <gsub-features>
+                  <positive-list>
+                    <feature>isol</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <end-cluster/>
+            <match-block match-index="3">
+              <funcall fname="disjoin"/>
+            </match-block>
+          </regexp-block>
+        </cond-block>
+      </defmacro>
+    </generator>
+  </stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <otf-specification script="arab">
+          <gsub-features>
+            <positive-list>
+              <feature>rlig</feature>
+              <feature>calt</feature>
+              <feature>liga</feature>
+              <feature>dlig</feature>
+              <feature>cswh</feature>
+              <feature>mset</feature>
+            </positive-list>
+          </gsub-features>
+          <gpos-features>
+            <positive-list>
+              <feature>curs</feature>
+              <feature>kern</feature>
+              <feature>mark</feature>
+              <feature>mkmk</feature>
+            </positive-list>
+          </gpos-features>
+        </otf-specification>
+      </match-block>
+    </generator>
+  </stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/ARAB.fltx b/FLT/ARAB.fltx
new file mode 100644 (file)
index 0000000..bf241fe
--- /dev/null
@@ -0,0 +1,3202 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="arab" key1="nil">
+  <font registry="unicode-bmp" family="bitstream cyberbase" foundry="nil"/>
+  <first-stage>
+    <category-table>
+      <category category-value="x">
+        <from-code>
+          <integer>0x0600</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06FF</integer>
+        </to-code>
+      </category>
+      <category category-value="p">
+        <from-code>
+          <integer>0x0675</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0678</integer>
+        </to-code>
+      </category>
+      <category category-value="n">
+        <glyph-code>
+          <integer>0x0643</integer>
+        </glyph-code>
+      </category>
+      <category category-value="n">
+        <glyph-code>
+          <integer>0x06AF</integer>
+        </glyph-code>
+      </category>
+      <category category-value="n">
+        <glyph-code>
+          <integer>0x06D5</integer>
+        </glyph-code>
+      </category>
+      <category category-value="x">
+        <glyph-code>
+          <integer>0x200C</integer>
+        </glyph-code>
+      </category>
+      <category category-value="x">
+        <glyph-code>
+          <integer>0x200D</integer>
+        </glyph-code>
+      </category>
+      <category category-value="x">
+        <from-code>
+          <integer>0xFB50</integer>
+        </from-code>
+        <to-code>
+          <integer>0xFDFF</integer>
+        </to-code>
+      </category>
+      <category category-value="x">
+        <from-code>
+          <integer>0xFE70</integer>
+        </from-code>
+        <to-code>
+          <integer>0xFEFC</integer>
+        </to-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=".*p.*">
+            <cond-block>
+              <regexp-block regexp=".*n.*">
+                <funcall fname="rmhamza"/>
+                <repeat/>
+              </regexp-block>
+              <regexp-block regexp="(.)(.*)">
+                <match-block match-index="1">
+                  <start-cluster/>
+                  <direct-code>
+                    <integer>0x0674</integer>
+                  </direct-code>
+                  <funcall fname="rmhamza"/>
+                  <end-cluster/>
+                </match-block>
+                <match-block match-index="2">
+                  <funcall fname="rmhamza"/>
+                  <repeat/>
+                </match-block>
+              </regexp-block>
+            </cond-block>
+          </regexp-block>
+          <match-block match-index="0">
+            <copy-glyph/>
+            <repeat/>
+          </match-block>
+        </cond-block>
+      </match-block>
+      <defmacro fname="rmhamza">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0675</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0627</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0676</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0648</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0677</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x06C7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0678</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0649</integer>
+            </direct-code>
+          </subst-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+      </defmacro>
+    </generator>
+  </first-stage>
+  <stage>
+    <category-table>
+      <category category-value="x">
+        <from-code>
+          <integer>0x0600</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06FF</integer>
+        </to-code>
+      </category>
+      <category category-value="a">
+        <glyph-code>
+          <integer>0x0622</integer>
+        </glyph-code>
+      </category>
+      <category category-value="b">
+        <glyph-code>
+          <integer>0x0623</integer>
+        </glyph-code>
+      </category>
+      <category category-value="c">
+        <glyph-code>
+          <integer>0x0625</integer>
+        </glyph-code>
+      </category>
+      <category category-value="d">
+        <glyph-code>
+          <integer>0x0627</integer>
+        </glyph-code>
+      </category>
+      <category category-value="l">
+        <glyph-code>
+          <integer>0x0644</integer>
+        </glyph-code>
+      </category>
+      <category category-value="t">
+        <from-code>
+          <integer>0x064B</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0655</integer>
+        </to-code>
+      </category>
+      <category category-value="t">
+        <glyph-code>
+          <integer>0x0670</integer>
+        </glyph-code>
+      </category>
+      <category category-value="t">
+        <from-code>
+          <integer>0x06D6</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06ED</integer>
+        </to-code>
+      </category>
+      <category category-value="x">
+        <glyph-code>
+          <integer>0x06E5</integer>
+        </glyph-code>
+      </category>
+      <category category-value="x">
+        <glyph-code>
+          <integer>0x06E6</integer>
+        </glyph-code>
+      </category>
+      <category category-value="x">
+        <glyph-code>
+          <integer>0x06E9</integer>
+        </glyph-code>
+      </category>
+      <category category-value="x">
+        <glyph-code>
+          <integer>0x200C</integer>
+        </glyph-code>
+      </category>
+      <category category-value="x">
+        <glyph-code>
+          <integer>0x200D</integer>
+        </glyph-code>
+      </category>
+      <category category-value="x">
+        <from-code>
+          <integer>0xFB50</integer>
+        </from-code>
+        <to-code>
+          <integer>0xFDFF</integer>
+        </to-code>
+      </category>
+      <category category-value="x">
+        <from-code>
+          <integer>0xFE70</integer>
+        </from-code>
+        <to-code>
+          <integer>0xFEFC</integer>
+        </to-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="l(t*)a(t*)">
+            <direct-code>
+              <integer>0xFEF5</integer>
+            </direct-code>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="l(t*)b(t*)">
+            <direct-code>
+              <integer>0xFEF7</integer>
+            </direct-code>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="l(t*)c(t*)">
+            <direct-code>
+              <integer>0xFEF9</integer>
+            </direct-code>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="l(t*)d(t*)">
+            <direct-code>
+              <integer>0xFEFB</integer>
+            </direct-code>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+  <stage>
+    <category-table>
+      <category category-value="U">
+        <from-code>
+          <integer>0x060C</integer>
+        </from-code>
+        <to-code>
+          <integer>0x060F</integer>
+        </to-code>
+      </category>
+      <category category-value="T">
+        <from-code>
+          <integer>0x0610</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0615</integer>
+        </to-code>
+      </category>
+      <category category-value="U">
+        <glyph-code>
+          <integer>0x061B</integer>
+        </glyph-code>
+      </category>
+      <category category-value="U">
+        <glyph-code>
+          <integer>0x061F</integer>
+        </glyph-code>
+      </category>
+      <category category-value="U">
+        <glyph-code>
+          <integer>0x0621</integer>
+        </glyph-code>
+      </category>
+      <category category-value="R">
+        <from-code>
+          <integer>0x0622</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0623</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x0624</integer>
+        </glyph-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x0625</integer>
+        </glyph-code>
+      </category>
+      <category category-value="D">
+        <glyph-code>
+          <integer>0x0626</integer>
+        </glyph-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x0627</integer>
+        </glyph-code>
+      </category>
+      <category category-value="D">
+        <glyph-code>
+          <integer>0x0628</integer>
+        </glyph-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x0629</integer>
+        </glyph-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x062A</integer>
+        </from-code>
+        <to-code>
+          <integer>0x062E</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <from-code>
+          <integer>0x062F</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0632</integer>
+        </to-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x0633</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0647</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x0648</integer>
+        </glyph-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x0649</integer>
+        </from-code>
+        <to-code>
+          <integer>0x064A</integer>
+        </to-code>
+      </category>
+      <category category-value="T">
+        <from-code>
+          <integer>0x064B</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0658</integer>
+        </to-code>
+      </category>
+      <category category-value="U">
+        <from-code>
+          <integer>0x0660</integer>
+        </from-code>
+        <to-code>
+          <integer>0x066D</integer>
+        </to-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x066E</integer>
+        </from-code>
+        <to-code>
+          <integer>0x066F</integer>
+        </to-code>
+      </category>
+      <category category-value="T">
+        <glyph-code>
+          <integer>0x0670</integer>
+        </glyph-code>
+      </category>
+      <category category-value="R">
+        <from-code>
+          <integer>0x0671</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0673</integer>
+        </to-code>
+      </category>
+      <category category-value="U">
+        <from-code>
+          <integer>0x0674</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0678</integer>
+        </to-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x0679</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0687</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <from-code>
+          <integer>0x0688</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0699</integer>
+        </to-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x069A</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06C3</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <from-code>
+          <integer>0x06C4</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06CB</integer>
+        </to-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x06CC</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06CE</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x06CF</integer>
+        </glyph-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x06D0</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06D3</integer>
+        </to-code>
+      </category>
+      <category category-value="U">
+        <glyph-code>
+          <integer>0x06D4</integer>
+        </glyph-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x06D5</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <from-code>
+          <integer>0x06D6</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06E4</integer>
+        </to-code>
+      </category>
+      <category category-value="U">
+        <from-code>
+          <integer>0x06E5</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06E6</integer>
+        </to-code>
+      </category>
+      <category category-value="T">
+        <from-code>
+          <integer>0x06E7</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06E8</integer>
+        </to-code>
+      </category>
+      <category category-value="U">
+        <glyph-code>
+          <integer>0x06E9</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <from-code>
+          <integer>0x06EA</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06ED</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <from-code>
+          <integer>0x06EE</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06EF</integer>
+        </to-code>
+      </category>
+      <category category-value="U">
+        <from-code>
+          <integer>0x06F0</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06F9</integer>
+        </to-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x06FA</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06FC</integer>
+        </to-code>
+      </category>
+      <category category-value="U">
+        <from-code>
+          <integer>0x06FD</integer>
+        </from-code>
+        <to-code>
+          <integer>0x06FE</integer>
+        </to-code>
+      </category>
+      <category category-value="D">
+        <glyph-code>
+          <integer>0x06FF</integer>
+        </glyph-code>
+      </category>
+      <category category-value="P">
+        <from-code>
+          <integer>0xFB50</integer>
+        </from-code>
+        <to-code>
+          <integer>0xFDFF</integer>
+        </to-code>
+      </category>
+      <category category-value="P">
+        <from-code>
+          <integer>0xFE70</integer>
+        </from-code>
+        <to-code>
+          <integer>0xFEFC</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0xFEF5</integer>
+        </glyph-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0xFEF7</integer>
+        </glyph-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0xFEF9</integer>
+        </glyph-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0xFEFB</integer>
+        </glyph-code>
+      </category>
+      <category category-value="U">
+        <glyph-code>
+          <integer>0x200C</integer>
+        </glyph-code>
+      </category>
+      <category category-value="D">
+        <glyph-code>
+          <integer>0x200D</integer>
+        </glyph-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="PT*">
+            <copy-glyph/>
+            <funcall fname="combining"/>
+            <repeat/>
+          </regexp-block>
+          <regexp-block regexp="D[^P]*">
+            <cond-block>
+              <regexp-block regexp="(.)(T*)([DR].*)">
+                <match-block match-index="1">
+                  <funcall fname="initial"/>
+                </match-block>
+                <match-block match-index="2">
+                  <funcall fname="combining"/>
+                  <repeat/>
+                </match-block>
+                <match-block match-index="3">
+                  <funcall fname="join"/>
+                </match-block>
+              </regexp-block>
+              <regexp-block regexp="(.)(T*)(.*)">
+                <match-block match-index="1">
+                  <funcall fname="isolated"/>
+                </match-block>
+                <match-block match-index="2">
+                  <funcall fname="combining"/>
+                  <repeat/>
+                </match-block>
+                <match-block match-index="3">
+                  <funcall fname="disjoin"/>
+                </match-block>
+              </regexp-block>
+            </cond-block>
+          </regexp-block>
+          <regexp-block regexp="([RU])(T*)([^P]*)">
+            <match-block match-index="1">
+              <funcall fname="isolated"/>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="combining"/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="3">
+              <funcall fname="disjoin"/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="(T+)([^P]*)">
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="disjoin"/>
+            </match-block>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+      <defmacro fname="join">
+        <cond-block>
+          <regexp-block regexp="D.*">
+            <cond-block>
+              <regexp-block regexp="(.)(T*)([DR].*)">
+                <match-block match-index="1">
+                  <funcall fname="medial"/>
+                </match-block>
+                <match-block match-index="2">
+                  <funcall fname="combining"/>
+                  <repeat/>
+                </match-block>
+                <match-block match-index="3">
+                  <funcall fname="join"/>
+                </match-block>
+              </regexp-block>
+              <regexp-block regexp="(.)(T*)(.*)">
+                <match-block match-index="1">
+                  <funcall fname="final"/>
+                </match-block>
+                <match-block match-index="2">
+                  <funcall fname="combining"/>
+                  <repeat/>
+                </match-block>
+                <match-block match-index="3">
+                  <funcall fname="disjoin"/>
+                </match-block>
+              </regexp-block>
+            </cond-block>
+          </regexp-block>
+          <regexp-block regexp="(.)(T*)(.*)">
+            <match-block match-index="1">
+              <funcall fname="final"/>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="combining"/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="3">
+              <funcall fname="disjoin"/>
+            </match-block>
+          </regexp-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="disjoin">
+        <cond-block>
+          <regexp-block regexp="D.*">
+            <cond-block>
+              <regexp-block regexp="(.)(T*)([DR].*)">
+                <match-block match-index="1">
+                  <funcall fname="initial"/>
+                </match-block>
+                <match-block match-index="2">
+                  <funcall fname="combining"/>
+                  <repeat/>
+                </match-block>
+                <match-block match-index="3">
+                  <funcall fname="join"/>
+                </match-block>
+              </regexp-block>
+              <regexp-block regexp="(.)(T*)(.*)">
+                <match-block match-index="1">
+                  <funcall fname="isolated"/>
+                </match-block>
+                <match-block match-index="2">
+                  <funcall fname="combining"/>
+                  <repeat/>
+                </match-block>
+                <match-block match-index="3">
+                  <funcall fname="disjoin"/>
+                </match-block>
+              </regexp-block>
+            </cond-block>
+          </regexp-block>
+          <regexp-block regexp="(.)(T*)(.*)">
+            <match-block match-index="1">
+              <funcall fname="isolated"/>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="combining"/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="3">
+              <funcall fname="disjoin"/>
+            </match-block>
+          </regexp-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="isolated">
+        <cond-block>
+          <subst-block>
+            <from-code>
+              <integer>0x060C</integer>
+            </from-code>
+            <to-code>
+              <integer>0x060F</integer>
+            </to-code>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x061B</integer>
+            </source-pattern>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x061F</integer>
+            </source-pattern>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0621</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFE80</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0622</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFE81</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0623</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFE83</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0624</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFE85</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0625</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFE87</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0626</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFE89</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0627</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFE8D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0628</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFE8F</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0629</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFE93</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x062A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFE95</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x062B</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFE99</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x062C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFE9D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x062D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEA1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x062E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEA5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x062F</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEA9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0630</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEAB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0631</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEAD</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0632</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEAF</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0633</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEB1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0634</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEB5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0635</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEB9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0636</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEBD</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0637</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEC1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0638</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEC5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0639</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0640</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0640</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x063A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFECD</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0641</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFED1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0642</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFED5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0643</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFED9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0644</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEDD</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0645</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEE1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0646</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEE5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0647</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEE9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0648</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEED</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0649</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEEF</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x064A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEF1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <from-code>
+              <integer>0x0660</integer>
+            </from-code>
+            <to-code>
+              <integer>0x066D</integer>
+            </to-code>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0671</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB50</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0674</integer>
+            </source-pattern>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0677</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBDD</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0679</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB66</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x067A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB5E</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x067B</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB52</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x067E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB56</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x067F</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB62</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0680</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB5A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0683</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB76</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0684</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB72</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0686</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB7A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0687</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB7E</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0688</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB88</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x068C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB84</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x068D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB82</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x068E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB86</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0691</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB8C</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0698</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB8A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06A4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB6A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06A6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB6E</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06A9</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB8E</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06AD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBD3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06AF</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB92</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06B1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB9A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06B3</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB96</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06BA</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB9E</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06BB</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBA0</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06BE</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBAA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06C0</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBA4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06C1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBA6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06C5</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBE0</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06C6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBD9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06C7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBD7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06C8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBDB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06C9</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBE2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06CB</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBDE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06CC</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBFC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06D0</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBE4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06D2</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBAE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06D3</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBB0</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06D4</integer>
+            </source-pattern>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06D5</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEE9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06E5</integer>
+            </source-pattern>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06E6</integer>
+            </source-pattern>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06E9</integer>
+            </source-pattern>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <from-code>
+              <integer>0x06F0</integer>
+            </from-code>
+            <to-code>
+              <integer>0x06F9</integer>
+            </to-code>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06FD</integer>
+            </source-pattern>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06FE</integer>
+            </source-pattern>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xFEF5</integer>
+            </source-pattern>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xFEF7</integer>
+            </source-pattern>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xFEF9</integer>
+            </source-pattern>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xFEFB</integer>
+            </source-pattern>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x200C</integer>
+            </source-pattern>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x200D</integer>
+            </source-pattern>
+            <copy-glyph/>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="final">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0622</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFE82</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0623</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFE84</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0624</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFE86</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0625</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFE88</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0626</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFE8A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0627</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFE8E</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0628</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFE90</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0629</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFE94</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x062A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFE96</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x062B</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFE9A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x062C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFE9E</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x062D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEA2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x062E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEA6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x062F</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEAA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0630</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEAC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0631</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEAE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0632</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEB0</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0633</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEB2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0634</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEB6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0635</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEBA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0636</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEBE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0637</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEC2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0638</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEC6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0639</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFECA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0640</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0640</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x063A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFECE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0641</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFED2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0642</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFED6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0643</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEDA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0644</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEDE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0645</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEE2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0646</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEE6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0647</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEEA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0648</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEEE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0649</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEF0</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x064A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEF2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0671</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB51</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0679</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB67</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x067A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB5F</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x067B</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB52</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x067E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB57</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x067F</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB63</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0680</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB5B</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0683</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB77</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0684</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB73</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0686</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB7B</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0687</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB7F</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0688</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB89</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x068C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB85</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x068D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB83</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x068E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB87</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0691</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB8D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0698</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB8B</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06A4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB6B</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06A6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB6F</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06A9</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB8F</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06AD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBD4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06AF</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB93</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06B1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB9B</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06B3</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB97</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06BA</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB9F</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06BB</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBA1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06BE</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBAB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06C0</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBA5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06C1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBA7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06C5</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBE1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06C6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBDA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06C7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBD8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06C8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBDC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06C9</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBE3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06CB</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBDF</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06CC</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBFD</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06D0</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBE5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06D2</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBAF</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06D3</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBB1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06D5</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEEA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xFEF5</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEF6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xFEF7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEF8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xFEF9</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEFA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xFEFB</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEFC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x200C</integer>
+            </source-pattern>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x200D</integer>
+            </source-pattern>
+            <copy-glyph/>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="initial">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0626</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFE8B</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0628</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFE91</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x062A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFE97</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x062B</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFE9B</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x062C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFE9F</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x062D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEA3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x062E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEA7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0633</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEB3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0634</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEB7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0635</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEBB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0636</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEBF</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0637</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEC3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0638</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEC7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0639</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFECB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0640</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0640</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x063A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFECF</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0641</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFED3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0642</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFED7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0643</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEDB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0644</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEDF</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0645</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEE3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0646</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEE7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0647</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEEB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0649</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBE8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x064A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEF3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0679</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB68</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x067A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB60</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x067B</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB54</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x067E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB58</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x067F</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB64</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0680</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB5C</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0683</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB78</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0684</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB74</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0686</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB7C</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0687</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB80</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06A4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB6C</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06A6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB70</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06A9</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB90</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06AD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBD5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06AF</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB94</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06B1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB9C</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06B3</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB98</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06BA</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEE7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06BB</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBA2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06BE</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBAC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06C1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBA8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06CC</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBFE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06D0</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBE6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x200C</integer>
+            </source-pattern>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x200D</integer>
+            </source-pattern>
+            <copy-glyph/>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="medial">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0626</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFE8C</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0628</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFE92</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x062A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFE98</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x062B</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFE9C</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x062C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEA0</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x062D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEA4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x062E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEA8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0633</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEB4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0634</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEB8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0635</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEBC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0636</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEC0</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0637</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEC4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0638</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEC8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0639</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFECC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0640</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0640</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x063A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFED0</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0641</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFED4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0642</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFED8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0643</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEDC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0644</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEE0</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0645</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEE4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0646</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEE8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0647</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEEC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0649</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBE9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x064A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEF4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0679</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB69</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x067A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB61</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x067B</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB55</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x067E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB59</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x067F</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB65</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0680</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB5D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0683</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB79</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0684</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB75</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0686</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB7D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0687</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB81</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06A4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB6D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06A6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB71</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06A9</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB91</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06AD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBD6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06AF</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB95</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06B1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB9D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06B3</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB99</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06BA</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFEE8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06BB</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBA3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06BE</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBAD</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06C1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBA9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06CC</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBFF</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06D0</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFBE7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x200C</integer>
+            </source-pattern>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x200D</integer>
+            </source-pattern>
+            <copy-glyph/>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="combining">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0651</integer>
+              <integer>0x0650</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0x064E</integer>
+            </direct-code>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0x0651</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0651</integer>
+              <integer>0x064D</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0x064B</integer>
+            </direct-code>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0x0651</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <from-code>
+              <integer>0x0610</integer>
+            </from-code>
+            <to-code>
+              <integer>0x0615</integer>
+            </to-code>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x064B</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x064C</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x064D</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x064E</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x064F</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0650</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <from-code>
+              <integer>0x0651</integer>
+            </from-code>
+            <to-code>
+              <integer>0x0654</integer>
+            </to-code>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0655</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0656</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0657</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0658</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0670</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <from-code>
+              <integer>0x06D6</integer>
+            </from-code>
+            <to-code>
+              <integer>0x06DC</integer>
+            </to-code>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <from-code>
+              <integer>0x06DF</integer>
+            </from-code>
+            <to-code>
+              <integer>0x06E2</integer>
+            </to-code>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06E3</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06E4</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06E7</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06E8</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06EA</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06EB</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06EC</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x06ED</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x200C</integer>
+            </source-pattern>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x200D</integer>
+            </source-pattern>
+            <copy-glyph/>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+    </generator>
+  </stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/BENG-OTF.fltx b/FLT/BENG-OTF.fltx
new file mode 100644 (file)
index 0000000..c4fcbe9
--- /dev/null
@@ -0,0 +1,709 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="beng-otf" key1="nil">
+  <font registry="unicode-bmp" family="nil" foundry="nil">
+    <otf-specification script="beng">
+      <gsub-features>
+        <positive-list>
+          <feature>rphf</feature>
+        </positive-list>
+      </gsub-features>
+      <gpos-features>
+        <negative-list/>
+      </gpos-features>
+    </otf-specification>
+  </font>
+  <first-stage>
+    <category-table>
+      <category category-value="X">
+        <from-code>
+          <integer>0x0980</integer>
+        </from-code>
+        <to-code>
+          <integer>0x09FF</integer>
+        </to-code>
+      </category>
+      <category category-value="Z">
+        <glyph-code>
+          <integer>0x0980</integer>
+        </glyph-code>
+      </category>
+      <category category-value="A">
+        <glyph-code>
+          <integer>0x0981</integer>
+        </glyph-code>
+      </category>
+      <category category-value="a">
+        <from-code>
+          <integer>0x0982</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0983</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x0985</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0994</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0995</integer>
+        </from-code>
+        <to-code>
+          <integer>0x09B9</integer>
+        </to-code>
+      </category>
+      <category category-value="B">
+        <glyph-code>
+          <integer>0x09AC</integer>
+        </glyph-code>
+      </category>
+      <category category-value="Y">
+        <glyph-code>
+          <integer>0x09AF</integer>
+        </glyph-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x09B0</integer>
+        </glyph-code>
+      </category>
+      <category category-value="n">
+        <glyph-code>
+          <integer>0x09BC</integer>
+        </glyph-code>
+      </category>
+      <category category-value="p">
+        <glyph-code>
+          <integer>0x09BE</integer>
+        </glyph-code>
+      </category>
+      <category category-value="m">
+        <glyph-code>
+          <integer>0x09BF</integer>
+        </glyph-code>
+      </category>
+      <category category-value="p">
+        <glyph-code>
+          <integer>0x09C0</integer>
+        </glyph-code>
+      </category>
+      <category category-value="b">
+        <from-code>
+          <integer>0x09C1</integer>
+        </from-code>
+        <to-code>
+          <integer>0x09C4</integer>
+        </to-code>
+      </category>
+      <category category-value="m">
+        <from-code>
+          <integer>0x09C7</integer>
+        </from-code>
+        <to-code>
+          <integer>0x09C8</integer>
+        </to-code>
+      </category>
+      <category category-value="H">
+        <glyph-code>
+          <integer>0x09CD</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <glyph-code>
+          <integer>0x09CE</integer>
+        </glyph-code>
+      </category>
+      <category category-value="p">
+        <glyph-code>
+          <integer>0x09D7</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x09DC</integer>
+        </from-code>
+        <to-code>
+          <integer>0x09DF</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x09E0</integer>
+        </from-code>
+        <to-code>
+          <integer>0x09E1</integer>
+        </to-code>
+      </category>
+      <category category-value="b">
+        <from-code>
+          <integer>0x09E2</integer>
+        </from-code>
+        <to-code>
+          <integer>0x09E3</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x09F0</integer>
+        </from-code>
+        <to-code>
+          <integer>0x09F1</integer>
+        </to-code>
+      </category>
+      <category category-value="X">
+        <from-code>
+          <integer>0x0964</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0965</integer>
+        </to-code>
+      </category>
+      <category category-value="N">
+        <glyph-code>
+          <integer>0x200C</integer>
+        </glyph-code>
+      </category>
+      <category category-value="J">
+        <glyph-code>
+          <integer>0x200D</integer>
+        </glyph-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x09CB</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x09C7</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x09BE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x09CC</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x09C7</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x09D7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x09A4</integer>
+              <integer>0x09CD</integer>
+              <integer>0x200D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x09CE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x09A1</integer>
+              <integer>0x09BC</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x09DC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x09A2</integer>
+              <integer>0x09BC</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x09DD</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x09AF</integer>
+              <integer>0x09BC</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x09DF</integer>
+            </direct-code>
+          </subst-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </first-stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="(RH)?(T)">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="1">
+              <otf-specification script="beng">
+                <gsub-features>
+                  <positive-list>
+                    <feature>rphf</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="(RH)?([CRBY]n?(HCn?)*(H[RB])?(J?HY)?)(m)(p)?(A)?(a)?">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="6">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="pre-below"/>
+            </match-block>
+            <match-block match-index="1">
+              <otf-specification script="beng">
+                <gsub-features>
+                  <positive-list>
+                    <feature>rphf</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="8">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="post"/>
+            </match-block>
+            <match-block match-index="7">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="9">
+              <copy-glyph/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="(RH)?([CRBY]n?(HCn?)*(H[RB])?(J?HY)?)(N)?J?((b)|(p))(A)?(a)?">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="6">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="pre-below"/>
+            </match-block>
+            <match-block match-index="8">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="1">
+              <otf-specification script="beng">
+                <gsub-features>
+                  <positive-list>
+                    <feature>rphf</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="10">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="post"/>
+            </match-block>
+            <match-block match-index="9">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="11">
+              <copy-glyph/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="(RH)?([CRBY]n?(HCn?)*(H[RB])?(J?HY)?)((A)|(a))">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="2">
+              <funcall fname="pre-below"/>
+            </match-block>
+            <match-block match-index="1">
+              <otf-specification script="beng">
+                <gsub-features>
+                  <positive-list>
+                    <feature>rphf</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="7">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="post"/>
+            </match-block>
+            <match-block match-index="8">
+              <copy-glyph/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="(RH)?([CRBY]n?(HCn?)*(H[RB])?(J?HY)?)(HN?)?">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="2">
+              <funcall fname="pre-below"/>
+            </match-block>
+            <match-block match-index="6">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="1">
+              <otf-specification script="beng">
+                <gsub-features>
+                  <positive-list>
+                    <feature>rphf</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="post"/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="(V)(J?(H)(Y)(p))?(A?a?)">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <direct-code>
+              <integer>0x0980</integer>
+            </direct-code>
+            <match-block match-index="4">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="5">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="6">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+      <defmacro fname="pre-below">
+        <cond-block>
+          <regexp-block regexp="(.+)(H)([RB])(J?HY)?$">
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+            <direct-code>
+              <integer>0x0980</integer>
+            </direct-code>
+          </regexp-block>
+          <regexp-block regexp="([^J]+)J?HY$">
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <direct-code>
+              <integer>0x0980</integer>
+            </direct-code>
+          </regexp-block>
+          <regexp-block regexp=".+">
+            <copy-glyph/>
+            <repeat/>
+            <direct-code>
+              <integer>0x0980</integer>
+            </direct-code>
+          </regexp-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="post">
+        <cond-block>
+          <regexp-block regexp=".*(H)(Y)$">
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+          </regexp-block>
+        </cond-block>
+      </defmacro>
+    </generator>
+  </stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" ([^Z]+)(Z[^ ]*) ">
+            <separator/>
+            <match-block match-index="1">
+              <otf-specification script="beng">
+                <gsub-features>
+                  <positive-list>
+                    <feature>nukt</feature>
+                    <feature>akhn</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" (N?m?.)([^Z]*)(Z)([^ ]*) ">
+            <separator/>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="2">
+              <otf-specification script="beng">
+                <gsub-features>
+                  <positive-list>
+                    <feature>blwf</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="4">
+              <otf-specification script="beng">
+                <gsub-features>
+                  <positive-list>
+                    <feature>pstf</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" (N?m?)([^Z]+)(Z)([^ ]*) ">
+            <separator/>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="2">
+              <otf-specification script="beng">
+                <gsub-features>
+                  <positive-list>
+                    <feature>half</feature>
+                    <feature>vatu</feature>
+                    <feature>pres</feature>
+                    <feature>blws</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="4">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" (N)?(m)([^Z]+)([^Z])Z([^ ]*) ">
+            <separator/>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="4">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="5">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=" ([^Z]+)Z([^ ]*) ">
+            <separator/>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" N([^ ]+) ">
+            <match-block match-index="1">
+              <otf-specification script="beng">
+                <gsub-features>
+                  <positive-list>
+                    <feature>init</feature>
+                    <feature>pres</feature>
+                    <feature>abvs</feature>
+                    <feature>psts</feature>
+                    <feature>haln</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list>
+                    <feature>abvm</feature>
+                    <feature>blwm</feature>
+                    <feature>dist</feature>
+                  </positive-list>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp=" ([^ ]+) ">
+            <match-block match-index="1">
+              <otf-specification script="beng">
+                <gsub-features>
+                  <positive-list>
+                    <feature>init</feature>
+                    <feature>pres</feature>
+                    <feature>abvs</feature>
+                    <feature>blws</feature>
+                    <feature>psts</feature>
+                    <feature>haln</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list>
+                    <feature>abvm</feature>
+                    <feature>blwm</feature>
+                    <feature>dist</feature>
+                  </positive-list>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <left-padding-flag/>
+            <copy-glyph/>
+            <right-padding-flag/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/CHAM-GENERIC.fltx b/FLT/CHAM-GENERIC.fltx
new file mode 100644 (file)
index 0000000..abc0b98
--- /dev/null
@@ -0,0 +1,172 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="cham-generic" key1="nil">
+  <font registry=":script=cham" weight="unicode-bmp" family="nil" foundry="nil"/>
+  <first-stage>
+    <category-table>
+      <category category-value="E">
+        <from-code>
+          <integer>0xAA00</integer>
+        </from-code>
+        <to-code>
+          <integer>0xAA5F</integer>
+        </to-code>
+      </category>
+      <category category-value="A">
+        <glyph-code>
+          <integer>0xAA00</integer>
+        </glyph-code>
+      </category>
+      <category category-value="I">
+        <from-code>
+          <integer>0xAA01</integer>
+        </from-code>
+        <to-code>
+          <integer>0xAA05</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0xAA06</integer>
+        </from-code>
+        <to-code>
+          <integer>0xAA28</integer>
+        </to-code>
+      </category>
+      <category category-value="L">
+        <glyph-code>
+          <integer>0xAA29</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0xAA2A</integer>
+        </from-code>
+        <to-code>
+          <integer>0xAA32</integer>
+        </to-code>
+      </category>
+      <category category-value="v">
+        <from-code>
+          <integer>0xAA2F</integer>
+        </from-code>
+        <to-code>
+          <integer>0xAA30</integer>
+        </to-code>
+      </category>
+      <category category-value="M">
+        <from-code>
+          <integer>0xAA33</integer>
+        </from-code>
+        <to-code>
+          <integer>0xAA36</integer>
+        </to-code>
+      </category>
+      <category category-value="m">
+        <glyph-code>
+          <integer>0xAA34</integer>
+        </glyph-code>
+      </category>
+      <category category-value="F">
+        <from-code>
+          <integer>0xAA40</integer>
+        </from-code>
+        <to-code>
+          <integer>0xAA4D</integer>
+        </to-code>
+      </category>
+      <category category-value="f">
+        <glyph-code>
+          <integer>0xAA43</integer>
+        </glyph-code>
+      </category>
+      <category category-value="f">
+        <glyph-code>
+          <integer>0xAA4C</integer>
+        </glyph-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="([IA])(v?)(V?L?)([fF]?)">
+            <separator/>
+            <start-cluster/>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <end-cluster/>
+            <match-block match-index="4">
+              <copy-glyph/>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp="([CA])(m?)(M?M?)(v?)(V?L?)([fF]?)">
+            <separator/>
+            <start-cluster/>
+            <match-block match-index="4">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="5">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <end-cluster/>
+            <match-block match-index="6">
+              <copy-glyph/>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <left-padding-flag/>
+            <copy-glyph/>
+            <right-padding-flag/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </first-stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" (.*f) ">
+            <start-cluster/>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp=" (.*) ">
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/COMBINING.fltx b/FLT/COMBINING.fltx
new file mode 100644 (file)
index 0000000..30d4285
--- /dev/null
@@ -0,0 +1,140 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="combining" key1="nil">
+  <first-stage>
+    <category-table/>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="(u)([a-t]+)">
+            <cond-block>
+              <font-facility-block>
+                <font>
+                  <otf-specification script="DFLT">
+                    <gsub-features>
+                      <negative-list/>
+                    </gsub-features>
+                    <gpos-features>
+                      <positive-list>
+                        <feature>mark</feature>
+                      </positive-list>
+                    </gpos-features>
+                  </otf-specification>
+                </font>
+                <start-cluster/>
+                <otf-specification script="DFLT">
+                  <gsub-features>
+                    <negative-list/>
+                  </gsub-features>
+                  <gpos-features>
+                    <positive-list>
+                      <feature>mark</feature>
+                      <feature>mkmk</feature>
+                    </positive-list>
+                  </gpos-features>
+                </otf-specification>
+                <end-cluster/>
+              </font-facility-block>
+              <regexp-block regexp=".*">
+                <start-cluster/>
+                <copy-glyph/>
+                <cond-block>
+                  <regexp-block regexp="a">
+                    <combining-specification v-pos1="B" h-pos1="c" v-pos2="B" h-pos2="c"/>
+                    <copy-glyph/>
+                  </regexp-block>
+                  <regexp-block regexp="b">
+                    <combining-specification v-pos1="b" h-pos1="l" v-pos2="t" h-pos2="c"/>
+                    <copy-glyph/>
+                  </regexp-block>
+                  <regexp-block regexp="c">
+                    <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c"/>
+                    <copy-glyph/>
+                  </regexp-block>
+                  <regexp-block regexp="d">
+                    <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="c"/>
+                    <copy-glyph/>
+                  </regexp-block>
+                  <regexp-block regexp="e">
+                    <combining-specification v-pos1="B" h-pos1="l" v-pos2="B" h-pos2="r"/>
+                    <copy-glyph/>
+                  </regexp-block>
+                  <regexp-block regexp="f">
+                    <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l"/>
+                    <copy-glyph/>
+                  </regexp-block>
+                  <regexp-block regexp="g">
+                    <combining-specification v-pos1="t" h-pos1="l" v-pos2="b" h-pos2="c"/>
+                    <copy-glyph/>
+                  </regexp-block>
+                  <regexp-block regexp="h">
+                    <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c"/>
+                    <copy-glyph/>
+                  </regexp-block>
+                  <regexp-block regexp="i">
+                    <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="c"/>
+                    <copy-glyph/>
+                  </regexp-block>
+                  <regexp-block regexp="j">
+                    <combining-specification v-pos1="b" h-pos1="l" v-pos2="t" h-pos2="c"/>
+                    <copy-glyph/>
+                  </regexp-block>
+                  <regexp-block regexp="k">
+                    <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+                    <copy-glyph/>
+                  </regexp-block>
+                  <regexp-block regexp="l">
+                    <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+                    <copy-glyph/>
+                  </regexp-block>
+                  <regexp-block regexp="m">
+                    <combining-specification v-pos1="B" h-pos1="l" v-pos2="B" h-pos2="r"/>
+                    <copy-glyph/>
+                  </regexp-block>
+                  <regexp-block regexp="n">
+                    <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l"/>
+                    <copy-glyph/>
+                  </regexp-block>
+                  <regexp-block regexp="o">
+                    <combining-specification v-pos1="t" h-pos1="l" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+                    <copy-glyph/>
+                  </regexp-block>
+                  <regexp-block regexp="p">
+                    <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+                    <copy-glyph/>
+                  </regexp-block>
+                  <regexp-block regexp="q">
+                    <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+                    <copy-glyph/>
+                  </regexp-block>
+                  <regexp-block regexp="r">
+                    <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="r" y-direction="down" y-amount="5"/>
+                    <copy-glyph/>
+                  </regexp-block>
+                  <regexp-block regexp="s">
+                    <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="r" y-direction="up" y-amount="5"/>
+                    <copy-glyph/>
+                  </regexp-block>
+                  <regexp-block regexp="t">
+                    <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+                    <copy-glyph/>
+                  </regexp-block>
+                </cond-block>
+                <repeat/>
+                <end-cluster/>
+              </regexp-block>
+            </cond-block>
+          </regexp-block>
+          <regexp-block regexp="[a-t]">
+            <left-padding-flag/>
+            <copy-glyph/>
+            <right-padding-flag/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </first-stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/DEVA-CDAC.fltx b/FLT/DEVA-CDAC.fltx
new file mode 100644 (file)
index 0000000..35a9d06
--- /dev/null
@@ -0,0 +1,3133 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="deve-cdac" key1="nil">
+  <font registry="apple-roman" family="dv-ttyogesh" foundry="nil"/>
+  <first-stage>
+    <category-table>
+      <category category-value="E">
+        <glyph-code>
+          <integer>0x0900</integer>
+        </glyph-code>
+      </category>
+      <category category-value="A">
+        <from-code>
+          <integer>0x0901</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0902</integer>
+        </to-code>
+      </category>
+      <category category-value="E">
+        <glyph-code>
+          <integer>0x0903</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x0905</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0914</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0915</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0939</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x0930</integer>
+        </glyph-code>
+      </category>
+      <category category-value="N">
+        <glyph-code>
+          <integer>0x093C</integer>
+        </glyph-code>
+      </category>
+      <category category-value="E">
+        <glyph-code>
+          <integer>0x093D</integer>
+        </glyph-code>
+      </category>
+      <category category-value="M">
+        <from-code>
+          <integer>0x093E</integer>
+        </from-code>
+        <to-code>
+          <integer>0x094C</integer>
+        </to-code>
+      </category>
+      <category category-value="I">
+        <glyph-code>
+          <integer>0x093F</integer>
+        </glyph-code>
+      </category>
+      <category category-value="H">
+        <glyph-code>
+          <integer>0x094D</integer>
+        </glyph-code>
+      </category>
+      <category category-value="E">
+        <glyph-code>
+          <integer>0x0950</integer>
+        </glyph-code>
+      </category>
+      <category category-value="S">
+        <from-code>
+          <integer>0x0951</integer>
+        </from-code>
+        <to-code>
+          <integer>0x954</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0958</integer>
+        </from-code>
+        <to-code>
+          <integer>0x095E</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x0960</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0961</integer>
+        </to-code>
+      </category>
+      <category category-value="M">
+        <from-code>
+          <integer>0x0962</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0963</integer>
+        </to-code>
+      </category>
+      <category category-value="E">
+        <from-code>
+          <integer>0x0964</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0970</integer>
+        </to-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="VA?S?">
+            <start-cluster/>
+            <separator/>
+            <funcall fname="vowel"/>
+            <repeat/>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="([RC]H)*[RC](H|[IM]?A?S?)?">
+            <start-cluster/>
+            <separator/>
+            <cond-block>
+              <regexp-block regexp="RH.*">
+                <cond-block>
+                  <regexp-block regexp="(RH)([^I]*)(I)(A?S?)">
+                    <match-block match-index="3">
+                      <funcall fname="vowel-sign-I"/>
+                    </match-block>
+                    <match-block match-index="2">
+                      <funcall fname="consonant"/>
+                      <repeat/>
+                    </match-block>
+                    <match-block match-index="1">
+                      <funcall fname="preceding-r"/>
+                    </match-block>
+                    <match-block match-index="4">
+                      <funcall fname="post-modifier"/>
+                    </match-block>
+                  </regexp-block>
+                  <regexp-block regexp="(RH)([^M]*)(M)(A?S?)">
+                    <match-block match-index="2">
+                      <funcall fname="consonant"/>
+                      <repeat/>
+                    </match-block>
+                    <match-block match-index="3">
+                      <funcall fname="matra"/>
+                    </match-block>
+                    <match-block match-index="1">
+                      <funcall fname="preceding-r"/>
+                    </match-block>
+                    <match-block match-index="4">
+                      <funcall fname="post-modifier"/>
+                    </match-block>
+                  </regexp-block>
+                  <regexp-block regexp="(RH)(.*)(H)$">
+                    <match-block match-index="2">
+                      <funcall fname="consonant"/>
+                      <repeat/>
+                    </match-block>
+                    <match-block match-index="1">
+                      <funcall fname="preceding-r"/>
+                    </match-block>
+                    <match-block match-index="3">
+                      <funcall fname="harant"/>
+                    </match-block>
+                  </regexp-block>
+                  <regexp-block regexp="(RH)([^AS]*)(.*)">
+                    <match-block match-index="2">
+                      <funcall fname="consonant"/>
+                      <repeat/>
+                    </match-block>
+                    <match-block match-index="1">
+                      <funcall fname="preceding-r"/>
+                    </match-block>
+                    <match-block match-index="3">
+                      <funcall fname="post-modifier"/>
+                    </match-block>
+                  </regexp-block>
+                </cond-block>
+              </regexp-block>
+              <regexp-block regexp="([^I]*)(I)(A?S?)">
+                <match-block match-index="2">
+                  <funcall fname="vowel-sign-I"/>
+                </match-block>
+                <match-block match-index="1">
+                  <funcall fname="consonant"/>
+                  <repeat/>
+                </match-block>
+                <match-block match-index="3">
+                  <funcall fname="post-modifier"/>
+                </match-block>
+              </regexp-block>
+              <regexp-block regexp="([^M]*)(M)(A?S?)">
+                <match-block match-index="1">
+                  <funcall fname="consonant"/>
+                  <repeat/>
+                </match-block>
+                <match-block match-index="2">
+                  <funcall fname="matra"/>
+                </match-block>
+                <match-block match-index="3">
+                  <funcall fname="post-modifier"/>
+                </match-block>
+              </regexp-block>
+              <regexp-block regexp="(.*)(H)$">
+                <match-block match-index="1">
+                  <funcall fname="consonant"/>
+                  <repeat/>
+                </match-block>
+                <match-block match-index="2">
+                  <funcall fname="harant"/>
+                </match-block>
+              </regexp-block>
+              <regexp-block regexp="([^AS]*)(.*)">
+                <match-block match-index="1">
+                  <funcall fname="consonant"/>
+                  <repeat/>
+                </match-block>
+                <match-block match-index="3">
+                  <funcall fname="post-modifier"/>
+                </match-block>
+              </regexp-block>
+              <regexp-block regexp=".*">
+                <funcall fname="consonant"/>
+                <repeat/>
+              </regexp-block>
+            </cond-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <funcall fname="independent"/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+      <defmacro fname="vowel">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0905</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2B</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0906</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2B</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0907</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x3C</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0908</integer>
+              <integer>0x0901</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x3C</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC7</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0908</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x3C</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0909</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x3D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x090A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x3E</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xF0</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x090B</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x40</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xF1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x090D</integer>
+              <integer>0x0901</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x42</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x090D</integer>
+              <integer>0x0902</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x42</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x090D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x42</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xEC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x090E</integer>
+              <integer>0x0901</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x42</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xE0</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x090E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x42</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xE0</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x090F</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x42</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0910</integer>
+              <integer>0x0901</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x42</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xE4</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0910</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x42</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xE4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0911</integer>
+              <integer>0x0901</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2B</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0911</integer>
+              <integer>0x0902</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2B</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0911</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2B</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xEC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0912</integer>
+              <integer>0x0901</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2B</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xE0</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0912</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2B</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xE0</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0913</integer>
+              <integer>0x0901</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2B</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xE4</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0913</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2B</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xE4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0914</integer>
+              <integer>0x0901</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2B</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xE8</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0914</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2B</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xE8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0960</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x41</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xF1</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="vowel-sign-I">
+        <subst-block>
+          <source-pattern>
+            <integer>0x093F</integer>
+          </source-pattern>
+          <direct-code>
+            <integer>0xCA</integer>
+          </direct-code>
+        </subst-block>
+      </defmacro>
+      <defmacro fname="preceding-r">
+        <subst-block>
+          <source-pattern>
+            <integer>0x0930</integer>
+            <integer>0x094D</integer>
+          </source-pattern>
+          <direct-code>
+            <integer>0xC7</integer>
+          </direct-code>
+        </subst-block>
+      </defmacro>
+      <defmacro fname="post-modifier">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0901</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0902</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0951</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x27</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0952</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c"/>
+            <direct-code>
+              <integer>0x2D</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="harant">
+        <subst-block>
+          <source-pattern>
+            <integer>0x094D</integer>
+          </source-pattern>
+          <direct-code>
+            <integer>0xC2</integer>
+          </direct-code>
+        </subst-block>
+      </defmacro>
+      <defmacro fname="consonant">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0915</integer>
+              <integer>0x094D</integer>
+              <integer>0x0924</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x48</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xF2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0915</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x47</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xF2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0915</integer>
+              <integer>0x094D</integer>
+              <integer>0x0937</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x49</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0915</integer>
+              <integer>0x094D</integer>
+              <integer>0x0937</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x49</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0915</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x43</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0915</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x45</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xF2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0916</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x4C</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0916</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x4C</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0916</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x4A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0916</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x4A</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0917</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x4F</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0917</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x4F</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0917</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x4D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0917</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x4D</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0918</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x51</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0918</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x51</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0918</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x50</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0918</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x50</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0919</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x52</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xF3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x091A</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x54</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x091A</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x54</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x091A</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x53</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x091A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x53</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x091B</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x55</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xF4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x091C</integer>
+              <integer>0x094D</integer>
+              <integer>0x091E</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x59</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x091C</integer>
+              <integer>0x094D</integer>
+              <integer>0x091E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x59</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x091C</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x58</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x091C</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x58</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x091C</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x56</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x091C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x56</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x091D</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x5B</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x091D</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x5B</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x091D</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x5A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x091D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x5A</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x091E</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x5C</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x091E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x5C</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x091F</integer>
+              <integer>0x094D</integer>
+              <integer>0x091F</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x5E</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xF5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x091F</integer>
+              <integer>0x094D</integer>
+              <integer>0x0920</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x5F</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xF5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x091F</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x5D</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xF5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0920</integer>
+              <integer>0x094D</integer>
+              <integer>0x0920</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x61</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xF6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0920</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x60</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xF6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0921</integer>
+              <integer>0x094D</integer>
+              <integer>0x0921</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x64</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xF7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0921</integer>
+              <integer>0x094D</integer>
+              <integer>0x0922</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x65</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xF7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0921</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x62</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xF7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0922</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x66</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xF8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0923</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x68</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0923</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x68</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0924</integer>
+              <integer>0x094D</integer>
+              <integer>0x0924</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x6B</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0924</integer>
+              <integer>0x094D</integer>
+              <integer>0x0924</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x6B</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0924</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x6A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0924</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x6A</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0924</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x69</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0924</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x69</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0925</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x6D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0925</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x6D</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0925</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x6C</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0925</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x6C</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0926</integer>
+              <integer>0x0943</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x6F</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xF9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0926</integer>
+              <integer>0x094D</integer>
+              <integer>0x0926</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x71</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xF9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0926</integer>
+              <integer>0x094D</integer>
+              <integer>0x0927</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x72</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xF9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0926</integer>
+              <integer>0x094D</integer>
+              <integer>0x092E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x73</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0926</integer>
+              <integer>0x094D</integer>
+              <integer>0x092F</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x74</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0926</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x70</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xF9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0926</integer>
+              <integer>0x094D</integer>
+              <integer>0x0935</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x75</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xF9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0926</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x6E</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xF9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0927</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x77</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0927</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x77</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0927</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x76</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0927</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x76</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0928</integer>
+              <integer>0x094D</integer>
+              <integer>0x0928</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x7A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0928</integer>
+              <integer>0x094D</integer>
+              <integer>0x0928</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x7A</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0928</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x79</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0928</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x79</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0928</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x78</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0928</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x78</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0929</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x78</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC3</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x092A</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x7C</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x092A</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x7C</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x092A</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x7B</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x092A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x7B</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x092B</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA3</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xFB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x092B</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x7D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x092B</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA1</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xFB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x092C</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x092C</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA5</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x092C</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x092C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA4</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x092D</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x092D</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA7</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x092D</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x092D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA6</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x092E</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x092E</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA9</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x092E</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x092E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA8</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x092F</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xAB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x092F</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xAB</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x092F</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xAA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x092F</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xAA</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0930</integer>
+              <integer>0x0941</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xAF</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xFB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0930</integer>
+              <integer>0x0942</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB0</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xFC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0930</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xAE</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xF7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0931</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xAD</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0931</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xAE</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC3</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xF7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0932</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0932</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB1</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0933</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0933</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0934</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB2</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0934</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB3</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0935</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0935</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB5</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0935</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0935</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB4</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0936</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0936</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB8</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0936</integer>
+              <integer>0x094D</integer>
+              <integer>0x0935</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0936</integer>
+              <integer>0x094D</integer>
+              <integer>0x0935</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB7</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0936</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0936</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB6</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0937</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0937</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB9</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0938</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xBB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0938</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xBB</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0938</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xBA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0938</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xBA</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0939</integer>
+              <integer>0x0943</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xBE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0939</integer>
+              <integer>0x094D</integer>
+              <integer>0x092E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC0</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0939</integer>
+              <integer>0x094D</integer>
+              <integer>0x092F</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0939</integer>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xBF</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0939</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xBC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0939</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xBD</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x094D</integer>
+              <integer>0x092F</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xAC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x094D</integer>
+              <integer>0x0930</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0958</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x44</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0958</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x46</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xF2</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xF3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0959</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x4B</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0959</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x4B</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x095A</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x4E</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x095A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x4E</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x095B</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x57</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x095B</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x57</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x095C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x63</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xF7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x095D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x67</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xF8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x095E</integer>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x7E</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x095E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA2</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xFB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x095F</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xAA</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC3</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC2</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="matra">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x093E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x093F</integer>
+              <integer>0x0901</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xCA</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x093F</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xCA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0940</integer>
+              <integer>0x0901</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xD2</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0940</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xD2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0941</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xD6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0942</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xDA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0943</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xDE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0944</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xDF</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0945</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xEC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0946</integer>
+              <integer>0x0901</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE0</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0946</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE0</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0947</integer>
+              <integer>0x0901</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE4</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0947</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0948</integer>
+              <integer>0x0901</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE8</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0948</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0949</integer>
+              <integer>0x0901</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0949</integer>
+              <integer>0x0902</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0949</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xEC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x094A</integer>
+              <integer>0x0901</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xE0</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x094A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xE0</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x094B</integer>
+              <integer>0x0901</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xE4</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x094B</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xE4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x094C</integer>
+              <integer>0x0901</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xE8</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x094C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xE8</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="independent">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0900</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x23</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xC7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0903</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x26</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x093C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x093D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x25</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0950</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x24</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0951</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x27</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0964</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0965</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2A</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x2A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0966</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x30</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0967</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x31</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0968</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x32</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0969</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x33</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x096A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x34</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x096B</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x35</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x096C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x36</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x096D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x37</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x096E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x38</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x096F</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x39</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x094D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x23</integer>
+            </direct-code>
+            <combining-specification v-pos1="B" h-pos1="c" v-pos2="B" h-pos2="l" x-direction="left" x-amount="10"/>
+            <direct-code>
+              <integer>0xC2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x093F</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xCA</integer>
+            </direct-code>
+            <combining-specification v-pos1="B" h-pos1="c" v-pos2="B" h-pos2="l" x-direction="left" x-amount="10"/>
+            <direct-code>
+              <integer>0x23</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0940</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x23</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xD2</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+    </generator>
+  </first-stage>
+  <stage>
+    <category-table>
+      <category category-value="E">
+        <from-code>
+          <integer>0x00</integer>
+        </from-code>
+        <to-code>
+          <integer>0xFF</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x3C</integer>
+        </from-code>
+        <to-code>
+          <integer>0xC1</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0xC9</integer>
+        </glyph-code>
+      </category>
+      <category category-value="I">
+        <from-code>
+          <integer>0xCA</integer>
+        </from-code>
+        <to-code>
+          <integer>0xD1</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <from-code>
+          <integer>0xD2</integer>
+        </from-code>
+        <to-code>
+          <integer>0xD5</integer>
+        </to-code>
+      </category>
+      <category category-value="S">
+        <from-code>
+          <integer>0xF0</integer>
+        </from-code>
+        <to-code>
+          <integer>0xFE</integer>
+        </to-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" ([^ ]*) ">
+            <match-block match-index="1">
+              <cond-block>
+                <regexp-block regexp="(I[^C]*)(CC[^R]*)(R.*)">
+                  <match-block match-index="1">
+                    <funcall fname="rule-i-wide"/>
+                    <copy-glyph/>
+                    <repeat/>
+                  </match-block>
+                  <match-block match-index="2">
+                    <funcall fname="rule-else"/>
+                    <copy-glyph/>
+                    <repeat/>
+                  </match-block>
+                </regexp-block>
+                <regexp-block regexp="(I[^C]*)(CC[^S]*)(S)(.*)">
+                  <match-block match-index="1">
+                    <funcall fname="rule-i-wide"/>
+                    <copy-glyph/>
+                    <repeat/>
+                  </match-block>
+                  <match-block match-index="2">
+                    <copy-glyph/>
+                    <repeat/>
+                  </match-block>
+                  <match-block match-index="4">
+                    <funcall fname="rule-else"/>
+                    <copy-glyph/>
+                    <repeat/>
+                  </match-block>
+                  <match-block match-index="3">
+                    <copy-glyph/>
+                    <repeat/>
+                  </match-block>
+                </regexp-block>
+                <regexp-block regexp="([^R]*)(R).*">
+                  <match-block match-index="0">
+                    <funcall fname="rule-else"/>
+                    <copy-glyph/>
+                    <repeat/>
+                  </match-block>
+                </regexp-block>
+                <regexp-block regexp="([^S]*)(S)(.*)">
+                  <match-block match-index="1">
+                    <funcall fname="rule-else"/>
+                    <copy-glyph/>
+                    <repeat/>
+                  </match-block>
+                  <match-block match-index="3">
+                    <funcall fname="rule-else"/>
+                    <copy-glyph/>
+                    <repeat/>
+                  </match-block>
+                  <match-block match-index="2">
+                    <copy-glyph/>
+                    <repeat/>
+                  </match-block>
+                </regexp-block>
+                <regexp-block regexp=".*">
+                  <copy-glyph/>
+                  <repeat/>
+                </regexp-block>
+              </cond-block>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="[^ ]*">
+            <copy-glyph/>
+            <repeat/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+      <defmacro fname="rule-i-wide">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xCA</integer>
+              <integer>0xC6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xCF</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xCA</integer>
+              <integer>0xC7</integer>
+              <integer>0xC6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xD1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xCA</integer>
+              <integer>0xC7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xD0</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xCA</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xCE</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="rule-else">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xC3</integer>
+              <integer>0xD6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xD7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xC3</integer>
+              <integer>0xDA</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xDB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xC5</integer>
+              <integer>0xD6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xD8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xC5</integer>
+              <integer>0xDA</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xDC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xC7</integer>
+              <integer>0xC4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xC7</integer>
+              <integer>0xC6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xCA</integer>
+              <integer>0xC6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xCB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xCA</integer>
+              <integer>0xC7</integer>
+              <integer>0xC6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xCD</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xCA</integer>
+              <integer>0xC7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xCC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xD2</integer>
+              <integer>0xC6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xD3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xD2</integer>
+              <integer>0xC7</integer>
+              <integer>0xC6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xD5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xD2</integer>
+              <integer>0xC7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xD4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xE0</integer>
+              <integer>0xC6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xE0</integer>
+              <integer>0xC7</integer>
+              <integer>0xC6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xE0</integer>
+              <integer>0xC7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xE4</integer>
+              <integer>0xC6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xE4</integer>
+              <integer>0xC7</integer>
+              <integer>0xC6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xE4</integer>
+              <integer>0xC7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xE8</integer>
+              <integer>0xC6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xE8</integer>
+              <integer>0xC7</integer>
+              <integer>0xC6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xEB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xE8</integer>
+              <integer>0xC7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xEA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xEC</integer>
+              <integer>0xC6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xED</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xEC</integer>
+              <integer>0xC7</integer>
+              <integer>0xC6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xEF</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xEC</integer>
+              <integer>0xC7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xEE</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+    </generator>
+  </stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/DEVA-OTF.fltx b/FLT/DEVA-OTF.fltx
new file mode 100644 (file)
index 0000000..1a94e7d
--- /dev/null
@@ -0,0 +1,734 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="deva-otf" key1="nil">
+  <font registry="unicode-bmp" family="nil" foundry="nil">
+    <otf-specification script="deva">
+      <gsub-features>
+        <positive-list>
+          <feature>rphf</feature>
+        </positive-list>
+      </gsub-features>
+      <gpos-features>
+        <negative-list/>
+      </gpos-features>
+    </otf-specification>
+  </font>
+  <first-stage>
+    <category-table>
+      <category category-value="X">
+        <from-code>
+          <integer>0x0900</integer>
+        </from-code>
+        <to-code>
+          <integer>0x097F</integer>
+        </to-code>
+      </category>
+      <category category-value="Z">
+        <glyph-code>
+          <integer>0x0900</integer>
+        </glyph-code>
+      </category>
+      <category category-value="A">
+        <from-code>
+          <integer>0x0901</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0902</integer>
+        </to-code>
+      </category>
+      <category category-value="a">
+        <glyph-code>
+          <integer>0x0903</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x0904</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0914</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0915</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0939</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x0930</integer>
+        </glyph-code>
+      </category>
+      <category category-value="n">
+        <glyph-code>
+          <integer>0x093C</integer>
+        </glyph-code>
+      </category>
+      <category category-value="p">
+        <glyph-code>
+          <integer>0x093E</integer>
+        </glyph-code>
+      </category>
+      <category category-value="m">
+        <glyph-code>
+          <integer>0x093F</integer>
+        </glyph-code>
+      </category>
+      <category category-value="p">
+        <glyph-code>
+          <integer>0x0940</integer>
+        </glyph-code>
+      </category>
+      <category category-value="b">
+        <from-code>
+          <integer>0x0941</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0944</integer>
+        </to-code>
+      </category>
+      <category category-value="u">
+        <from-code>
+          <integer>0x0945</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0948</integer>
+        </to-code>
+      </category>
+      <category category-value="p">
+        <from-code>
+          <integer>0x0949</integer>
+        </from-code>
+        <to-code>
+          <integer>0x094C</integer>
+        </to-code>
+      </category>
+      <category category-value="H">
+        <glyph-code>
+          <integer>0x094D</integer>
+        </glyph-code>
+      </category>
+      <category category-value="S">
+        <glyph-code>
+          <integer>0x0951</integer>
+        </glyph-code>
+      </category>
+      <category category-value="s">
+        <glyph-code>
+          <integer>0x0952</integer>
+        </glyph-code>
+      </category>
+      <category category-value="S">
+        <from-code>
+          <integer>0x0953</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0954</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0958</integer>
+        </from-code>
+        <to-code>
+          <integer>0x095F</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x0960</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0961</integer>
+        </to-code>
+      </category>
+      <category category-value="b">
+        <from-code>
+          <integer>0x0962</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0963</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0x0972</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x097B</integer>
+        </from-code>
+        <to-code>
+          <integer>0x097C</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x097E</integer>
+        </from-code>
+        <to-code>
+          <integer>0x097F</integer>
+        </to-code>
+      </category>
+      <category category-value="N">
+        <glyph-code>
+          <integer>0x200C</integer>
+        </glyph-code>
+      </category>
+      <category category-value="J">
+        <glyph-code>
+          <integer>0x200D</integer>
+        </glyph-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0928</integer>
+              <integer>0x093C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0929</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0930</integer>
+              <integer>0x093C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0931</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0933</integer>
+              <integer>0x093C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0934</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0915</integer>
+              <integer>0x093C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0958</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0916</integer>
+              <integer>0x093C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0959</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0917</integer>
+              <integer>0x093C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x095A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x091C</integer>
+              <integer>0x093C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x095B</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0921</integer>
+              <integer>0x093C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x095C</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0922</integer>
+              <integer>0x093C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x095D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x092B</integer>
+              <integer>0x093C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x095E</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x092F</integer>
+              <integer>0x093C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x095F</integer>
+            </direct-code>
+          </subst-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </first-stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="([CR]n?(HJ?[CR]n?)*)((m)|(b)|(u|p))(A)?(a)?(S)?(s)?">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="4">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="1">
+              <funcall fname="move-h"/>
+            </match-block>
+            <match-block match-index="5">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="10">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="6">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="1">
+              <funcall fname="reph"/>
+            </match-block>
+            <match-block match-index="7">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="9">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="8">
+              <copy-glyph/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="([CR]n?(HJ?[CR]n?)*)((A)|(a))(S)?(s)?">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="1">
+              <funcall fname="move-h"/>
+            </match-block>
+            <match-block match-index="7">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="1">
+              <funcall fname="reph"/>
+            </match-block>
+            <match-block match-index="4">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="6">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="5">
+              <copy-glyph/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="([CR]n?(HJ?[CR]n?)*)((S)|(s))">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="1">
+              <funcall fname="move-h"/>
+            </match-block>
+            <match-block match-index="5">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="1">
+              <funcall fname="reph"/>
+            </match-block>
+            <match-block match-index="4">
+              <copy-glyph/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="[CR]n?(HJ?[CR]n?)*(H(N|J)?)?">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="0">
+              <funcall fname="nomarks"/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0905</integer>
+              <integer>0x0945</integer>
+            </source-pattern>
+            <start-cluster/>
+            <separator/>
+            <copy-glyph/>
+            <copy-glyph/>
+            <separator/>
+            <end-cluster/>
+          </subst-block>
+          <regexp-block regexp="(V)(A)?(a)?(S)?(s)?">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="5">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="4">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+      <defmacro  fname="move-h">
+        <cond-block>
+          <regexp-block regexp="(RHJ.+)(H)(R)$">
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="RHJ.*">
+            <copy-glyph/>
+            <repeat/>
+          </regexp-block>
+          <regexp-block regexp="RH(.+)(H)(R)$">
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="RH(.+)">
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="(.+)(H)(R)$">
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp=".+">
+            <copy-glyph/>
+            <repeat/>
+          </regexp-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="reph">
+        <cond-block>
+          <regexp-block regexp="RHJ.*"/>
+          <regexp-block regexp="(RH).*">
+            <match-block match-index="1">
+              <otf-specification script="deva">
+                <gsub-features>
+                  <positive-list>
+                    <feature>rphf</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+          </regexp-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="del-reph">
+        <cond-block>
+          <regexp-block regexp="RHJ.*">
+            <copy-glyph/>
+            <repeat/>
+          </regexp-block>
+          <regexp-block regexp="RH(.*)">
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp=".+">
+            <copy-glyph/>
+            <repeat/>
+          </regexp-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="nomarks">
+        <cond-block>
+          <regexp-block regexp=".+HJ$">
+            <match-block match-index="0">
+              <funcall fname="del-reph"/>
+            </match-block>
+            <match-block match-index="0">
+              <funcall fname="reph"/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="(.+)(H)N?$">
+            <match-block match-index="1">
+              <funcall fname="move-h"/>
+            </match-block>
+            <match-block match-index="1">
+              <funcall fname="reph"/>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+            <direct-code>
+              <integer>0x200C</integer>
+            </direct-code>
+          </regexp-block>
+          <regexp-block regexp=".+">
+            <match-block match-index="0">
+              <funcall fname="move-h"/>
+            </match-block>
+            <match-block match-index="0">
+              <funcall fname="reph"/>
+            </match-block>
+          </regexp-block>
+        </cond-block>
+      </defmacro>
+    </generator>
+  </stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" (RH)J([^ ]+)(H)N ">
+            <separator/>
+            <match-block match-index="1">
+              <otf-specification script="deva">
+                <gsub-features>
+                  <positive-list>
+                    <feature>half</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="gsub"/>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=" (m)?(RH)J([^ ]*) ">
+            <separator/>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <otf-specification script="deva">
+                <gsub-features>
+                  <positive-list>
+                    <feature>half</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="3">
+              <funcall fname="gsub"/>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=" (R)([^ ]*)(H)N ">
+            <separator/>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="gsub"/>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=" (m?R)([^ ]*) ">
+            <separator/>
+            <match-block match-index="1">
+              <otf-specification script="deva">
+                <gsub-features>
+                  <positive-list>
+                    <feature>pres</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="gsub"/>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=" ([^ ]+)(H)N ">
+            <separator/>
+            <match-block match-index="1">
+              <funcall fname="gsub"/>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=" ([^ ]+) ">
+            <separator/>
+            <match-block match-index="1">
+              <funcall fname="gsub"/>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+      <defmacro  fname="gsub">
+        <cond-block>
+          <regexp-block regexp="([^J]*)J(.*)">
+            <match-block match-index="1">
+              <otf-specification script="deva">
+                <gsub-features>
+                  <positive-list>
+                    <feature>nukt</feature>
+                    <feature>akhn</feature>
+                    <feature>blwf</feature>
+                    <feature>half</feature>
+                    <feature>vatu</feature>
+                    <feature>pres</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="gsub"/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp=".*">
+            <otf-specification script="deva">
+              <gsub-features>
+                <positive-list>
+                  <feature>nukt</feature>
+                  <feature>akhn</feature>
+                  <feature>blwf</feature>
+                  <feature>half</feature>
+                  <feature>vatu</feature>
+                  <feature>pres</feature>
+                </positive-list>
+              </gsub-features>
+              <gpos-features>
+                <positive-list/>
+              </gpos-features>
+            </otf-specification>
+          </regexp-block>
+        </cond-block>
+      </defmacro>
+    </generator>
+  </stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" ([^ ]+) ">
+            <match-block match-index="1">
+              <otf-specification script="deva">
+                <gsub-features>
+                  <positive-list>
+                    <feature>abvs</feature>
+                    <feature>blws</feature>
+                    <feature>psts</feature>
+                    <feature>haln</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list>
+                    <feature>abvm</feature>
+                    <feature>blwm</feature>
+                    <feature>dist</feature>
+                  </positive-list>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <left-padding-flag/>
+            <copy-glyph/>
+            <right-padding-flag/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/GUJR-OTF.fltx b/FLT/GUJR-OTF.fltx
new file mode 100644 (file)
index 0000000..fd76b83
--- /dev/null
@@ -0,0 +1,446 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="gujr-otf" key1="nil">
+  <font registry="unicode-bmp" family="nil" foundry="nil">
+    <otf-specification script="gujr">
+      <gsub-features>
+        <positive-list>
+          <feature>rphf</feature>
+        </positive-list>
+      </gsub-features>
+      <gpos-features>
+        <negative-list/>
+      </gpos-features>
+    </otf-specification>
+  </font>
+  <first-stage>
+    <category-table>
+      <category category-value="X">
+        <from-code>
+          <integer>0x0A80</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0AFF</integer>
+        </to-code>
+      </category>
+      <category category-value="A">
+        <from-code>
+          <integer>0x0A81</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0A82</integer>
+        </to-code>
+      </category>
+      <category category-value="a">
+        <glyph-code>
+          <integer>0x0A83</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x0A85</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0A94</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0A95</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0AB9</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x0AB0</integer>
+        </glyph-code>
+      </category>
+      <category category-value="n">
+        <glyph-code>
+          <integer>0x0ABC</integer>
+        </glyph-code>
+      </category>
+      <category category-value="p">
+        <glyph-code>
+          <integer>0x0ABE</integer>
+        </glyph-code>
+      </category>
+      <category category-value="m">
+        <glyph-code>
+          <integer>0x0ABF</integer>
+        </glyph-code>
+      </category>
+      <category category-value="p">
+        <glyph-code>
+          <integer>0x0AC0</integer>
+        </glyph-code>
+      </category>
+      <category category-value="b">
+        <from-code>
+          <integer>0x0AC1</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0AC4</integer>
+        </to-code>
+      </category>
+      <category category-value="u">
+        <from-code>
+          <integer>0x0AC5</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0AC8</integer>
+        </to-code>
+      </category>
+      <category category-value="p">
+        <from-code>
+          <integer>0x0AC9</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0ACC</integer>
+        </to-code>
+      </category>
+      <category category-value="H">
+        <glyph-code>
+          <integer>0x0ACD</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x0AE0</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0AE1</integer>
+        </to-code>
+      </category>
+      <category category-value="b">
+        <from-code>
+          <integer>0x0AE2</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0AE3</integer>
+        </to-code>
+      </category>
+      <category category-value="X">
+        <from-code>
+          <integer>0x0964</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0965</integer>
+        </to-code>
+      </category>
+      <category category-value="N">
+        <glyph-code>
+          <integer>0x200C</integer>
+        </glyph-code>
+      </category>
+      <category category-value="J">
+        <glyph-code>
+          <integer>0x200D</integer>
+        </glyph-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="([CR]n?(HJ?[CR]n?)*)((m)|(b|u|p))(A|a)?">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="4">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="1">
+              <funcall fname="move-h"/>
+            </match-block>
+            <match-block match-index="5">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="1">
+              <funcall fname="reph"/>
+            </match-block>
+            <match-block match-index="6">
+              <copy-glyph/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="([CR]n?(HJ?[CR]n?)*)(A|a)">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="1">
+              <funcall fname="move-h"/>
+            </match-block>
+            <match-block match-index="1">
+              <funcall fname="reph"/>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="[CR]n?(HJ?[CR]n?)*(H(N|J)?)?">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="0">
+              <funcall fname="nomarks"/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="V(A|a)?">
+            <start-cluster/>
+            <separator/>
+            <copy-glyph/>
+            <repeat/>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+      <defmacro fname="move-h">
+        <cond-block>
+          <regexp-block regexp="RH(.+)(H)(R)$">
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="RH(.+)">
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="(.+)(H)(R)$">
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp=".+">
+            <copy-glyph/>
+            <repeat/>
+          </regexp-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="reph">
+        <cond-block>
+          <regexp-block regexp="(RH).*">
+            <match-block match-index="1">
+              <otf-specification script="gujr">
+                <gsub-features>
+                  <positive-list>
+                    <feature>rphf</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+          </regexp-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="del-reph">
+        <cond-block>
+          <regexp-block regexp="(RH)?(.*)">
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+          </regexp-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="nomarks">
+        <cond-block>
+          <regexp-block regexp=".+HJ$">
+            <match-block match-index="0">
+              <funcall fname="del-reph"/>
+            </match-block>
+            <match-block match-index="0">
+              <funcall fname="reph"/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="(.+)(H)N?$">
+            <match-block match-index="1">
+              <funcall fname="move-h"/>
+            </match-block>
+            <match-block match-index="1">
+              <funcall fname="reph"/>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+            <direct-code>
+              <integer>0x200C</integer>
+            </direct-code>
+          </regexp-block>
+          <regexp-block regexp=".+">
+            <match-block match-index="0">
+              <funcall fname="move-h"/>
+            </match-block>
+            <match-block match-index="0">
+              <funcall fname="reph"/>
+            </match-block>
+          </regexp-block>
+        </cond-block>
+      </defmacro>
+    </generator>
+  </first-stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" (R)([^ ]*)(H)N ">
+            <separator/>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="gsub"/>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=" (m?R)([^ ]*) ">
+            <separator/>
+            <match-block match-index="1">
+              <otf-specification script="gujr">
+                <gsub-features>
+                  <positive-list>
+                    <feature>pres</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="gsub"/>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=" ([^ ]+)(H)N ">
+            <separator/>
+            <match-block match-index="1">
+              <funcall fname="gsub"/>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=" ([^ ]+) ">
+            <separator/>
+            <match-block match-index="1">
+              <funcall fname="gsub"/>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+      <defmacro fname="gsub">
+        <cond-block>
+          <regexp-block regexp="([^J]*)J(.*)">
+            <match-block match-index="1">
+              <otf-specification script="gujr">
+                <gsub-features>
+                  <positive-list>
+                    <feature>nukt</feature>
+                    <feature>akhn</feature>
+                    <feature>blwf</feature>
+                    <feature>half</feature>
+                    <feature>vatu</feature>
+                    <feature>pres</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="gsub"/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp=".*">
+            <otf-specification script="gujr">
+              <gsub-features>
+                <positive-list>
+                  <feature>nukt</feature>
+                  <feature>akhn</feature>
+                  <feature>blwf</feature>
+                  <feature>half</feature>
+                  <feature>vatu</feature>
+                  <feature>pres</feature>
+                </positive-list>
+              </gsub-features>
+              <gpos-features>
+                <positive-list/>
+              </gpos-features>
+            </otf-specification>
+          </regexp-block>
+        </cond-block>
+      </defmacro>
+    </generator>
+  </stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" ([^ ]+) ">
+            <match-block match-index="1">
+              <otf-specification script="gujr">
+                <gsub-features>
+                  <positive-list>
+                    <feature>abvs</feature>
+                    <feature>blws</feature>
+                    <feature>psts</feature>
+                    <feature>haln</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list>
+                    <feature>abvm</feature>
+                    <feature>blwm</feature>
+                    <feature>dist</feature>
+                  </positive-list>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <left-padding-flag/>
+            <copy-glyph/>
+            <right-padding-flag/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/GURU-OTF.fltx b/FLT/GURU-OTF.fltx
new file mode 100644 (file)
index 0000000..9109f60
--- /dev/null
@@ -0,0 +1,495 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="guru-otf" key1="nil">
+  <font registry="unicode-bmp" family="nil" foundry="nil">
+    <otf-specification script="guru">
+      <gsub-features>
+        <positive-list>
+          <feature>blwf</feature>
+        </positive-list>
+      </gsub-features>
+      <gpos-features>
+        <negative-list/>
+      </gpos-features>
+    </otf-specification>
+  </font>
+  <first-stage>
+    <category-table>
+      <category category-value="X">
+        <from-code>
+          <integer>0x0A00</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0A7F</integer>
+        </to-code>
+      </category>
+      <category category-value="Z">
+        <glyph-code>
+          <integer>0x0A00</integer>
+        </glyph-code>
+      </category>
+      <category category-value="A">
+        <from-code>
+          <integer>0x0A01</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0A02</integer>
+        </to-code>
+      </category>
+      <category category-value="a">
+        <glyph-code>
+          <integer>0x0A03</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x0A05</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0A14</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0A15</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0A38</integer>
+        </to-code>
+      </category>
+      <category category-value="Y">
+        <glyph-code>
+          <integer>0x0A2F</integer>
+        </glyph-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x0A30</integer>
+        </glyph-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x0A35</integer>
+        </glyph-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x0A39</integer>
+        </glyph-code>
+      </category>
+      <category category-value="n">
+        <glyph-code>
+          <integer>0x0A3C</integer>
+        </glyph-code>
+      </category>
+      <category category-value="p">
+        <glyph-code>
+          <integer>0x0A3E</integer>
+        </glyph-code>
+      </category>
+      <category category-value="m">
+        <glyph-code>
+          <integer>0x0A3F</integer>
+        </glyph-code>
+      </category>
+      <category category-value="p">
+        <glyph-code>
+          <integer>0x0A40</integer>
+        </glyph-code>
+      </category>
+      <category category-value="b">
+        <from-code>
+          <integer>0x0A41</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0A42</integer>
+        </to-code>
+      </category>
+      <category category-value="u">
+        <from-code>
+          <integer>0x0A47</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0A4C</integer>
+        </to-code>
+      </category>
+      <category category-value="H">
+        <glyph-code>
+          <integer>0x0A4D</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0A59</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0A5E</integer>
+        </to-code>
+      </category>
+      <category category-value="A">
+        <glyph-code>
+          <integer>0x0A70</integer>
+        </glyph-code>
+      </category>
+      <category category-value="d">
+        <glyph-code>
+          <integer>0x0A71</integer>
+        </glyph-code>
+      </category>
+      <category category-value="X">
+        <from-code>
+          <integer>0x0964</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0965</integer>
+        </to-code>
+      </category>
+      <category category-value="N">
+        <glyph-code>
+          <integer>0x200C</integer>
+        </glyph-code>
+      </category>
+      <category category-value="J">
+        <glyph-code>
+          <integer>0x200D</integer>
+        </glyph-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0A32</integer>
+              <integer>0x0A3C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0A33</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0A38</integer>
+              <integer>0x0A3C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0A36</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0A16</integer>
+              <integer>0x0A3C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0A59</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0A17</integer>
+              <integer>0x0A3C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0A5A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0A1C</integer>
+              <integer>0x0A3C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0A5B</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0A2B</integer>
+              <integer>0x0A3C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0A5E</integer>
+            </direct-code>
+          </subst-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </first-stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="([CRY]n?(H[CRY]n?)*)((m)|(ub?|b)|(p))(A?a?d?)">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="4">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="1">
+              <funcall fname="pre-below"/>
+            </match-block>
+            <match-block match-index="5">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="1">
+              <funcall fname="post"/>
+            </match-block>
+            <match-block match-index="6">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="7">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="([CRY]n?(H[CRY]n?)*)(Aa?d?|ad?|d)">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="1">
+              <funcall fname="pre-below"/>
+            </match-block>
+            <match-block match-index="1">
+              <funcall fname="post"/>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="([CRY]n?(H[CRY]n?)*)(HN?)?">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="1">
+              <funcall fname="pre-below"/>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+              <direct-code>
+                <integer>0x200C</integer>
+              </direct-code>
+            </match-block>
+            <match-block match-index="1">
+              <funcall fname="post"/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="Vb?A?a?d?">
+            <start-cluster/>
+            <separator/>
+            <copy-glyph/>
+            <repeat/>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+      <defmacro fname="pre-below">
+        <cond-block>
+          <regexp-block regexp="(.+)(H)(R)(HY)?$">
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <direct-code>
+              <integer>0x0A00</integer>
+            </direct-code>
+            <match-block match-index="3">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="(.+)HY$">
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <direct-code>
+              <integer>0x0A00</integer>
+            </direct-code>
+          </regexp-block>
+          <regexp-block regexp=".+">
+            <copy-glyph/>
+            <repeat/>
+            <direct-code>
+              <integer>0x0A00</integer>
+            </direct-code>
+          </regexp-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="post">
+        <cond-block>
+          <regexp-block regexp=".*(H)(Y)$">
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp=".+"/>
+        </cond-block>
+      </defmacro>
+    </generator>
+  </stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" ([^Z]+)Z(RH)?(H)N(YH)? ">
+            <separator/>
+            <match-block match-index="1">
+              <otf-specification script="guru">
+                <gsub-features>
+                  <positive-list>
+                    <feature>nukt</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <otf-specification script="guru">
+                <gsub-features>
+                  <positive-list>
+                    <feature>blwf</feature>
+                    <feature>vatu</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="4">
+              <otf-specification script="guru">
+                <gsub-features>
+                  <positive-list>
+                    <feature>pstf</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=" (m)?([^Z]+)Z(RH)?(u?b?)(YH)?(p?A?a?d?) ">
+            <separator/>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <otf-specification script="guru">
+                <gsub-features>
+                  <positive-list>
+                    <feature>nukt</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="3">
+              <otf-specification script="guru">
+                <gsub-features>
+                  <positive-list>
+                    <feature>blwf</feature>
+                    <feature>vatu</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="4">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="5">
+              <otf-specification script="guru">
+                <gsub-features>
+                  <positive-list>
+                    <feature>pstf</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="6">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" ([^ ]+) ">
+            <match-block match-index="1">
+              <otf-specification script="guru">
+                <gsub-features>
+                  <positive-list>
+                    <feature>vatu</feature>
+                    <feature>pres</feature>
+                    <feature>abvs</feature>
+                    <feature>blws</feature>
+                    <feature>psts</feature>
+                    <feature>haln</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list>
+                    <feature>abvm</feature>
+                    <feature>blwm</feature>
+                    <feature>dist</feature>
+                  </positive-list>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <left-padding-flag/>
+            <copy-glyph/>
+            <right-padding-flag/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/HEBR-FF.fltx b/FLT/HEBR-FF.fltx
new file mode 100644 (file)
index 0000000..bdd8627
--- /dev/null
@@ -0,0 +1,396 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="hebr-ff" key1="nil">
+  <font registry="unicode-bmp" family="nil" foundry="nil">
+    <lang-specification>he</lang-specification>
+    <lang-specification>yi</lang-specification>
+  </font>
+  <first-stage>
+    <category-table>
+      <category category-value="h">
+        <from-code>
+          <integer>0x0590</integer>
+        </from-code>
+        <to-code>
+          <integer>0x05ff</integer>
+        </to-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05d9</integer>
+              <integer>0x05b4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb1d</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05e9</integer>
+              <integer>0x05c1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb2a</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05e9</integer>
+              <integer>0x05c2</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb2b</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05e9</integer>
+              <integer>0x05bc</integer>
+              <integer>0x05c1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb2c</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05e9</integer>
+              <integer>0x05bc</integer>
+              <integer>0x05c2</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb2d</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05d0</integer>
+              <integer>0x05b7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb2e</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05d0</integer>
+              <integer>0x05b8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb2f</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05d0</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb30</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05d1</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb31</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05d2</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb32</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05d3</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb33</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05d4</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb34</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05d5</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb35</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05d6</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb36</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05d8</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb38</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05d9</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb39</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05da</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb3a</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05db</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb3b</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05dc</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb3c</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05de</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb3e</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05e0</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb40</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05e1</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb41</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05e3</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb43</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05e4</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb44</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05e6</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb46</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05e7</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb47</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05e8</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb48</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05e9</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb49</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05ea</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb4a</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05d5</integer>
+              <integer>0x05b9</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb4b</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05d1</integer>
+              <integer>0x05bf</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb4c</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05db</integer>
+              <integer>0x05bf</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb4d</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05e4</integer>
+              <integer>0x05bf</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb4e</integer>
+            </direct-code>
+          </subst-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </first-stage>
+  <stage>
+    <category-table>
+      <category category-value="p">
+        <from-code>
+          <integer>0x0590</integer>
+        </from-code>
+        <to-code>
+          <integer>0x05af</integer>
+        </to-code>
+      </category>
+      <category category-value="h">
+        <from-code>
+          <integer>0x05d0</integer>
+        </from-code>
+        <to-code>
+          <integer>0x05ff</integer>
+        </to-code>
+      </category>
+      <category category-value="h">
+        <from-code>
+          <integer>0xfb1d</integer>
+        </from-code>
+        <to-code>
+          <integer>0xfb4e</integer>
+        </to-code>
+      </category>
+      <category category-value="p">
+        <from-code>
+          <integer>0x05b0</integer>
+        </from-code>
+        <to-code>
+          <integer>0x05c4</integer>
+        </to-code>
+      </category>
+      <category category-value="h">
+        <glyph-code>
+          <integer>0x05be</integer>
+        </glyph-code>
+      </category>
+      <category category-value="h">
+        <glyph-code>
+          <integer>0x05c0</integer>
+        </glyph-code>
+      </category>
+      <category category-value="h">
+        <glyph-code>
+          <integer>0x05c3</integer>
+        </glyph-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="(h)(p+)">
+            <start-cluster/>
+            <copy-glyph/>
+            <repeat/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+            <repeat/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/HEBR.fltx b/FLT/HEBR.fltx
new file mode 100644 (file)
index 0000000..83c966d
--- /dev/null
@@ -0,0 +1,401 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="hebr" key1="nil">
+  <font registry="unicode-bmp" family="freesans" foundry="nil"/>
+  <first-stage>
+    <category-table>
+      <category category-value="h">
+        <from-code>
+          <integer>0x0590</integer>
+        </from-code>
+        <to-code>
+          <integer>0x05ff</integer>
+        </to-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05d9</integer>
+              <integer>0x05b4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb1d</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05e9</integer>
+              <integer>0x05c1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb2a</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05e9</integer>
+              <integer>0x05c2</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb2b</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05e9</integer>
+              <integer>0x05bc</integer>
+              <integer>0x05c1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb2c</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05e9</integer>
+              <integer>0x05bc</integer>
+              <integer>0x05c2</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb2d</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05d0</integer>
+              <integer>0x05b7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb2e</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05d0</integer>
+              <integer>0x05b8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb2f</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05d0</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb30</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05d1</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb31</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05d2</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb32</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05d3</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb33</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05d4</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb34</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05d5</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb35</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05d6</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb36</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05d8</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb38</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05d9</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb39</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05da</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb3a</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05db</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb3b</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05dc</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb3c</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05de</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb3e</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05e0</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb40</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05e1</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb41</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05e3</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb43</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05e4</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb44</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05e6</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb46</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05e7</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb47</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05e8</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb48</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05e9</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb49</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05ea</integer>
+              <integer>0x05bc</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb4a</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05d5</integer>
+              <integer>0x05b9</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb4b</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05d1</integer>
+              <integer>0x05bf</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb4c</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05db</integer>
+              <integer>0x05bf</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb4d</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x05e4</integer>
+              <integer>0x05bf</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xfb4e</integer>
+            </direct-code>
+          </subst-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </first-stage>
+  <stage>
+    <category-table>
+      <category category-value="p">
+        <from-code>
+          <integer>0x0590</integer>
+        </from-code>
+        <to-code>
+          <integer>0x05af</integer>
+        </to-code>
+      </category>
+      <category category-value="h">
+        <from-code>
+          <integer>0x05d0</integer>
+        </from-code>
+        <to-code>
+          <integer>0x05ff</integer>
+        </to-code>
+      </category>
+      <category category-value="h">
+        <from-code>
+          <integer>0xfb1d</integer>
+        </from-code>
+        <to-code>
+          <integer>0xfb4e</integer>
+        </to-code>
+      </category>
+      <category category-value="p">
+        <from-code>
+          <integer>0x05b0</integer>
+        </from-code>
+        <to-code>
+          <integer>0x05c4</integer>
+        </to-code>
+      </category>
+      <category category-value="h">
+        <glyph-code>
+          <integer>0x05be</integer>
+        </glyph-code>
+      </category>
+      <category category-value="h">
+        <glyph-code>
+          <integer>0x05c0</integer>
+        </glyph-code>
+      </category>
+      <category category-value="h">
+        <glyph-code>
+          <integer>0x05c3</integer>
+        </glyph-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="(h)(p+)">
+            <start-cluster/>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <regexp-block regexp=".">
+                <combining-specification v-pos1="B" h-pos1="c" v-pos2="B" h-pos2="c"/>
+                <copy-glyph/>
+              </regexp-block>
+              <repeat/>
+            </match-block>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+            <repeat/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/KHMR-ANLONG.fltx b/FLT/KHMR-ANLONG.fltx
new file mode 100644 (file)
index 0000000..02ff6b6
--- /dev/null
@@ -0,0 +1,1713 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="khmr-anlong" key1="nil">
+  <font registry="apple-roman" family="anlongvill khek" foundry="nil"/>
+  <first-stage>
+    <category-table>
+      <category category-value="C">
+        <from-code>
+          <integer>0x1780</integer>
+        </from-code>
+        <to-code>
+          <integer>0x17A0</integer>
+        </to-code>
+      </category>
+      <category category-value="N">
+        <glyph-code>
+          <integer>0x1789</integer>
+        </glyph-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x179A</integer>
+        </glyph-code>
+      </category>
+      <category category-value="E">
+        <glyph-code>
+          <integer>0x17A1</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <glyph-code>
+          <integer>0x17A2</integer>
+        </glyph-code>
+      </category>
+      <category category-value="E">
+        <from-code>
+          <integer>0x17A3</integer>
+        </from-code>
+        <to-code>
+          <integer>0x17A4</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x17A5</integer>
+        </from-code>
+        <to-code>
+          <integer>0x17B3</integer>
+        </to-code>
+      </category>
+      <category category-value="Q">
+        <glyph-code>
+          <integer>0x17A7</integer>
+        </glyph-code>
+      </category>
+      <category category-value="Q">
+        <glyph-code>
+          <integer>0x17AB</integer>
+        </glyph-code>
+      </category>
+      <category category-value="Q">
+        <glyph-code>
+          <integer>0x17AF</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <glyph-code>
+          <integer>0x17B2</integer>
+        </glyph-code>
+      </category>
+      <category category-value="E">
+        <from-code>
+          <integer>0x17B4</integer>
+        </from-code>
+        <to-code>
+          <integer>0x17FF</integer>
+        </to-code>
+      </category>
+      <category category-value="v">
+        <from-code>
+          <integer>0x17B6</integer>
+        </from-code>
+        <to-code>
+          <integer>0x17C5</integer>
+        </to-code>
+      </category>
+      <category category-value="S">
+        <glyph-code>
+          <integer>0x17C6</integer>
+        </glyph-code>
+      </category>
+      <category category-value="s">
+        <from-code>
+          <integer>0x17C9</integer>
+        </from-code>
+        <to-code>
+          <integer>0x17CA</integer>
+        </to-code>
+      </category>
+      <category category-value="S">
+        <from-code>
+          <integer>0x17CB</integer>
+        </from-code>
+        <to-code>
+          <integer>0x17D3</integer>
+        </to-code>
+      </category>
+      <category category-value="c">
+        <glyph-code>
+          <integer>0x17D2</integer>
+        </glyph-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="([CNR]c[CNRQ])c(R)(s?v?S?)">
+            <separator/>
+            <match-block match-index="1">
+              <funcall fname="with-conjunct"/>
+            </match-block>
+            <match-block match-index="2">
+              <combining-specification v-pos1="B" h-pos1="l" v-pos2="B" h-pos2="r"/>
+              <direct-code>
+                <integer>0xEE</integer>
+              </direct-code>
+            </match-block>
+            <direct-code>
+              <integer>0x00</integer>
+            </direct-code>
+            <match-block match-index="3">
+              <funcall fname="vowel-and-sign"/>
+              <repeat/>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp="([CNR]c[CNRQ])(s?v?S?)">
+            <separator/>
+            <match-block match-index="1">
+              <funcall fname="with-conjunct"/>
+            </match-block>
+            <direct-code>
+              <integer>0x00</integer>
+            </direct-code>
+            <match-block match-index="2">
+              <funcall fname="vowel-and-sign"/>
+              <repeat/>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp="([CNR])(s?v?S?)">
+            <separator/>
+            <match-block match-index="1">
+              <funcall fname="independent"/>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="vowel-and-sign"/>
+              <repeat/>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <funcall fname="independent"/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+      <defmacro  fname="with-conjunct">
+        <cond-block>
+          <regexp-block regexp="(N)c(CRQ)">
+            <match-block match-index="1">
+              <direct-code>
+                <integer>0x8B</integer>
+              </direct-code>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="conjunct"/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="(N)c(N)">
+            <match-block match-index="1">
+              <direct-code>
+                <integer>0x8B</integer>
+              </direct-code>
+            </match-block>
+            <match-block match-index="2">
+              <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l"/>
+              <direct-code>
+                <integer>0xDD</integer>
+              </direct-code>
+            </match-block>
+          </regexp-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17B3</integer>
+              <integer>0x17D2</integer>
+              <integer>0x1799</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB8</integer>
+            </direct-code>
+          </subst-block>
+          <regexp-block regexp="(.)c(.)">
+            <match-block match-index="1">
+              <funcall fname="independent"/>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="conjunct"/>
+            </match-block>
+          </regexp-block>
+        </cond-block>
+      </defmacro>
+      <defmacro  fname="independent">
+        <cond-block>
+          <subst-block>
+            <from-code>
+              <integer>0x1780</integer>
+            </from-code>
+            <to-code>
+              <integer>0x1788</integer>
+            </to-code>
+            <direct-code>
+              <integer>0x82</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x1789</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x8C</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <from-code>
+              <integer>0x178A</integer>
+            </from-code>
+            <to-code>
+              <integer>0x1794</integer>
+            </to-code>
+            <direct-code>
+              <integer>0x91</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x1795</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x9F</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <from-code>
+              <integer>0x1796</integer>
+            </from-code>
+            <to-code>
+              <integer>0x179C</integer>
+            </to-code>
+            <direct-code>
+              <integer>0xA1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x179D</integer>
+            </source-pattern>
+            <start-cluster/>
+            <direct-code>
+              <integer>0x84</integer>
+            </direct-code>
+            <combining-specification v-pos1="c" h-pos1="r" v-pos2="c" h-pos2="c" y-direction="down" y-amount="5" x-direction="right" x-amount="5"/>
+            <direct-code>
+              <integer>0xFA</integer>
+            </direct-code>
+            <end-cluster/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x179E</integer>
+            </source-pattern>
+            <start-cluster/>
+            <direct-code>
+              <integer>0x9B</integer>
+            </direct-code>
+            <combining-specification v-pos1="c" h-pos1="r" v-pos2="c" h-pos2="c" y-direction="down" y-amount="5" x-direction="right" x-amount="5"/>
+            <direct-code>
+              <integer>0xFA</integer>
+            </direct-code>
+            <end-cluster/>
+          </subst-block>
+          <subst-block>
+            <from-code>
+              <integer>0x179F</integer>
+            </from-code>
+            <to-code>
+              <integer>0x17A2</integer>
+            </to-code>
+            <direct-code>
+              <integer>0xA8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17A3</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xAB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17A4</integer>
+            </source-pattern>
+            <start-cluster/>
+            <direct-code>
+              <integer>0xAB</integer>
+            </direct-code>
+            <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l" x-direction="left" x-amount="5"/>
+            <direct-code>
+              <integer>0xBA</integer>
+            </direct-code>
+            <end-cluster/>
+          </subst-block>
+          <subst-block>
+            <from-code>
+              <integer>0x17A5</integer>
+            </from-code>
+            <to-code>
+              <integer>0x17A7</integer>
+            </to-code>
+            <direct-code>
+              <integer>0xAC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17A8</integer>
+            </source-pattern>
+            <start-cluster/>
+            <direct-code>
+              <integer>0xAE</integer>
+            </direct-code>
+            <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l"/>
+            <direct-code>
+              <integer>0xF4</integer>
+            </direct-code>
+            <end-cluster/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17A9</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <from-code>
+              <integer>0x17AA</integer>
+            </from-code>
+            <to-code>
+              <integer>0x17B1</integer>
+            </to-code>
+            <direct-code>
+              <integer>0xAF</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17B2</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17B3</integer>
+            </source-pattern>
+            <start-cluster/>
+            <direct-code>
+              <integer>0xAE</integer>
+            </direct-code>
+            <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="l" x-direction="right" x-amount="20"/>
+            <direct-code>
+              <integer>0xF8</integer>
+            </direct-code>
+            <end-cluster/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17B4</integer>
+            </source-pattern>
+            <start-cluster/>
+            <direct-code>
+              <integer>0xBA</integer>
+            </direct-code>
+            <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="l" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xF5</integer>
+            </direct-code>
+            <end-cluster/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17B5</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xBA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17B6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xBA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17B7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xBB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17B8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xBD</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17B9</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xBF</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17BA</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17BB</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17BC</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17BD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17BE</integer>
+            </source-pattern>
+            <start-cluster/>
+            <direct-code>
+              <integer>0xCD</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x20</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xBD</integer>
+            </direct-code>
+            <end-cluster/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17BF</integer>
+            </source-pattern>
+            <start-cluster/>
+            <direct-code>
+              <integer>0xCD</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x20</integer>
+            </direct-code>
+            <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l" x-direction="right" x-amount="5"/>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+            <end-cluster/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17C0</integer>
+            </source-pattern>
+            <start-cluster/>
+            <direct-code>
+              <integer>0xCD</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x20</integer>
+            </direct-code>
+            <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l" x-direction="right" x-amount="5"/>
+            <direct-code>
+              <integer>0xCB</integer>
+            </direct-code>
+            <end-cluster/>
+          </subst-block>
+          <subst-block>
+            <from-code>
+              <integer>0x17C1</integer>
+            </from-code>
+            <to-code>
+              <integer>0x17C3</integer>
+            </to-code>
+            <direct-code>
+              <integer>0xCD</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17C4</integer>
+            </source-pattern>
+            <start-cluster/>
+            <direct-code>
+              <integer>0xCD</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x20</integer>
+            </direct-code>
+            <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l" x-direction="right" x-amount="5"/>
+            <direct-code>
+              <integer>0xBA</integer>
+            </direct-code>
+            <end-cluster/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17C5</integer>
+            </source-pattern>
+            <start-cluster/>
+            <direct-code>
+              <integer>0xCD</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x20</integer>
+            </direct-code>
+            <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l" x-direction="right" x-amount="5"/>
+            <direct-code>
+              <integer>0xD0</integer>
+            </direct-code>
+            <end-cluster/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17C6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xD1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17C7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xD3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17C8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x3A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17C9</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xF6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <from-code>
+              <integer>0x17CA</integer>
+            </from-code>
+            <to-code>
+              <integer>0x17CB</integer>
+            </to-code>
+            <direct-code>
+              <integer>0xF4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17CC</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xF8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17CD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xF7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17CE</integer>
+            </source-pattern>
+            <start-cluster/>
+            <direct-code>
+              <integer>0x20</integer>
+            </direct-code>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="80"/>
+            <direct-code>
+              <integer>0x2B</integer>
+            </direct-code>
+            <end-cluster/>
+          </subst-block>
+          <subst-block>
+            <from-code>
+              <integer>0x17CF</integer>
+            </from-code>
+            <to-code>
+              <integer>0x17D0</integer>
+            </to-code>
+            <direct-code>
+              <integer>0xF9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17D1</integer>
+            </source-pattern>
+            <start-cluster/>
+            <direct-code>
+              <integer>0x20</integer>
+            </direct-code>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="80"/>
+            <direct-code>
+              <integer>0x5F</integer>
+            </direct-code>
+            <end-cluster/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17D2</integer>
+            </source-pattern>
+            <start-cluster/>
+            <direct-code>
+              <integer>0x20</integer>
+            </direct-code>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x5E</integer>
+            </direct-code>
+            <end-cluster/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17D3</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xD1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <from-code>
+              <integer>0x17D4</integer>
+            </from-code>
+            <to-code>
+              <integer>0x17D5</integer>
+            </to-code>
+            <direct-code>
+              <integer>0xFC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17D6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17D7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17D8</integer>
+            </source-pattern>
+            <start-cluster/>
+            <direct-code>
+              <integer>0xFC</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xA6</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xFC</integer>
+            </direct-code>
+            <end-cluster/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17D9</integer>
+            </source-pattern>
+            <start-cluster/>
+            <direct-code>
+              <integer>0x30</integer>
+            </direct-code>
+            <combining-specification v-pos1="c" h-pos1="r" v-pos2="c" h-pos2="l" x-direction="right" x-amount="10"/>
+            <direct-code>
+              <integer>0xD2</integer>
+            </direct-code>
+            <end-cluster/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17DA</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x8D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17DB</integer>
+            </source-pattern>
+            <start-cluster/>
+            <direct-code>
+              <integer>0xFF</integer>
+            </direct-code>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="l" y-direction="down" y-amount="5" x-direction="left" x-amount="10"/>
+            <direct-code>
+              <integer>0xC3</integer>
+            </direct-code>
+            <end-cluster/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17DC</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x53</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <from-code>
+              <integer>0x17E0</integer>
+            </from-code>
+            <to-code>
+              <integer>0x17E9</integer>
+            </to-code>
+            <direct-code>
+              <integer>0x30</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+      <defmacro  fname="conjunct">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x1780</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="l" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xD4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x1781</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="l" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xD5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x1782</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="l" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xD6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x1783</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l"/>
+            <direct-code>
+              <integer>0xD7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x1784</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="l" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xD8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x1785</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="l" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xD9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x1786</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="l" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xDA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x1787</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="l" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xDB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x1788</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l"/>
+            <direct-code>
+              <integer>0xDC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x1789</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="l" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xDE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x178A</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="l" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xE3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x178B</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="l" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xDF</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x178C</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="l" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xE0</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x178D</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l"/>
+            <direct-code>
+              <integer>0xE1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x178E</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="l" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xE2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x178F</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="l" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xE3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x1790</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="l" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xE4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x1791</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="l" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xE5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x1792</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="l" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xE6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x1793</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="l" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xE7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x1794</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l"/>
+            <direct-code>
+              <integer>0xE8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x1795</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="l" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xE9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x1796</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="l" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xEA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x1797</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="l" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xEB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x1798</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="l" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xEC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x1799</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l"/>
+            <direct-code>
+              <integer>0xED</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x179A</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="l" v-pos2="B" h-pos2="c" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xEE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x179B</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="l" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xEF</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x179C</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="l" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xF0</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x179D</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="l" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xD6</integer>
+            </direct-code>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="b" h-pos2="l"/>
+            <direct-code>
+              <integer>0xFA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x179E</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l"/>
+            <direct-code>
+              <integer>0xE8</integer>
+            </direct-code>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="b" h-pos2="l"/>
+            <direct-code>
+              <integer>0xFA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x179F</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l"/>
+            <direct-code>
+              <integer>0xF1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17A0</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="l" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xF2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17A2</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="l" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xF3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17A7</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="l" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xD5</integer>
+            </direct-code>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="b" h-pos2="l"/>
+            <direct-code>
+              <integer>0xC4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17AB</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="l" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xA1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17AF</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="l" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xB4</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+      <defmacro  fname="vowel-and-sign">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17B6</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xBA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17B7</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="l" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xBB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17B8</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="l" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xBD</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17B9</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="l" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xBF</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17BA</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="l" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xC1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17BB</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="r" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xC3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17BC</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="l" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xC5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17BD</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="l" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xC7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17BE</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="l" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xBD</integer>
+            </direct-code>
+            <combining-specification v-pos1="B" h-pos1="l" v-pos2="B" h-pos2="r"/>
+            <direct-code>
+              <integer>0xCD</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17BF</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l"/>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+            <combining-specification v-pos1="B" h-pos1="l" v-pos2="B" h-pos2="r"/>
+            <direct-code>
+              <integer>0xCD</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17C0</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l"/>
+            <direct-code>
+              <integer>0xCB</integer>
+            </direct-code>
+            <combining-specification v-pos1="B" h-pos1="l" v-pos2="B" h-pos2="r"/>
+            <direct-code>
+              <integer>0xCD</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17C1</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="l" v-pos2="B" h-pos2="r"/>
+            <direct-code>
+              <integer>0xCD</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17C2</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="l" v-pos2="B" h-pos2="r"/>
+            <direct-code>
+              <integer>0xCE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17C3</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="l" v-pos2="B" h-pos2="r"/>
+            <direct-code>
+              <integer>0xCF</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17C4</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="l" v-pos2="B" h-pos2="r"/>
+            <direct-code>
+              <integer>0xCD</integer>
+            </direct-code>
+            <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l"/>
+            <direct-code>
+              <integer>0xBA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17C5</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="l" v-pos2="B" h-pos2="r"/>
+            <direct-code>
+              <integer>0xCD</integer>
+            </direct-code>
+            <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l"/>
+            <direct-code>
+              <integer>0xD0</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17C6</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="l" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xD1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17C7</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l"/>
+            <direct-code>
+              <integer>0xD3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17C8</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l"/>
+            <direct-code>
+              <integer>0x3A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17C9</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="l" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xF6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17CA</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="l" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xF4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17CB</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="l" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xF5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17CC</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="l" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xF8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17CD</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="l" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xF7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17CE</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="r" y-direction="up" y-amount="5" x-direction="left" x-amount="5"/>
+            <direct-code>
+              <integer>0x2B</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17CF</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="l" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xF9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17D0</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="l" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xFA</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+    </generator>
+  </first-stage>
+  <stage>
+    <category-table>
+      <category category-value="N">
+        <from-code>
+          <integer>0x00</integer>
+        </from-code>
+        <to-code>
+          <integer>0xFF</integer>
+        </to-code>
+      </category>
+      <category category-value="x">
+        <glyph-code>
+          <integer>0x00</integer>
+        </glyph-code>
+      </category>
+      <category category-value="W">
+        <glyph-code>
+          <integer>0x85</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <glyph-code>
+          <integer>0x89</integer>
+        </glyph-code>
+      </category>
+      <category category-value="W">
+        <from-code>
+          <integer>0x8A</integer>
+        </from-code>
+        <to-code>
+          <integer>0x8B</integer>
+        </to-code>
+      </category>
+      <category category-value="w">
+        <glyph-code>
+          <integer>0x8C</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <from-code>
+          <integer>0x91</integer>
+        </from-code>
+        <to-code>
+          <integer>0x92</integer>
+        </to-code>
+      </category>
+      <category category-value="W">
+        <from-code>
+          <integer>0x93</integer>
+        </from-code>
+        <to-code>
+          <integer>0x94</integer>
+        </to-code>
+      </category>
+      <category category-value="T">
+        <glyph-code>
+          <integer>0x97</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <glyph-code>
+          <integer>0x9F</integer>
+        </glyph-code>
+      </category>
+      <category category-value="W">
+        <glyph-code>
+          <integer>0xA4</integer>
+        </glyph-code>
+      </category>
+      <category category-value="W">
+        <glyph-code>
+          <integer>0xA6</integer>
+        </glyph-code>
+      </category>
+      <category category-value="W">
+        <from-code>
+          <integer>0xA8</integer>
+        </from-code>
+        <to-code>
+          <integer>0xA9</integer>
+        </to-code>
+      </category>
+      <category category-value="w">
+        <glyph-code>
+          <integer>0xAA</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <glyph-code>
+          <integer>0xAC</integer>
+        </glyph-code>
+      </category>
+      <category category-value="w">
+        <glyph-code>
+          <integer>0xAD</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <glyph-code>
+          <integer>0xAF</integer>
+        </glyph-code>
+      </category>
+      <category category-value="n">
+        <from-code>
+          <integer>0xB0</integer>
+        </from-code>
+        <to-code>
+          <integer>0xB3</integer>
+        </to-code>
+      </category>
+      <category category-value="n">
+        <glyph-code>
+          <integer>0xB5</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <from-code>
+          <integer>0xB6</integer>
+        </from-code>
+        <to-code>
+          <integer>0xB7</integer>
+        </to-code>
+      </category>
+      <category category-value="w">
+        <glyph-code>
+          <integer>0xB8</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0xC9</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0xCB</integer>
+        </glyph-code>
+      </category>
+      <category category-value="w">
+        <glyph-code>
+          <integer>0xD7</integer>
+        </glyph-code>
+      </category>
+      <category category-value="w">
+        <from-code>
+          <integer>0xDC</integer>
+        </from-code>
+        <to-code>
+          <integer>0xDE</integer>
+        </to-code>
+      </category>
+      <category category-value="w">
+        <from-code>
+          <integer>0xE1</integer>
+        </from-code>
+        <to-code>
+          <integer>0xE2</integer>
+        </to-code>
+      </category>
+      <category category-value="w">
+        <glyph-code>
+          <integer>0xE8</integer>
+        </glyph-code>
+      </category>
+      <category category-value="w">
+        <glyph-code>
+          <integer>0xED</integer>
+        </glyph-code>
+      </category>
+      <category category-value="w">
+        <glyph-code>
+          <integer>0xF1</integer>
+        </glyph-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" ([^ x]*)x(V)([^ ]*) ">
+            <start-cluster/>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="2">
+              <cond-block>
+                <subst-block>
+                  <source-pattern>
+                    <integer>0xC9</integer>
+                  </source-pattern>
+                  <direct-code>
+                    <integer>0xCA</integer>
+                  </direct-code>
+                </subst-block>
+                <subst-block>
+                  <source-pattern>
+                    <integer>0xCB</integer>
+                  </source-pattern>
+                  <direct-code>
+                    <integer>0xCC</integer>
+                  </direct-code>
+                </subst-block>
+              </cond-block>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp=" ([^ x]*)x([^ ]*) ">
+            <start-cluster/>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp=" (T[^V]*)(V)([^ ]*) ">
+            <start-cluster/>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="2">
+              <cond-block>
+                <subst-block>
+                  <source-pattern>
+                    <integer>0xC9</integer>
+                  </source-pattern>
+                  <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l"/>
+                  <direct-code>
+                    <integer>0xCA</integer>
+                  </direct-code>
+                </subst-block>
+                <subst-block>
+                  <source-pattern>
+                    <integer>0xCB</integer>
+                  </source-pattern>
+                  <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l"/>
+                  <direct-code>
+                    <integer>0xCC</integer>
+                  </direct-code>
+                </subst-block>
+              </cond-block>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp=" ([wn])(V)([^ ]*) ">
+            <start-cluster/>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="2">
+              <cond-block>
+                <subst-block>
+                  <source-pattern>
+                    <integer>0xC9</integer>
+                  </source-pattern>
+                  <direct-code>
+                    <integer>0xCA</integer>
+                  </direct-code>
+                </subst-block>
+                <subst-block>
+                  <source-pattern>
+                    <integer>0xCB</integer>
+                  </source-pattern>
+                  <direct-code>
+                    <integer>0xCC</integer>
+                  </direct-code>
+                </subst-block>
+              </cond-block>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp=" ([^ ]*) ">
+            <start-cluster/>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/KHMR-MULE.fltx b/FLT/KHMR-MULE.fltx
new file mode 100644 (file)
index 0000000..430090d
--- /dev/null
@@ -0,0 +1,936 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="khmr-mule" key1="nil">
+  <font registry="mulekhmer-1"/>
+  <first-stage>
+    <category-table>
+      <category category-value="C">
+        <from-code>
+          <integer>0x1780</integer>
+        </from-code>
+        <to-code>
+          <integer>0x17A2</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x179A</integer>
+        </glyph-code>
+      </category>
+      <category category-value="E">
+        <glyph-code>
+          <integer>0x17A1</integer>
+        </glyph-code>
+      </category>
+      <category category-value="E">
+        <from-code>
+          <integer>0x17A3</integer>
+        </from-code>
+        <to-code>
+          <integer>0x17A4</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x17A5</integer>
+        </from-code>
+        <to-code>
+          <integer>0x17B3</integer>
+        </to-code>
+      </category>
+      <category category-value="Q">
+        <glyph-code>
+          <integer>0x17A7</integer>
+        </glyph-code>
+      </category>
+      <category category-value="Q">
+        <glyph-code>
+          <integer>0x17AB</integer>
+        </glyph-code>
+      </category>
+      <category category-value="Q">
+        <glyph-code>
+          <integer>0x17AF</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <glyph-code>
+          <integer>0x17B2</integer>
+        </glyph-code>
+      </category>
+      <category category-value="E">
+        <from-code>
+          <integer>0x17B4</integer>
+        </from-code>
+        <to-code>
+          <integer>0x17FF</integer>
+        </to-code>
+      </category>
+      <category category-value="v">
+        <from-code>
+          <integer>0x17B6</integer>
+        </from-code>
+        <to-code>
+          <integer>0x17C5</integer>
+        </to-code>
+      </category>
+      <category category-value="S">
+        <glyph-code>
+          <integer>0x17C6</integer>
+        </glyph-code>
+      </category>
+      <category category-value="s">
+        <from-code>
+          <integer>0x17C9</integer>
+        </from-code>
+        <to-code>
+          <integer>0x17CA</integer>
+        </to-code>
+      </category>
+      <category category-value="S">
+        <from-code>
+          <integer>0x17CB</integer>
+        </from-code>
+        <to-code>
+          <integer>0x17D3</integer>
+        </to-code>
+      </category>
+      <category category-value="c">
+        <glyph-code>
+          <integer>0x17D2</integer>
+        </glyph-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="[CR](c[CRQ])?(cR)?s?v?S?">
+            <cond-block>
+              <regexp-block regexp=".(c[CRQ])(cR)?s?v?S?">
+                <start-cluster/>
+                <separator/>
+                <regexp-block regexp="(.)c(.)(c(.))?">
+                  <match-block match-index="1">
+                    <funcall  fname="independent"/>
+                  </match-block>
+                  <match-block match-index="2">
+                    <funcall fname="conjunct"/>
+                  </match-block>
+                  <match-block match-index="4">
+                    <funcall fname="conjunct"/>
+                  </match-block>
+                </regexp-block>
+                <funcall fname="vowel-and-sign"/>
+                <repeat/>
+                <separator/>
+                <end-cluster/>
+              </regexp-block>
+              <regexp-block regexp="[CR][svS][svS]*">
+                <start-cluster/>
+                <separator/>
+                <funcall fname="independent"/>
+                <funcall fname="vowel-and-sign"/>
+                <repeat/>
+                <separator/>
+                <end-cluster/>
+              </regexp-block>
+              <regexp-block regexp=".">
+                <funcall fname="independent"/>
+              </regexp-block>
+            </cond-block>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <funcall fname="independent"/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+      <defmacro fname="independent">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17D8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xD4</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x9B</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xD4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <from-code>
+              <integer>0x1780</integer>
+            </from-code>
+            <to-code>
+              <integer>0x17FF</integer>
+            </to-code>
+            <direct-code>
+              <integer>0x80</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="conjunct">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x1783</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="c"/>
+            <direct-code>
+              <integer>0x43</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x1788</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="c"/>
+            <direct-code>
+              <integer>0x48</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x178D</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="c"/>
+            <direct-code>
+              <integer>0x4D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x1794</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="c"/>
+            <direct-code>
+              <integer>0x54</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x1799</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="c"/>
+            <direct-code>
+              <integer>0x59</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x179A</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="l" v-pos2="B" h-pos2="c" x-direction="right" x-amount="5"/>
+            <direct-code>
+              <integer>0x5A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <from-code>
+              <integer>0x179E</integer>
+            </from-code>
+            <to-code>
+              <integer>0x179F</integer>
+            </to-code>
+            <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="c"/>
+            <direct-code>
+              <integer>0x5E</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <from-code>
+              <integer>0x1780</integer>
+            </from-code>
+            <to-code>
+              <integer>0x17AF</integer>
+            </to-code>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x40</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="vowel-and-sign">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17B6</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l"/>
+            <direct-code>
+              <integer>0xB6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17BB</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="r" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xBB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17BC</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xBC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17BD</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xBD</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17BE</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c"/>
+            <direct-code>
+              <integer>0xB8</integer>
+            </direct-code>
+            <combining-specification v-pos1="B" h-pos1="l" v-pos2="B" h-pos2="r"/>
+            <direct-code>
+              <integer>0xC1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17BF</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="l" v-pos2="B" h-pos2="r"/>
+            <direct-code>
+              <integer>0xC1</integer>
+            </direct-code>
+            <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="c"/>
+            <direct-code>
+              <integer>0x04</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17C0</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="l" v-pos2="B" h-pos2="r"/>
+            <direct-code>
+              <integer>0xC1</integer>
+            </direct-code>
+            <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="c"/>
+            <direct-code>
+              <integer>0x05</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17C1</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="l" v-pos2="B" h-pos2="r"/>
+            <direct-code>
+              <integer>0xC1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17C2</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="l" v-pos2="B" h-pos2="r"/>
+            <direct-code>
+              <integer>0xC2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17C3</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="l" v-pos2="B" h-pos2="r"/>
+            <direct-code>
+              <integer>0xC3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17C4</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="l" v-pos2="B" h-pos2="r"/>
+            <direct-code>
+              <integer>0xC1</integer>
+            </direct-code>
+            <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l"/>
+            <direct-code>
+              <integer>0xB6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17C5</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="l" v-pos2="B" h-pos2="r"/>
+            <direct-code>
+              <integer>0xC1</integer>
+            </direct-code>
+            <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l"/>
+            <direct-code>
+              <integer>0x2D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17C9</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="r" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17CB</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="r" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xCB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x17CE</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="r" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xCE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <from-code>
+              <integer>0x17B7</integer>
+            </from-code>
+            <to-code>
+              <integer>0x17D0</integer>
+            </to-code>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xB7</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+    </generator>
+  </first-stage>
+  <stage>
+    <category-table>
+      <category category-value="E">
+        <from-code>
+          <integer>0x00</integer>
+        </from-code>
+        <to-code>
+          <integer>0xFF</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x04</integer>
+        </from-code>
+        <to-code>
+          <integer>0x05</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0x2D</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0xB6</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <glyph-code>
+          <integer>0xC6</integer>
+        </glyph-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0xCB</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0xCC</integer>
+        </from-code>
+        <to-code>
+          <integer>0xCD</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0xCE</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0xCF</integer>
+        </from-code>
+        <to-code>
+          <integer>0xD0</integer>
+        </to-code>
+      </category>
+      <category category-value="E">
+        <glyph-code>
+          <integer>0xD2</integer>
+        </glyph-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="VC">
+            <copy-glyph/>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" x-direction="left" x-amount="20"/>
+            <copy-glyph/>
+          </regexp-block>
+          <regexp-block regexp="VR">
+            <copy-glyph/>
+            <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="r" x-direction="right" x-amount="20"/>
+            <copy-glyph/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+  <stage>
+    <category-table>
+      <category category-value="E">
+        <from-code>
+          <integer>0x00</integer>
+        </from-code>
+        <to-code>
+          <integer>0xFF</integer>
+        </to-code>
+      </category>
+      <category category-value="c">
+        <from-code>
+          <integer>0x40</integer>
+        </from-code>
+        <to-code>
+          <integer>0x6F</integer>
+        </to-code>
+      </category>
+      <category category-value="n">
+        <glyph-code>
+          <integer>0x49</integer>
+        </glyph-code>
+      </category>
+      <category category-value="y">
+        <glyph-code>
+          <integer>0x59</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x80</integer>
+        </from-code>
+        <to-code>
+          <integer>0xA2</integer>
+        </to-code>
+      </category>
+      <category category-value="N">
+        <glyph-code>
+          <integer>0x89</integer>
+        </glyph-code>
+      </category>
+      <category category-value="Q">
+        <glyph-code>
+          <integer>0xB2</integer>
+        </glyph-code>
+      </category>
+      <category category-value="S">
+        <from-code>
+          <integer>0xC9</integer>
+        </from-code>
+        <to-code>
+          <integer>0xD1</integer>
+        </to-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" [^ ][^ ][^ ]* ">
+            <start-cluster/>
+            <copy-glyph/>
+            <cond-block>
+              <regexp-block regexp="N[cny]">
+                <direct-code>
+                  <integer>0x27</integer>
+                </direct-code>
+                <subst-block>
+                  <source-pattern>
+                    <integer>0x49</integer>
+                  </source-pattern>
+                  <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+                  <direct-code>
+                    <integer>0x28</integer>
+                  </direct-code>
+                </subst-block>
+                <copy-glyph/>
+              </regexp-block>
+              <regexp-block regexp="Qy">
+                <direct-code>
+                  <integer>0x2B</integer>
+                </direct-code>
+              </regexp-block>
+            </cond-block>
+            <copy-glyph/>
+            <repeat/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="[^ ]*">
+            <copy-glyph/>
+            <repeat/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+  <stage>
+    <category-table>
+      <category category-value="n">
+        <from-code>
+          <integer>0x00</integer>
+        </from-code>
+        <to-code>
+          <integer>0x7F</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x04</integer>
+        </from-code>
+        <to-code>
+          <integer>0x05</integer>
+        </to-code>
+      </category>
+      <category category-value="w">
+        <glyph-code>
+          <integer>0x26</integer>
+        </glyph-code>
+      </category>
+      <category category-value="W">
+        <glyph-code>
+          <integer>0x27</integer>
+        </glyph-code>
+      </category>
+      <category category-value="w">
+        <glyph-code>
+          <integer>0x28</integer>
+        </glyph-code>
+      </category>
+      <category category-value="w">
+        <glyph-code>
+          <integer>0x2A</integer>
+        </glyph-code>
+      </category>
+      <category category-value="N">
+        <glyph-code>
+          <integer>0x2C</integer>
+        </glyph-code>
+      </category>
+      <category category-value="w">
+        <glyph-code>
+          <integer>0x43</integer>
+        </glyph-code>
+      </category>
+      <category category-value="w">
+        <from-code>
+          <integer>0x48</integer>
+        </from-code>
+        <to-code>
+          <integer>0x49</integer>
+        </to-code>
+      </category>
+      <category category-value="w">
+        <from-code>
+          <integer>0x4D</integer>
+        </from-code>
+        <to-code>
+          <integer>0x4E</integer>
+        </to-code>
+      </category>
+      <category category-value="r">
+        <glyph-code>
+          <integer>0x5A</integer>
+        </glyph-code>
+      </category>
+      <category category-value="w">
+        <glyph-code>
+          <integer>0x60</integer>
+        </glyph-code>
+      </category>
+      <category category-value="N">
+        <from-code>
+          <integer>0x80</integer>
+        </from-code>
+        <to-code>
+          <integer>0xFF</integer>
+        </to-code>
+      </category>
+      <category category-value="W">
+        <glyph-code>
+          <integer>0x83</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <glyph-code>
+          <integer>0x84</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <glyph-code>
+          <integer>0x87</integer>
+        </glyph-code>
+      </category>
+      <category category-value="W">
+        <from-code>
+          <integer>0x88</integer>
+        </from-code>
+        <to-code>
+          <integer>0x89</integer>
+        </to-code>
+      </category>
+      <category category-value="T">
+        <from-code>
+          <integer>0x8A</integer>
+        </from-code>
+        <to-code>
+          <integer>0x8B</integer>
+        </to-code>
+      </category>
+      <category category-value="W">
+        <from-code>
+          <integer>0x8D</integer>
+        </from-code>
+        <to-code>
+          <integer>0x8E</integer>
+        </to-code>
+      </category>
+      <category category-value="T">
+        <glyph-code>
+          <integer>0x90</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <glyph-code>
+          <integer>0x95</integer>
+        </glyph-code>
+      </category>
+      <category category-value="W">
+        <glyph-code>
+          <integer>0x99</integer>
+        </glyph-code>
+      </category>
+      <category category-value="W">
+        <glyph-code>
+          <integer>0x9B</integer>
+        </glyph-code>
+      </category>
+      <category category-value="W">
+        <from-code>
+          <integer>0x9F</integer>
+        </from-code>
+        <to-code>
+          <integer>0xA0</integer>
+        </to-code>
+      </category>
+      <category category-value="W">
+        <glyph-code>
+          <integer>0xA6</integer>
+        </glyph-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" ([^ ]*) ">
+            <start-cluster/>
+            <match-block match-index="1">
+              <cond-block>
+                <regexp-block regexp="(Wnr)([^V]*)(V)?(.*)">
+                  <copy-glyph/>
+                  <repeat/>
+                </regexp-block>
+                <regexp-block regexp="(Tnr)([^V]*)(V)?(.*)">
+                  <match-block match-index="1">
+                    <copy-glyph/>
+                    <copy-glyph/>
+                    <subst-block>
+                      <source-pattern>
+                        <integer>0x5A</integer>
+                      </source-pattern>
+                      <combining-specification v-pos1="B" h-pos1="l" v-pos2="B" h-pos2="c" x-direction="right" x-amount="5"/>
+                      <direct-code>
+                        <integer>0x20</integer>
+                      </direct-code>
+                    </subst-block>
+                    <copy-glyph/>
+                  </match-block>
+                  <match-block match-index="2">
+                    <copy-glyph/>
+                    <repeat/>
+                  </match-block>
+                  <match-block match-index="3">
+                    <funcall fname="high-deep-YA-IE"/>
+                    <copy-glyph/>
+                  </match-block>
+                  <match-block match-index="4">
+                    <copy-glyph/>
+                    <repeat/>
+                  </match-block>
+                </regexp-block>
+                <regexp-block regexp="(..r)([^V]*)(V)?(.*)">
+                  <match-block match-index="1">
+                    <copy-glyph/>
+                    <copy-glyph/>
+                    <subst-block>
+                      <source-pattern>
+                        <integer>0x5A</integer>
+                      </source-pattern>
+                      <combining-specification v-pos1="B" h-pos1="l" v-pos2="B" h-pos2="c" x-direction="right" x-amount="5"/>
+                      <direct-code>
+                        <integer>0x20</integer>
+                      </direct-code>
+                    </subst-block>
+                    <copy-glyph/>
+                  </match-block>
+                  <match-block match-index="2">
+                    <copy-glyph/>
+                    <repeat/>
+                  </match-block>
+                  <match-block match-index="3">
+                    <funcall fname="deep-YA-IE"/>
+                    <copy-glyph/>
+                  </match-block>
+                  <match-block match-index="4">
+                    <copy-glyph/>
+                    <repeat/>
+                  </match-block>
+                </regexp-block>
+                <regexp-block regexp="(T[nw][^V]*)(V)?(.*)">
+                  <match-block match-index="1">
+                    <copy-glyph/>
+                    <repeat/>
+                  </match-block>
+                  <match-block match-index="2">
+                    <funcall fname="high-deep-YA-IE"/>
+                    <copy-glyph/>
+                  </match-block>
+                  <match-block match-index="3">
+                    <copy-glyph/>
+                    <repeat/>
+                  </match-block>
+                </regexp-block>
+                <regexp-block regexp="(.[nw][^V]*)(V)?(.*)">
+                  <match-block match-index="1">
+                    <copy-glyph/>
+                    <repeat/>
+                  </match-block>
+                  <match-block match-index="2">
+                    <funcall fname="deep-YA-IE"/>
+                    <copy-glyph/>
+                  </match-block>
+                  <match-block match-index="3">
+                    <copy-glyph/>
+                    <repeat/>
+                  </match-block>
+                </regexp-block>
+                <regexp-block regexp="(T^V*)(V)?(.*)">
+                  <match-block match-index="1">
+                    <copy-glyph/>
+                    <repeat/>
+                  </match-block>
+                  <match-block match-index="2">
+                    <funcall fname="high-YA-IE"/>
+                    <copy-glyph/>
+                  </match-block>
+                  <match-block match-index="3">
+                    <copy-glyph/>
+                    <repeat/>
+                  </match-block>
+                </regexp-block>
+                <regexp-block regexp=".*">
+                  <copy-glyph/>
+                  <repeat/>
+                </regexp-block>
+              </cond-block>
+            </match-block>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="[^ ]*">
+            <copy-glyph/>
+            <repeat/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+      <defmacro fname="deep-YA-IE">
+        <subst-block>
+          <from-code>
+            <integer>0x04</integer>
+          </from-code>
+          <to-code>
+            <integer>0x05</integer>
+          </to-code>
+          <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="c"/>
+          <direct-code>
+            <integer>0x24</integer>
+          </direct-code>
+        </subst-block>
+      </defmacro>
+      <defmacro fname="high-deep-YA-IE">
+        <subst-block>
+          <from-code>
+            <integer>0x04</integer>
+          </from-code>
+          <to-code>
+            <integer>0x05</integer>
+          </to-code>
+          <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="c"/>
+          <direct-code>
+            <integer>0x34</integer>
+          </direct-code>
+        </subst-block>
+      </defmacro>
+      <defmacro fname="high-YA-IE">
+        <subst-block>
+          <from-code>
+            <integer>0x04</integer>
+          </from-code>
+          <to-code>
+            <integer>0x05</integer>
+          </to-code>
+          <combining-specification v-pos1="B" h-pos1="r" v-pos2="b" h-pos2="c"/>
+          <direct-code>
+            <integer>0x14</integer>
+          </direct-code>
+        </subst-block>
+      </defmacro>
+    </generator>
+  </stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/KHMR-OTF.fltx b/FLT/KHMR-OTF.fltx
new file mode 100644 (file)
index 0000000..1ac34c1
--- /dev/null
@@ -0,0 +1,596 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="khmr-otf" key1="nil">
+  <font registry="unicode-bmp" family="nil" foundry="nil">
+    <otf-specification script="khmr">
+      <gsub-features>
+        <positive-list>
+          <feature>pres</feature>
+        </positive-list>
+      </gsub-features>
+      <gpos-features>
+        <negative-list/>
+      </gpos-features>
+    </otf-specification>
+  </font>
+  <first-stage>
+    <category-table>
+      <category category-value="E">
+        <from-code>
+          <integer>0x1780</integer>
+        </from-code>
+        <to-code>
+          <integer>0x17FF</integer>
+        </to-code>
+      </category>
+      <category category-value="E">
+        <from-code>
+          <integer>0x19E0</integer>
+        </from-code>
+        <to-code>
+          <integer>0x19FF</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x1780</integer>
+        </from-code>
+        <to-code>
+          <integer>0x17B3</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x179A</integer>
+        </glyph-code>
+      </category>
+      <category category-value="p">
+        <glyph-code>
+          <integer>0x17B6</integer>
+        </glyph-code>
+      </category>
+      <category category-value="a">
+        <from-code>
+          <integer>0x17B7</integer>
+        </from-code>
+        <to-code>
+          <integer>0x17BA</integer>
+        </to-code>
+      </category>
+      <category category-value="b">
+        <from-code>
+          <integer>0x17BB</integer>
+        </from-code>
+        <to-code>
+          <integer>0x17BD</integer>
+        </to-code>
+      </category>
+      <category category-value="A">
+        <glyph-code>
+          <integer>0x17BE</integer>
+        </glyph-code>
+      </category>
+      <category category-value="P">
+        <from-code>
+          <integer>0x17BF</integer>
+        </from-code>
+        <to-code>
+          <integer>0x17C0</integer>
+        </to-code>
+      </category>
+      <category category-value="m">
+        <from-code>
+          <integer>0x17C1</integer>
+        </from-code>
+        <to-code>
+          <integer>0x17C3</integer>
+        </to-code>
+      </category>
+      <category category-value="P">
+        <from-code>
+          <integer>0x17C4</integer>
+        </from-code>
+        <to-code>
+          <integer>0x17C5</integer>
+        </to-code>
+      </category>
+      <category category-value="s">
+        <glyph-code>
+          <integer>0x17C6</integer>
+        </glyph-code>
+      </category>
+      <category category-value="S">
+        <from-code>
+          <integer>0x17C7</integer>
+        </from-code>
+        <to-code>
+          <integer>0x17C8</integer>
+        </to-code>
+      </category>
+      <category category-value="c">
+        <from-code>
+          <integer>0x17C9</integer>
+        </from-code>
+        <to-code>
+          <integer>0x17CA</integer>
+        </to-code>
+      </category>
+      <category category-value="s">
+        <from-code>
+          <integer>0x17CB</integer>
+        </from-code>
+        <to-code>
+          <integer>0x17D1</integer>
+        </to-code>
+      </category>
+      <category category-value="r">
+        <glyph-code>
+          <integer>0x17CC</integer>
+        </glyph-code>
+      </category>
+      <category category-value="H">
+        <glyph-code>
+          <integer>0x17D2</integer>
+        </glyph-code>
+      </category>
+      <category category-value="s">
+        <glyph-code>
+          <integer>0x17D3</integer>
+        </glyph-code>
+      </category>
+      <category category-value="s">
+        <glyph-code>
+          <integer>0x17DD</integer>
+        </glyph-code>
+      </category>
+      <category category-value="N">
+        <glyph-code>
+          <integer>0x200C</integer>
+        </glyph-code>
+      </category>
+      <category category-value="J">
+        <glyph-code>
+          <integer>0x200D</integer>
+        </glyph-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="([CR](r|N?c)?(HCr?)*)(HR(r)?)?((HCr?)*[NJ]?)(m)(s*S?(H[CR])?)">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="8">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="4">
+              <copy-glyph/>
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="5">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="6">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="9">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="([CR](r|N?c)?(HCr?)*)(HR(r)?)?((HCr?)*[NJ]?As*S?(H[CR])?)">
+            <start-cluster/>
+            <separator/>
+            <direct-code>
+              <integer>0x17C1</integer>
+            </direct-code>
+            <match-block match-index="4">
+              <copy-glyph/>
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="5">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="6">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="([CR](r|N?c)?(HCr?)*)(HR(r)?)?((HCr?)*[NJ]?)(p)(s*)(S?(H[CR])?)">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="4">
+              <copy-glyph/>
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="5">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="6">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="9">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="8">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="10">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="([CR](r|N?c)?(HCr?)*)(HR(r)?)?((HCr?)*[NJ]?)(P)(s*)(S?(H[CR])?)">
+            <start-cluster/>
+            <separator/>
+            <direct-code>
+              <integer>0x17C1</integer>
+            </direct-code>
+            <match-block match-index="4">
+              <copy-glyph/>
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="5">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="6">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="9">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="8">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="10">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="([CR](r|N?c)?(HCr?)*)(HR(r)?)?((HCr?)*[NJ]?[b|a]?s*S?(H[CR])?)">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="4">
+              <copy-glyph/>
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="5">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="6">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </first-stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" (m)?(HR)?([CR]c(HCr?)*(N|J)?(a|A))(s*S?)(H[CR])? ">
+            <separator/>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <otf-specification script="khmr">
+                <gsub-features>
+                  <positive-list>
+                    <feature>pref</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="3">
+              <otf-specification script="khmr">
+                <gsub-features>
+                  <positive-list>
+                    <feature>blwf</feature>
+                    <feature>abvf</feature>
+                    <feature>pstf</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="7">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="8">
+              <otf-specification script="khmr">
+                <gsub-features>
+                  <positive-list>
+                    <feature>blwf</feature>
+                    <feature>pstf</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=" (m)?(HR)?([CR]N?c)((HCr?)*)([NJ]?[ba]?)(A)?(s*p?)(P)?(S)?(H[CR])? ">
+            <separator/>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <otf-specification script="khmr">
+                <gsub-features>
+                  <positive-list>
+                    <feature>pref</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="4">
+              <otf-specification script="khmr">
+                <gsub-features>
+                  <positive-list>
+                    <feature>blwf</feature>
+                    <feature>pstf</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="6">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="7">
+              <otf-specification script="khmr">
+                <gsub-features>
+                  <positive-list>
+                    <feature>abvf</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="8">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="9">
+              <otf-specification script="khmr">
+                <gsub-features>
+                  <positive-list>
+                    <feature>pstf</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="10">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="11">
+              <otf-specification script="khmr">
+                <gsub-features>
+                  <positive-list>
+                    <feature>blwf</feature>
+                    <feature>pstf</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=" (m)?(HR)?([CR]r?)((HCr?)*)([NJ]?[ba]?)(A)?(s*p?)(P)?(S)?(H[CR])? ">
+            <separator/>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <otf-specification script="khmr">
+                <gsub-features>
+                  <positive-list>
+                    <feature>pref</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="4">
+              <otf-specification script="khmr">
+                <gsub-features>
+                  <positive-list>
+                    <feature>blwf</feature>
+                    <feature>pstf</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="6">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="7">
+              <otf-specification script="khmr">
+                <gsub-features>
+                  <positive-list>
+                    <feature>abvf</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="8">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="9">
+              <otf-specification script="khmr">
+                <gsub-features>
+                  <positive-list>
+                    <feature>pstf</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="10">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="11">
+              <otf-specification script="khmr">
+                <gsub-features>
+                  <positive-list>
+                    <feature>blwf</feature>
+                    <feature>pstf</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="  "/>
+          <regexp-block regexp="J"/>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" ([^ ]*) ">
+            <match-block match-index="1">
+              <otf-specification script="khmr">
+                <gsub-features>
+                  <positive-list>
+                    <feature>pres</feature>
+                    <feature>blws</feature>
+                    <feature>abvs</feature>
+                    <feature>psts</feature>
+                    <feature>clig</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <left-padding-flag/>
+            <copy-glyph/>
+            <right-padding-flag/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="N"/>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/KNDA-OTF.fltx b/FLT/KNDA-OTF.fltx
new file mode 100644 (file)
index 0000000..bbb1466
--- /dev/null
@@ -0,0 +1,513 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="knda-otf" key1="nil">
+  <font registry="unicode-bmp" family="nil" foundry="nil">
+    <otf-specification script="knda">
+      <gsub-features>
+        <positive-list>
+          <feature>rphf</feature>
+        </positive-list>
+      </gsub-features>
+      <gpos-features>
+        <negative-list/>
+      </gpos-features>
+    </otf-specification>
+  </font>
+  <first-stage>
+    <category-table>
+      <category category-value="X">
+        <from-code>
+          <integer>0x0C80</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0CFF</integer>
+        </to-code>
+      </category>
+      <category category-value="a">
+        <from-code>
+          <integer>0x0C82</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0C83</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x0C85</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0C94</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0C95</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0CB9</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x0CB0</integer>
+        </glyph-code>
+      </category>
+      <category category-value="n">
+        <glyph-code>
+          <integer>0x0CBC</integer>
+        </glyph-code>
+      </category>
+      <category category-value="p">
+        <glyph-code>
+          <integer>0x0CBE</integer>
+        </glyph-code>
+      </category>
+      <category category-value="u">
+        <glyph-code>
+          <integer>0x0CBF</integer>
+        </glyph-code>
+      </category>
+      <category category-value="p">
+        <from-code>
+          <integer>0x0CC1</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0CC4</integer>
+        </to-code>
+      </category>
+      <category category-value="u">
+        <glyph-code>
+          <integer>0x0CC6</integer>
+        </glyph-code>
+      </category>
+      <category category-value="u">
+        <glyph-code>
+          <integer>0x0CCC</integer>
+        </glyph-code>
+      </category>
+      <category category-value="H">
+        <glyph-code>
+          <integer>0x0CCD</integer>
+        </glyph-code>
+      </category>
+      <category category-value="l">
+        <from-code>
+          <integer>0x0CD5</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0CD6</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <glyph-code>
+          <integer>0x0CDE</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x0CE0</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0CE1</integer>
+        </to-code>
+      </category>
+      <category category-value="b">
+        <from-code>
+          <integer>0x0CE2</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0CE3</integer>
+        </to-code>
+      </category>
+      <category category-value="X">
+        <from-code>
+          <integer>0x0964</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0965</integer>
+        </to-code>
+      </category>
+      <category category-value="N">
+        <glyph-code>
+          <integer>0x200C</integer>
+        </glyph-code>
+      </category>
+      <category category-value="J">
+        <glyph-code>
+          <integer>0x200D</integer>
+        </glyph-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0CC0</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0CBF</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x0CD5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0CC7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0CC6</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x0CD5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0CC8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0CC6</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x0CD6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0CCA</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0CC6</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x0CC2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0CCB</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0CC6</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x0CC2</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x0CD5</integer>
+            </direct-code>
+          </subst-block>
+          <regexp-block regexp="(R)(J)(H)">
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </first-stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="(J)?([CR]n?(H[CR]n?)*)(up?l?a?)">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <otf-specification script="knda">
+                <gsub-features>
+                  <positive-list>
+                    <feature>nukt</feature>
+                    <feature>akhn</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="4">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="(J)?([CR]n?(H[CR]n?)*)(p|b)(a)?">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <otf-specification script="knda">
+                <gsub-features>
+                  <positive-list>
+                    <feature>nukt</feature>
+                    <feature>akhn</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="4">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="5">
+              <copy-glyph/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="(J)?([CR]n?(H[CR]n?)*)(a)">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <otf-specification script="knda">
+                <gsub-features>
+                  <positive-list>
+                    <feature>nukt</feature>
+                    <feature>akhn</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="4">
+              <copy-glyph/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="(J)?([CR]n?(H[CR]n?)*)(HN?)?">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <otf-specification script="knda">
+                <gsub-features>
+                  <positive-list>
+                    <feature>nukt</feature>
+                    <feature>akhn</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="4">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="Va?">
+            <start-cluster/>
+            <separator/>
+            <copy-glyph/>
+            <repeat/>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" (RH)?([^N])((H[^N])*)(u|b)?(p)?(l)?(a)? ">
+            <separator/>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="5">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="6">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="3">
+              <funcall fname="move-h"/>
+            </match-block>
+            <match-block match-index="7">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="1">
+              <otf-specification script="knda">
+                <gsub-features>
+                  <positive-list>
+                    <feature>rphf</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="8">
+              <copy-glyph/>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=" (RH)?(.H)((.H)*)N? ">
+            <separator/>
+            <match-block match-index="2">
+              <otf-specification script="knda">
+                <gsub-features>
+                  <positive-list>
+                    <feature>haln</feature>
+                    <feature>psts</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="1">
+              <otf-specification script="knda">
+                <gsub-features>
+                  <positive-list>
+                    <feature>rphf</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=" J(.)((H[^N])*)(u|b)?(p)?(l?a?) ">
+            <separator/>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="4">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="5">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="move-h"/>
+            </match-block>
+            <match-block match-index="6">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=" J(.H)((.H)*)N? ">
+            <separator/>
+            <match-block match-index="1">
+              <otf-specification script="knda">
+                <gsub-features>
+                  <positive-list>
+                    <feature>haln</feature>
+                    <feature>psts</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+      <defmacro  fname="move-h">
+        <cond-block>
+          <regexp-block regexp="(H)(.+)">
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+          </regexp-block>
+        </cond-block>
+      </defmacro>
+    </generator>
+  </stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" ([^ ]+) ">
+            <match-block match-index="1">
+              <otf-specification script="knda">
+                <gsub-features>
+                  <positive-list>
+                    <feature>blwf</feature>
+                    <feature>abvs</feature>
+                    <feature>blws</feature>
+                    <feature>psts</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list>
+                    <feature>abvm</feature>
+                    <feature>blwm</feature>
+                    <feature>dist</feature>
+                  </positive-list>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <left-padding-flag/>
+            <copy-glyph/>
+            <right-padding-flag/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/LAOO-ALICE.fltx b/FLT/LAOO-ALICE.fltx
new file mode 100644 (file)
index 0000000..4f16b44
--- /dev/null
@@ -0,0 +1,1100 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="laoo-alice" key1="nil">
+  <font registry="apple-roman" family="alice0 lao" foundry="nil"/>
+  <first-stage>
+    <category-table>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0E81</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E82</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <glyph-code>
+          <integer>0x0E84</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0E87</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E88</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <glyph-code>
+          <integer>0x0E8A</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <glyph-code>
+          <integer>0x0E8D</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0E94</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E97</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0E99</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E9E</integer>
+        </to-code>
+      </category>
+      <category category-value="c">
+        <glyph-code>
+          <integer>0x0E9B</integer>
+        </glyph-code>
+      </category>
+      <category category-value="c">
+        <glyph-code>
+          <integer>0x0E9D</integer>
+        </glyph-code>
+      </category>
+      <category category-value="c">
+        <glyph-code>
+          <integer>0x0E9F</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0EA1</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0EA3</integer>
+        </to-code>
+      </category>
+      <category category-value="c">
+        <glyph-code>
+          <integer>0x0EA2</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <glyph-code>
+          <integer>0x0EA5</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <glyph-code>
+          <integer>0x0EA7</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0EAA</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0EAB</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0EAD</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0EAE</integer>
+        </to-code>
+      </category>
+      <category category-value="S">
+        <glyph-code>
+          <integer>0x0EAF</integer>
+        </glyph-code>
+      </category>
+      <category category-value="I">
+        <glyph-code>
+          <integer>0x0EB0</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0x0EB1</integer>
+        </glyph-code>
+      </category>
+      <category category-value="I">
+        <glyph-code>
+          <integer>0x0EB2</integer>
+        </glyph-code>
+      </category>
+      <category category-value="A">
+        <glyph-code>
+          <integer>0x0EB3</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x0EB4</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0EB7</integer>
+        </to-code>
+      </category>
+      <category category-value="v">
+        <from-code>
+          <integer>0x0EB8</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0EB9</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0x0EBB</integer>
+        </glyph-code>
+      </category>
+      <category category-value="s">
+        <glyph-code>
+          <integer>0x0EBC</integer>
+        </glyph-code>
+      </category>
+      <category category-value="I">
+        <glyph-code>
+          <integer>0x0EBD</integer>
+        </glyph-code>
+      </category>
+      <category category-value="I">
+        <from-code>
+          <integer>0x0EC0</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0EC4</integer>
+        </to-code>
+      </category>
+      <category category-value="S">
+        <glyph-code>
+          <integer>0x0EC6</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <from-code>
+          <integer>0x0EC8</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0ECC</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0x0ECD</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0EDC</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0EDD</integer>
+        </to-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="(Cs?)(T?A)">
+            <start-cluster/>
+            <match-block match-index="1">
+              <funcall  fname="independent"/>
+              <funcall  fname="semi-vowel"/>
+            </match-block>
+            <match-block match-index="2">
+              <funcall  fname="am-after-normal-c"/>
+            </match-block>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="(cs?)(T?A)">
+            <start-cluster/>
+            <match-block match-index="1">
+              <funcall  fname="independent"/>
+              <funcall  fname="semi-vowel"/>
+            </match-block>
+            <match-block match-index="2">
+              <funcall  fname="am-after-tall-c"/>
+            </match-block>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="(Cs?)([vV]?T?)">
+            <start-cluster/>
+            <match-block match-index="1">
+              <funcall  fname="independent"/>
+              <funcall  fname="semi-vowel"/>
+            </match-block>
+            <match-block match-index="2">
+              <funcall  fname="vowel-tone-after-c"/>
+              <repeat/>
+            </match-block>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="(cs?)([vV]?T?)">
+            <start-cluster/>
+            <match-block match-index="1">
+              <funcall fname="independent"/>
+              <funcall fname="semi-vowel"/>
+            </match-block>
+            <match-block match-index="2">
+              <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l" x-direction="right" x-amount="5"/>
+              <funcall fname="vowel-tone-after-c"/>
+              <repeat/>
+            </match-block>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="[sVvTA]">
+            <left-padding-flag/>
+            <funcall fname="isolated-dependent"/>
+            <right-padding-flag/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <funcall fname="independent"/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+      <defmacro fname="independent">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E81</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E82</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E84</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E87</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E88</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E8A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E8D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E94</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E95</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xAA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E96</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xAB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E97</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xEA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E99</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xAD</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E9A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xAE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E9B</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xAF</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E9C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB0</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E9D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E9E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E9F</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EA1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EA2</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EA3</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xEB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EA5</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xEC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EA7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EAA</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EAB</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EAD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xBA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EAE</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xBB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB0</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xBD</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB2</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xBE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB3</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xBF</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB4</integer>
+            </source-pattern>
+            <left-padding-flag/>
+            <direct-code>
+              <integer>0xF2</integer>
+            </direct-code>
+            <right-padding-flag/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EBD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xBC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EC0</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC0</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EC1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EC2</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EC3</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EC4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EC6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EC6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EDC</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xCE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EDD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xCF</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="semi-vowel">
+        <subst-block>
+          <source-pattern>
+            <integer>0x0EBC</integer>
+          </source-pattern>
+          <direct-code>
+            <integer>0xF9</integer>
+          </direct-code>
+        </subst-block>
+      </defmacro>
+      <defmacro fname="am-after-normal-c">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB3</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xED</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EC8</integer>
+              <integer>0x0EB3</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xEE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EC9</integer>
+              <integer>0x0EB3</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xEF</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0ECA</integer>
+              <integer>0x0EB3</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFC</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xED</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0ECB</integer>
+              <integer>0x0EB3</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFD</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xED</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0ECC</integer>
+              <integer>0x0EB3</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFE</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xED</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="am-after-tall-c">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB3</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xD6</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xBE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EC8</integer>
+              <integer>0x0EB3</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xD2</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xBE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EC9</integer>
+              <integer>0x0EB3</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xD3</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xBE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0ECA</integer>
+              <integer>0x0EB3</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFC</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xF0</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xBE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0ECB</integer>
+              <integer>0x0EB3</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFD</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xF0</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xBE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0ECC</integer>
+              <integer>0x0EB3</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFE</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xF0</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xBE</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="vowel-tone-after-c">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB1</integer>
+              <integer>0x0EC8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x84</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB1</integer>
+              <integer>0x0EC9</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x98</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xD7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB4</integer>
+              <integer>0x0EC8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x85</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB4</integer>
+              <integer>0x0EC9</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x99</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xD8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB5</integer>
+              <integer>0x0EC8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x86</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB5</integer>
+              <integer>0x0EC9</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x9A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB5</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xD9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB6</integer>
+              <integer>0x0EC8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x87</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB6</integer>
+              <integer>0x0EC9</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x9B</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xDA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB7</integer>
+              <integer>0x0EC8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x88</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB7</integer>
+              <integer>0x0EC9</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x9C</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xDB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xF7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB9</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xF8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EBB</integer>
+              <integer>0x0EC8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x89</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EBB</integer>
+              <integer>0x0EC9</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x9D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EBB</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xDC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EC8</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="l" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xC8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EC9</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="l" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0ECA</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="l" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xCA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0ECB</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="l" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xCB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0ECC</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="l" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xCC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0ECD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xD6</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="isolated-dependent">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xF1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xF2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB5</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xF3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xF4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xF5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xF7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB9</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xF8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EBB</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xF6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EC8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EC9</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0ECA</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xCA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0ECB</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xCB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0ECC</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xCC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0ECD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xD6</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+    </generator>
+  </first-stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/LAOO-GENERIC.fltx b/FLT/LAOO-GENERIC.fltx
new file mode 100644 (file)
index 0000000..e52ed3f
--- /dev/null
@@ -0,0 +1,300 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="laoo-generic" key1="nil">
+  <font registry="unicode-bmp" family="nil" foundry="nil">
+    <lang-specification>lo</lang-specification>
+  </font>
+  <first-stage>
+    <category-table>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0E81</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E82</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <glyph-code>
+          <integer>0x0E84</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0E87</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E88</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <glyph-code>
+          <integer>0x0E8A</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <glyph-code>
+          <integer>0x0E8D</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0E94</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E97</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0E99</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E9E</integer>
+        </to-code>
+      </category>
+      <category category-value="c">
+        <glyph-code>
+          <integer>0x0E9B</integer>
+        </glyph-code>
+      </category>
+      <category category-value="c">
+        <glyph-code>
+          <integer>0x0E9D</integer>
+        </glyph-code>
+      </category>
+      <category category-value="c">
+        <glyph-code>
+          <integer>0x0E9F</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0EA1</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0EA3</integer>
+        </to-code>
+      </category>
+      <category category-value="c">
+        <glyph-code>
+          <integer>0x0EA2</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <glyph-code>
+          <integer>0x0EA5</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <glyph-code>
+          <integer>0x0EA7</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0EAA</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0EAB</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0EAD</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0EAE</integer>
+        </to-code>
+      </category>
+      <category category-value="S">
+        <glyph-code>
+          <integer>0x0EAF</integer>
+        </glyph-code>
+      </category>
+      <category category-value="I">
+        <glyph-code>
+          <integer>0x0EB0</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0x0EB1</integer>
+        </glyph-code>
+      </category>
+      <category category-value="I">
+        <glyph-code>
+          <integer>0x0EB2</integer>
+        </glyph-code>
+      </category>
+      <category category-value="A">
+        <glyph-code>
+          <integer>0x0EB3</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x0EB4</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0EB7</integer>
+        </to-code>
+      </category>
+      <category category-value="v">
+        <from-code>
+          <integer>0x0EB8</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0EB9</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0x0EBB</integer>
+        </glyph-code>
+      </category>
+      <category category-value="s">
+        <glyph-code>
+          <integer>0x0EBC</integer>
+        </glyph-code>
+      </category>
+      <category category-value="I">
+        <glyph-code>
+          <integer>0x0EBD</integer>
+        </glyph-code>
+      </category>
+      <category category-value="I">
+        <from-code>
+          <integer>0x0EC0</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0EC4</integer>
+        </to-code>
+      </category>
+      <category category-value="S">
+        <glyph-code>
+          <integer>0x0EC6</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <from-code>
+          <integer>0x0EC8</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0ECC</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0x0ECD</integer>
+        </glyph-code>
+      </category>
+      <category category-value="I">
+        <from-code>
+          <integer>0x0ED0</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0ED9</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0EDC</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0EDD</integer>
+        </to-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="(Cs?)(T)?(A)">
+            <start-cluster/>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <copy-glyph/>
+            </match-block>
+            <direct-code>
+              <integer>0x0ECD</integer>
+            </direct-code>
+            <match-block match-index="2">
+              <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="l" y-direction="up" y-amount="5"/>
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="3">
+              <direct-code>
+                <integer>0x0EB2</integer>
+              </direct-code>
+            </match-block>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="(cs?)(T)?(A)">
+            <start-cluster/>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <copy-glyph/>
+            </match-block>
+            <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l" x-direction="right" x-amount="10"/>
+            <direct-code>
+              <integer>0x0ECD</integer>
+            </direct-code>
+            <match-block match-index="2">
+              <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="l" y-direction="up" y-amount="5" x-direction="right" x-amount="10"/>
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="3">
+              <direct-code>
+                <integer>0x0EB2</integer>
+              </direct-code>
+            </match-block>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="(Cs?[vV]?)(T)?">
+            <start-cluster/>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="2">
+              <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="l" y-direction="up" y-amount="5"/>
+              <copy-glyph/>
+            </match-block>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="(cs?)([vV])?(T)?">
+            <start-cluster/>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="2">
+              <cond-block>
+                <regexp-block regexp="v">
+                  <copy-glyph/>
+                </regexp-block>
+                <regexp-block regexp=".">
+                  <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l" x-direction="right" x-amount="10"/>
+                  <copy-glyph/>
+                </regexp-block>
+              </cond-block>
+            </match-block>
+            <match-block match-index="3">
+              <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="l" y-direction="up" y-amount="5" x-direction="right" x-amount="10"/>
+              <copy-glyph/>
+            </match-block>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="[sVvTA]">
+            <left-padding-flag/>
+            <copy-glyph/>
+            <right-padding-flag/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </first-stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/LAOO-MULE.fltx b/FLT/LAOO-MULE.fltx
new file mode 100644 (file)
index 0000000..ed20fa2
--- /dev/null
@@ -0,0 +1,517 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="laoo-mule" key1="nil">
+  <font registry="mulelao-1"/>
+  <first-stage>
+    <category-table>
+      <category category-value="I">
+        <from-code>
+          <integer>0x0E80</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0EDF</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0E81</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E82</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <glyph-code>
+          <integer>0x0E84</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0E87</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E88</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <glyph-code>
+          <integer>0x0E8A</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <glyph-code>
+          <integer>0x0E8D</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0E94</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E97</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0E99</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E9E</integer>
+        </to-code>
+      </category>
+      <category category-value="c">
+        <glyph-code>
+          <integer>0x0E9B</integer>
+        </glyph-code>
+      </category>
+      <category category-value="c">
+        <glyph-code>
+          <integer>0x0E9D</integer>
+        </glyph-code>
+      </category>
+      <category category-value="c">
+        <glyph-code>
+          <integer>0x0E9F</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0EA1</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0EA3</integer>
+        </to-code>
+      </category>
+      <category category-value="c">
+        <glyph-code>
+          <integer>0x0EA2</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <glyph-code>
+          <integer>0x0EA5</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <glyph-code>
+          <integer>0x0EA7</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0EAA</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0EAB</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0EAD</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0EAE</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0x0EB1</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x0EB4</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0EB7</integer>
+        </to-code>
+      </category>
+      <category category-value="v">
+        <from-code>
+          <integer>0x0EB8</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0EB9</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0x0EBB</integer>
+        </glyph-code>
+      </category>
+      <category category-value="s">
+        <glyph-code>
+          <integer>0x0EBC</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <from-code>
+          <integer>0x0EC8</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0ECC</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0x0ECD</integer>
+        </glyph-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="cs?(VT?|v?T)">
+            <start-cluster/>
+            <regexp-block regexp="(cs?)">
+              <funcall fname="independent"/>
+              <funcall fname="semi-vowel"/>
+            </regexp-block>
+            <regexp-block regexp="VT?">
+              <funcall fname="composed-non-relative"/>
+              <funcall fname="composed-relative"/>
+              <repeat/>
+            </regexp-block>
+            <regexp-block regexp=".*">
+              <funcall fname="composed-non-relative"/>
+              <repeat/>
+            </regexp-block>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="Cs?[vV]?T?">
+            <start-cluster/>
+            <funcall fname="independent"/>
+            <funcall fname="semi-vowel"/>
+            <funcall fname="composed-relative"/>
+            <repeat/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="[^Cs]*">
+            <funcall fname="independent"/>
+            <repeat/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+      <defmacro fname="independent">
+        <subst-block>
+          <from-code>
+            <integer>0x0E80</integer>
+          </from-code>
+          <to-code>
+            <integer>0x0EDF</integer>
+          </to-code>
+          <direct-code>
+            <integer>0xA0</integer>
+          </direct-code>
+        </subst-block>
+      </defmacro>
+      <defmacro  fname="composed-relative">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB1</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xD1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB4</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xD4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB5</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xD5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB6</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xD6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB7</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xD7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB8</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xD8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB9</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xD9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EBB</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xDB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EC7</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xE7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EC8</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xE8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EC9</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xE9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0ECA</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xEA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0ECB</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xEB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0ECC</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xEC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0ECD</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xED</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0ECE</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <direct-code>
+              <integer>0xEE</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+      <defmacro  fname="semi-vowel">
+        <subst-block>
+          <source-pattern>
+            <integer>0x0EBC</integer>
+          </source-pattern>
+          <combining-specification v-pos1="B" h-pos1="c" v-pos2="B" h-pos2="c" y-direction="down" y-amount="5"/>
+          <direct-code>
+            <integer>0xDC</integer>
+          </direct-code>
+        </subst-block>
+      </defmacro>
+      <defmacro  fname="composed-non-relative">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB1</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="c" v-pos2="B" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xD1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB4</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="c" v-pos2="B" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xD4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB5</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="c" v-pos2="B" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xD5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB6</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="c" v-pos2="B" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xD6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB7</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="c" v-pos2="B" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xD7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB8</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="c" v-pos2="B" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xD8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EB9</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="c" v-pos2="B" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xD9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0EBB</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="c" v-pos2="B" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xDB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E47</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="c" v-pos2="B" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xE7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E48</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="c" v-pos2="B" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xE8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E49</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="c" v-pos2="B" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xE9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E4A</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="c" v-pos2="B" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xEA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E4B</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="c" v-pos2="B" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xEB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E4C</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="c" v-pos2="B" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xEC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E4D</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="c" v-pos2="B" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xED</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E4E</integer>
+            </source-pattern>
+            <combining-specification v-pos1="B" h-pos1="c" v-pos2="B" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0xEE</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+    </generator>
+  </first-stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/LAOO-OTF.fltx b/FLT/LAOO-OTF.fltx
new file mode 100644 (file)
index 0000000..c1752bb
--- /dev/null
@@ -0,0 +1,174 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="laoo-otf" key1="nil">
+  <font registry="unicode-bmp" family="phetsarath ot" foundry="nil"/>
+  <first-stage>
+    <category-table>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0E81</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0EAE</integer>
+        </to-code>
+      </category>
+      <category category-value="I">
+        <from-code>
+          <integer>0x0EAF</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0EB0</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0x0EB1</integer>
+        </glyph-code>
+      </category>
+      <category category-value="I">
+        <glyph-code>
+          <integer>0x0EB2</integer>
+        </glyph-code>
+      </category>
+      <category category-value="A">
+        <glyph-code>
+          <integer>0x0EB3</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x0EB4</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0EBB</integer>
+        </to-code>
+      </category>
+      <category category-value="S">
+        <glyph-code>
+          <integer>0x0EBC</integer>
+        </glyph-code>
+      </category>
+      <category category-value="I">
+        <from-code>
+          <integer>0x0EBD</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0EC6</integer>
+        </to-code>
+      </category>
+      <category category-value="T">
+        <from-code>
+          <integer>0x0EC8</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0ECC</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0x0ECD</integer>
+        </glyph-code>
+      </category>
+      <category category-value="I">
+        <from-code>
+          <integer>0x0ED0</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0ED9</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0EDC</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0EDD</integer>
+        </to-code>
+      </category>
+      <category category-value="I">
+        <glyph-code>
+          <integer>0x25CC</integer>
+        </glyph-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="(CS?)(T)?A">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <direct-code>
+              <integer>0x0ECD</integer>
+            </direct-code>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+            <direct-code>
+              <integer>0x0EB2</integer>
+            </direct-code>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="CS?V?T?">
+            <start-cluster/>
+            <separator/>
+            <copy-glyph/>
+            <repeat/>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="[SVT]">
+            <start-cluster/>
+            <separator/>
+            <direct-code>
+              <integer>0x25CC</integer>
+            </direct-code>
+            <copy-glyph/>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </first-stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" ([^ ]*) ">
+            <match-block match-index="1">
+              <otf-specification script="lao ">
+                <gsub-features>
+                  <positive-list/>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <left-padding-flag/>
+            <otf-specification script="lao ">
+              <gsub-features>
+                <positive-list/>
+              </gsub-features>
+              <gpos-features>
+                <positive-list/>
+              </gpos-features>
+            </otf-specification>
+            <right-padding-flag/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/MLYM-CDAC.fltx b/FLT/MLYM-CDAC.fltx
new file mode 100644 (file)
index 0000000..ed55edf
--- /dev/null
@@ -0,0 +1,1610 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="mlym-cdac" key1="nil">
+  <font registry="malayalam-cdac"/>
+  <first-stage>
+    <category-table>
+      <category category-value="E">
+        <from-code>
+          <integer>0x0D00</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0D7F</integer>
+        </to-code>
+      </category>
+      <category category-value="A">
+        <glyph-code>
+          <integer>0x0D02</integer>
+        </glyph-code>
+      </category>
+      <category category-value="G">
+        <glyph-code>
+          <integer>0x0D03</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x0D05</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0D14</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0D15</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0D39</integer>
+        </to-code>
+      </category>
+      <category category-value="M">
+        <from-code>
+          <integer>0x0D3E</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0D4C</integer>
+        </to-code>
+      </category>
+      <category category-value="H">
+        <glyph-code>
+          <integer>0x0D4D</integer>
+        </glyph-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="(VA?)|G|((CH)?(CH)?(CH)?CH)?C(H|M?[AH]?)?">
+            <separator/>
+            <funcall  fname="glyph"/>
+            <repeat/>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <funcall  fname="glyph"/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+      <defmacro  fname="glyph">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D02</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x77</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D03</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x78</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D05</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x41</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D06</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x42</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D07</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x43</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D08</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x43</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x75</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D09</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x44</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D0A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x44</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x75</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D0B</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x45</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D0C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x23</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D0E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x46</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D0F</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x47</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D10</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x73</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x46</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D12</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x48</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D13</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x48</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x6D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D14</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x48</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x75</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D15</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D15</integer>
+              <integer>0x0D41</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D15</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D15</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D15</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D33</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D15</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D37</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D15</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D1F</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xCE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D15</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D24</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE0</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D15</integer>
+              <integer>0x0D41</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D15</integer>
+              <integer>0x0D41</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D15</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x49</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D16</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x4A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D17</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D17</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D17</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D32</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D17</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D2E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xDC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D17</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D28</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D17</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x4B</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D18</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x4C</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D19</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D15</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D19</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D19</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D19</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D15</integer>
+              <integer>0x0D41</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D19</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x4D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D1A</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D1A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D1A</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D1B</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xD1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D1A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x4E</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D1B</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x4F</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D1C</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D1C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xD6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D1C</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D1E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xDA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D1C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x50</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D1D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x51</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D1E</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D1A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D1E</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D1E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xAA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D1E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x52</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D1F</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D1F</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xAB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D1F</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x53</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D20</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x54</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D21</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D21</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xCD</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D21</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x55</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D22</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x56</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D23</integer>
+              <integer>0x0D41</integer>
+              <integer>0x0D4D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xAC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D23</integer>
+              <integer>0x0D41</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D23</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D1F</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xAD</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D23</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D23</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xAE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D23</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D2E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xD7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D23</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D21</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xDE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D23</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x57</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D24</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D24</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xAF</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D24</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D25</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB0</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D24</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D38</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xD5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D24</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D2D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xDB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D24</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D2E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xDF</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D24</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x58</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D25</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x59</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D26</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D26</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D26</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D27</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D26</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x5A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D27</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x5B</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D28</integer>
+              <integer>0x0D41</integer>
+              <integer>0x0D4D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D28</integer>
+              <integer>0x0D41</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xEB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D28</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D24</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D28</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D26</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D28</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D28</integer>
+              <integer>0x0D41</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xEC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D28</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D28</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D28</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D2E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D28</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D27</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xD4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D28</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D25</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xD9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D28</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D31</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D28</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x5C</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D2A</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D2A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D2A</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D32</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D2A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x5D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D2B</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x5E</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D2C</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D2C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xBA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D2C</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D32</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xBB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D2C</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D27</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xCF</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D2C</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D26</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xD0</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D2C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x5F</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D2D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x60</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D2E</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D2A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xBC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D2E</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D2E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xBD</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D2E</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D32</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xBE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D2E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x61</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D2F</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x62</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D2F</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D2F</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xBF</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D2F</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D15</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D15</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xED</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D30</integer>
+              <integer>0x0D41</integer>
+              <integer>0x0D4D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC0</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D30</integer>
+              <integer>0x0D41</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xEA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D30</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x63</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D31</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D31</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D31</integer>
+              <integer>0x0D4D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC0</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D31</integer>
+              <integer>0x0D41</integer>
+              <integer>0x0D4D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC0</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D31</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x64</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D32</integer>
+              <integer>0x0D41</integer>
+              <integer>0x0D4D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D32</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D32</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D32</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D2A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D32</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x65</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D33</integer>
+              <integer>0x0D41</integer>
+              <integer>0x0D4D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D33</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D33</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D33</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x66</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D34</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x67</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D35</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D35</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D35</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x68</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D36</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D32</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D36</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D36</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D36</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D1A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xDD</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D36</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x69</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D37</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D1F</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D37</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x6A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D38</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D32</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D38</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D38</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xCA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D38</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D31</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D31</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xCC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D38</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D25</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xD8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D38</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x6B</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D39</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D32</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xCB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D39</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D2E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xD2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D39</integer>
+              <integer>0x0D4D</integer>
+              <integer>0x0D28</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xD3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D39</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x6C</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D3E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x6D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D3F</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x6E</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D40</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x6F</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D41</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x70</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D42</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x71</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D43</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x72</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D46</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x73</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D47</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x74</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D48</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x73</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x73</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D4A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x73</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x6D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D4B</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x74</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x6D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D4C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x75</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D4D</integer>
+              <integer>0x0D2F</integer>
+              <integer>0x0D41</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x7C</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D4D</integer>
+              <integer>0x0D2F</integer>
+              <integer>0x0D42</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x7D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D4D</integer>
+              <integer>0x0D2F</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x79</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D4D</integer>
+              <integer>0x0D30</integer>
+              <integer>0x0D4D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x72</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D4D</integer>
+              <integer>0x0D30</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x7B</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D4D</integer>
+              <integer>0x0D31</integer>
+              <integer>0x0D4D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x72</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D4D</integer>
+              <integer>0x0D31</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x7B</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D4D</integer>
+              <integer>0x0D35</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x7A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D4D</integer>
+              <integer>0x0D4D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x76</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D4D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x76</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D57</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x75</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+    </generator>
+  </first-stage>
+  <stage>
+    <category-table>
+      <category category-value="M">
+        <from-code>
+          <integer>0x00</integer>
+        </from-code>
+        <to-code>
+          <integer>0xFF</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x49</integer>
+        </from-code>
+        <to-code>
+          <integer>0x6C</integer>
+        </to-code>
+      </category>
+      <category category-value="E">
+        <glyph-code>
+          <integer>0x73</integer>
+        </glyph-code>
+      </category>
+      <category category-value="e">
+        <glyph-code>
+          <integer>0x74</integer>
+        </glyph-code>
+      </category>
+      <category category-value="Y">
+        <glyph-code>
+          <integer>0x79</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0x7A</integer>
+        </glyph-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x7B</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0xA1</integer>
+        </from-code>
+        <to-code>
+          <integer>0xE5</integer>
+        </to-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" (C[YV]?)(R) ">
+            <start-cluster/>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp=" (R?C[YV]?)(EE?) ">
+            <start-cluster/>
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp=" (R?C[YV]?)(e) ">
+            <start-cluster/>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp=" ([^ ]*) ">
+            <start-cluster/>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <left-padding-flag/>
+            <copy-glyph/>
+            <right-padding-flag/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/MLYM-OTF.fltx b/FLT/MLYM-OTF.fltx
new file mode 100644 (file)
index 0000000..56cad21
--- /dev/null
@@ -0,0 +1,403 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="mlym-otf" key1="nil">
+  <font registry="unicode-bmp" family="nil" foundry="nil">
+    <otf-specification script="mlym">
+      <gsub-features>
+        <positive-list>
+          <feature>akhn</feature>
+        </positive-list>
+      </gsub-features>
+      <gpos-features>
+        <negative-list/>
+      </gpos-features>
+    </otf-specification>
+  </font>
+  <first-stage>
+    <category-table>
+      <category category-value="X">
+        <from-code>
+          <integer>0x0D00</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0D7F</integer>
+        </to-code>
+      </category>
+      <category category-value="Z">
+        <glyph-code>
+          <integer>0x0D00</integer>
+        </glyph-code>
+      </category>
+      <category category-value="A">
+        <from-code>
+          <integer>0x0D02</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0D03</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x0D05</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0D14</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0D15</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0D39</integer>
+        </to-code>
+      </category>
+      <category category-value="P">
+        <glyph-code>
+          <integer>0x0D2F</integer>
+        </glyph-code>
+      </category>
+      <category category-value="P">
+        <glyph-code>
+          <integer>0x0D35</integer>
+        </glyph-code>
+      </category>
+      <category category-value="p">
+        <from-code>
+          <integer>0x0D3E</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0D44</integer>
+        </to-code>
+      </category>
+      <category category-value="m">
+        <from-code>
+          <integer>0x0D46</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0D48</integer>
+        </to-code>
+      </category>
+      <category category-value="H">
+        <glyph-code>
+          <integer>0x0D4D</integer>
+        </glyph-code>
+      </category>
+      <category category-value="p">
+        <glyph-code>
+          <integer>0x0D57</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x0D60</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0D61</integer>
+        </to-code>
+      </category>
+      <category category-value="b">
+        <from-code>
+          <integer>0x0D62</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0D63</integer>
+        </to-code>
+      </category>
+      <category category-value="X">
+        <from-code>
+          <integer>0x0964</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0965</integer>
+        </to-code>
+      </category>
+      <category category-value="N">
+        <glyph-code>
+          <integer>0x200C</integer>
+        </glyph-code>
+      </category>
+      <category category-value="J">
+        <glyph-code>
+          <integer>0x200D</integer>
+        </glyph-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D4A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0D46</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x0D3E</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D4B</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0D47</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x0D3E</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D4C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0D46</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x0D57</integer>
+            </direct-code>
+          </subst-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </first-stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="([CP](H[CP])*)(m)(p?A?)">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="3">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="1">
+              <funcall  fname="move-h"/>
+            </match-block>
+            <match-block match-index="4">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="([CP](H[CP])*)(bA?|pA?|A)">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="1">
+              <funcall  fname="move-h"/>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="([CP](H[CP])*)(HJ)">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="1">
+              <funcall  fname="move-h"/>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+              <copy-glyph/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="([CP](H[CP])*)(H|HN)?">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="1">
+              <funcall  fname="move-h"/>
+            </match-block>
+            <match-block match-index="3">
+              <direct-code>
+                <integer>0x0D4D</integer>
+              </direct-code>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="VA?">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="0">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+      <defmacro  fname="move-h">
+        <cond-block>
+          <regexp-block regexp="(P)(H)([PH]*)$">
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <direct-code>
+              <integer>0x0D00</integer>
+            </direct-code>
+            <match-block match-index="3">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="([CPH]*C)(H)([PH]+)$">
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <direct-code>
+              <integer>0x0D00</integer>
+            </direct-code>
+            <match-block match-index="3">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp=".+">
+            <copy-glyph/>
+            <repeat/>
+            <direct-code>
+              <integer>0x0D00</integer>
+            </direct-code>
+          </regexp-block>
+        </cond-block>
+      </defmacro>
+    </generator>
+  </stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" (m)?([CPH]*)(Z)([PHbpAJ]*) ">
+            <separator/>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <otf-specification script="mlym">
+                <gsub-features>
+                  <positive-list>
+                    <feature>akhn</feature>
+                    <feature>half</feature>
+                    <feature>pstf</feature>
+                    <feature>pres</feature>
+                    <feature>abvs</feature>
+                    <feature>blws</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="4">
+              <otf-specification script="mlym">
+                <gsub-features>
+                  <positive-list>
+                    <feature>pstf</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" (m)?([^Z ]*)([^Z])Z([^ ]*) ">
+            <separator/>
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="4">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" ([^ ]+) ">
+            <match-block match-index="1">
+              <otf-specification script="mlym">
+                <gsub-features>
+                  <positive-list>
+                    <feature>psts</feature>
+                    <feature>haln</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list>
+                    <feature>abvm</feature>
+                    <feature>blwm</feature>
+                    <feature>dist</feature>
+                  </positive-list>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <left-padding-flag/>
+            <copy-glyph/>
+            <right-padding-flag/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/MLYM-RACHANA.fltx b/FLT/MLYM-RACHANA.fltx
new file mode 100644 (file)
index 0000000..bee62ab
--- /dev/null
@@ -0,0 +1,388 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="mlym-rachana" key1="nil">
+  <font registry="unicode-bmp" family="rachana" foundry="nil"/>
+  <first-stage>
+    <category-table>
+      <category category-value="E">
+        <from-code>
+          <integer>0x0D00</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0D7F</integer>
+        </to-code>
+      </category>
+      <category category-value="A">
+        <from-code>
+          <integer>0x0D02</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0D03</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x0D05</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0D14</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0D15</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0D39</integer>
+        </to-code>
+      </category>
+      <category category-value="p">
+        <from-code>
+          <integer>0x0D3E</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0D43</integer>
+        </to-code>
+      </category>
+      <category category-value="m">
+        <from-code>
+          <integer>0x0D46</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0D48</integer>
+        </to-code>
+      </category>
+      <category category-value="t">
+        <from-code>
+          <integer>0x0D4A</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0D4C</integer>
+        </to-code>
+      </category>
+      <category category-value="H">
+        <glyph-code>
+          <integer>0x0D4D</integer>
+        </glyph-code>
+      </category>
+      <category category-value="p">
+        <glyph-code>
+          <integer>0x0D57</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0x0D60</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0x0D61</integer>
+        </glyph-code>
+      </category>
+      <category category-value="x">
+        <glyph-code>
+          <integer>0x0D7F</integer>
+        </glyph-code>
+      </category>
+      <category category-value="N">
+        <glyph-code>
+          <integer>0x200C</integer>
+        </glyph-code>
+      </category>
+      <category category-value="J">
+        <glyph-code>
+          <integer>0x200D</integer>
+        </glyph-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="((CH)*C)HN">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="1">
+              <otf-specification script="mlym">
+                <gsub-features>
+                  <positive-list>
+                    <feature>akhn</feature>
+                    <feature>psts</feature>
+                    <feature>haln</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <direct-code>
+              <integer>0x0D4D</integer>
+            </direct-code>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="(CH)*(CH)J">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="1">
+              <otf-specification script="mlym">
+                <gsub-features>
+                  <positive-list>
+                    <feature>akhn</feature>
+                    <feature>psts</feature>
+                    <feature>haln</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <otf-specification script="mlym">
+                <gsub-features>
+                  <positive-list>
+                    <feature>haln</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="((CH)*C)(m)(A?)">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="3">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="1">
+              <otf-specification script="mlym">
+                <gsub-features>
+                  <positive-list>
+                    <feature>akhn</feature>
+                    <feature>psts</feature>
+                    <feature>haln</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <direct-code>
+              <integer>0x0D7F</integer>
+            </direct-code>
+            <match-block match-index="4">
+              <copy-glyph/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="((CH)*C)(t)(A?)">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="3">
+              <funcall fname="pre"/>
+            </match-block>
+            <match-block match-index="1">
+              <otf-specification script="mlym">
+                <gsub-features>
+                  <positive-list>
+                    <feature>akhn</feature>
+                    <feature>psts</feature>
+                    <feature>haln</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <direct-code>
+              <integer>0x0D7F</integer>
+            </direct-code>
+            <match-block match-index="3">
+              <funcall fname="post"/>
+            </match-block>
+            <match-block match-index="4">
+              <copy-glyph/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="((CH)*C(pA?|A))">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="1">
+              <otf-specification script="mlym">
+                <gsub-features>
+                  <positive-list>
+                    <feature>akhn</feature>
+                    <feature>psts</feature>
+                    <feature>haln</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="((CH)*C(H?))">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="1">
+              <otf-specification script="mlym">
+                <gsub-features>
+                  <positive-list>
+                    <feature>akhn</feature>
+                    <feature>psts</feature>
+                    <feature>haln</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="(VA?)">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="[Apmt]">
+            <left-padding-flag/>
+            <copy-glyph/>
+            <right-padding-flag/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+      <defmacro  fname="pre">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D4A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0D46</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D4B</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0D47</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D4C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0D46</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="post">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D4A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0D3E</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D4B</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0D3E</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0D4C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0D57</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+    </generator>
+  </first-stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" (m)([^x]*)([^x])x([^ ]*) ">
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="4">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" ([^ ]*) ">
+            <match-block match-index="1">
+              <otf-specification script="mlym">
+                <gsub-features>
+                  <positive-list/>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/MYMR-MYAZEDI.fltx b/FLT/MYMR-MYAZEDI.fltx
new file mode 100644 (file)
index 0000000..4318084
--- /dev/null
@@ -0,0 +1,1528 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="mymr-myazedi" key1="nil">
+  <font registry="unicode-bmp" family="myazedi_m17n" foundry="nil"/>
+  <first-stage>
+    <category-table>
+      <category category-value="O">
+        <from-code>
+          <integer>0x1000</integer>
+        </from-code>
+        <to-code>
+          <integer>0x107F</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x1000</integer>
+        </from-code>
+        <to-code>
+          <integer>0x1021</integer>
+        </to-code>
+      </category>
+      <category category-value="c">
+        <from-code>
+          <integer>0x1000</integer>
+        </from-code>
+        <to-code>
+          <integer>0x1003</integer>
+        </to-code>
+      </category>
+      <category category-value="K">
+        <glyph-code>
+          <integer>0x1004</integer>
+        </glyph-code>
+      </category>
+      <category category-value="c">
+        <from-code>
+          <integer>0x1005</integer>
+        </from-code>
+        <to-code>
+          <integer>0x1008</integer>
+        </to-code>
+      </category>
+      <category category-value="c">
+        <from-code>
+          <integer>0x100B</integer>
+        </from-code>
+        <to-code>
+          <integer>0x100C</integer>
+        </to-code>
+      </category>
+      <category category-value="c">
+        <from-code>
+          <integer>0x100F</integer>
+        </from-code>
+        <to-code>
+          <integer>0x1019</integer>
+        </to-code>
+      </category>
+      <category category-value="c">
+        <glyph-code>
+          <integer>0xE014</integer>
+        </glyph-code>
+      </category>
+      <category category-value="c">
+        <glyph-code>
+          <integer>0xE01B</integer>
+        </glyph-code>
+      </category>
+      <category category-value="n">
+        <glyph-code>
+          <integer>0x1014</integer>
+        </glyph-code>
+      </category>
+      <category category-value="c">
+        <glyph-code>
+          <integer>0x101C</integer>
+        </glyph-code>
+      </category>
+      <category category-value="M">
+        <glyph-code>
+          <integer>0x101A</integer>
+        </glyph-code>
+      </category>
+      <category category-value="M">
+        <glyph-code>
+          <integer>0x101B</integer>
+        </glyph-code>
+      </category>
+      <category category-value="M">
+        <glyph-code>
+          <integer>0x101D</integer>
+        </glyph-code>
+      </category>
+      <category category-value="M">
+        <glyph-code>
+          <integer>0x101F</integer>
+        </glyph-code>
+      </category>
+      <category category-value="I">
+        <from-code>
+          <integer>0x1021</integer>
+        </from-code>
+        <to-code>
+          <integer>0x102A</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x102C</integer>
+        </from-code>
+        <to-code>
+          <integer>0x1032</integer>
+        </to-code>
+      </category>
+      <category category-value="A">
+        <glyph-code>
+          <integer>0x1036</integer>
+        </glyph-code>
+      </category>
+      <category category-value="S">
+        <from-code>
+          <integer>0x1037</integer>
+        </from-code>
+        <to-code>
+          <integer>0x1038</integer>
+        </to-code>
+      </category>
+      <category category-value="H">
+        <glyph-code>
+          <integer>0x1039</integer>
+        </glyph-code>
+      </category>
+      <category category-value="N">
+        <glyph-code>
+          <integer>0x200C</integer>
+        </glyph-code>
+      </category>
+      <category category-value="J">
+        <glyph-code>
+          <integer>0x200D</integer>
+        </glyph-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="(KHJ)([CcnKMr](H[CcnK])?)((HM)*)(V*A?H?)(N)?(S*)">
+            <separator/>
+            <start-cluster/>
+            <match-block match-index="1">
+              <direct-code>
+                <integer>0xE390</integer>
+              </direct-code>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="consonant"/>
+            </match-block>
+            <match-block match-index="4">
+              <funcall  fname="remove-halant"/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="6">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="7"/>
+            <match-block match-index="8">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <end-cluster/>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp="KHJ">
+            <left-padding-flag/>
+            <direct-code>
+              <integer>0xE390</integer>
+            </direct-code>
+            <right-padding-flag/>
+          </regexp-block>
+          <regexp-block regexp="([CcnKMr](H[CcnK])?)((HM)*)(V*A?H?)(N)?(S*)">
+            <separator/>
+            <start-cluster/>
+            <match-block match-index="1">
+              <funcall  fname="consonant"/>
+            </match-block>
+            <match-block match-index="3">
+              <funcall  fname="remove-halant"/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="5">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="6"/>
+            <match-block match-index="7">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <end-cluster/>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp="IV*[AS]*">
+            <separator/>
+            <start-cluster/>
+            <copy-glyph/>
+            <repeat/>
+            <end-cluster/>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <left-padding-flag/>
+            <copy-glyph/>
+            <right-padding-flag/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+      <defmacro fname="consonant">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x100B</integer>
+              <integer>0x1039</integer>
+              <integer>0x100C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE10C</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x100D</integer>
+              <integer>0x1039</integer>
+              <integer>0x100D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE00D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x100E</integer>
+              <integer>0x1039</integer>
+              <integer>0x100D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE10D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x100F</integer>
+              <integer>0x1039</integer>
+              <integer>0x100D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE20D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x101E</integer>
+              <integer>0x1039</integer>
+              <integer>0x101E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE01E</integer>
+            </direct-code>
+          </subst-block>
+          <regexp-block regexp="(n)H([cn])">
+            <direct-code>
+              <integer>0xE140</integer>
+            </direct-code>
+            <match-block match-index="2">
+              <funcall  fname="subscript"/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="(.)H([cn])">
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <funcall  fname="subscript"/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="(.)H(.)">
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="subscript">
+        <cond-block>
+          <subst-block>
+            <from-code>
+              <integer>0x1000</integer>
+            </from-code>
+            <to-code>
+              <integer>0x101C</integer>
+            </to-code>
+            <direct-code>
+              <integer>0xE000</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="remove-halant">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x1039</integer>
+            </source-pattern>
+          </subst-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+      </defmacro>
+    </generator>
+  </first-stage>
+  <stage>
+    <category-table>
+      <category category-value="O">
+        <from-code>
+          <integer>0x1000</integer>
+        </from-code>
+        <to-code>
+          <integer>0x107F</integer>
+        </to-code>
+      </category>
+      <category category-value="W">
+        <from-code>
+          <integer>0x1000</integer>
+        </from-code>
+        <to-code>
+          <integer>0x1021</integer>
+        </to-code>
+      </category>
+      <category category-value="S">
+        <from-code>
+          <integer>0x1001</integer>
+        </from-code>
+        <to-code>
+          <integer>0x1002</integer>
+        </to-code>
+      </category>
+      <category category-value="S">
+        <from-code>
+          <integer>0x1004</integer>
+        </from-code>
+        <to-code>
+          <integer>0x1005</integer>
+        </to-code>
+      </category>
+      <category category-value="S">
+        <from-code>
+          <integer>0x1007</integer>
+        </from-code>
+        <to-code>
+          <integer>0x1008</integer>
+        </to-code>
+      </category>
+      <category category-value="S">
+        <from-code>
+          <integer>0x100B</integer>
+        </from-code>
+        <to-code>
+          <integer>0x100E</integer>
+        </to-code>
+      </category>
+      <category category-value="S">
+        <from-code>
+          <integer>0x1012</integer>
+        </from-code>
+        <to-code>
+          <integer>0x1017</integer>
+        </to-code>
+      </category>
+      <category category-value="S">
+        <glyph-code>
+          <integer>0x1019</integer>
+        </glyph-code>
+      </category>
+      <category category-value="a">
+        <glyph-code>
+          <integer>0x101A</integer>
+        </glyph-code>
+      </category>
+      <category category-value="b">
+        <glyph-code>
+          <integer>0x101B</integer>
+        </glyph-code>
+      </category>
+      <category category-value="d">
+        <glyph-code>
+          <integer>0x101D</integer>
+        </glyph-code>
+      </category>
+      <category category-value="f">
+        <glyph-code>
+          <integer>0x101F</integer>
+        </glyph-code>
+      </category>
+      <category category-value="S">
+        <glyph-code>
+          <integer>0x1020</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x102D</integer>
+        </from-code>
+        <to-code>
+          <integer>0x102E</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0x1032</integer>
+        </glyph-code>
+      </category>
+      <category category-value="N">
+        <glyph-code>
+          <integer>0x200C</integer>
+        </glyph-code>
+      </category>
+      <category category-value="O">
+        <from-code>
+          <integer>0xE000</integer>
+        </from-code>
+        <to-code>
+          <integer>0xE3FF</integer>
+        </to-code>
+      </category>
+      <category category-value="w">
+        <from-code>
+          <integer>0xE000</integer>
+        </from-code>
+        <to-code>
+          <integer>0xE01E</integer>
+        </to-code>
+      </category>
+      <category category-value="s">
+        <from-code>
+          <integer>0xE001</integer>
+        </from-code>
+        <to-code>
+          <integer>0xE002</integer>
+        </to-code>
+      </category>
+      <category category-value="s">
+        <glyph-code>
+          <integer>0xE005</integer>
+        </glyph-code>
+      </category>
+      <category category-value="s">
+        <glyph-code>
+          <integer>0xE007</integer>
+        </glyph-code>
+      </category>
+      <category category-value="s">
+        <glyph-code>
+          <integer>0xE00B</integer>
+        </glyph-code>
+      </category>
+      <category category-value="s">
+        <from-code>
+          <integer>0xE012</integer>
+        </from-code>
+        <to-code>
+          <integer>0xE017</integer>
+        </to-code>
+      </category>
+      <category category-value="s">
+        <glyph-code>
+          <integer>0xE019</integer>
+        </glyph-code>
+      </category>
+      <category category-value="s">
+        <from-code>
+          <integer>0xE10C</integer>
+        </from-code>
+        <to-code>
+          <integer>0xE10D</integer>
+        </to-code>
+      </category>
+      <category category-value="s">
+        <glyph-code>
+          <integer>0xE140</integer>
+        </glyph-code>
+      </category>
+      <category category-value="w">
+        <glyph-code>
+          <integer>0xE20D</integer>
+        </glyph-code>
+      </category>
+      <category category-value="K">
+        <glyph-code>
+          <integer>0xE390</integer>
+        </glyph-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" (K)?([WSabdfws][WSKws]?[abdf][abdf]*[^ ]*) ">
+            <separator/>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <funcall  fname="medial"/>
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=" ([^ ]*) ">
+            <copy-glyph/>
+            <repeat/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+      <defmacro fname="medial">
+        <cond-block>
+          <regexp-block regexp="(..?)adf">
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <direct-code>
+              <integer>0xE1A2</integer>
+            </direct-code>
+          </regexp-block>
+          <regexp-block regexp="(..?)ad">
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <direct-code>
+              <integer>0xE1A4</integer>
+            </direct-code>
+          </regexp-block>
+          <regexp-block regexp="(..?)af">
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <direct-code>
+              <integer>0xE1A3</integer>
+            </direct-code>
+          </regexp-block>
+          <regexp-block regexp="(..?)a">
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <direct-code>
+              <integer>0xE1A1</integer>
+            </direct-code>
+          </regexp-block>
+          <regexp-block regexp="([Waf]|.[Ww])bdf">
+            <direct-code>
+              <integer>0xE1BA</integer>
+            </direct-code>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="(..?)bdf">
+            <direct-code>
+              <integer>0xE1B9</integer>
+            </direct-code>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="([Waf]|.[Ww])bd">
+            <direct-code>
+              <integer>0xE1B8</integer>
+            </direct-code>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="(..?)bd">
+            <direct-code>
+              <integer>0xE1B7</integer>
+            </direct-code>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="([Waf]|.[Ww])b(f)?(V)">
+            <direct-code>
+              <integer>0xE1B6</integer>
+            </direct-code>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="2">
+              <direct-code>
+                <integer>0xE1F3</integer>
+              </direct-code>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="(..?)b(f)?(V)">
+            <direct-code>
+              <integer>0xE1B5</integer>
+            </direct-code>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="2">
+              <direct-code>
+                <integer>0xE1F3</integer>
+              </direct-code>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="([Sd][Ww])b">
+            <direct-code>
+              <integer>0xE1B4</integer>
+            </direct-code>
+            <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l" x-direction="left" x-amount="32"/>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="([Waf].|.[Ww])b">
+            <direct-code>
+              <integer>0xE1B4</integer>
+            </direct-code>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="(s|..)b">
+            <direct-code>
+              <integer>0xE1B3</integer>
+            </direct-code>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="([Waf])b(f)?">
+            <direct-code>
+              <integer>0xE1B2</integer>
+            </direct-code>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="2">
+              <direct-code>
+                <integer>0xE1F3</integer>
+              </direct-code>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="(.)b(f)?">
+            <direct-code>
+              <integer>0xE1B1</integer>
+            </direct-code>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="2">
+              <direct-code>
+                <integer>0xE1F3</integer>
+              </direct-code>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="(..?)df">
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <direct-code>
+              <integer>0xE1D1</integer>
+            </direct-code>
+          </regexp-block>
+          <regexp-block regexp="(..?)d">
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <direct-code>
+              <integer>0xE01D</integer>
+            </direct-code>
+          </regexp-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x100A</integer>
+              <integer>0x101F</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x100A</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xE1F3</integer>
+            </direct-code>
+          </subst-block>
+          <regexp-block regexp="(..?)f">
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <direct-code>
+              <integer>0xE1F1</integer>
+            </direct-code>
+          </regexp-block>
+        </cond-block>
+      </defmacro>
+    </generator>
+  </stage>
+  <stage>
+    <category-table>
+      <category category-value="O">
+        <from-code>
+          <integer>0x1000</integer>
+        </from-code>
+        <to-code>
+          <integer>0x107F</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x1000</integer>
+        </from-code>
+        <to-code>
+          <integer>0x1021</integer>
+        </to-code>
+      </category>
+      <category category-value="c">
+        <from-code>
+          <integer>0x1001</integer>
+        </from-code>
+        <to-code>
+          <integer>0x1002</integer>
+        </to-code>
+      </category>
+      <category category-value="c">
+        <glyph-code>
+          <integer>0x1004</integer>
+        </glyph-code>
+      </category>
+      <category category-value="c">
+        <glyph-code>
+          <integer>0x1012</integer>
+        </glyph-code>
+      </category>
+      <category category-value="c">
+        <glyph-code>
+          <integer>0x1015</integer>
+        </glyph-code>
+      </category>
+      <category category-value="c">
+        <glyph-code>
+          <integer>0x101D</integer>
+        </glyph-code>
+      </category>
+      <category category-value="b">
+        <glyph-code>
+          <integer>0x1008</integer>
+        </glyph-code>
+      </category>
+      <category category-value="b">
+        <from-code>
+          <integer>0x100A</integer>
+        </from-code>
+        <to-code>
+          <integer>0x100D</integer>
+        </to-code>
+      </category>
+      <category category-value="b">
+        <glyph-code>
+          <integer>0x1020</integer>
+        </glyph-code>
+      </category>
+      <category category-value="b">
+        <glyph-code>
+          <integer>0x1025</integer>
+        </glyph-code>
+      </category>
+      <category category-value="A">
+        <glyph-code>
+          <integer>0x102C</integer>
+        </glyph-code>
+      </category>
+      <category category-value="i">
+        <glyph-code>
+          <integer>0x102D</integer>
+        </glyph-code>
+      </category>
+      <category category-value="I">
+        <glyph-code>
+          <integer>0x102E</integer>
+        </glyph-code>
+      </category>
+      <category category-value="u">
+        <glyph-code>
+          <integer>0x102F</integer>
+        </glyph-code>
+      </category>
+      <category category-value="U">
+        <glyph-code>
+          <integer>0x1030</integer>
+        </glyph-code>
+      </category>
+      <category category-value="e">
+        <glyph-code>
+          <integer>0x1031</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0x1032</integer>
+        </glyph-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x1036</integer>
+        </from-code>
+        <to-code>
+          <integer>0x1038</integer>
+        </to-code>
+      </category>
+      <category category-value="H">
+        <glyph-code>
+          <integer>0x1039</integer>
+        </glyph-code>
+      </category>
+      <category category-value="N">
+        <glyph-code>
+          <integer>0x200C</integer>
+        </glyph-code>
+      </category>
+      <category category-value="J">
+        <glyph-code>
+          <integer>0x200D</integer>
+        </glyph-code>
+      </category>
+      <category category-value="O">
+        <from-code>
+          <integer>0xE000</integer>
+        </from-code>
+        <to-code>
+          <integer>0xE3FF</integer>
+        </to-code>
+      </category>
+      <category category-value="b">
+        <from-code>
+          <integer>0xE000</integer>
+        </from-code>
+        <to-code>
+          <integer>0xE01D</integer>
+        </to-code>
+      </category>
+      <category category-value="B">
+        <glyph-code>
+          <integer>0xE140</integer>
+        </glyph-code>
+      </category>
+      <category category-value="b">
+        <from-code>
+          <integer>0xE1A1</integer>
+        </from-code>
+        <to-code>
+          <integer>0xE1B0</integer>
+        </to-code>
+      </category>
+      <category category-value="B">
+        <from-code>
+          <integer>0xE1B1</integer>
+        </from-code>
+        <to-code>
+          <integer>0xE1BA</integer>
+        </to-code>
+      </category>
+      <category category-value="B">
+        <from-code>
+          <integer>0xE1D1</integer>
+        </from-code>
+        <to-code>
+          <integer>0xE1F1</integer>
+        </to-code>
+      </category>
+      <category category-value="b">
+        <glyph-code>
+          <integer>0xE20D</integer>
+        </glyph-code>
+      </category>
+      <category category-value="K">
+        <glyph-code>
+          <integer>0xE390</integer>
+        </glyph-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" K([CcbB]*)(e)([^ ]*) ">
+            <separator/>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="3">
+              <funcall  fname="kinzi-vowel"/>
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=" K([CcbB]*)([^ ]*) ">
+            <separator/>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="2">
+              <funcall  fname="kinzi-vowel"/>
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=" ([CcbB]*)(e)([^ ]*) ">
+            <separator/>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=" ([^ ]*) ">
+            <copy-glyph/>
+            <repeat/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+      <defmacro fname="kinzi-vowel">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x102D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE391</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x102E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE391</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x1036</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE393</integer>
+            </direct-code>
+          </subst-block>
+          <direct-code>
+            <integer>0xE390</integer>
+          </direct-code>
+        </cond-block>
+      </defmacro>
+    </generator>
+  </stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" ([^ ]*) ">
+            <separator/>
+            <match-block match-index="1">
+              <cond-block>
+                <subst-block>
+                  <source-pattern>
+                    <integer>0x1009</integer>
+                    <integer>0x1039</integer>
+                  </source-pattern>
+                  <direct-code>
+                    <integer>0x1025</integer>
+                  </direct-code>
+                  <direct-code>
+                    <integer>0x1039</integer>
+                  </direct-code>
+                </subst-block>
+                <subst-block>
+                  <source-pattern>
+                    <integer>0x1009</integer>
+                    <integer>0xE005</integer>
+                  </source-pattern>
+                  <direct-code>
+                    <integer>0xE109</integer>
+                  </direct-code>
+                  <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l" x-direction="left" x-amount="5"/>
+                  <direct-code>
+                    <integer>0xE005</integer>
+                  </direct-code>
+                </subst-block>
+                <subst-block>
+                  <source-pattern>
+                    <integer>0xE1F1</integer>
+                    <integer>0x102F</integer>
+                  </source-pattern>
+                  <direct-code>
+                    <integer>0xE1F2</integer>
+                  </direct-code>
+                </subst-block>
+                <subst-block>
+                  <source-pattern>
+                    <integer>0xE1F1</integer>
+                    <integer>0x102D</integer>
+                    <integer>0x102F</integer>
+                  </source-pattern>
+                  <direct-code>
+                    <integer>0xE1F2</integer>
+                  </direct-code>
+                  <direct-code>
+                    <integer>0x102D</integer>
+                  </direct-code>
+                </subst-block>
+                <subst-block>
+                  <source-pattern>
+                    <integer>0xE1F1</integer>
+                    <integer>0x102E</integer>
+                    <integer>0x102F</integer>
+                  </source-pattern>
+                  <direct-code>
+                    <integer>0xE1F2</integer>
+                  </direct-code>
+                  <direct-code>
+                    <integer>0x102E</integer>
+                  </direct-code>
+                </subst-block>
+                <subst-block>
+                  <source-pattern>
+                    <integer>0xE1F1</integer>
+                    <integer>0x1032</integer>
+                    <integer>0x102F</integer>
+                  </source-pattern>
+                  <direct-code>
+                    <integer>0xE1F2</integer>
+                  </direct-code>
+                  <direct-code>
+                    <integer>0x1032</integer>
+                  </direct-code>
+                </subst-block>
+                <regexp-block regexp="BcK?A">
+                  <copy-glyph/>
+                  <copy-glyph/>
+                  <copy-glyph/>
+                  <copy-glyph/>
+                </regexp-block>
+                <regexp-block regexp="cAH">
+                  <copy-glyph/>
+                  <direct-code>
+                    <integer>0xE02D</integer>
+                  </direct-code>
+                </regexp-block>
+                <regexp-block regexp="cA">
+                  <copy-glyph/>
+                  <direct-code>
+                    <integer>0xE02C</integer>
+                  </direct-code>
+                </regexp-block>
+                <regexp-block regexp="cKA">
+                  <copy-glyph/>
+                  <copy-glyph/>
+                  <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l" x-direction="left" x-amount="5"/>
+                  <direct-code>
+                    <integer>0xE02C</integer>
+                  </direct-code>
+                </regexp-block>
+                <subst-block>
+                  <source-pattern>
+                    <integer>0x1012</integer>
+                    <integer>0xE012</integer>
+                    <integer>0x102C</integer>
+                    <integer>0x1039</integer>
+                  </source-pattern>
+                  <copy-glyph/>
+                  <copy-glyph/>
+                  <direct-code>
+                    <integer>0xE02D</integer>
+                  </direct-code>
+                </subst-block>
+                <subst-block>
+                  <source-pattern>
+                    <integer>0x1012</integer>
+                    <integer>0xE01D</integer>
+                    <integer>0x102C</integer>
+                    <integer>0x1039</integer>
+                  </source-pattern>
+                  <copy-glyph/>
+                  <copy-glyph/>
+                  <direct-code>
+                    <integer>0xE02D</integer>
+                  </direct-code>
+                </subst-block>
+                <subst-block>
+                  <source-pattern>
+                    <integer>0x1012</integer>
+                    <integer>0xE012</integer>
+                    <integer>0x102C</integer>
+                  </source-pattern>
+                  <copy-glyph/>
+                  <copy-glyph/>
+                  <direct-code>
+                    <integer>0xE02C</integer>
+                  </direct-code>
+                </subst-block>
+                <subst-block>
+                  <source-pattern>
+                    <integer>0x1012</integer>
+                    <integer>0xE01D</integer>
+                    <integer>0x102C</integer>
+                  </source-pattern>
+                  <copy-glyph/>
+                  <copy-glyph/>
+                  <direct-code>
+                    <integer>0xE02C</integer>
+                  </direct-code>
+                </subst-block>
+                <subst-block>
+                  <source-pattern>
+                    <integer>0x102D</integer>
+                    <integer>0x1036</integer>
+                  </source-pattern>
+                  <direct-code>
+                    <integer>0xE2D1</integer>
+                  </direct-code>
+                </subst-block>
+                <regexp-block regexp="([bB][^u]*)u">
+                  <match-block match-index="1">
+                    <copy-glyph/>
+                    <repeat/>
+                  </match-block>
+                  <direct-code>
+                    <integer>0xE2F1</integer>
+                  </direct-code>
+                </regexp-block>
+                <regexp-block regexp="([bB][^u]*)U">
+                  <match-block match-index="1">
+                    <copy-glyph/>
+                    <repeat/>
+                  </match-block>
+                  <direct-code>
+                    <integer>0xE2F2</integer>
+                  </direct-code>
+                </regexp-block>
+                <regexp-block regexp=".">
+                  <copy-glyph/>
+                </regexp-block>
+              </cond-block>
+              <repeat/>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+  <stage>
+    <category-table>
+      <category category-value="O">
+        <from-code>
+          <integer>0x1000</integer>
+        </from-code>
+        <to-code>
+          <integer>0x107F</integer>
+        </to-code>
+      </category>
+      <category category-value="O">
+        <from-code>
+          <integer>0x200C</integer>
+        </from-code>
+        <to-code>
+          <integer>0x200D</integer>
+        </to-code>
+      </category>
+      <category category-value="O">
+        <from-code>
+          <integer>0xE000</integer>
+        </from-code>
+        <to-code>
+          <integer>0xE3FF</integer>
+        </to-code>
+      </category>
+      <category category-value="T">
+        <glyph-code>
+          <integer>0x1014</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <glyph-code>
+          <integer>0x101B</integer>
+        </glyph-code>
+      </category>
+      <category category-value="B">
+        <from-code>
+          <integer>0x102F</integer>
+        </from-code>
+        <to-code>
+          <integer>0x1030</integer>
+        </to-code>
+      </category>
+      <category category-value="b">
+        <glyph-code>
+          <integer>0x1037</integer>
+        </glyph-code>
+      </category>
+      <category category-value="B">
+        <glyph-code>
+          <integer>0xE01D</integer>
+        </glyph-code>
+      </category>
+      <category category-value="B">
+        <glyph-code>
+          <integer>0xE1A1</integer>
+        </glyph-code>
+      </category>
+      <category category-value="B">
+        <glyph-code>
+          <integer>0xE1D1</integer>
+        </glyph-code>
+      </category>
+      <category category-value="L">
+        <from-code>
+          <integer>0xE1B1</integer>
+        </from-code>
+        <to-code>
+          <integer>0xE1BA</integer>
+        </to-code>
+      </category>
+      <category category-value="B">
+        <from-code>
+          <integer>0xE1F1</integer>
+        </from-code>
+        <to-code>
+          <integer>0xE1F2</integer>
+        </to-code>
+      </category>
+      <category category-value="L">
+        <from-code>
+          <integer>0xE2F1</integer>
+        </from-code>
+        <to-code>
+          <integer>0xE2F2</integer>
+        </to-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" ([^ ]*) ">
+            <separator/>
+            <match-block match-index="1">
+              <cond-block>
+                <regexp-block regexp="(T)(B)([OL])?(b)?">
+                  <match-block match-index="1">
+                    <cond-block>
+                      <subst-block>
+                        <source-pattern>
+                          <integer>0x1014</integer>
+                        </source-pattern>
+                        <direct-code>
+                          <integer>0xE140</integer>
+                        </direct-code>
+                      </subst-block>
+                      <subst-block>
+                        <source-pattern>
+                          <integer>0x101B</integer>
+                        </source-pattern>
+                        <direct-code>
+                          <integer>0xE01B</integer>
+                        </direct-code>
+                      </subst-block>
+                    </cond-block>
+                  </match-block>
+                  <match-block match-index="2">
+                    <copy-glyph/>
+                  </match-block>
+                  <match-block match-index="3">
+                    <copy-glyph/>
+                    <repeat/>
+                  </match-block>
+                  <match-block match-index="4">
+                    <direct-code>
+                      <integer>0xE137</integer>
+                    </direct-code>
+                  </match-block>
+                </regexp-block>
+                <regexp-block regexp="([TBL])(O*)?(b)">
+                  <match-block match-index="1">
+                    <copy-glyph/>
+                  </match-block>
+                  <match-block match-index="2">
+                    <copy-glyph/>
+                    <repeat/>
+                  </match-block>
+                  <match-block match-index="3">
+                    <direct-code>
+                      <integer>0xE137</integer>
+                    </direct-code>
+                  </match-block>
+                </regexp-block>
+                <regexp-block regexp=".">
+                  <copy-glyph/>
+                </regexp-block>
+              </cond-block>
+              <repeat/>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp="OO*">
+            <copy-glyph/>
+            <repeat/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+  <stage>
+    <category-table>
+      <category category-value="O">
+        <from-code>
+          <integer>0x1000</integer>
+        </from-code>
+        <to-code>
+          <integer>0x107F</integer>
+        </to-code>
+      </category>
+      <category category-value="O">
+        <from-code>
+          <integer>0x200C</integer>
+        </from-code>
+        <to-code>
+          <integer>0x200D</integer>
+        </to-code>
+      </category>
+      <category category-value="O">
+        <from-code>
+          <integer>0xE000</integer>
+        </from-code>
+        <to-code>
+          <integer>0xE3FF</integer>
+        </to-code>
+      </category>
+      <category category-value="n">
+        <from-code>
+          <integer>0x1001</integer>
+        </from-code>
+        <to-code>
+          <integer>0x1002</integer>
+        </to-code>
+      </category>
+      <category category-value="n">
+        <from-code>
+          <integer>0x1004</integer>
+        </from-code>
+        <to-code>
+          <integer>0x1005</integer>
+        </to-code>
+      </category>
+      <category category-value="n">
+        <glyph-code>
+          <integer>0x1007</integer>
+        </glyph-code>
+      </category>
+      <category category-value="n">
+        <glyph-code>
+          <integer>0x100E</integer>
+        </glyph-code>
+      </category>
+      <category category-value="n">
+        <from-code>
+          <integer>0x1012</integer>
+        </from-code>
+        <to-code>
+          <integer>0x1013</integer>
+        </to-code>
+      </category>
+      <category category-value="n">
+        <from-code>
+          <integer>0x1015</integer>
+        </from-code>
+        <to-code>
+          <integer>0x1017</integer>
+        </to-code>
+      </category>
+      <category category-value="n">
+        <glyph-code>
+          <integer>0x1019</integer>
+        </glyph-code>
+      </category>
+      <category category-value="n">
+        <glyph-code>
+          <integer>0x101D</integer>
+        </glyph-code>
+      </category>
+      <category category-value="w">
+        <glyph-code>
+          <integer>0xE000</integer>
+        </glyph-code>
+      </category>
+      <category category-value="w">
+        <glyph-code>
+          <integer>0xE003</integer>
+        </glyph-code>
+      </category>
+      <category category-value="w">
+        <glyph-code>
+          <integer>0xE006</integer>
+        </glyph-code>
+      </category>
+      <category category-value="w">
+        <glyph-code>
+          <integer>0xE00C</integer>
+        </glyph-code>
+      </category>
+      <category category-value="w">
+        <glyph-code>
+          <integer>0xE00F</integer>
+        </glyph-code>
+      </category>
+      <category category-value="w">
+        <from-code>
+          <integer>0xE010</integer>
+        </from-code>
+        <to-code>
+          <integer>0xE011</integer>
+        </to-code>
+      </category>
+      <category category-value="w">
+        <glyph-code>
+          <integer>0xE018</integer>
+        </glyph-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" (n)(w)([^ ]*) ">
+            <left-padding-flag/>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l" x-direction="left" x-amount="17"/>
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp=" ([^ ]*) ">
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/NO-CTL.fltx b/FLT/NO-CTL.fltx
new file mode 100644 (file)
index 0000000..6bc86de
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="no-ctl" key1="nil">
+  <first-stage>
+    <category-table>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0000</integer>
+        </from-code>
+        <to-code>
+          <integer>0x10FFFF</integer>
+        </to-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="C">
+            <left-padding-flag/>
+            <copy-glyph/>
+            <right-padding-flag/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </first-stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/ORYA-OTF.fltx b/FLT/ORYA-OTF.fltx
new file mode 100644 (file)
index 0000000..1a49edb
--- /dev/null
@@ -0,0 +1,826 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="orya-otf" key1="nil">
+  <font registry="unicode-bmp" family="nil" foundry="nil">
+    <otf-specification script="orya">
+      <gsub-features>
+        <positive-list>
+          <feature>rphf</feature>
+        </positive-list>
+      </gsub-features>
+      <gpos-features>
+        <negative-list/>
+      </gpos-features>
+    </otf-specification>
+  </font>
+  <first-stage>
+    <category-table>
+      <category category-value="X">
+        <from-code>
+          <integer>0x0B00</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0B7F</integer>
+        </to-code>
+      </category>
+      <category category-value="Z">
+        <glyph-code>
+          <integer>0x0B00</integer>
+        </glyph-code>
+      </category>
+      <category category-value="a">
+        <from-code>
+          <integer>0x0B01</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0B03</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x0B05</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0B14</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0B15</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0B39</integer>
+        </to-code>
+      </category>
+      <category category-value="B">
+        <glyph-code>
+          <integer>0x0B24</integer>
+        </glyph-code>
+      </category>
+      <category category-value="B">
+        <glyph-code>
+          <integer>0x0B28</integer>
+        </glyph-code>
+      </category>
+      <category category-value="B">
+        <from-code>
+          <integer>0x0B2C</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0B2E</integer>
+        </to-code>
+      </category>
+      <category category-value="Y">
+        <glyph-code>
+          <integer>0x0B2F</integer>
+        </glyph-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x0B30</integer>
+        </glyph-code>
+      </category>
+      <category category-value="B">
+        <from-code>
+          <integer>0x0B32</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0B33</integer>
+        </to-code>
+      </category>
+      <category category-value="B">
+        <glyph-code>
+          <integer>0x0B33</integer>
+        </glyph-code>
+      </category>
+      <category category-value="n">
+        <glyph-code>
+          <integer>0x0B3C</integer>
+        </glyph-code>
+      </category>
+      <category category-value="p">
+        <glyph-code>
+          <integer>0x0B3E</integer>
+        </glyph-code>
+      </category>
+      <category category-value="u">
+        <glyph-code>
+          <integer>0x0B3F</integer>
+        </glyph-code>
+      </category>
+      <category category-value="p">
+        <glyph-code>
+          <integer>0x0B40</integer>
+        </glyph-code>
+      </category>
+      <category category-value="b">
+        <from-code>
+          <integer>0x0B41</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0B44</integer>
+        </to-code>
+      </category>
+      <category category-value="m">
+        <glyph-code>
+          <integer>0x0B47</integer>
+        </glyph-code>
+      </category>
+      <category category-value="t">
+        <from-code>
+          <integer>0x0B48</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0B4C</integer>
+        </to-code>
+      </category>
+      <category category-value="H">
+        <glyph-code>
+          <integer>0x0B4D</integer>
+        </glyph-code>
+      </category>
+      <category category-value="u">
+        <glyph-code>
+          <integer>0x0B56</integer>
+        </glyph-code>
+      </category>
+      <category category-value="p">
+        <glyph-code>
+          <integer>0x0B57</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0B5C</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0B5D</integer>
+        </to-code>
+      </category>
+      <category category-value="Y">
+        <glyph-code>
+          <integer>0x0B5F</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x0B60</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0B61</integer>
+        </to-code>
+      </category>
+      <category category-value="b">
+        <from-code>
+          <integer>0x0B62</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0B63</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <glyph-code>
+          <integer>0x0B71</integer>
+        </glyph-code>
+      </category>
+      <category category-value="X">
+        <from-code>
+          <integer>0x0B64</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0B65</integer>
+        </to-code>
+      </category>
+      <category category-value="N">
+        <glyph-code>
+          <integer>0x200C</integer>
+        </glyph-code>
+      </category>
+      <category category-value="J">
+        <glyph-code>
+          <integer>0x200D</integer>
+        </glyph-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0B48</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0B47</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x0B56</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0B4B</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0B47</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x0B3E</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0B4C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0B47</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x0B57</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0B21</integer>
+              <integer>0x0B3C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0B5C</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0B22</integer>
+              <integer>0x0B3C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0B5D</integer>
+            </direct-code>
+          </subst-block>
+          <regexp-block regexp="([CRBY]n?)(J)">
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </first-stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="(J)(([CRBY]n?H)*[CRBY]n?)(m)(u)?(p)?(a)?">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="4">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="pre-below"/>
+            </match-block>
+            <match-block match-index="5">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="post"/>
+            </match-block>
+            <match-block match-index="6">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="7">
+              <copy-glyph/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="(J)(([CRBY]n?H)*[CRBY]n?)(([bu])|(p))(a)?">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="pre-below"/>
+            </match-block>
+            <match-block match-index="5">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="post"/>
+            </match-block>
+            <match-block match-index="6">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="7">
+              <copy-glyph/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="(J)(([CRBY]n?H)*[CRBY]n?)(a)">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="pre-below"/>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="post"/>
+            </match-block>
+            <match-block match-index="4">
+              <copy-glyph/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="(J)(([CRBY]n?H)*[CRBY]n?)(HN?)?">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="pre-below"/>
+            </match-block>
+            <match-block match-index="4">
+              <copy-glyph/>
+              <direct-code>
+                <integer>0x200C</integer>
+              </direct-code>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="post"/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="(RH)?(([CRBY]n?H)*[CRBY]n?)(m)(u)?(p)?(a)?">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="4">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="pre-below"/>
+            </match-block>
+            <match-block match-index="5">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="1">
+              <otf-specification script="orya">
+                <gsub-features>
+                  <positive-list>
+                    <feature>rphf</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="post"/>
+            </match-block>
+            <match-block match-index="6">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="7">
+              <copy-glyph/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="(RH)?(([CRBY]n?H)*[CRBY]n?)(([bu])|(p))(a)?">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="2">
+              <funcall fname="pre-below"/>
+            </match-block>
+            <match-block match-index="5">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="1">
+              <otf-specification script="orya">
+                <gsub-features>
+                  <positive-list>
+                    <feature>rphf</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="post"/>
+            </match-block>
+            <match-block match-index="6">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="7">
+              <copy-glyph/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="(RH)?(([CRBY]n?H)*[CRBY]n?)(a)">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="2">
+              <funcall fname="pre-below"/>
+            </match-block>
+            <match-block match-index="1">
+              <otf-specification script="orya">
+                <gsub-features>
+                  <positive-list>
+                    <feature>rphf</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="post"/>
+            </match-block>
+            <match-block match-index="4">
+              <copy-glyph/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="(RH)?(([CRBY]n?H)*[CRBY]n?)(HN?)?">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="2">
+              <funcall fname="pre-below"/>
+            </match-block>
+            <match-block match-index="1">
+              <otf-specification script="orya">
+                <gsub-features>
+                  <positive-list>
+                    <feature>rphf</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="4">
+              <copy-glyph/>
+              <direct-code>
+                <integer>0x200C</integer>
+              </direct-code>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="post"/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="Va?">
+            <start-cluster/>
+            <separator/>
+            <copy-glyph/>
+            <repeat/>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+      <defmacro fname="pre-below">
+        <cond-block>
+          <regexp-block regexp="([CRBYnH]*[CYn])H([RBH]+)[YH]+$">
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <direct-code>
+              <integer>0x0B00</integer>
+            </direct-code>
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="([CRBYnH]*[CYn])(H)([RBH]+)$">
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <direct-code>
+              <integer>0x0B00</integer>
+            </direct-code>
+            <match-block match-index="3">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="([CRBYnH]*[Cn])[YH]*$">
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <direct-code>
+              <integer>0x0B00</integer>
+            </direct-code>
+          </regexp-block>
+          <regexp-block regexp="([RB]n?)H([RBH]*)[YH]+$">
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <direct-code>
+              <integer>0x0B00</integer>
+            </direct-code>
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="([RB]n?)(H)([RBH]*)$">
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <direct-code>
+              <integer>0x0B00</integer>
+            </direct-code>
+            <match-block match-index="3">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="([RBY]n?)[YH]*$">
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <direct-code>
+              <integer>0x0B00</integer>
+            </direct-code>
+          </regexp-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="post">
+        <cond-block>
+          <regexp-block regexp="[CRBYnH]*[CRBn]H([YH]+)$">
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <direct-code>
+              <integer>0x0B4D</integer>
+            </direct-code>
+          </regexp-block>
+          <regexp-block regexp="Yn?H([YH]+)$">
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <direct-code>
+              <integer>0x0B4D</integer>
+            </direct-code>
+          </regexp-block>
+          <regexp-block regexp=".+"/>
+        </cond-block>
+      </defmacro>
+    </generator>
+  </stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" ([^Z]+)(Z)([^N]*)(HN)([^ ]*) ">
+            <separator/>
+            <match-block match-index="1">
+              <otf-specification script="orya">
+                <gsub-features>
+                  <positive-list>
+                    <feature>nukt</feature>
+                    <feature>akhn</feature>
+                    <feature>half</feature>
+                    <feature>pres</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="3">
+              <otf-specification script="orya">
+                <gsub-features>
+                  <positive-list>
+                    <feature>blwf</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="4">
+              <copy-glyph/>
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="5">
+              <otf-specification script="orya">
+                <gsub-features>
+                  <positive-list>
+                    <feature>pstf</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=" (J?m?)([^Z]+)(Z)([^ ]*) ">
+            <separator/>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="2">
+              <otf-specification script="orya">
+                <gsub-features>
+                  <positive-list>
+                    <feature>nukt</feature>
+                    <feature>akhn</feature>
+                    <feature>half</feature>
+                    <feature>pres</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="4">
+              <otf-specification script="orya">
+                <gsub-features>
+                  <positive-list>
+                    <feature>blwf</feature>
+                    <feature>pstf</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" (J)?(m)([^Z]+)([^Z])Z([^N ]*)N?([^ ]*) ">
+            <separator/>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="4">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="5">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="6">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=" ([^Z]+)Z([^N ]*)N?([^ ]*) ">
+            <separator/>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" J([^ ]+) ">
+            <match-block match-index="1">
+              <otf-specification script="orya">
+                <gsub-features>
+                  <positive-list>
+                    <feature>pres</feature>
+                    <feature>abvs</feature>
+                    <feature>pstp</feature>
+                    <feature>haln</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list>
+                    <feature>abvm</feature>
+                    <feature>blwm</feature>
+                    <feature>dist</feature>
+                  </positive-list>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp=" ([^ ]+) ">
+            <match-block match-index="1">
+              <otf-specification script="orya">
+                <gsub-features>
+                  <positive-list>
+                    <feature>vatu</feature>
+                    <feature>pres</feature>
+                    <feature>abvs</feature>
+                    <feature>blws</feature>
+                    <feature>pstp</feature>
+                    <feature>haln</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list>
+                    <feature>abvm</feature>
+                    <feature>blwm</feature>
+                    <feature>dist</feature>
+                  </positive-list>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <left-padding-flag/>
+            <copy-glyph/>
+            <right-padding-flag/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/SINH-OTF.fltx b/FLT/SINH-OTF.fltx
new file mode 100644 (file)
index 0000000..8b9050c
--- /dev/null
@@ -0,0 +1,396 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="sinh-otf" key1="nil">
+  <font registry="unicode-bmp" family="nil" foundry="nil">
+    <otf-specification script="sinh">
+      <gsub-features>
+        <positive-list>
+          <feature>akhn</feature>
+        </positive-list>
+      </gsub-features>
+      <gpos-features>
+        <negative-list/>
+      </gpos-features>
+    </otf-specification>
+  </font>
+  <first-stage>
+    <category-table>
+      <category category-value="E">
+        <from-code>
+          <integer>0x0D80</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0DFF</integer>
+        </to-code>
+      </category>
+      <category category-value="a">
+        <from-code>
+          <integer>0x0D82</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0D83</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x0D85</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0D96</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0D96</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0DC6</integer>
+        </to-code>
+      </category>
+      <category category-value="H">
+        <glyph-code>
+          <integer>0x0DCA</integer>
+        </glyph-code>
+      </category>
+      <category category-value="q">
+        <glyph-code>
+          <integer>0x0DCF</integer>
+        </glyph-code>
+      </category>
+      <category category-value="p">
+        <from-code>
+          <integer>0x0DD0</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0DD1</integer>
+        </to-code>
+      </category>
+      <category category-value="u">
+        <from-code>
+          <integer>0x0DD2</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0DD3</integer>
+        </to-code>
+      </category>
+      <category category-value="b">
+        <from-code>
+          <integer>0x0DD4</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0DD6</integer>
+        </to-code>
+      </category>
+      <category category-value="p">
+        <glyph-code>
+          <integer>0x0DD8</integer>
+        </glyph-code>
+      </category>
+      <category category-value="m">
+        <glyph-code>
+          <integer>0x0DD9</integer>
+        </glyph-code>
+      </category>
+      <category category-value="t">
+        <glyph-code>
+          <integer>0x0DDA</integer>
+        </glyph-code>
+      </category>
+      <category category-value="M">
+        <glyph-code>
+          <integer>0x0DDB</integer>
+        </glyph-code>
+      </category>
+      <category category-value="s">
+        <glyph-code>
+          <integer>0x0DDC</integer>
+        </glyph-code>
+      </category>
+      <category category-value="t">
+        <from-code>
+          <integer>0x0DDD</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0DDE</integer>
+        </to-code>
+      </category>
+      <category category-value="r">
+        <glyph-code>
+          <integer>0x0DDF</integer>
+        </glyph-code>
+      </category>
+      <category category-value="p">
+        <from-code>
+          <integer>0x0DF2</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0DF3</integer>
+        </to-code>
+      </category>
+      <category category-value="J">
+        <glyph-code>
+          <integer>0x200D</integer>
+        </glyph-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="(C(HJ[CR])*)(m(H|qH?|r)a?)">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="1">
+              <otf-specification script="sinh">
+                <gsub-features>
+                  <positive-list>
+                    <feature>akhn</feature>
+                    <feature>vatu</feature>
+                    <feature>pres</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="(C(HJ[CR])*)(s)(H)?(a)?">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="1">
+              <otf-specification script="sinh">
+                <gsub-features>
+                  <positive-list>
+                    <feature>akhn</feature>
+                    <feature>vatu</feature>
+                    <feature>pres</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="3">
+              <funcall fname="two-part"/>
+            </match-block>
+            <match-block match-index="4">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="5">
+              <copy-glyph/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="(C(HJ[CR])*)(t)(a)?">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="1">
+              <otf-specification script="sinh">
+                <gsub-features>
+                  <positive-list>
+                    <feature>akhn</feature>
+                    <feature>vatu</feature>
+                    <feature>pres</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="3">
+              <funcall fname="two-part"/>
+            </match-block>
+            <match-block match-index="4">
+              <copy-glyph/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="(C(HJ[CR])*)([mMbupqr]a?|a)">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="1">
+              <otf-specification script="sinh">
+                <gsub-features>
+                  <positive-list>
+                    <feature>akhn</feature>
+                    <feature>vatu</feature>
+                    <feature>pres</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="C(HJ[CR])*H?">
+            <start-cluster/>
+            <separator/>
+            <otf-specification script="sinh">
+              <gsub-features>
+                <positive-list>
+                  <feature>akhn</feature>
+                  <feature>vatu</feature>
+                  <feature>pres</feature>
+                </positive-list>
+              </gsub-features>
+              <gpos-features>
+                <negative-list/>
+              </gpos-features>
+            </otf-specification>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="Va?">
+            <start-cluster/>
+            <separator/>
+            <copy-glyph/>
+            <repeat/>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+      <defmacro fname="two-part">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0DDA</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0DD9</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x0DCA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0DDC</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0DD9</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x0DCF</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0DDD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0DD9</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x0DCF</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x0DCA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0DDE</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0DD9</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x0DDF</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+    </generator>
+  </first-stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" ([^ mMbupqr]+)(m|M)?(b)?(u)?(p)?(q)?(r)?(H)?(a)? ">
+            <separator/>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="4">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="5">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="6">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="7">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="8">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="9">
+              <copy-glyph/>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" ([^ ]*) ">
+            <match-block match-index="1">
+              <otf-specification script="sinh">
+                <gsub-features>
+                  <negative-list/>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <left-padding-flag/>
+            <copy-glyph/>
+            <right-padding-flag/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/SYRC-OTF.fltx b/FLT/SYRC-OTF.fltx
new file mode 100644 (file)
index 0000000..04c94c1
--- /dev/null
@@ -0,0 +1,584 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="syrc-otf" key1="nil">
+  <font registry="unicode-bmp" family="nil" foundry="nil">
+    <otf-specification script="syrc">
+      <gsub-features>
+        <negative-list/>
+      </gsub-features>
+      <gpos-features>
+        <negative-list/>
+      </gpos-features>
+    </otf-specification>
+  </font>
+  <first-stage>
+    <category-table>
+      <category category-value="U">
+        <from-code>
+          <integer>0x0700</integer>
+        </from-code>
+        <to-code>
+          <integer>0x071F</integer>
+        </to-code>
+      </category>
+      <category category-value="A">
+        <glyph-code>
+          <integer>0x0710</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <glyph-code>
+          <integer>0x0711</integer>
+        </glyph-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x0712</integer>
+        </from-code>
+        <to-code>
+          <integer>0x072E</integer>
+        </to-code>
+      </category>
+      <category category-value="r">
+        <from-code>
+          <integer>0x0715</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0716</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <from-code>
+          <integer>0x0717</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0719</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x071E</integer>
+        </glyph-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x0728</integer>
+        </glyph-code>
+      </category>
+      <category category-value="r">
+        <glyph-code>
+          <integer>0x072A</integer>
+        </glyph-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x072C</integer>
+        </glyph-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x072F</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <from-code>
+          <integer>0x0730</integer>
+        </from-code>
+        <to-code>
+          <integer>0x074A</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x074D</integer>
+        </glyph-code>
+      </category>
+      <category category-value="D">
+        <from-code>
+          <integer>0x074E</integer>
+        </from-code>
+        <to-code>
+          <integer>0x074F</integer>
+        </to-code>
+      </category>
+      <category category-value="T">
+        <glyph-code>
+          <integer>0x0303</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <glyph-code>
+          <integer>0x0330</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <glyph-code>
+          <integer>0x0304</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <glyph-code>
+          <integer>0x0331</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <glyph-code>
+          <integer>0x0307</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <glyph-code>
+          <integer>0x0323</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <glyph-code>
+          <integer>0x0308</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <glyph-code>
+          <integer>0x030A</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <glyph-code>
+          <integer>0x0325</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <glyph-code>
+          <integer>0x0324</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <glyph-code>
+          <integer>0x032D</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <glyph-code>
+          <integer>0x032E</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <from-code>
+          <integer>0x064B</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0655</integer>
+        </to-code>
+      </category>
+      <category category-value="T">
+        <glyph-code>
+          <integer>0x0670</integer>
+        </glyph-code>
+      </category>
+      <category category-value="U">
+        <glyph-code>
+          <integer>0x200C</integer>
+        </glyph-code>
+      </category>
+      <category category-value="D">
+        <glyph-code>
+          <integer>0x200D</integer>
+        </glyph-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="(r)(T*)(.*)">
+            <match-block match-index="1">
+              <otf-specification script="syrc">
+                <gsub-features>
+                  <positive-list>
+                    <feature>isol</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="3">
+              <funcall fname="dalath-rish"/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="(D)(T*)([DRAr].*)">
+            <match-block match-index="1">
+              <otf-specification script="syrc">
+                <gsub-features>
+                  <positive-list>
+                    <feature>init</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="3">
+              <funcall fname="join"/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="(T+)(.*)">
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="disjoin"/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="(.)(T*)(.*)">
+            <match-block match-index="1">
+              <otf-specification script="syrc">
+                <gsub-features>
+                  <positive-list>
+                    <feature>isol</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="3">
+              <funcall fname="disjoin"/>
+            </match-block>
+          </regexp-block>
+        </cond-block>
+      </match-block>
+      <defmacro fname="join">
+        <cond-block>
+          <regexp-block regexp="(r)(T*)(.*)">
+            <match-block match-index="1">
+              <otf-specification script="syrc">
+                <gsub-features>
+                  <positive-list>
+                    <feature>fina</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="3">
+              <funcall fname="dalath-rish"/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="(D)(T*)([DRrA].*)">
+            <match-block match-index="1">
+              <otf-specification script="syrc">
+                <gsub-features>
+                  <positive-list>
+                    <feature>medi</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="3">
+              <funcall fname="join"/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="(.)(T*)(.*)">
+            <match-block match-index="1">
+              <otf-specification script="syrc">
+                <gsub-features>
+                  <positive-list>
+                    <feature>fina</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="3">
+              <funcall fname="disjoin"/>
+            </match-block>
+          </regexp-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="disjoin">
+        <cond-block>
+          <regexp-block regexp="(D)(T*)([DRAr].*)">
+            <match-block match-index="1">
+              <otf-specification script="syrc">
+                <gsub-features>
+                  <positive-list>
+                    <feature>init</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="3">
+              <funcall fname="join"/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="(r)(T*)(.*)">
+            <match-block match-index="1">
+              <otf-specification script="syrc">
+                <gsub-features>
+                  <positive-list>
+                    <feature>isol</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="3">
+              <funcall fname="dalath-rish"/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="(A)(T*)([DRAr].*)">
+            <match-block match-index="1">
+              <otf-specification script="syrc">
+                <gsub-features>
+                  <positive-list>
+                    <feature>med2</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="3">
+              <funcall fname="disjoin"/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="(A)(T*)(.*)">
+            <match-block match-index="1">
+              <otf-specification script="syrc">
+                <gsub-features>
+                  <positive-list>
+                    <feature>fin2</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="3">
+              <funcall fname="disjoin"/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="(.)(T*)(.*)">
+            <match-block match-index="1">
+              <otf-specification script="syrc">
+                <gsub-features>
+                  <positive-list>
+                    <feature>isol</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="3">
+              <funcall fname="disjoin"/>
+            </match-block>
+          </regexp-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="dalath-rish">
+        <cond-block>
+          <regexp-block regexp="(D)(T*)([DRAr].*)">
+            <match-block match-index="1">
+              <otf-specification script="syrc">
+                <gsub-features>
+                  <positive-list>
+                    <feature>init</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="3">
+              <funcall fname="join"/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="(r)(T*)(.*)">
+            <match-block match-index="1">
+              <otf-specification script="syrc">
+                <gsub-features>
+                  <positive-list>
+                    <feature>isol</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="3">
+              <funcall fname="dalath-rish"/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="(A)(T*)([DRAr].*)">
+            <match-block match-index="1">
+              <otf-specification script="syrc">
+                <gsub-features>
+                  <positive-list>
+                    <feature>med2</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="3">
+              <funcall fname="disjoin"/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="(A)(T*)(.*)">
+            <match-block match-index="1">
+              <otf-specification script="syrc">
+                <gsub-features>
+                  <positive-list>
+                    <feature>fin3</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="3">
+              <funcall fname="disjoin"/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="(.)(T*)(.*)">
+            <match-block match-index="1">
+              <otf-specification script="syrc">
+                <gsub-features>
+                  <positive-list>
+                    <feature>isol</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="3">
+              <funcall fname="disjoin"/>
+            </match-block>
+          </regexp-block>
+        </cond-block>
+      </defmacro>
+    </generator>
+  </first-stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <otf-specification script="syrc">
+          <gsub-features>
+            <positive-list>
+              <feature>rlig</feature>
+              <feature>calt</feature>
+              <feature>liga</feature>
+              <feature>dlig</feature>
+            </positive-list>
+          </gsub-features>
+          <gpos-features>
+            <negative-list/>
+          </gpos-features>
+        </otf-specification>
+      </match-block>
+    </generator>
+  </stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <otf-specification script="syrc">
+          <gsub-features>
+            <positive-list/>
+          </gsub-features>
+          <gpos-features>
+            <negative-list/>
+          </gpos-features>
+        </otf-specification>
+      </match-block>
+    </generator>
+  </stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/TAML-CDAC.fltx b/FLT/TAML-CDAC.fltx
new file mode 100644 (file)
index 0000000..11e7bd6
--- /dev/null
@@ -0,0 +1,1892 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="taml-cdac" key1="nil">
+  <font registry="apple-roman" family="tm-ttvalluvar" foundry="nil"/>
+  <first-stage>
+    <category-table>
+      <category category-value="E">
+        <glyph-code>
+          <integer>0x0B83</integer>
+        </glyph-code>
+      </category>
+      <category category-value="I">
+        <from-code>
+          <integer>0x0B85</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0B8A</integer>
+        </to-code>
+      </category>
+      <category category-value="I">
+        <from-code>
+          <integer>0x0B8E</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0B90</integer>
+        </to-code>
+      </category>
+      <category category-value="I">
+        <from-code>
+          <integer>0x0B92</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0B94</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <glyph-code>
+          <integer>0x0B95</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0B99</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0B9A</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <glyph-code>
+          <integer>0x0B9C</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0B9E</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0B9F</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0BA3</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0BA4</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0BA8</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0BAA</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0BAE</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0BB5</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0BB7</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0BB9</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <from-code>
+          <integer>0x0BBE</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0BC2</integer>
+        </to-code>
+      </category>
+      <category category-value="L">
+        <from-code>
+          <integer>0x0BC6</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0BC8</integer>
+        </to-code>
+      </category>
+      <category category-value="B">
+        <glyph-code>
+          <integer>0x0BCA</integer>
+        </glyph-code>
+      </category>
+      <category category-value="b">
+        <glyph-code>
+          <integer>0x0BCB</integer>
+        </glyph-code>
+      </category>
+      <category category-value="B">
+        <glyph-code>
+          <integer>0x0BCC</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0x0BCD</integer>
+        </glyph-code>
+      </category>
+      <category category-value="E">
+        <glyph-code>
+          <integer>0x0BD7</integer>
+        </glyph-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="((CV)*)(C)(R)">
+            <match-block match-index="1">
+              <funcall fname="consonant-virama"/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="3">
+              <funcall fname="consonant"/>
+            </match-block>
+            <match-block match-index="4">
+              <funcall fname="dependent-vowel"/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="((CV)*)(C)(L)">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="4">
+              <funcall fname="dependent-vowel"/>
+            </match-block>
+            <match-block match-index="1">
+              <funcall fname="consonant-virama"/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="3">
+              <funcall fname="consonant"/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="((CV)*)(C)(B)">
+            <start-cluster/>
+            <separator/>
+            <direct-code>
+              <integer>0xAA</integer>
+            </direct-code>
+            <match-block match-index="1">
+              <funcall fname="consonant-virama"/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="3">
+              <funcall fname="consonant"/>
+            </match-block>
+            <match-block match-index="4">
+              <funcall fname="dependent-vowel"/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="((CV)*)(C)(b)">
+            <start-cluster/>
+            <separator/>
+            <direct-code>
+              <integer>0xAB</integer>
+            </direct-code>
+            <match-block match-index="1">
+              <funcall fname="consonant-virama"/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="3">
+              <funcall fname="consonant"/>
+            </match-block>
+            <match-block match-index="4">
+              <funcall fname="dependent-vowel"/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="CV">
+            <start-cluster/>
+            <funcall fname="consonant-virama"/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="[RLBb]">
+            <funcall fname="isolated-dependent-vowel"/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <funcall fname="independent"/>
+            <funcall fname="consonant"/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+      <defmacro fname="consonant-virama">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0B95</integer>
+              <integer>0x0BCD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE8</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xA2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0B99</integer>
+              <integer>0x0BCD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE9</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xA2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0B9A</integer>
+              <integer>0x0BCD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xEA</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xA2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0B9E</integer>
+              <integer>0x0BCD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xEB</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xA2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0B9F</integer>
+              <integer>0x0BCD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xEC</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xA2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BA3</integer>
+              <integer>0x0BCD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xED</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xA2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BA4</integer>
+              <integer>0x0BCD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xEE</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xA2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BA8</integer>
+              <integer>0x0BCD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xEF</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xA2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BAA</integer>
+              <integer>0x0BCD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xF0</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xA2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BAE</integer>
+              <integer>0x0BCD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xF1</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xA2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BAF</integer>
+              <integer>0x0BCD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xF2</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xA2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BB0</integer>
+              <integer>0x0BCD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xF3</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xA2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BB2</integer>
+              <integer>0x0BCD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xF4</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xA2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BB5</integer>
+              <integer>0x0BCD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xF5</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xA2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BB4</integer>
+              <integer>0x0BCD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xF6</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xA2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BB3</integer>
+              <integer>0x0BCD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xF7</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xA2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BB1</integer>
+              <integer>0x0BCD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xF8</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xA2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BA9</integer>
+              <integer>0x0BCD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BB8</integer>
+              <integer>0x0BCD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x76</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BB7</integer>
+              <integer>0x0BCD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x77</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0B9C</integer>
+              <integer>0x0BCD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x78</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BB9</integer>
+              <integer>0x0BCD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x79</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="consonant">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0B95</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0B99</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0B9A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xEA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0B9E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xEB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0B9F</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xEC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BA3</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xED</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BA4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xEE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BA8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xEF</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BAA</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xF0</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BAE</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xF1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BAF</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xF2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BB0</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xF3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BB2</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xF4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BB5</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xF5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BB4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xF6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BB3</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xF7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BB1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xF8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BA9</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xF9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BB8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BB7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0B9C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BB9</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFD</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="dependent-vowel">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BBE</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BBF</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BC0</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BC1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BC2</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BC6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xAA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BC7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xAB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BC8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xAC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BCA</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BCB</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xA3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BCC</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xF7</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="independent">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0B85</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xDC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0B86</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xDD</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0B87</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xDE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0B88</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xDF</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0B89</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE0</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0B8A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0B8E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0B8F</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0B90</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0B92</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0B93</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0B94</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE5</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xF7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0B83</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE7</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="isolated-dependent-vowel">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BBE</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x81</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xA3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BBF</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x81</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xA4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BC0</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x81</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xA6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BC1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x81</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xA7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BC2</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x81</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xA8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BC6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xAA</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x81</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BC7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xAB</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x81</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BC8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xAC</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x81</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BCA</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xAA</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x81</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xA3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BCB</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xAB</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x81</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xA3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BCC</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xAA</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x81</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0xF7</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+    </generator>
+  </first-stage>
+  <stage>
+    <category-table>
+      <category category-value="E">
+        <from-code>
+          <integer>0x00</integer>
+        </from-code>
+        <to-code>
+          <integer>0xFF</integer>
+        </to-code>
+      </category>
+      <category category-value="v">
+        <glyph-code>
+          <integer>0xA2</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0xE9</integer>
+        </from-code>
+        <to-code>
+          <integer>0xFD</integer>
+        </to-code>
+      </category>
+      <category category-value="K">
+        <glyph-code>
+          <integer>0xE8</integer>
+        </glyph-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0xF3</integer>
+        </glyph-code>
+      </category>
+      <category category-value="S">
+        <glyph-code>
+          <integer>0xFB</integer>
+        </glyph-code>
+      </category>
+      <category category-value="I">
+        <glyph-code>
+          <integer>0xA4</integer>
+        </glyph-code>
+      </category>
+      <category category-value="i">
+        <glyph-code>
+          <integer>0xA6</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0xA7</integer>
+        </from-code>
+        <to-code>
+          <integer>0xA8</integer>
+        </to-code>
+      </category>
+      <category category-value="L">
+        <from-code>
+          <integer>0xAA</integer>
+        </from-code>
+        <to-code>
+          <integer>0xAC</integer>
+        </to-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" (L)(([CKRS](v)?)*)(KvS)(.)? ">
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="5">
+              <direct-code>
+                <integer>0xFE</integer>
+              </direct-code>
+            </match-block>
+            <match-block match-index="6">
+              <copy-glyph/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp=" (L)(([CKRS](v)?)*)([CKRS].?) ">
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="5">
+              <copy-glyph/>
+              <copy-glyph/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="KvS[Iiv]?">
+            <funcall fname="ligature-ks"/>
+          </regexp-block>
+          <regexp-block regexp="[CKRS][IiV]">
+            <funcall fname="ligature"/>
+            <copy-glyph/>
+            <copy-glyph/>
+          </regexp-block>
+          <regexp-block regexp="SvRi">
+            <direct-code>
+              <integer>0xFF</integer>
+            </direct-code>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+      <defmacro fname="ligature-ks">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xE8</integer>
+              <integer>0xA2</integer>
+              <integer>0xFB</integer>
+              <integer>0xA4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x56</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xE8</integer>
+              <integer>0xA2</integer>
+              <integer>0xFB</integer>
+              <integer>0xA6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x72</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xE8</integer>
+              <integer>0xA2</integer>
+              <integer>0xFB</integer>
+              <integer>0xA2</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x7A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xE8</integer>
+              <integer>0xA2</integer>
+              <integer>0xFB</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xFE</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="ligature">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xE8</integer>
+              <integer>0xA2</integer>
+              <integer>0x76</integer>
+              <integer>0xA2</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x7A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xE8</integer>
+              <integer>0xA4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x41</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xE9</integer>
+              <integer>0xA4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x42</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xEA</integer>
+              <integer>0xA4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x43</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xEB</integer>
+              <integer>0xA4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x44</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xEC</integer>
+              <integer>0xA4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xAE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xED</integer>
+              <integer>0xA4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x45</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xEE</integer>
+              <integer>0xA4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x46</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xEF</integer>
+              <integer>0xA4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x47</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF0</integer>
+              <integer>0xA4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x48</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF1</integer>
+              <integer>0xA4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x49</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF2</integer>
+              <integer>0xA4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x4A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF3</integer>
+              <integer>0xA4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x4B</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF4</integer>
+              <integer>0xA4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x4C</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF5</integer>
+              <integer>0xA4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x4D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF6</integer>
+              <integer>0xA4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x4E</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF7</integer>
+              <integer>0xA4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x4F</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF8</integer>
+              <integer>0xA4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x50</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF9</integer>
+              <integer>0xA4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x51</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xFA</integer>
+              <integer>0xA4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x52</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xFB</integer>
+              <integer>0xA4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x53</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xFC</integer>
+              <integer>0xA4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x54</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xFD</integer>
+              <integer>0xA4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x55</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xE8</integer>
+              <integer>0xA6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x57</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xE9</integer>
+              <integer>0xA6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x58</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xEA</integer>
+              <integer>0xA6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x59</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xEB</integer>
+              <integer>0xA6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x5A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xEC</integer>
+              <integer>0xA6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xAF</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xED</integer>
+              <integer>0xA6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x61</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xEE</integer>
+              <integer>0xA6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x62</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xEF</integer>
+              <integer>0xA6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x63</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF0</integer>
+              <integer>0xA6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x64</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF1</integer>
+              <integer>0xA6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x65</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF2</integer>
+              <integer>0xA6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x66</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF3</integer>
+              <integer>0xA6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x67</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF4</integer>
+              <integer>0xA6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x68</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF5</integer>
+              <integer>0xA6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x69</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF6</integer>
+              <integer>0xA6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x6A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF7</integer>
+              <integer>0xA6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x6B</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF8</integer>
+              <integer>0xA6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x6C</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF9</integer>
+              <integer>0xA6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x6D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xFA</integer>
+              <integer>0xA6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x6E</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xFB</integer>
+              <integer>0xA6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x6F</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xFC</integer>
+              <integer>0xA6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x70</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xFD</integer>
+              <integer>0xA6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x71</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xE8</integer>
+              <integer>0xA7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB0</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xE9</integer>
+              <integer>0xA7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xEA</integer>
+              <integer>0xA7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xEB</integer>
+              <integer>0xA7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xEC</integer>
+              <integer>0xA7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xED</integer>
+              <integer>0xA7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xEE</integer>
+              <integer>0xA7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xEF</integer>
+              <integer>0xA7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF0</integer>
+              <integer>0xA7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xB9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF1</integer>
+              <integer>0xA7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xBA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF2</integer>
+              <integer>0xA7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xBB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF3</integer>
+              <integer>0xA7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xBC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF4</integer>
+              <integer>0xA7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xBD</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF5</integer>
+              <integer>0xA7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xBE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF6</integer>
+              <integer>0xA7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xBF</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF7</integer>
+              <integer>0xA7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC0</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF8</integer>
+              <integer>0xA7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC1</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF9</integer>
+              <integer>0xA7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC2</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xE8</integer>
+              <integer>0xA8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC3</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xE9</integer>
+              <integer>0xA8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC4</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xEA</integer>
+              <integer>0xA8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC5</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xEB</integer>
+              <integer>0xA8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xEC</integer>
+              <integer>0xA8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xED</integer>
+              <integer>0xA8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xEE</integer>
+              <integer>0xA8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xC9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xEF</integer>
+              <integer>0xA8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xCB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF0</integer>
+              <integer>0xA8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xCC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF1</integer>
+              <integer>0xA8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xCD</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF2</integer>
+              <integer>0xA8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xCE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF3</integer>
+              <integer>0xA8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xCF</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF4</integer>
+              <integer>0xA8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xD6</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF5</integer>
+              <integer>0xA8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xD7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF6</integer>
+              <integer>0xA8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xD8</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF7</integer>
+              <integer>0xA8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xD9</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF8</integer>
+              <integer>0xA8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xDA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0xF9</integer>
+              <integer>0xA8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xDB</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+    </generator>
+  </stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/TAML-OTF.fltx b/FLT/TAML-OTF.fltx
new file mode 100644 (file)
index 0000000..5f2b14d
--- /dev/null
@@ -0,0 +1,279 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="taml-otf" key1="nil">
+  <font registry="unicode-bmp" family="nil" foundry="nil">
+    <otf-specification script="taml">
+      <gsub-features>
+        <positive-list>
+          <feature>akhn</feature>
+        </positive-list>
+      </gsub-features>
+      <gpos-features>
+        <negative-list/>
+      </gpos-features>
+    </otf-specification>
+  </font>
+  <first-stage>
+    <category-table>
+      <category category-value="X">
+        <from-code>
+          <integer>0x0B80</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0BFF</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0B95</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0BB9</integer>
+        </to-code>
+      </category>
+      <category category-value="p">
+        <from-code>
+          <integer>0x0BBE</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0BBF</integer>
+        </to-code>
+      </category>
+      <category category-value="u">
+        <glyph-code>
+          <integer>0x0BC0</integer>
+        </glyph-code>
+      </category>
+      <category category-value="b">
+        <from-code>
+          <integer>0x0BC1</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0BC2</integer>
+        </to-code>
+      </category>
+      <category category-value="m">
+        <from-code>
+          <integer>0x0BC6</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0BC8</integer>
+        </to-code>
+      </category>
+      <category category-value="H">
+        <glyph-code>
+          <integer>0x0BCD</integer>
+        </glyph-code>
+      </category>
+      <category category-value="p">
+        <glyph-code>
+          <integer>0x0BD7</integer>
+        </glyph-code>
+      </category>
+      <category category-value="X">
+        <from-code>
+          <integer>0x0964</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0965</integer>
+        </to-code>
+      </category>
+      <category category-value="N">
+        <glyph-code>
+          <integer>0x200C</integer>
+        </glyph-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BCA</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0BC6</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x0BBE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BCB</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0BC7</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x0BBE</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BCC</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0BC6</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x0BD7</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0B92</integer>
+              <integer>0x0BD7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0B94</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0BB8</integer>
+              <integer>0x0BCD</integer>
+              <integer>0x0BB0</integer>
+              <integer>0x0BC0</integer>
+            </source-pattern>
+            <otf-specification script="taml">
+              <gsub-features>
+                <positive-list>
+                  <feature>akhn</feature>
+                </positive-list>
+              </gsub-features>
+              <gpos-features>
+                <positive-list/>
+              </gpos-features>
+            </otf-specification>
+          </subst-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </first-stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="((CH)*C)(mp?|b|u|p)">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="1">
+              <otf-specification script="taml">
+                <gsub-features>
+                  <positive-list>
+                    <feature>akhn</feature>
+                    <feature>half</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="((CH)*C)(HN?)?">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="1">
+              <otf-specification script="taml">
+                <gsub-features>
+                  <positive-list>
+                    <feature>akhn</feature>
+                    <feature>half</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" ([^ m]*)([^ m])(m)(p)? ">
+            <separator/>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="4">
+              <copy-glyph/>
+            </match-block>
+            <separator/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" ([^ ]+) ">
+            <match-block match-index="1">
+              <otf-specification script="taml">
+                <gsub-features>
+                  <positive-list>
+                    <feature>pres</feature>
+                    <feature>abvs</feature>
+                    <feature>blws</feature>
+                    <feature>psts</feature>
+                    <feature>haln</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list>
+                    <feature>abvm</feature>
+                    <feature>blwm</feature>
+                    <feature>dist</feature>
+                  </positive-list>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <left-padding-flag/>
+            <copy-glyph/>
+            <right-padding-flag/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/TELU-OTF.fltx b/FLT/TELU-OTF.fltx
new file mode 100644 (file)
index 0000000..880addb
--- /dev/null
@@ -0,0 +1,315 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="telu-otf" key1="nil">
+  <font registry="unicode-bmp" family="nil" foundry="nil">
+    <otf-specification script="telu">
+      <gsub-features>
+        <positive-list>
+          <feature>blwf</feature>
+        </positive-list>
+      </gsub-features>
+      <gpos-features>
+        <negative-list/>
+      </gpos-features>
+    </otf-specification>
+  </font>
+  <first-stage>
+    <category-table>
+      <category category-value="E">
+        <from-code>
+          <integer>0x0C00</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0C7F</integer>
+        </to-code>
+      </category>
+      <category category-value="a">
+        <from-code>
+          <integer>0x0C01</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0C03</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x0C05</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0C14</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0C15</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0C39</integer>
+        </to-code>
+      </category>
+      <category category-value="u">
+        <from-code>
+          <integer>0x0C3E</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0C40</integer>
+        </to-code>
+      </category>
+      <category category-value="p">
+        <from-code>
+          <integer>0x0C41</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0C44</integer>
+        </to-code>
+      </category>
+      <category category-value="u">
+        <from-code>
+          <integer>0x0C46</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0C47</integer>
+        </to-code>
+      </category>
+      <category category-value="u">
+        <from-code>
+          <integer>0x0C4A</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0C4C</integer>
+        </to-code>
+      </category>
+      <category category-value="H">
+        <glyph-code>
+          <integer>0x0C4D</integer>
+        </glyph-code>
+      </category>
+      <category category-value="u">
+        <glyph-code>
+          <integer>0x0C55</integer>
+        </glyph-code>
+      </category>
+      <category category-value="b">
+        <glyph-code>
+          <integer>0x0C56</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0C58</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0C59</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x0C60</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0C61</integer>
+        </to-code>
+      </category>
+      <category category-value="b">
+        <from-code>
+          <integer>0x0C62</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0C63</integer>
+        </to-code>
+      </category>
+      <category category-value="X">
+        <from-code>
+          <integer>0x0964</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0965</integer>
+        </to-code>
+      </category>
+      <category category-value="N">
+        <glyph-code>
+          <integer>0x200C</integer>
+        </glyph-code>
+      </category>
+      <category category-value="J">
+        <glyph-code>
+          <integer>0x200D</integer>
+        </glyph-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0C48</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0C46</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x0C56</integer>
+            </direct-code>
+          </subst-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </first-stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="(C)((HC)*)(ub?|p)(a)?">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+             <funcall fname="move-h"/>
+            </match-block>
+            <match-block match-index="4">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="5">
+              <copy-glyph/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="(C)((HC)*)(a)">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="move-h"/>
+            </match-block>
+            <match-block match-index="4">
+              <copy-glyph/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="(C)((HC)*)(HN?)?">
+            <start-cluster/>
+            <separator/>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="4">
+              <direct-code>
+                <integer>0x0C4D</integer>
+              </direct-code>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="move-h"/>
+            </match-block>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="Va?">
+            <start-cluster/>
+            <separator/>
+            <copy-glyph/>
+            <repeat/>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+      <defmacro fname="move-h">
+        <cond-block>
+          <regexp-block regexp="(H)(.+)">
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+          </regexp-block>
+        </cond-block>
+      </defmacro>
+    </generator>
+  </stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" (CH)([^ ]*) ">
+            <match-block match-index="1">
+              <otf-specification script="telu">
+                <gsub-features>
+                  <positive-list>
+                    <feature>haln</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+            <match-block match-index="2">
+              <otf-specification script="telu">
+                <gsub-features>
+                  <positive-list>
+                    <feature>akhn</feature>
+                    <feature>blwf</feature>
+                    <feature>abvs</feature>
+                    <feature>blws</feature>
+                    <feature>psts</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list>
+                    <feature>abvm</feature>
+                    <feature>blwm</feature>
+                    <feature>dist</feature>
+                  </positive-list>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp=" ([^ ]+) ">
+            <match-block match-index="1">
+              <otf-specification script="telu">
+                <gsub-features>
+                  <positive-list>
+                    <feature>akhn</feature>
+                    <feature>blwf</feature>
+                    <feature>abvs</feature>
+                    <feature>blws</feature>
+                    <feature>psts</feature>
+                  </positive-list>
+                </gsub-features>
+                <gpos-features>
+                  <positive-list>
+                    <feature>absm</feature>
+                    <feature>blwm</feature>
+                    <feature>dist</feature>
+                  </positive-list>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <left-padding-flag/>
+            <copy-glyph/>
+            <right-padding-flag/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/THAA-OTF.fltx b/FLT/THAA-OTF.fltx
new file mode 100644 (file)
index 0000000..66b4b6a
--- /dev/null
@@ -0,0 +1,76 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="thaa-otf" key1="nil">
+  <font registry="unicode-bmp" family="nil" foundry="nil">
+    <otf-specification script="thaa">
+      <gsub-features>
+        <negative-list/>
+      </gsub-features>
+      <gpos-features>
+        <negative-list/>
+      </gpos-features>
+    </otf-specification>
+  </font>
+  <first-stage>
+    <category-table>
+      <category category-value="c">
+        <from-code>
+          <integer>0x0780</integer>
+        </from-code>
+        <to-code>
+          <integer>0x07a5</integer>
+        </to-code>
+      </category>
+      <category category-value="v">
+        <from-code>
+          <integer>0x07a6</integer>
+        </from-code>
+        <to-code>
+          <integer>0x07b0</integer>
+        </to-code>
+      </category>
+      <category category-value="c">
+        <glyph-code>
+          <integer>0x07b1</integer>
+        </glyph-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="cv">
+            <start-cluster/>
+            <copy-glyph/>
+            <combining-specification v-pos1="B" h-pos1="l" v-pos2="B" h-pos2="l"/>
+            <copy-glyph/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="v">
+            <left-padding-flag/>
+            <copy-glyph/>
+            <right-padding-flag/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </first-stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <otf-specification script="thaa">
+          <gsub-features>
+            <positive-list/>
+          </gsub-features>
+          <gpos-features>
+            <positive-list>
+              <feature>mark</feature>
+            </positive-list>
+          </gpos-features>
+        </otf-specification>
+      </match-block>
+    </generator>
+  </stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/THAI-GENERIC.fltx b/FLT/THAI-GENERIC.fltx
new file mode 100644 (file)
index 0000000..6110fd7
--- /dev/null
@@ -0,0 +1,255 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="thai-generic" key1="nil">
+  <font registry="unicode-bmp" family="nil" foundry="nil">
+    <otf-specification script="thai">
+      <gsub-features>
+        <negative-list/>
+      </gsub-features>
+      <gpos-features>
+        <negative-list>
+          <feature>mark</feature>
+          <feature>mkmk</feature>
+        </negative-list>
+      </gpos-features>
+    </otf-specification>
+    <lang-specification>th</lang-specification>
+  </font>
+  <first-stage>
+    <category-table>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0E01</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E2E</integer>
+        </to-code>
+      </category>
+      <category category-value="d">
+        <from-code>
+          <integer>0x0E0D</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E10</integer>
+        </to-code>
+      </category>
+      <category category-value="c">
+        <glyph-code>
+          <integer>0x0E1B</integer>
+        </glyph-code>
+      </category>
+      <category category-value="c">
+        <glyph-code>
+          <integer>0x0E1D</integer>
+        </glyph-code>
+      </category>
+      <category category-value="c">
+        <glyph-code>
+          <integer>0x0E1F</integer>
+        </glyph-code>
+      </category>
+      <category category-value="c">
+        <glyph-code>
+          <integer>0x0E2C</integer>
+        </glyph-code>
+      </category>
+      <category category-value="I">
+        <from-code>
+          <integer>0x0E2F</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E32</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0x0E31</integer>
+        </glyph-code>
+      </category>
+      <category category-value="A">
+        <glyph-code>
+          <integer>0x0E33</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x0E34</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E37</integer>
+        </to-code>
+      </category>
+      <category category-value="v">
+        <from-code>
+          <integer>0x0E38</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E3A</integer>
+        </to-code>
+      </category>
+      <category category-value="I">
+        <from-code>
+          <integer>0x0E3F</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E46</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0x0E47</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <from-code>
+          <integer>0x0E48</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E4C</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x0E4D</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E4E</integer>
+        </to-code>
+      </category>
+      <category category-value="I">
+        <from-code>
+          <integer>0x0E4F</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E5B</integer>
+        </to-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="([Cd])(T)?(A)">
+            <start-cluster/>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <direct-code>
+                <integer>0x0E4D</integer>
+              </direct-code>
+            </match-block>
+            <match-block match-index="2">
+              <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="l" y-direction="up" y-amount="5"/>
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="3">
+              <direct-code>
+                <integer>0x0E32</integer>
+              </direct-code>
+            </match-block>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="(c)(T)?(A)">
+            <start-cluster/>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l" x-direction="right" x-amount="13"/>
+              <direct-code>
+                <integer>0x0E4D</integer>
+              </direct-code>
+            </match-block>
+            <match-block match-index="2">
+              <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="l" y-direction="up" y-amount="5" x-direction="right" x-amount="13"/>
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="3">
+              <direct-code>
+                <integer>0x0E32</integer>
+              </direct-code>
+            </match-block>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="(C[vV]?)(T)?">
+            <start-cluster/>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="l" y-direction="up" y-amount="5"/>
+              <copy-glyph/>
+            </match-block>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="(c)([vV])?(T)?">
+            <start-cluster/>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="2">
+              <cond-block>
+                <regexp-block regexp="v">
+                  <copy-glyph/>
+                </regexp-block>
+                <regexp-block regexp=".">
+                  <combining-specification v-pos1="B" h-pos1="r" v-pos2="B" h-pos2="l" x-direction="right" x-amount="8"/>
+                  <copy-glyph/>
+                </regexp-block>
+              </cond-block>
+            </match-block>
+            <match-block match-index="3">
+              <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="l" y-direction="up" y-amount="5" x-direction="right" x-amount="8"/>
+              <copy-glyph/>
+            </match-block>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="(d)([vV])?(T)?">
+            <start-cluster/>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="2">
+              <cond-block>
+                <regexp-block regexp="v">
+                  <combining-specification v-pos1="b" h-pos1="r" v-pos2="t" h-pos2="l" y-direction="down" y-amount="5"/>
+                  <copy-glyph/>
+                </regexp-block>
+                <regexp-block regexp=".">
+                  <copy-glyph/>
+                </regexp-block>
+              </cond-block>
+            </match-block>
+            <match-block match-index="3">
+              <combining-specification v-pos1="t" h-pos1="r" v-pos2="b" h-pos2="l" y-direction="up" y-amount="5"/>
+              <copy-glyph/>
+            </match-block>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="[VvT]">
+            <cond-block>
+              <font-facility-block>
+                <characters>
+                  <integer>0x25CC</integer>
+                </characters>
+                <start-cluster/>
+                <direct-code>
+                  <integer>0x25CC</integer>
+                </direct-code>
+                <copy-glyph/>
+                <end-cluster/>
+              </font-facility-block>
+              <regexp-block regexp=".">
+                <left-padding-flag/>
+                <copy-glyph/>
+                <right-padding-flag/>
+              </regexp-block>
+            </cond-block>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </first-stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/THAI-NORASI.fltx b/FLT/THAI-NORASI.fltx
new file mode 100644 (file)
index 0000000..12c41af
--- /dev/null
@@ -0,0 +1,386 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="thai-norasi" key1="nil">
+  <font registry="unicode-bmp" family="norasi" foundry="nil"/>
+  <first-stage>
+    <category-table>
+      <category category-value="E">
+        <from-code>
+          <integer>0x0E00</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E5F</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0E01</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E2E</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0x0E31</integer>
+        </glyph-code>
+      </category>
+      <category category-value="A">
+        <glyph-code>
+          <integer>0x0E33</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x0E34</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E3A</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0x0E47</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <from-code>
+          <integer>0x0E48</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E4E</integer>
+        </to-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="(C)(T)?(A)">
+            <match-block match-index="1">
+              <copy-glyph/>
+              <direct-code>
+                <integer>0x0E4D</integer>
+              </direct-code>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="3">
+              <direct-code>
+                <integer>0x0E32</integer>
+              </direct-code>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="(C)(T)(V)?">
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="(C)(V)?(T)?">
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="[^C]">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </first-stage>
+  <stage>
+    <category-table>
+      <category category-value="E">
+        <from-code>
+          <integer>0x0E00</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E5F</integer>
+        </to-code>
+      </category>
+      <category category-value="c">
+        <from-code>
+          <integer>0x0E01</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E2E</integer>
+        </to-code>
+      </category>
+      <category category-value="d">
+        <from-code>
+          <integer>0x0E0D</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E10</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <glyph-code>
+          <integer>0x0E1B</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <glyph-code>
+          <integer>0x0E1D</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <glyph-code>
+          <integer>0x0E1F</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <glyph-code>
+          <integer>0x0E2C</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0x0E31</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x0E34</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E37</integer>
+        </to-code>
+      </category>
+      <category category-value="v">
+        <from-code>
+          <integer>0x0E38</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E3A</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0x0E47</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <from-code>
+          <integer>0x0E48</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E4C</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x0E4D</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E4E</integer>
+        </to-code>
+      </category>
+      <category category-value="E">
+        <glyph-code>
+          <integer>0x25CC</integer>
+        </glyph-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="(C)(V)(T)?">
+            <start-cluster/>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="vowel-upper-left"/>
+            </match-block>
+            <match-block match-index="3">
+             <funcall fname="tone-high-left"/>
+            </match-block>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="(C)(v)?(T)?">
+            <start-cluster/>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="3">
+             <funcall fname="tone-low-left"/>
+            </match-block>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="([cd])(V)(T)?">
+            <start-cluster/>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+            </match-block>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="(c)(v)?(T)?">
+            <start-cluster/>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="3">
+              <funcall fname="tone-low"/>
+            </match-block>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="(d)(v)?(T)?">
+            <start-cluster/>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <funcall fname="vowel-deep"/>
+            </match-block>
+            <match-block match-index="3">
+              <funcall fname="tone-low"/>
+            </match-block>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="[VvT]">
+            <cond-block>
+              <font-facility-block>
+                <characters>
+                  <integer>0x25CC</integer>
+                </characters>
+                <start-cluster/>
+                <direct-code>
+                  <integer>0x25CC</integer>
+                </direct-code>
+                <copy-glyph/>
+                <end-cluster/>
+              </font-facility-block>
+              <regexp-block regexp=".">
+                <left-padding-flag/>
+                <copy-glyph/>
+                <right-padding-flag/>
+              </regexp-block>
+            </cond-block>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+      <defmacro fname="vowel-upper-left">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E31</integer>
+            </source-pattern>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <from-code>
+              <integer>0x0E34</integer>
+            </from-code>
+            <to-code>
+              <integer>0x0E37</integer>
+            </to-code>
+            <direct-code>
+              <integer>0xF701</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E47</integer>
+            </source-pattern>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E4D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xF711</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E4E</integer>
+            </source-pattern>
+            <copy-glyph/>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="vowel-deep">
+        <subst-block>
+          <from-code>
+            <integer>0x0E38</integer>
+          </from-code>
+          <to-code>
+            <integer>0x0E3A</integer>
+          </to-code>
+          <direct-code>
+            <integer>0xF718</integer>
+          </direct-code>
+        </subst-block>
+      </defmacro>
+      <defmacro fname="tone-high-left">
+        <subst-block>
+          <from-code>
+            <integer>0x0E48</integer>
+          </from-code>
+          <to-code>
+            <integer>0x0E4C</integer>
+          </to-code>
+          <direct-code>
+            <integer>0xF713</integer>
+          </direct-code>
+        </subst-block>
+      </defmacro>
+      <defmacro fname="tone-low-left">
+        <subst-block>
+          <from-code>
+            <integer>0x0E48</integer>
+          </from-code>
+          <to-code>
+            <integer>0x0E4C</integer>
+          </to-code>
+          <direct-code>
+            <integer>0xF705</integer>
+          </direct-code>
+        </subst-block>
+      </defmacro>
+      <defmacro fname="tone-low">
+        <subst-block>
+          <from-code>
+            <integer>0x0E48</integer>
+          </from-code>
+          <to-code>
+            <integer>0x0E4C</integer>
+          </to-code>
+          <direct-code>
+            <integer>0xF70A</integer>
+          </direct-code>
+        </subst-block>
+      </defmacro>
+    </generator>
+  </stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/THAI-OTF.fltx b/FLT/THAI-OTF.fltx
new file mode 100644 (file)
index 0000000..6654e6c
--- /dev/null
@@ -0,0 +1,258 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="thai-otf" key1="nil">
+  <font registry="unicode-bmp" family="nil" foundry="nil">
+    <otf-specification script="thai">
+      <gsub-features>
+        <negative-list/>
+      </gsub-features>
+      <gpos-features>
+        <positive-list>
+          <feature>mark</feature>
+          <feature>mkmk</feature>
+        </positive-list>
+      </gpos-features>
+    </otf-specification>
+  </font>
+  <first-stage>
+    <category-table>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0E01</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E23</integer>
+        </to-code>
+      </category>
+      <category category-value="X">
+        <glyph-code>
+          <integer>0x0E24</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <glyph-code>
+          <integer>0x0E25</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0E26</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E2E</integer>
+        </to-code>
+      </category>
+      <category category-value="X">
+        <from-code>
+          <integer>0x0E2F</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E30</integer>
+        </to-code>
+      </category>
+      <category category-value="U">
+        <glyph-code>
+          <integer>0x0E31</integer>
+        </glyph-code>
+      </category>
+      <category category-value="X">
+        <glyph-code>
+          <integer>0x0E32</integer>
+        </glyph-code>
+      </category>
+      <category category-value="A">
+        <glyph-code>
+          <integer>0x0E33</integer>
+        </glyph-code>
+      </category>
+      <category category-value="i">
+        <glyph-code>
+          <integer>0x0E34</integer>
+        </glyph-code>
+      </category>
+      <category category-value="I">
+        <glyph-code>
+          <integer>0x0E35</integer>
+        </glyph-code>
+      </category>
+      <category category-value="U">
+        <glyph-code>
+          <integer>0x0E36</integer>
+        </glyph-code>
+      </category>
+      <category category-value="I">
+        <glyph-code>
+          <integer>0x0E37</integer>
+        </glyph-code>
+      </category>
+      <category category-value="i">
+        <glyph-code>
+          <integer>0x0E38</integer>
+        </glyph-code>
+      </category>
+      <category category-value="U">
+        <glyph-code>
+          <integer>0x0E39</integer>
+        </glyph-code>
+      </category>
+      <category category-value="P">
+        <glyph-code>
+          <integer>0x0E3A</integer>
+        </glyph-code>
+      </category>
+      <category category-value="X">
+        <from-code>
+          <integer>0x0E3F</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E46</integer>
+        </to-code>
+      </category>
+      <category category-value="M">
+        <glyph-code>
+          <integer>0x0E47</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <from-code>
+          <integer>0x0E48</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E4B</integer>
+        </to-code>
+      </category>
+      <category category-value="N">
+        <from-code>
+          <integer>0x0E4C</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E4D</integer>
+        </to-code>
+      </category>
+      <category category-value="P">
+        <glyph-code>
+          <integer>0x0E4E</integer>
+        </glyph-code>
+      </category>
+      <category category-value="X">
+        <from-code>
+          <integer>0x0E4F</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E5B</integer>
+        </to-code>
+      </category>
+      <category category-value="X">
+        <glyph-code>
+          <integer>0x25CC</integer>
+        </glyph-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="(C)(T)?(A)">
+            <separator/>
+            <start-cluster/>
+            <match-block match-index="1">
+              <copy-glyph/>
+              <direct-code>
+                <integer>0x0E4D</integer>
+              </direct-code>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+            </match-block>
+            <end-cluster/>
+            <separator/>
+            <match-block match-index="3">
+              <direct-code>
+                <integer>0x0E32</integer>
+              </direct-code>
+            </match-block>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="C[UiI]T">
+            <start-cluster/>
+            <separator/>
+            <copy-glyph/>
+            <repeat/>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="CiN">
+            <start-cluster/>
+            <separator/>
+            <copy-glyph/>
+            <repeat/>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="CIM">
+            <start-cluster/>
+            <separator/>
+            <copy-glyph/>
+            <repeat/>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="C[iIUPTNM]?">
+            <start-cluster/>
+            <separator/>
+            <copy-glyph/>
+            <repeat/>
+            <separator/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="[iIUPTNM]">
+            <cond-block>
+              <font-facility-block>
+                <characters>
+                  <integer>0x25CC</integer>
+                </characters>
+                <start-cluster/>
+                <direct-code>
+                  <integer>0x25CC</integer>
+                </direct-code>
+                <copy-glyph/>
+                <end-cluster/>
+              </font-facility-block>
+              <regexp-block regexp=".">
+                <left-padding-flag/>
+                <copy-glyph/>
+                <right-padding-flag/>
+              </regexp-block>
+            </cond-block>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </first-stage>
+  <stage>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" ([^ ]*) ">
+            <match-block match-index="1">
+              <otf-specification script="thai">
+                <gsub-features>
+                  <negative-list/>
+                </gsub-features>
+                <gpos-features>
+                  <negative-list/>
+                </gpos-features>
+              </otf-specification>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/THAI-TIS620.fltx b/FLT/THAI-TIS620.fltx
new file mode 100644 (file)
index 0000000..cffadbe
--- /dev/null
@@ -0,0 +1,190 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="thai-tis620" key1="nil">
+  <font registry="tis620.2529-1"/>
+  <first-stage>
+    <category-table>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0E01</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E2E</integer>
+        </to-code>
+      </category>
+      <category category-value="I">
+        <from-code>
+          <integer>0x0E2F</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E5B</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0x0E31</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x0E34</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E37</integer>
+        </to-code>
+      </category>
+      <category category-value="v">
+        <from-code>
+          <integer>0x0E38</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E3A</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0x0E47</integer>
+        </glyph-code>
+      </category>
+      <category category-value="T">
+        <from-code>
+          <integer>0x0E48</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0E4E</integer>
+        </to-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="C([vV])?T?">
+            <copy-glyph/>
+            <funcall fname="dependent"/>
+            <repeat/>
+          </regexp-block>
+          <regexp-block regexp="[^C]*">
+            <copy-glyph/>
+            <repeat/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+      <defmacro fname="dependent">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E31</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E34</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E35</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E36</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E37</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E38</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E39</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E3A</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E47</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E48</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E49</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E4A</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E4B</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E4C</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E4D</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0E4E</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="up" y-amount="5"/>
+            <copy-glyph/>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+    </generator>
+  </first-stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/TIBT-MTIB.fltx b/FLT/TIBT-MTIB.fltx
new file mode 100644 (file)
index 0000000..4dc88a3
--- /dev/null
@@ -0,0 +1,1430 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="tibt-mtib" key1="nil">
+  <font registry="unicode-bmp" family="mtib" foundry="nil"/>
+  <first-stage>
+    <category-table>
+      <category category-value="E">
+        <from-code>
+          <integer>0x0F00</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0FCF</integer>
+        </to-code>
+      </category>
+      <category category-value="M">
+        <glyph-code>
+          <integer>0x0F19</integer>
+        </glyph-code>
+      </category>
+      <category category-value="M">
+        <glyph-code>
+          <integer>0x0F35</integer>
+        </glyph-code>
+      </category>
+      <category category-value="M">
+        <glyph-code>
+          <integer>0x0F37</integer>
+        </glyph-code>
+      </category>
+      <category category-value="M">
+        <glyph-code>
+          <integer>0x0F39</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0F40</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0F6A</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x0F62</integer>
+        </glyph-code>
+      </category>
+      <category category-value="a">
+        <glyph-code>
+          <integer>0x0F70</integer>
+        </glyph-code>
+      </category>
+      <category category-value="A">
+        <glyph-code>
+          <integer>0x0F71</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x0F72</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0F7D</integer>
+        </to-code>
+      </category>
+      <category category-value="M">
+        <glyph-code>
+          <integer>0x0F7E</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0x0F80</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0x0F81</integer>
+        </glyph-code>
+      </category>
+      <category category-value="M">
+        <glyph-code>
+          <integer>0x0F82</integer>
+        </glyph-code>
+      </category>
+      <category category-value="M">
+        <glyph-code>
+          <integer>0x0F83</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0x0F84</integer>
+        </glyph-code>
+      </category>
+      <category category-value="M">
+        <from-code>
+          <integer>0x0F86</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0F8B</integer>
+        </to-code>
+      </category>
+      <category category-value="s">
+        <from-code>
+          <integer>0x0F90</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0FBC</integer>
+        </to-code>
+      </category>
+      <category category-value="S">
+        <glyph-code>
+          <integer>0x0FAD</integer>
+        </glyph-code>
+      </category>
+      <category category-value="S">
+        <from-code>
+          <integer>0x0FB1</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0FB2</integer>
+        </to-code>
+      </category>
+      <category category-value="M">
+        <glyph-code>
+          <integer>0x0FC6</integer>
+        </glyph-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="[CR][Ss]*[VaA]*M*">
+            <start-cluster/>
+            <cond-block>
+              <regexp-block regexp="R[^SA].*">
+                <subst-block>
+                  <source-pattern>
+                    <integer>0x0F62</integer>
+                  </source-pattern>
+                  <direct-code>
+                    <integer>0xE083</integer>
+                  </direct-code>
+                </subst-block>
+                <funcall fname="subjoined"/>
+                <repeat/>
+                <funcall fname="dependent-vowel-modifier"/>
+                <repeat/>
+              </regexp-block>
+              <regexp-block regexp=".A.*">
+                <copy-glyph/>
+                <funcall fname="dependent-vowel-modifier"/>
+                <repeat/>
+              </regexp-block>
+              <regexp-block regexp=".[Ss].*">
+                <separator/>
+                <funcall fname="short-consonant"/>
+                <funcall fname="subjoined"/>
+                <repeat/>
+                <funcall fname="dependent-vowel-modifier"/>
+                <repeat/>
+                <separator/>
+              </regexp-block>
+              <regexp-block regexp=".*">
+                <copy-glyph/>
+                <funcall fname="dependent-vowel-modifier"/>
+                <repeat/>
+              </regexp-block>
+            </cond-block>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="[VaAM]">
+            <start-cluster/>
+            <direct-code>
+              <integer>0xE07A</integer>
+            </direct-code>
+            <funcall fname="dependent-vowel-modifier"/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp="[Ss]">
+            <start-cluster/>
+            <direct-code>
+              <integer>0xE07A</integer>
+            </direct-code>
+            <funcall fname="subjoined"/>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+      <defmacro fname="short-consonant">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F5D</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0FBA</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F61</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0FBB</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F62</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0FBC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F6A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x0FBC</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <from-code>
+              <integer>0x0F40</integer>
+            </from-code>
+            <to-code>
+              <integer>0x0F69</integer>
+            </to-code>
+            <direct-code>
+              <integer>0x0F90</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="subjoined">
+        <subst-block>
+          <from-code>
+            <integer>0x0F90</integer>
+          </from-code>
+          <to-code>
+            <integer>0x0FB9</integer>
+          </to-code>
+          <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c"/>
+          <copy-glyph/>
+        </subst-block>
+      </defmacro>
+      <defmacro fname="dependent-vowel-modifier">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F18</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="l" v-pos2="t" h-pos2="c"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F19</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F35</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F37</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F39</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F70</integer>
+            </source-pattern>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F71</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F72</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F73</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c"/>
+            <direct-code>
+              <integer>0x0F71</integer>
+            </direct-code>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c"/>
+            <direct-code>
+              <integer>0x0F72</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F74</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F75</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F76</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c"/>
+            <direct-code>
+              <integer>0x0FB2</integer>
+            </direct-code>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c"/>
+            <direct-code>
+              <integer>0x0F72</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F77</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c"/>
+            <direct-code>
+              <integer>0x0FB2</integer>
+            </direct-code>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c"/>
+            <direct-code>
+              <integer>0x0F71</integer>
+            </direct-code>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c"/>
+            <direct-code>
+              <integer>0x0F80</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F78</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c"/>
+            <direct-code>
+              <integer>0x0FB3</integer>
+            </direct-code>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c"/>
+            <direct-code>
+              <integer>0x0F80</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F79</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c"/>
+            <direct-code>
+              <integer>0x0FB3</integer>
+            </direct-code>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c"/>
+            <direct-code>
+              <integer>0x0F71</integer>
+            </direct-code>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c"/>
+            <direct-code>
+              <integer>0x0F80</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F7A</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F7B</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F7C</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F7D</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F7E</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F80</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F81</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c"/>
+            <direct-code>
+              <integer>0x0F71</integer>
+            </direct-code>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F82</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F83</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F84</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F86</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F87</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F88</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F89</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F8A</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F8B</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c"/>
+            <copy-glyph/>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FC6</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c"/>
+            <copy-glyph/>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+    </generator>
+  </first-stage>
+  <stage>
+    <category-table>
+      <category category-value="G">
+        <from-code>
+          <integer>0x000</integer>
+        </from-code>
+        <to-code>
+          <integer>0xFFFF</integer>
+        </to-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" (G*) ">
+            <match-block match-index="1">
+              <funcall fname="precomposed"/>
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="[^ ]*">
+            <copy-glyph/>
+            <repeat/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+      <defmacro fname="precomposed">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F90</integer>
+              <integer>0x0FAD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE000</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F90</integer>
+              <integer>0x0FB1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE010</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F90</integer>
+              <integer>0x0FB2</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE018</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F90</integer>
+              <integer>0x0FB3</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE026</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F91</integer>
+              <integer>0x0FAD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE001</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F91</integer>
+              <integer>0x0FB1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE011</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F91</integer>
+              <integer>0x0FB2</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE019</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F92</integer>
+              <integer>0x0FAD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE002</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F92</integer>
+              <integer>0x0FB1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE012</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F92</integer>
+              <integer>0x0FB2</integer>
+              <integer>0x0FAD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE025</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F92</integer>
+              <integer>0x0FB2</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE01A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F92</integer>
+              <integer>0x0FB3</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE027</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F95</integer>
+              <integer>0x0FAD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE003</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F97</integer>
+              <integer>0x0FB2</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE060</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F99</integer>
+              <integer>0x0FAD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE004</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F9F</integer>
+              <integer>0x0FAD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE005</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F9F</integer>
+              <integer>0x0FB2</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE01B</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FA0</integer>
+              <integer>0x0FB2</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE01C</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FA1</integer>
+              <integer>0x0FAD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE006</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FA1</integer>
+              <integer>0x0FB2</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE01D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FA4</integer>
+              <integer>0x0FB1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE013</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FA4</integer>
+              <integer>0x0FB2</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE01E</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FA5</integer>
+              <integer>0x0FB1</integer>
+              <integer>0x0FAD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE017</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FA5</integer>
+              <integer>0x0FB1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE014</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FA5</integer>
+              <integer>0x0FB2</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE01F</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FA6</integer>
+              <integer>0x0FB1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE015</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FA6</integer>
+              <integer>0x0FB2</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE020</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FA6</integer>
+              <integer>0x0FB3</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE028</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FA8</integer>
+              <integer>0x0FB1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE016</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FA8</integer>
+              <integer>0x0FB2</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE021</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FA9</integer>
+              <integer>0x0FAD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE007</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FAA</integer>
+              <integer>0x0FAD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE008</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FAB</integer>
+              <integer>0x0FB2</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE061</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FAE</integer>
+              <integer>0x0FAD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE009</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FAF</integer>
+              <integer>0x0FAD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE00A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FAF</integer>
+              <integer>0x0FB3</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE029</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB2</integer>
+              <integer>0x0F90</integer>
+              <integer>0x0FB1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE03A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB2</integer>
+              <integer>0x0F90</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE02C</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB2</integer>
+              <integer>0x0F92</integer>
+              <integer>0x0FAD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE038</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB2</integer>
+              <integer>0x0F92</integer>
+              <integer>0x0FB1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE03B</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB2</integer>
+              <integer>0x0F92</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE02D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB2</integer>
+              <integer>0x0F94</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE02E</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB2</integer>
+              <integer>0x0F97</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE02F</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB2</integer>
+              <integer>0x0F99</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE030</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB2</integer>
+              <integer>0x0F9F</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE031</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB2</integer>
+              <integer>0x0FA1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE032</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB2</integer>
+              <integer>0x0FA3</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE033</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB2</integer>
+              <integer>0x0FA6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE034</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB2</integer>
+              <integer>0x0FA8</integer>
+              <integer>0x0FB1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE03C</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB2</integer>
+              <integer>0x0FA8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE035</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB2</integer>
+              <integer>0x0FA9</integer>
+              <integer>0x0FAD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE039</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB2</integer>
+              <integer>0x0FA9</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE036</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB2</integer>
+              <integer>0x0FAB</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE037</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB2</integer>
+              <integer>0x0FAD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE00B</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB2</integer>
+              <integer>0x0FB3</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE02A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB3</integer>
+              <integer>0x0F90</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE03D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB3</integer>
+              <integer>0x0F92</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE03E</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB3</integer>
+              <integer>0x0F94</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE03F</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB3</integer>
+              <integer>0x0F95</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE040</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB3</integer>
+              <integer>0x0F97</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE041</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB3</integer>
+              <integer>0x0F9F</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE042</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB3</integer>
+              <integer>0x0FA1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE043</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB3</integer>
+              <integer>0x0FA4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE044</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB3</integer>
+              <integer>0x0FA6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE045</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB3</integer>
+              <integer>0x0FAD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE00C</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB3</integer>
+              <integer>0x0FB7</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE046</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB4</integer>
+              <integer>0x0FAD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE00D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB4</integer>
+              <integer>0x0FB2</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE022</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB6</integer>
+              <integer>0x0F90</integer>
+              <integer>0x0FB1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE052</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB6</integer>
+              <integer>0x0F90</integer>
+              <integer>0x0FB2</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE057</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB6</integer>
+              <integer>0x0F90</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE047</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB6</integer>
+              <integer>0x0F92</integer>
+              <integer>0x0FB1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE053</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB6</integer>
+              <integer>0x0F92</integer>
+              <integer>0x0FB2</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE058</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB6</integer>
+              <integer>0x0F92</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE048</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB6</integer>
+              <integer>0x0F94</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE049</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB6</integer>
+              <integer>0x0F99</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE04A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB6</integer>
+              <integer>0x0F9F</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE04B</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB6</integer>
+              <integer>0x0FA1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE04C</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB6</integer>
+              <integer>0x0FA3</integer>
+              <integer>0x0FB2</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE059</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB6</integer>
+              <integer>0x0FA3</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE04D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB6</integer>
+              <integer>0x0FA4</integer>
+              <integer>0x0FB1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE054</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB6</integer>
+              <integer>0x0FA4</integer>
+              <integer>0x0FB2</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE05A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB6</integer>
+              <integer>0x0FA4</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE04E</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB6</integer>
+              <integer>0x0FA6</integer>
+              <integer>0x0FB1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE055</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB6</integer>
+              <integer>0x0FA6</integer>
+              <integer>0x0FB2</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE05B</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB6</integer>
+              <integer>0x0FA6</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE04F</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB6</integer>
+              <integer>0x0FA8</integer>
+              <integer>0x0FB1</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE055</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB6</integer>
+              <integer>0x0FA8</integer>
+              <integer>0x0FB2</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE05C</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB6</integer>
+              <integer>0x0FA8</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE050</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB6</integer>
+              <integer>0x0FA9</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE051</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB6</integer>
+              <integer>0x0FAD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE00E</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB6</integer>
+              <integer>0x0FB2</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE023</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB6</integer>
+              <integer>0x0FB3</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE02B</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB7</integer>
+              <integer>0x0FAD</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE00F</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0FB7</integer>
+              <integer>0x0FB2</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0xE024</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+    </generator>
+  </stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/TIBT-MULE.fltx b/FLT/TIBT-MULE.fltx
new file mode 100644 (file)
index 0000000..6810f55
--- /dev/null
@@ -0,0 +1,1480 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="tibt-mule" key1="nil">
+  <font registry="muletibetan-2"/>
+  <first-stage>
+    <category-table>
+      <category category-value="E">
+        <from-code>
+          <integer>0x0F00</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0FCF</integer>
+        </to-code>
+      </category>
+      <category category-value="M">
+        <glyph-code>
+          <integer>0x0F19</integer>
+        </glyph-code>
+      </category>
+      <category category-value="M">
+        <glyph-code>
+          <integer>0x0F35</integer>
+        </glyph-code>
+      </category>
+      <category category-value="M">
+        <glyph-code>
+          <integer>0x0F37</integer>
+        </glyph-code>
+      </category>
+      <category category-value="M">
+        <glyph-code>
+          <integer>0x0F39</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0F40</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0F6A</integer>
+        </to-code>
+      </category>
+      <category category-value="R">
+        <glyph-code>
+          <integer>0x0F62</integer>
+        </glyph-code>
+      </category>
+      <category category-value="a">
+        <glyph-code>
+          <integer>0x0F70</integer>
+        </glyph-code>
+      </category>
+      <category category-value="A">
+        <glyph-code>
+          <integer>0x0F71</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x0F72</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0F7D</integer>
+        </to-code>
+      </category>
+      <category category-value="M">
+        <glyph-code>
+          <integer>0x0F7E</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0x0F80</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0x0F81</integer>
+        </glyph-code>
+      </category>
+      <category category-value="M">
+        <glyph-code>
+          <integer>0x0F82</integer>
+        </glyph-code>
+      </category>
+      <category category-value="M">
+        <glyph-code>
+          <integer>0x0F83</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0x0F84</integer>
+        </glyph-code>
+      </category>
+      <category category-value="M">
+        <from-code>
+          <integer>0x0F86</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0F8B</integer>
+        </to-code>
+      </category>
+      <category category-value="s">
+        <from-code>
+          <integer>0x0F90</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0FBC</integer>
+        </to-code>
+      </category>
+      <category category-value="S">
+        <glyph-code>
+          <integer>0x0FAD</integer>
+        </glyph-code>
+      </category>
+      <category category-value="S">
+        <from-code>
+          <integer>0x0FB1</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0FB2</integer>
+        </to-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="[CR][Ss]*[VaA]*M*">
+            <start-cluster/>
+            <cond-block>
+              <regexp-block regexp="R[SA].*">
+                <subst-block>
+                  <source-pattern>
+                    <integer>0x0F62</integer>
+                  </source-pattern>
+                  <direct-code>
+                    <integer>0x2122</integer>
+                  </direct-code>
+                </subst-block>
+                <funcall fname="subjoined"/>
+                <repeat/>
+                <funcall fname="dependent-vowel-modifier"/>
+                <repeat/>
+              </regexp-block>
+              <regexp-block regexp=".A.*">
+                <funcall fname="consonant"/>
+                <funcall fname="dependent-vowel-modifier"/>
+                <repeat/>
+              </regexp-block>
+              <regexp-block regexp=".[Ss].*">
+                <separator/>
+                <funcall fname="short-consonant"/>
+                <funcall fname="subjoined"/>
+                <repeat/>
+                <funcall fname="dependent-vowel-modifier"/>
+                <repeat/>
+                <separator/>
+              </regexp-block>
+              <regexp-block regexp=".*">
+                <funcall fname="consonant"/>
+                <funcall fname="dependent-vowel-modifier"/>
+                <repeat/>
+              </regexp-block>
+            </cond-block>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <funcall fname="independent"/>
+            <funcall fname="subjoined"/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+      <defmacro fname="consonant">
+        <subst-block>
+          <from-code>
+            <integer>0x0F40</integer>
+          </from-code>
+          <to-code>
+            <integer>0x0F6A</integer>
+          </to-code>
+          <direct-code>
+            <integer>0x2221</integer>
+          </direct-code>
+        </subst-block>
+      </defmacro>
+      <defmacro fname="short-consonant">
+        <cond-block>
+          <subst-block>
+            <from-code>
+              <integer>0x0F40</integer>
+            </from-code>
+            <to-code>
+              <integer>0x0F69</integer>
+            </to-code>
+            <direct-code>
+              <integer>0x2321</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F6A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x234D</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="subjoined">
+        <subst-block>
+          <from-code>
+            <integer>0x0F90</integer>
+          </from-code>
+          <to-code>
+            <integer>0x0FBC</integer>
+          </to-code>
+          <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="up" y-amount="5"/>
+          <direct-code>
+            <integer>0x2321</integer>
+          </direct-code>
+        </subst-block>
+      </defmacro>
+      <defmacro fname="dependent-vowel-modifier">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F19</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x2149</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F35</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x2165</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F37</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x2167</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F39</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x2169</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F70</integer>
+            </source-pattern>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F71</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x2252</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F72</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x2253</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F73</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x2252</integer>
+            </direct-code>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x2253</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F74</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x2255</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F75</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x2256</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F76</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x2343</integer>
+            </direct-code>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x2261</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F77</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x2343</integer>
+            </direct-code>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x2252</integer>
+            </direct-code>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x2261</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F78</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x2344</integer>
+            </direct-code>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x2261</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F79</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x2344</integer>
+            </direct-code>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x2262</integer>
+            </direct-code>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x2261</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F7A</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x225B</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F7B</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x225C</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F7C</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x225D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F7D</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x225E</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F7E</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x225F</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F80</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x2261</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F81</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x2252</integer>
+            </direct-code>
+            <direct-code>
+              <integer>0x2261</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F82</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x2263</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F83</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x2264</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F84</integer>
+            </source-pattern>
+            <combining-specification v-pos1="b" h-pos1="c" v-pos2="t" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x2265</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F86</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x2267</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F87</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x2268</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F88</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x2269</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F89</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x226A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F8A</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x226B</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x0F8B</integer>
+            </source-pattern>
+            <combining-specification v-pos1="t" h-pos1="c" v-pos2="b" h-pos2="c" y-direction="down" y-amount="5"/>
+            <direct-code>
+              <integer>0x226C</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+      <defmacro fname="independent">
+        <cond-block>
+          <subst-block>
+            <from-code>
+              <integer>0x0F00</integer>
+            </from-code>
+            <to-code>
+              <integer>0x0F3F</integer>
+            </to-code>
+            <direct-code>
+              <integer>0x2130</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <from-code>
+              <integer>0x0F6B</integer>
+            </from-code>
+            <to-code>
+              <integer>0x0F8B</integer>
+            </to-code>
+            <direct-code>
+              <integer>0x224C</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <from-code>
+              <integer>0x0FBD</integer>
+            </from-code>
+            <to-code>
+              <integer>0x0FCF</integer>
+            </to-code>
+            <direct-code>
+              <integer>0x234E</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+    </generator>
+  </first-stage>
+  <stage>
+    <category-table>
+      <category category-value="G">
+        <from-code>
+          <integer>0x2121</integer>
+        </from-code>
+        <to-code>
+          <integer>0x24FF</integer>
+        </to-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp=" (G*) ">
+            <match-block match-index="1">
+              <funcall fname="precomposed"/>
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+          </regexp-block>
+          <regexp-block regexp="[^ ]*">
+            <copy-glyph/>
+            <repeat/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+      <defmacro fname="precomposed">
+        <cond-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2321</integer>
+              <integer>0x233E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2421</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2321</integer>
+              <integer>0x2342</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2440</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2321</integer>
+              <integer>0x2343</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2450</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2321</integer>
+              <integer>0x2344</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2460</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2322</integer>
+              <integer>0x233E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2422</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2322</integer>
+              <integer>0x2342</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2441</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2322</integer>
+              <integer>0x2343</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2451</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2323</integer>
+              <integer>0x233E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2423</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2323</integer>
+              <integer>0x2342</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2442</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2323</integer>
+              <integer>0x2343</integer>
+              <integer>0x233E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x245F</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2323</integer>
+              <integer>0x2343</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2452</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2323</integer>
+              <integer>0x2344</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2461</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2326</integer>
+              <integer>0x233E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2424</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2328</integer>
+              <integer>0x2343</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x245D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x232A</integer>
+              <integer>0x233E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2425</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2330</integer>
+              <integer>0x233E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2426</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2330</integer>
+              <integer>0x2343</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2453</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2331</integer>
+              <integer>0x2343</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2454</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2332</integer>
+              <integer>0x233E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2427</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2332</integer>
+              <integer>0x2343</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2455</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2335</integer>
+              <integer>0x2342</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2443</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2335</integer>
+              <integer>0x2343</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2456</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2336</integer>
+              <integer>0x2342</integer>
+              <integer>0x233E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2447</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2336</integer>
+              <integer>0x2342</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2444</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2336</integer>
+              <integer>0x2343</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2457</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2337</integer>
+              <integer>0x2342</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2445</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2337</integer>
+              <integer>0x2343</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2458</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2337</integer>
+              <integer>0x2344</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2462</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2339</integer>
+              <integer>0x2342</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2446</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2339</integer>
+              <integer>0x2343</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2459</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x233A</integer>
+              <integer>0x233E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2428</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x233B</integer>
+              <integer>0x233E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2429</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x233C</integer>
+              <integer>0x2343</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x245E</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x233F</integer>
+              <integer>0x233E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x242A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2340</integer>
+              <integer>0x233E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x242B</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2340</integer>
+              <integer>0x2344</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2463</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2343</integer>
+              <integer>0x2321</integer>
+              <integer>0x2342</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2530</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2343</integer>
+              <integer>0x2321</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2521</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2343</integer>
+              <integer>0x2323</integer>
+              <integer>0x233E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x252D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2343</integer>
+              <integer>0x2323</integer>
+              <integer>0x2342</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2531</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2343</integer>
+              <integer>0x2323</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2522</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2343</integer>
+              <integer>0x2325</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2523</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2343</integer>
+              <integer>0x2328</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2524</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2343</integer>
+              <integer>0x232A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2525</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2343</integer>
+              <integer>0x2330</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2526</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2343</integer>
+              <integer>0x2332</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2527</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2343</integer>
+              <integer>0x2334</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2528</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2343</integer>
+              <integer>0x2337</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2529</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2343</integer>
+              <integer>0x2339</integer>
+              <integer>0x2342</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2532</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2343</integer>
+              <integer>0x2339</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x252A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2343</integer>
+              <integer>0x233A</integer>
+              <integer>0x233E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x252E</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2343</integer>
+              <integer>0x233A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x252B</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2343</integer>
+              <integer>0x233C</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x252C</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2343</integer>
+              <integer>0x233E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x242C</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2343</integer>
+              <integer>0x2344</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2464</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2344</integer>
+              <integer>0x2321</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2540</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2344</integer>
+              <integer>0x2323</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2541</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2344</integer>
+              <integer>0x2325</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2542</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2344</integer>
+              <integer>0x2326</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2543</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2344</integer>
+              <integer>0x2328</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2544</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2344</integer>
+              <integer>0x2330</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2545</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2344</integer>
+              <integer>0x2332</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2546</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2344</integer>
+              <integer>0x2334</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2121</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2344</integer>
+              <integer>0x2335</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2547</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2344</integer>
+              <integer>0x2337</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2548</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2344</integer>
+              <integer>0x233E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x242D</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2344</integer>
+              <integer>0x2348</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2549</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2345</integer>
+              <integer>0x233E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x242E</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2345</integer>
+              <integer>0x2343</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x245A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2347</integer>
+              <integer>0x2321</integer>
+              <integer>0x2342</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2560</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2347</integer>
+              <integer>0x2321</integer>
+              <integer>0x2343</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2570</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2347</integer>
+              <integer>0x2321</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2550</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2347</integer>
+              <integer>0x2323</integer>
+              <integer>0x2342</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2561</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2347</integer>
+              <integer>0x2323</integer>
+              <integer>0x2343</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2571</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2347</integer>
+              <integer>0x2323</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2551</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2347</integer>
+              <integer>0x2325</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2552</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2347</integer>
+              <integer>0x232A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2553</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2347</integer>
+              <integer>0x2330</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2554</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2347</integer>
+              <integer>0x2332</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2555</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2347</integer>
+              <integer>0x2334</integer>
+              <integer>0x2343</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2572</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2347</integer>
+              <integer>0x2334</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2556</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2347</integer>
+              <integer>0x2335</integer>
+              <integer>0x2342</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2562</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2347</integer>
+              <integer>0x2335</integer>
+              <integer>0x2343</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2573</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2347</integer>
+              <integer>0x2335</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2557</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2347</integer>
+              <integer>0x2337</integer>
+              <integer>0x2342</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2563</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2347</integer>
+              <integer>0x2337</integer>
+              <integer>0x2343</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2574</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2347</integer>
+              <integer>0x2337</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2558</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2347</integer>
+              <integer>0x2339</integer>
+              <integer>0x2342</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2564</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2347</integer>
+              <integer>0x2339</integer>
+              <integer>0x2343</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2575</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2347</integer>
+              <integer>0x2339</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2559</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2347</integer>
+              <integer>0x233A</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x255A</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2347</integer>
+              <integer>0x233E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x242F</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2347</integer>
+              <integer>0x2343</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x245B</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2347</integer>
+              <integer>0x2344</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2465</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2348</integer>
+              <integer>0x233E</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x2430</integer>
+            </direct-code>
+          </subst-block>
+          <subst-block>
+            <source-pattern>
+              <integer>0x2348</integer>
+              <integer>0x2343</integer>
+            </source-pattern>
+            <direct-code>
+              <integer>0x245C</integer>
+            </direct-code>
+          </subst-block>
+        </cond-block>
+      </defmacro>
+    </generator>
+  </stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/TIBT-OTF.fltx b/FLT/TIBT-OTF.fltx
new file mode 100644 (file)
index 0000000..dd560d8
--- /dev/null
@@ -0,0 +1,211 @@
+<?xml version='1.0'?>
+<font-layouter xmlns="http://www.m17n.org/FLT" key0="tibt-otf" key1="nil">
+  <font registry="unicode-bmp" family="nil" foundry="nil">
+    <otf-specification script="tibt">
+      <gsub-features>
+        <positive-list>
+          <feature>ccmp</feature>
+          <feature>blws</feature>
+          <feature>abvs</feature>
+        </positive-list>
+      </gsub-features>
+      <gpos-features>
+        <negative-list/>
+      </gpos-features>
+    </otf-specification>
+  </font>
+  <first-stage>
+    <category-table>
+      <category category-value="x">
+        <from-code>
+          <integer>0x0F00</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0FCF</integer>
+        </to-code>
+      </category>
+      <category category-value="T">
+        <glyph-code>
+          <integer>0x0F39</integer>
+        </glyph-code>
+      </category>
+      <category category-value="A">
+        <glyph-code>
+          <integer>0x0F71</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0x0F72</integer>
+        </glyph-code>
+      </category>
+      <category category-value="U">
+        <glyph-code>
+          <integer>0x0F74</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x0F7A</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0F7D</integer>
+        </to-code>
+      </category>
+      <category category-value="V">
+        <glyph-code>
+          <integer>0x0F80</integer>
+        </glyph-code>
+      </category>
+      <category category-value="H">
+        <glyph-code>
+          <integer>0x0F84</integer>
+        </glyph-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="x+">
+            <copy-glyph/>
+            <repeat/>
+          </regexp-block>
+          <regexp-block regexp="(H?)(A*)(V?)(U*)(T?)">
+            <match-block match-index="5">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="2">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="4">
+              <copy-glyph/>
+              <repeat/>
+            </match-block>
+            <match-block match-index="1">
+              <copy-glyph/>
+            </match-block>
+            <match-block match-index="3">
+              <copy-glyph/>
+            </match-block>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </first-stage>
+  <stage>
+    <category-table>
+      <category category-value="x">
+        <from-code>
+          <integer>0x0F00</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0FCF</integer>
+        </to-code>
+      </category>
+      <category category-value="T">
+        <glyph-code>
+          <integer>0x0F39</integer>
+        </glyph-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0F40</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0F6A</integer>
+        </to-code>
+      </category>
+      <category category-value="A">
+        <glyph-code>
+          <integer>0x0F71</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x0F72</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0F7E</integer>
+        </to-code>
+      </category>
+      <category category-value="U">
+        <glyph-code>
+          <integer>0x0F74</integer>
+        </glyph-code>
+      </category>
+      <category category-value="V">
+        <from-code>
+          <integer>0x0F80</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0F81</integer>
+        </to-code>
+      </category>
+      <category category-value="S">
+        <from-code>
+          <integer>0x0F82</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0F83</integer>
+        </to-code>
+      </category>
+      <category category-value="H">
+        <glyph-code>
+          <integer>0x0F84</integer>
+        </glyph-code>
+      </category>
+      <category category-value="s">
+        <from-code>
+          <integer>0x0F86</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0F87</integer>
+        </to-code>
+      </category>
+      <category category-value="C">
+        <from-code>
+          <integer>0x0F88</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0F89</integer>
+        </to-code>
+      </category>
+      <category category-value="c">
+        <from-code>
+          <integer>0x0F90</integer>
+        </from-code>
+        <to-code>
+          <integer>0x0FBC</integer>
+        </to-code>
+      </category>
+    </category-table>
+    <generator>
+      <match-block match-index="0">
+        <cond-block>
+          <regexp-block regexp="(C)(T?)(c*)(A*)(U*)(H?)(V*)(S*)(s*)">
+            <start-cluster/>
+            <otf-specification script="tibt">
+              <gsub-features>
+                <positive-list>
+                  <feature>ccmp</feature>
+                  <feature>blws</feature>
+                  <feature>abvs</feature>
+                </positive-list>
+              </gsub-features>
+              <gpos-features>
+                <negative-list/>
+              </gpos-features>
+            </otf-specification>
+            <end-cluster/>
+          </regexp-block>
+          <regexp-block regexp=".">
+            <copy-glyph/>
+          </regexp-block>
+        </cond-block>
+        <repeat/>
+      </match-block>
+    </generator>
+  </stage>
+</font-layouter>
\ No newline at end of file
diff --git a/FLT/expr.rng b/FLT/expr.rng
new file mode 100644 (file)
index 0000000..3bbfcad
--- /dev/null
@@ -0,0 +1,308 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<grammar 
+        datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
+         xmlns:xi="http://www.w3.org/1999/XML/xinclude"
+        xmlns="http://relaxng.org/ns/structure/1.0"
+        ns="http://www.m17n.org/FLT">
+
+<start combine="choice">
+  <ref name="expr"/>
+</start>
+
+<define name="expr">
+      <choice>
+       <ref name="defun"/>
+       <ref name="defmacro"/>
+       <ref name="defvar"/>
+       <ref name="term"/>
+      </choice>
+</define>
+
+<define name="term" combine="choice">
+  <choice>
+    <ref name="integer"/>
+    <ref name="string"/>
+    <ref name="symbol"/>
+    <ref name="list"/>
+    <ref name="error"/>
+    <ref name="varref"/>
+    <ref name="funcall"/>
+  </choice>
+</define>
+
+<define name="defun">
+  <element name="defun">
+    <attribute name="fname"><data type="ID"/></attribute>
+    <optional>
+      <choice><ref name="args"/></choice>
+    </optional>
+    <zeroOrMore><ref name="term"/></zeroOrMore>
+  </element>
+</define>
+
+<define name="defmacro">
+  <element name="defmacro">
+    <attribute name="fname"><data type="ID"/></attribute>
+    <optional>
+      <choice><ref name="args"/></choice>
+    </optional>
+    <zeroOrMore><ref name="term"/></zeroOrMore>
+  </element>
+</define>
+
+<define name="args">
+  <element name="args">
+    <zeroOrMore>
+      <element name="fixed">
+       <attribute name="vname"><data type="Name"/></attribute>
+      </element>
+    </zeroOrMore>
+    <zeroOrMore>
+      <element name="optional">
+       <attribute name="vname"><data type="Name"/></attribute>
+      </element>
+    </zeroOrMore>
+    <zeroOrMore>
+      <element name="rest">
+       <attribute name="vname"><data type="Name"/></attribute>
+      </element>
+    </zeroOrMore>
+  </element>
+</define>
+
+<define name="defvar">
+  <element name="defvar">
+    <attribute name="vname"><data type="ID"/></attribute>
+    <optional>
+      <ref name="description"/>
+    </optional>
+    <optional>
+      <choice>
+       <group>
+         <ref name="integer"/>
+         <optional>
+           <element name="possible-value">
+             <oneOrMore>
+               <choice>
+                 <ref name="integer"/>
+                 <element name="range"><ref name="integer"/><ref name="integer"/></element>
+               </choice>
+             </oneOrMore>
+           </element>
+         </optional>
+       </group>
+       <group>
+         <ref name="string"/>
+         <optional>
+           <element name="possible-value">
+             <oneOrMore>
+               <ref name="string"/>
+             </oneOrMore>
+           </element>
+           </optional>
+       </group>
+       <group>
+         <ref name="symbol"/>
+         <optional>
+           <element name="possible-value">
+             <oneOrMore>
+               <ref name="symbol"/>
+             </oneOrMore>
+           </element>
+           </optional>
+       </group>
+      </choice>
+    </optional>
+  </element>
+</define>
+
+<define name="description">
+  <element name="description">
+    <choice>
+      <element name="gettext"><text/></element>
+      <text/>
+    </choice>
+  </element>
+</define>
+
+<define name="integer" combine="choice">
+  <element name="integer">
+    <choice>
+      <data type="integer"/>
+      <data type="string"><param name="pattern">\?.</param></data>
+      <data type="string"><param name="pattern">[0#]x[0-9A-Fa-f]{1,6}</param></data>
+    </choice>
+  </element>
+</define>
+
+<define name="string">
+  <element name="string"><data type="string"/></element>
+</define>
+
+<define name="symbol">
+  <element name="symbol"><data type="string"/></element>
+</define>
+
+<define name="list">
+  <element name="list">
+    <zeroOrMore><ref name="term"/></zeroOrMore>
+  </element>
+</define>
+
+<define name="error">
+  <element name="error">
+    <optional><attribute name="ename"><data type="Name"/></attribute></optional>
+    <ref name="string"/>
+  </element>
+</define>
+
+<define name="varref">
+  <element name="varref">
+   <attribute name="vname"><data type="Name"/></attribute><empty/>
+  </element>
+</define>
+
+<define name="funcall">
+  <choice>
+    <element name="funcall">
+      <attribute name="fname">
+       <data type="IDREF"/>
+      </attribute>
+      <zeroOrMore><ref name="term"/></zeroOrMore>
+    </element>
+    <ref name="predefined"/>
+  </choice>
+</define>
+
+<define name="predefined">
+  <choice>
+    <element name="set"><attribute name="vname"><data type="Name"/></attribute><ref name="term"/></element>
+
+    <element name="and"><oneOrMore><ref name="term"/></oneOrMore></element>
+    <element name="or"><oneOrMore><ref name="term"/></oneOrMore></element>
+    <element name="not"><ref name="term"/></element>
+    <element name="eq"><oneOrMore><ref name="term"/></oneOrMore></element>
+    <element name="noteq"><ref name="term"/><ref name="term"/></element>
+    <element name="equal"><ref name="term"/><ref name="term"/></element>
+    <element name="match"><ref name="term"/><ref name="term"/></element>
+
+    <element name="lt"><ref name="intterm"/><ref name="intterm"/></element>
+    <element name="le"><ref name="intterm"/><ref name="intterm"/></element>
+    <element name="ge"><ref name="intterm"/><ref name="intterm"/></element>
+    <element name="gt"><ref name="intterm"/><ref name="intterm"/></element>
+
+    <element name="add">
+      <optional><attribute name="vname"/></optional><oneOrMore><ref name="intterm"/></oneOrMore>
+    </element>
+    <element name="sub">
+      <optional><attribute name="vname"/></optional><oneOrMore><ref name="intterm"/></oneOrMore>
+    </element>
+    <element name="mul">
+      <optional><attribute name="vname"/></optional><oneOrMore><ref name="intterm"/></oneOrMore>
+    </element>
+    <element name="div">
+      <optional><attribute name="vname"/></optional><oneOrMore><ref name="intterm"/></oneOrMore>
+    </element>
+    <element name="mod">
+      <choice><group><attribute name="vname"/><ref name="intterm"/></group>
+              <group><ref name="intterm"/><ref name="intterm"/></group></choice>
+    </element>
+
+    <element name="logand">
+      <optional><attribute name="vname"/></optional><oneOrMore><ref name="intterm"/></oneOrMore>
+    </element>
+    <element name="logior">
+      <optional><attribute name="vname"/></optional><oneOrMore><ref name="intterm"/></oneOrMore>
+    </element>
+    <element name="logxor">
+      <optional><attribute name="vname"/></optional><oneOrMore><ref name="intterm"/></oneOrMore>
+    </element>
+    <element name="lsh">
+      <choice><group><attribute name="vname"/><ref name="intterm"/></group>
+              <group><ref name="intterm"/><ref name="intterm"/></group></choice>
+    </element>
+
+    <element name="append">
+      <optional><attribute name="vname"/></optional>
+      <oneOrMore><ref name="term"/></oneOrMore>
+    </element>
+    <element name="concat">
+      <optional><attribute name="vname"/></optional>
+      <oneOrMore><choice><ref name="intterm"/><ref name="strterm"/><ref name="listterm"/></choice></oneOrMore>
+    </element>
+    <element name="length"><choice><ref name="strterm"/><ref name="listterm"/></choice></element>
+    <element name="nth"><ref name="intterm"/><choice><ref name="strterm"/><ref name="listterm"/></choice></element>
+    <element name="copy"><ref name="listterm"/></element>
+    <element name="ins"><attribute name="vname"/>
+      <ref name="intterm"/><choice><ref name="strterm"/><ref name="listterm"/></choice>
+    </element>
+    <element name="del"><attribute name="vname"/>
+      <ref name="intterm"/><ref name="intterm"/>
+    </element>
+
+    <element name="progn"><zeroOrMore><ref name="term"/></zeroOrMore></element>
+    <element name="if"><ref name="term"/><ref name="term"/><optional><ref name="term"/></optional></element>
+    <element name="when"><oneOrMore><ref name="term"/></oneOrMore></element>
+    <element name="cond"><oneOrMore><ref name="list"/></oneOrMore></element>
+
+    <element name="loop"><oneOrMore><ref name="term"/></oneOrMore></element>
+    <element name="while"><oneOrMore><ref name="term"/></oneOrMore></element>
+    <element name="foreach"><attribute name="vname"/>
+       <choice><ref name="strterm"/><ref name="listterm"/></choice>
+       <oneOrMore><ref name="term"/></oneOrMore>
+    </element>
+    <element name="break"><optional><ref name="term"/></optional></element>
+    <element name="return"><optional><ref name="term"/></optional></element>
+    <element name="catch">
+      <optional><attribute name="vname"><data type="Name"/></attribute></optional>
+      <choice><ref name="symbol"/><ref name="error"/></choice>
+      <oneOrMore><ref name="term"/></oneOrMore>
+    </element>
+    <element name="throw">
+      <choice>
+       <group><ref name="symbol"/><optional><ref name="term"/></optional></group>
+       <ref name="error"/>
+      </choice>
+    </element>
+    <element name="quote"><ref name="term"/></element>
+    <element name="eval"><ref name="term"/></element>
+    <element name="type"><ref name="term"/></element>
+  </choice>
+</define>
+
+<define name="intterm" combine="choice">
+  <choice>
+    <ref name="varref"/>
+    <ref name="integer"/>
+    <ref name="funcall"/>
+  </choice>
+</define>
+
+<define name="strterm">
+  <choice>
+    <ref name="varref"/>
+    <ref name="string"/>
+    <ref name="funcall"/>
+  </choice>
+</define>
+
+<define name="symterm">
+  <choice>
+    <ref name="varref"/>
+    <ref name="symbol"/>
+    <ref name="funcall"/>
+  </choice>
+</define>
+
+<define name="listterm">
+  <choice>
+    <ref name="varref"/>
+    <ref name="list"/>
+    <ref name="funcall"/>
+  </choice>
+</define>
+
+
+</grammar>
diff --git a/FLT/flt-expr.rng b/FLT/flt-expr.rng
new file mode 100644 (file)
index 0000000..f759c67
--- /dev/null
@@ -0,0 +1,229 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<grammar 
+        datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
+         xmlns:xi="http://www.w3.org/1999/XML/xinclude"
+        xmlns="http://relaxng.org/ns/structure/1.0"
+        ns="http://www.m17n.org/FLT">
+
+<include href="expr.rng"/>
+
+<start combine="choice">
+  <element name="font-layouter">
+    <attribute name="key0"><data type="string"/></attribute>
+    <attribute name="key1"><data type="string"/></attribute>
+    <optional><ref name="font"/></optional>
+    <optional>
+      <element name="m17n-version">
+       <data type="string"><param name="pattern">[0-9]+\.[0-9]+\.[0-9]+</param></data>
+      </element>
+    </optional>
+    <ref name="first-stage"/>
+    <zeroOrMore><ref name="stage"/></zeroOrMore>
+  </element>
+</start>
+
+<define name="first-stage">
+  <element name="first-stage">
+    <ref name="category-table"/>
+    <ref name="generator"/>
+  </element>
+</define>
+
+<define name="stage">
+  <element name="stage">
+    <optional><ref name="category-table"/></optional>
+    <ref name="generator"/>
+  </element>
+</define>
+
+<define name="category-table">
+  <element name="category-table">
+    <zeroOrMore>
+      <element name="category">
+       <attribute name="category-value">
+         <data type="string"><param name="pattern">[a-zA-Z]</param></data>
+       </attribute>
+       <choice>
+         <element name="glyph-code"><ref name="integer"/></element>
+         <group><element name="from-code"><ref name="integer"/></element>
+                <element name="to-code"><ref name="integer"/></element>
+         </group>
+       </choice>
+      </element>
+    </zeroOrMore>
+  </element>
+</define>
+
+<define name="generator">
+  <element name="generator">
+    <ref name="funcall"/>
+    <zeroOrMore>
+      <ref name="defmacro"/>
+    </zeroOrMore>
+  </element>
+</define>
+
+<!-- rules -->
+<define name="funcall" combine="choice">
+  <choice>
+    <element name="direct-code"><ref name="integer"/></element>
+
+    <element name="copy-glyph"><empty/></element>
+    <element name="repeat"><empty/></element>
+    <element name="start-cluster"><empty/></element>
+    <element name="end-cluster"><empty/></element>
+    <element name="left-padding-flag"><empty/></element>
+    <element name="right-padding-flag"><empty/></element>
+    <element name="separator"><empty/></element>
+
+    <element name="regexp-block">
+      <attribute name="regexp"/>
+      <zeroOrMore><ref name="funcall"/></zeroOrMore>
+    </element>
+
+    <element name="match-block">
+      <attribute name="match-index"><data type="integer"/></attribute>
+      <zeroOrMore><ref name="funcall"/></zeroOrMore>
+    </element>      
+
+    <element name="subst-block">
+      <choice>
+       <element name="source-pattern">
+         <oneOrMore><ref name="integer"/></oneOrMore>
+       </element>
+       <group>
+         <element name="from-code"><ref name="integer"/></element>
+         <element name="to-code"><ref name="integer"/></element>
+       </group>
+      </choice>
+      <zeroOrMore><ref name="funcall"/></zeroOrMore>
+    </element>
+
+    <element name="cond-block">
+      <oneOrMore><ref name="funcall"></ref></oneOrMore>
+    </element> 
+
+    <element name="font-facility-block">
+      <choice>
+       <ref name="font"/>
+       <element name="characters">
+         <oneOrMore><ref name="integer"/></oneOrMore>
+       </element>
+      </choice>
+      <zeroOrMore><ref name="funcall"/></zeroOrMore>
+    </element>
+    
+    <ref name="otf-specification"/>
+
+    <element name="combining-specification">
+      <attribute name="v-pos1">
+       <choice><value>t</value><value>c</value><value>b</value><value>B</value></choice>
+      </attribute>
+      <attribute name="v-pos2">
+       <choice><value>t</value><value>c</value><value>b</value><value>B</value></choice>
+      </attribute>
+      <attribute name="h-pos1">
+       <choice><value>l</value><value>c</value><value>r</value></choice>
+      </attribute>
+      <attribute name="h-pos2">
+       <choice><value>l</value><value>c</value><value>r</value></choice>
+      </attribute>
+      <optional>
+           <attribute name="x-direction"><choice><value>right</value><value>left</value></choice></attribute>
+           <optional><attribute name="x-amount"><data type="integer"/></attribute></optional>
+      </optional>
+      <optional>
+           <attribute name="y-direction"><choice><value>up</value><value>down</value></choice></attribute>
+           <optional><attribute name="y-amount"><data type="integer"/></attribute></optional>
+      </optional>
+    </element>
+
+<!--    <element name="macro-reference">
+     <attribute name="macroname"><data type="IDREF"/></attribute>
+    </element>-->
+
+  </choice>
+</define>
+
+<define name="font">
+  <element name="font">
+    <optional>
+      <optional>
+       <attribute name="foundry"><data type="token"/></attribute>
+       <attribute name="family"><data type="token"/></attribute>
+       <optional>
+         <attribute name="weight"><data type="token"/></attribute>
+         <optional>
+           <attribute name="style"><data type="token"/></attribute>
+           <optional>
+             <attribute name="stretch"><data type="token"/></attribute>
+             <optional>
+               <attribute name="adstyle"><data type="token"/></attribute>
+             </optional>
+           </optional>
+         </optional>
+       </optional>
+      </optional>
+      <attribute name="registry"><data type="token"/></attribute>
+    </optional>
+    <optional>
+      <ref name="otf-specification"/>
+    </optional>
+    <zeroOrMore>
+      <element name="lang-specification">
+       <data type="token"><param name="minLength">2</param><param name="maxLength">3</param></data>
+      </element>
+    </zeroOrMore>
+  </element>
+</define>
+                 
+<define name="otf-specification">
+  <element name="otf-specification">
+    <attribute name="script"/>
+    <optional><attribute name="langsys"/></optional>
+    <optional>
+      <element name="gsub-features">
+       <choice>
+         <element name="positive-list">
+           <zeroOrMore>
+             <element name="feature">
+               <data type="string"><param name="length">4</param></data>
+             </element>
+           </zeroOrMore>
+         </element>
+         <element name="negative-list">
+           <zeroOrMore>
+             <element name="feature">
+               <data type="string"><param name="length">4</param></data>
+             </element>
+           </zeroOrMore>
+         </element>
+       </choice>
+      </element>
+    </optional>
+    <optional>
+      <element name="gpos-features">
+       <choice>
+         <element name="positive-list">
+           <zeroOrMore>
+             <element name="feature">
+               <data type="string"><param name="length">4</param></data>
+             </element>
+           </zeroOrMore>
+         </element>
+         <element name="negative-list">
+           <zeroOrMore>
+             <element name="feature">
+               <data type="string"><param name="length">4</param></data>
+             </element>
+           </zeroOrMore>
+         </element>
+       </choice>
+      </element>
+    </optional>
+  </element>
+</define>
+
+</grammar>
+