]> git.ipfire.org Git - thirdparty/prompt.git/commitdiff
Fix Nighahit, subs & sups issues 2/head
authorSungsit Sawaiwan <sungsit@users.noreply.github.com>
Wed, 11 Nov 2015 20:06:34 +0000 (03:06 +0700)
committerSungsit Sawaiwan <sungsit@users.noreply.github.com>
Wed, 11 Nov 2015 20:06:34 +0000 (03:06 +0700)
41 files changed:
.gitignore
features.html
font/Prompt-Black.otf
font/Prompt-Black.ttf
font/Prompt-BlackItalic.otf
font/Prompt-BlackItalic.ttf
font/Prompt-Bold.otf
font/Prompt-Bold.ttf
font/Prompt-BoldItalic.otf
font/Prompt-BoldItalic.ttf
font/Prompt-ExtraBold.otf
font/Prompt-ExtraBold.ttf
font/Prompt-ExtraBoldItalic.otf
font/Prompt-ExtraBoldItalic.ttf
font/Prompt-ExtraLight.otf
font/Prompt-ExtraLight.ttf
font/Prompt-ExtraLightItalic.otf
font/Prompt-ExtraLightItalic.ttf
font/Prompt-Italic.otf
font/Prompt-Italic.ttf
font/Prompt-Light.otf
font/Prompt-Light.ttf
font/Prompt-LightItalic.otf
font/Prompt-LightItalic.ttf
font/Prompt-Medium.otf
font/Prompt-Medium.ttf
font/Prompt-MediumItalic.otf
font/Prompt-MediumItalic.ttf
font/Prompt-Regular.otf
font/Prompt-Regular.ttf
font/Prompt-SemiBold.otf
font/Prompt-SemiBold.ttf
font/Prompt-SemiBoldItalic.otf
font/Prompt-SemiBoldItalic.ttf
font/Prompt-Thin.otf
font/Prompt-Thin.ttf
font/Prompt-ThinItalic.otf
font/Prompt-ThinItalic.ttf
patch/gsub.fea [new file with mode: 0644]
patch/patch.fea [new file with mode: 0644]
patch/patch.py [new file with mode: 0755]

index 5df1b9b43c4e4ca8a6c44462b9299586fd647b15..924889bb91cb8638ae602fd1e01b0784b78c071d 100644 (file)
@@ -1 +1,3 @@
 .sass-cache
+*.zip
+*.bak
index 861e975a9b45375adf26ad3c602ae9c8c8bbe30c..466db2ad8e8b896fb62fdc01c807c52020ec9ddf 100644 (file)
@@ -68,7 +68,8 @@
       <h4>ภาษาไทย (Standard Thai)</h4>
 
       <div class="test-text">
-        <p>ฝุ่นน้ำท้องฟ้า ทุ่งหญ้าป้ำเป๋อ ชนชั้นกระฎุมพี เป่าปี่กตัญญู</p>
+        <p>พี่ป๋ำฎูนู๋น้ำเป่าฝุ่นหญู่ก้นปี่</p>
+        <p>ฝุ่น<span style="color:red;">น้ำ</span>ท้องฟ้า ทุ่งหญ้า<span style="color:red;">ป้ำ</span>เป๋อ ชนชั้นกระฎุมพี เป่าปี่กตัญญู ดูนาฬิกา<span style="color:red;">ซ้ำ</span>ซ้อน</p>
       </div>
     </section>
 
index 153cf8e339605131ad8c0439f5e0b0f154e78ee5..05c76fd7e7a025184d0bfdcc169731934dd598cb 100644 (file)
Binary files a/font/Prompt-Black.otf and b/font/Prompt-Black.otf differ
index 92c7f302820e883b0a1bb49fd0c18c0a1daae5c9..ada561a03033345f1f5485e02ac0284b96353acb 100644 (file)
Binary files a/font/Prompt-Black.ttf and b/font/Prompt-Black.ttf differ
index 5ad7f78369105fec46c9d9ba226511a3f7d87559..588ad5a2e4e337403edfc663909df84176128dad 100644 (file)
Binary files a/font/Prompt-BlackItalic.otf and b/font/Prompt-BlackItalic.otf differ
index 18756a91314224f03dbe10a057fd04ac1a057db9..6ae8bb277dab8346a25e75e93db290771fe96dad 100644 (file)
Binary files a/font/Prompt-BlackItalic.ttf and b/font/Prompt-BlackItalic.ttf differ
index 6c83245f364f3cff1fdc74514bb1ed853a09ca77..4018143c94b0a4992c8ab5b2d74bf97c2639d6a4 100644 (file)
Binary files a/font/Prompt-Bold.otf and b/font/Prompt-Bold.otf differ
index 117103d94c8efc66da7ae8bfb56ffab670d37b6d..4c1ad24ed01f2168bd9f8d4e238f913b81b5c500 100644 (file)
Binary files a/font/Prompt-Bold.ttf and b/font/Prompt-Bold.ttf differ
index 2006c1a076910ada45b0833a6137eeab576d0e92..7083ee2c32aa5470a6cbdfb430216ced842404aa 100644 (file)
Binary files a/font/Prompt-BoldItalic.otf and b/font/Prompt-BoldItalic.otf differ
index 62a2f815f9a30d65565c287645a17e960251afc5..cbec69a87e7101f5636d95b1f6c4e97ecf5c8f3a 100644 (file)
Binary files a/font/Prompt-BoldItalic.ttf and b/font/Prompt-BoldItalic.ttf differ
index 19eb12d877f4643a83dc8e55dc8dd4f62e385429..3b6fd18ff299b7b805fffa84bc6ed8fc1a8ea635 100644 (file)
Binary files a/font/Prompt-ExtraBold.otf and b/font/Prompt-ExtraBold.otf differ
index ce5d0ed134302fb7c4bfa879b0971dc4b2f687b8..d8ac1614808d7b38d03d5696e353c4d6e0af9ff2 100644 (file)
Binary files a/font/Prompt-ExtraBold.ttf and b/font/Prompt-ExtraBold.ttf differ
index 534be8da6f17f84306615e5c3a1cfcac8a1f1082..8d5c3d65c27f766d40b4167db08cf1cf92e27fe5 100644 (file)
Binary files a/font/Prompt-ExtraBoldItalic.otf and b/font/Prompt-ExtraBoldItalic.otf differ
index 3c8d53b26ab1e45770fcaae22f32698a8ac56e1c..40504871ebc7a9e962a0655a6dc6d0ba94fc8dff 100644 (file)
Binary files a/font/Prompt-ExtraBoldItalic.ttf and b/font/Prompt-ExtraBoldItalic.ttf differ
index 05a62323947e1bb21542349650ee03fb185a449c..e79fcb57552f449471dadb21c272a5217c2ea4a1 100644 (file)
Binary files a/font/Prompt-ExtraLight.otf and b/font/Prompt-ExtraLight.otf differ
index 26b11f90778b3b6bceb0765bb3f8d247cfc66b85..73fc16cc9ff8ee73a48f577f62f9ae249a841362 100644 (file)
Binary files a/font/Prompt-ExtraLight.ttf and b/font/Prompt-ExtraLight.ttf differ
index d1a95b8d938229173be5c8a5eda5feb25a1db507..d1bc690342752c84de49e92266f2b23d9821a25f 100644 (file)
Binary files a/font/Prompt-ExtraLightItalic.otf and b/font/Prompt-ExtraLightItalic.otf differ
index 840dd14f4b2eb1b3f77c9ea85f1e1b77e980b986..f16ed3e202d1a9f033c937557b407a2dd970d258 100644 (file)
Binary files a/font/Prompt-ExtraLightItalic.ttf and b/font/Prompt-ExtraLightItalic.ttf differ
index 8ccd1ce882f1843cd30b7b529158b4a8ad6e28fd..aa135346b2313d68faa1b05a2a8c9079d0c9cd8d 100644 (file)
Binary files a/font/Prompt-Italic.otf and b/font/Prompt-Italic.otf differ
index f7420e1d8a31a806732df1dac76d0c2116353e6a..ef9eea340f57e9513ff92133a83dad7a6ee52c61 100644 (file)
Binary files a/font/Prompt-Italic.ttf and b/font/Prompt-Italic.ttf differ
index b3ce1bceb3208857543cc746c261c04a8ac5f8c7..2186215f7f88c5ef7605ee363f61f0619d018b0f 100644 (file)
Binary files a/font/Prompt-Light.otf and b/font/Prompt-Light.otf differ
index 882a95ff519b734adbaf5fed82cedef75475a933..74594339d250999cde1b6ce39d0fa4ddb33539f5 100644 (file)
Binary files a/font/Prompt-Light.ttf and b/font/Prompt-Light.ttf differ
index ea3530cbe0d6e9fd8331edd63a55fa278a1e0cfd..35e110bf41c4066eaeccfb06748a1ba0011f5396 100644 (file)
Binary files a/font/Prompt-LightItalic.otf and b/font/Prompt-LightItalic.otf differ
index 752c01983e1b686def5011418ae52c318ed0787f..285b6eb4283eaf4f43f85f2c690947516c286a24 100644 (file)
Binary files a/font/Prompt-LightItalic.ttf and b/font/Prompt-LightItalic.ttf differ
index 948bd0b8f54d17876416724c175c4ebaf6fd0fd3..b784dd35333685ebe9a3001eb81705756fdadd3a 100644 (file)
Binary files a/font/Prompt-Medium.otf and b/font/Prompt-Medium.otf differ
index 4c4794a9148bfd179ab2406c087ae9d75bb1465d..0b3dbd40922aae7d120340e55e1724e7cbe59920 100644 (file)
Binary files a/font/Prompt-Medium.ttf and b/font/Prompt-Medium.ttf differ
index b478fdda65e71dd403adcff84cfc74c6bde567a2..931a9450e689fc31399bd7b8b7ccf0e01b873e43 100644 (file)
Binary files a/font/Prompt-MediumItalic.otf and b/font/Prompt-MediumItalic.otf differ
index 4f44940286816c33b0dccb7a90e365d5d5b4a89d..e8ce8f696aa13732410a5587c649ba5935a61002 100644 (file)
Binary files a/font/Prompt-MediumItalic.ttf and b/font/Prompt-MediumItalic.ttf differ
index a41a3915624a4da46fbb1afd8632ab703c0b8324..fe45e374c2d60de4d48237bdd59683a80a436700 100644 (file)
Binary files a/font/Prompt-Regular.otf and b/font/Prompt-Regular.otf differ
index fb1e81675194ff41d5ccf2b9a1f1acdbe376f1c7..73a055d978cef1e063eaa4f1972568b3952dbeb1 100644 (file)
Binary files a/font/Prompt-Regular.ttf and b/font/Prompt-Regular.ttf differ
index 2fff006f9ae5afc925f284b1c030a38e5243a3e5..c0b74a086c6a5dc851fa9eb054e2075dcc5f84db 100644 (file)
Binary files a/font/Prompt-SemiBold.otf and b/font/Prompt-SemiBold.otf differ
index 08d4ffc019c7ece9761bb17edc45090ce2f1787e..7ffa1e9690f4be51571417d5414999e894ad5dc9 100644 (file)
Binary files a/font/Prompt-SemiBold.ttf and b/font/Prompt-SemiBold.ttf differ
index 09d10c5b3e249fad725f54d652e95a1d47cfa4b0..0edf84d89cb8e0954e60b2e7f3df8664ab7f0519 100644 (file)
Binary files a/font/Prompt-SemiBoldItalic.otf and b/font/Prompt-SemiBoldItalic.otf differ
index 4da922159fbf406b7345f3fa324089f08dd54325..920a746f3ffb11a86c60b1fdb882e2fc1b87a775 100644 (file)
Binary files a/font/Prompt-SemiBoldItalic.ttf and b/font/Prompt-SemiBoldItalic.ttf differ
index 9201503d7d8b47f62434084c2f7fbf507d3250a9..78c2dfe8ee2694fb381e3ad21a468b7439fbe944 100644 (file)
Binary files a/font/Prompt-Thin.otf and b/font/Prompt-Thin.otf differ
index ca11eebf33072411796d551a81e9639e09116165..f9d36fe7379c8e1f4b25541cf211052ade2cf340 100644 (file)
Binary files a/font/Prompt-Thin.ttf and b/font/Prompt-Thin.ttf differ
index 6719542721e84aad6832ff6b043669d785e959ba..0ff431037ce486376516426a75add13fc7b9575a 100644 (file)
Binary files a/font/Prompt-ThinItalic.otf and b/font/Prompt-ThinItalic.otf differ
index 9396bd269c00e6bb77453c14e14d21655f9780de..367fe1725f312cd0653c2a3336995d33df5ccd8a 100644 (file)
Binary files a/font/Prompt-ThinItalic.ttf and b/font/Prompt-ThinItalic.ttf differ
diff --git a/patch/gsub.fea b/patch/gsub.fea
new file mode 100644 (file)
index 0000000..5faeb1b
--- /dev/null
@@ -0,0 +1,180 @@
+languagesystem DFLT dflt;
+languagesystem latn CAT ;
+languagesystem latn dflt;
+languagesystem latn MOL ;
+languagesystem latn ROM ;
+languagesystem thai dflt;
+languagesystem thai PAL;
+languagesystem thai SAN;
+
+#
+# CadsonDemak origin features
+#
+lookup aaltAccessAllAlternateslookup0 {
+  lookupflag 0;
+    sub \A by \ordfeminine ;
+    sub \O by \ordmasculine ;
+    sub \Scedilla by \Scommaaccent ;
+    sub \uni0162 by \uni021A ;
+    sub \a by \ordfeminine ;
+    sub \i by \dotlessi ;
+    sub \j by \uni0237 ;
+    sub \o by \ordmasculine ;
+    sub \scedilla by \scommaaccent ;
+    sub \uni0163 by \uni021B ;
+    sub \uni0E24 by \uni0E24.short ;
+    sub \uni0E26 by \uni0E26.short ;
+    sub \uni0E0E by \doChadathai.short ;
+    sub \uni0E0F by \toPatakthai.short ;
+    sub \uni0E0D by \yoYingthai.less ;
+    sub \uni0E10 by \thoThanthai.less ;
+    sub \uni0E2C by \loChulathai.short ;
+    sub \one by \uni00B9 ;
+    sub \two by \uni00B2 ;
+    sub \three by \uni00B3 ;
+    sub \uni0E31 by \uni0E31.narrow ;
+    sub \uni0E47 by \uni0E47.narrow ;
+    sub \uni0E34 by \uni0E34.narrow ;
+    sub \uni0E35 by \uni0E35.narrow ;
+    sub \uni0E36 by \uni0E36.narrow ;
+    sub \uni0E37 by \uni0E37.narrow ;
+    sub \uni0E4D by \uni0E4D.narrow ;
+    sub \uni0E3A by \uni0E3A.small ;
+    sub \uni0E38 by \uni0E38.small ;
+    sub \uni0E39 by \uni0E39.small ;
+} aaltAccessAllAlternateslookup0;
+
+lookup aaltAccessAllAlternateslookup1 {
+  lookupflag 0;
+    sub \parenleft from [\uni208D \uni207D ];
+    sub \parenright from [\uni208E \uni207E ];
+    sub \uni0E48 from [\uni0E48.small \uni0E48.narrow ];
+    sub \uni0E49 from [\uni0E49.small \uni0E49.narrow ];
+    sub \uni0E4A from [\uni0E4A.small \uni0E4A.narrow ];
+    sub \uni0E4B from [\uni0E4B.small \uni0E4B.narrow ];
+    sub \uni0E4C from [\uni0E4C.small \uni0E4C.narrow ];
+} aaltAccessAllAlternateslookup1;
+
+lookup SingleSubstitutionlookup13 {
+  lookupflag 0;
+    sub \i by \dotlessi ;
+    sub \j by \uni0237 ;
+    sub \uni0E24 by \uni0E24.short ;
+    sub \uni0E26 by \uni0E26.short ;
+    sub \uni0E0E by \doChadathai.short ;
+    sub \uni0E0F by \toPatakthai.short ;
+    sub \uni0E0D by \yoYingthai.less ;
+    sub \uni0E10 by \thoThanthai.less ;
+    sub \uni0E2C by \loChulathai.short ;
+    sub \uni0E48 by \uni0E48.small ;
+    sub \uni0E49 by \uni0E49.small ;
+    sub \uni0E4A by \uni0E4A.small ;
+    sub \uni0E4B by \uni0E4B.small ;
+    sub \uni0E4C by \uni0E4C.small ;
+    sub \uni0E3A by \uni0E3A.small ;
+    sub \uni0E38 by \uni0E38.small ;
+    sub \uni0E39 by \uni0E39.small ;
+} SingleSubstitutionlookup13;
+
+lookup ccmpGlyphCompositionDecompositi {
+  lookupflag 0;
+    sub [\i \j ]'lookup SingleSubstitutionlookup13  [\uni0308 \uni0307 \gravecomb \acutecomb \uni030B \uni0302 \uni030C \uni0306 
+       \uni030A \tildecomb \uni0304 \hookabovecomb ] ;
+    sub [\i \j ]'lookup SingleSubstitutionlookup13  [\uni031B \dotbelowcomb \uni0324 \uni0327 \uni0328 \uni032E \uni0331 ] [\uni0308 \uni0307 \gravecomb \acutecomb \uni030B \uni0302 \uni030C \uni0306 
+       \uni030A \tildecomb \uni0304 \hookabovecomb ] ;
+} ccmpGlyphCompositionDecompositi;
+
+lookup loclLocalizedFormsinLatinlookup {
+  lookupflag 0;
+    sub \Scedilla by \Scommaaccent ;
+    sub \uni0162 by \uni021A ;
+    sub \scedilla by \scommaaccent ;
+    sub \uni0163 by \uni021B ;
+} loclLocalizedFormsinLatinlookup;
+
+lookup sub_single_locllatn_0 {
+  lookupflag 0;
+    sub \Scedilla by \Scommaaccent ;
+    sub \uni0162 by \uni021A ;
+    sub \scedilla by \scommaaccent ;
+    sub \uni0163 by \uni021B ;
+} sub_single_locllatn_0;
+
+lookup LigatureSubstitutionlookup17 {
+  lookupflag 0;
+    sub \L \periodcentered  by \Ldot;
+    sub \l \periodcentered  by \ldot;
+} LigatureSubstitutionlookup17;
+
+lookup sub_chain_locllatn_0 {
+  lookupflag 0;
+    sub [\l ]'lookup LigatureSubstitutionlookup17  [\periodcentered ]'lookup LigatureSubstitutionlookup17  [\l ] ;
+    sub [\L ]'lookup LigatureSubstitutionlookup17  [\periodcentered ]'lookup LigatureSubstitutionlookup17  [\L ] ;
+} sub_chain_locllatn_0;
+
+lookup fracDiagonalFractionslookup10 {
+  lookupflag 0;
+    sub \one \slash \two  by \onehalf;
+    sub \one \slash \three  by \uni2153;
+    sub \two \slash \three  by \uni2154;
+    sub \one \slash \four  by \onequarter;
+    sub \three \slash \four  by \threequarters;
+    sub \one \slash \eight  by \oneeighth;
+    sub \three \slash \eight  by \threeeighths;
+    sub \five \slash \eight  by \fiveeighths;
+    sub \seven \slash \eight  by \seveneighths;
+} fracDiagonalFractionslookup10;
+
+lookup SingleSubstitutionlookup18 {
+  lookupflag 0;
+    sub \A by \ordfeminine ;
+    sub \O by \ordmasculine ;
+    sub \a by \ordfeminine ;
+    sub \o by \ordmasculine ;
+} SingleSubstitutionlookup18;
+
+lookup ordnOrdinalslookup11 {
+  lookupflag 0;
+    sub [\zero \one \two \three \four \five \six \seven \eight \nine ] [\A \a ]'lookup SingleSubstitutionlookup18  ;
+    sub [\zero \one \two \three \four \five \six \seven \eight \nine ] [\O \o ]'lookup SingleSubstitutionlookup18  ;
+} ordnOrdinalslookup11;
+
+lookup ligaStandardLigatureslookup12 {
+  lookupflag 0;
+    sub \f \i  by \fi;
+    sub \f \l  by \fl;
+    sub \uni0E24 \uni0E45  by \ru_lakkhangyaothai;
+    sub \uni0E26 \uni0E45  by \lu_lakkhangyaothai;
+} ligaStandardLigatureslookup12;
+
+
+feature aalt {
+    lookup aaltAccessAllAlternateslookup0;
+    lookup aaltAccessAllAlternateslookup1;
+} aalt;
+
+feature locl {
+    script latn;
+     language CAT  exclude_dflt;
+      lookup sub_chain_locllatn_0;
+     language MOL  exclude_dflt;
+      lookup sub_single_locllatn_0;
+     language ROM  exclude_dflt;
+      lookup loclLocalizedFormsinLatinlookup;
+} locl;
+
+feature ccmp {
+    lookup ccmpGlyphCompositionDecompositi;
+} ccmp;
+
+feature frac {
+    lookup fracDiagonalFractionslookup10;
+} frac;
+
+feature ordn {
+    lookup ordnOrdinalslookup11;
+} ordn;
+
+feature liga {
+    lookup ligaStandardLigatureslookup12;
+} liga;
diff --git a/patch/patch.fea b/patch/patch.fea
new file mode 100644 (file)
index 0000000..201b794
--- /dev/null
@@ -0,0 +1,159 @@
+languagesystem DFLT dflt;
+languagesystem latn CAT ;
+languagesystem latn dflt;
+languagesystem latn MOL ;
+languagesystem latn ROM ;
+languagesystem thai dflt;
+languagesystem thai PAL;
+languagesystem thai SAN;
+
+include(gsub.fea)
+
+#
+# Patch
+#
+
+#
+# Thai global classes
+#
+
+# Normal (baseline) consonants
+@NC = [ uni0E01 uni0E02 uni0E03 uni0E04 uni0E05 uni0E06 uni0E07 uni0E08 uni0E09 uni0E0A uni0E0B uni0E0C uni0E11 uni0E12 uni0E13 uni0E14 uni0E15 uni0E16 uni0E17 uni0E18 uni0E19 uni0E1A uni0E1C uni0E1E uni0E20 uni0E21 uni0E22 uni0E23 uni0E24 uni0E25 uni0E26 uni0E27 uni0E28 uni0E29 uni0E2A uni0E2B uni0E2C uni0E2D uni0E2E uni0E2F ];
+
+# Ascender consonants (ป, ฝ, & ฟ) 
+@AC = [ uni0E1B uni0E1D uni0E1F ];
+
+lookup Thai0E2C.alt {
+  sub uni0E2C by loChulathai.short;
+} Thai0E2C.alt;
+
+# Strict Descender consonants (ฎ, ฏ)
+@DC = [ uni0E0E uni0E0F uni0E24 uni0E26 ];
+@DC.short = [ doChadathai.short toPatakthai.short uni0E24.short uni0E26.short ];
+
+lookup ThaiDC.alt {
+  lookupflag 0;
+    sub @DC by @DC.short;
+} ThaiDC.alt;
+
+# Removable descender consonants (ญ, ฐ)
+@RC = [ uni0E0D uni0E10 ];
+@RC.rd = [ yoYingthai.less thoThanthai.less ];
+
+lookup ThaiRC.rd {
+  sub @RC by @RC.rd;
+} ThaiRC.rd;
+
+@BASE = [ @NC @DC @RC @RC.rd ];
+
+# Below vowel/diacritic
+@BV = [ uni0E38 uni0E39 uni0E3A ];
+@BV.sd  = [ uni0E38.small uni0E39.small uni0E3A.small ];
+
+lookup ThaiBV.sd {
+  sub @BV by @BV.sd;
+} ThaiBV.sd;
+
+# Above vowel/diacritic
+@AV = [ uni0E31 uni0E34 uni0E35 uni0E36 uni0E37 uni0E47 uni0E4D ];
+@AV.sl = [ uni0E31.narrow uni0E34.narrow uni0E35.narrow uni0E36.narrow uni0E37.narrow uni0E47.narrow uni0E4D.narrow ];
+
+# Above tone/diacritic
+@T = [ uni0E48.small uni0E49.small uni0E4A.small uni0E4B.small uni0E4C.small ];
+@T.sd = [ uni0E48 uni0E49 uni0E4A uni0E4B uni0E4C ];
+@T.sdl = [ uni0E48.narrow uni0E49.narrow uni0E4A.narrow uni0E4B.narrow uni0E4C.narrow ];
+
+# Sara Am
+lookup ThaiDecomp {
+  lookupflag 0;
+    sub uni0E33 by uni0E4D uni0E32 ;
+} ThaiDecomp;
+
+lookup ThaiDecomp.narrow {
+  lookupflag 0;
+    sub uni0E33 by uni0E4D.narrow uni0E32 ;
+} ThaiDecomp.narrow;
+
+lookup ThaiSaraAmLakkhang {
+  lookupflag 0;
+    sub uni0E33 by uni0E32 ;
+} ThaiSaraAmLakkhang;
+
+lookup ThaiTone.0E4D {
+  lookupflag 0;
+    sub uni0E48 by uni0E4D uni0E48.small ;
+    sub uni0E49 by uni0E4D uni0E49.small ;
+    sub uni0E4A by uni0E4D uni0E4A.small ;
+    sub uni0E4B by uni0E4D uni0E4B.small ;
+    sub uni0E4C by uni0E4D uni0E4C.small ;
+} ThaiTone.0E4D;
+
+lookup ThaiTone.0E4D.narrow {
+  lookupflag 0;
+    sub uni0E48 by uni0E4D.narrow uni0E48.small ;
+    sub uni0E49 by uni0E4D.narrow uni0E49.small ;
+    sub uni0E4A by uni0E4D.narrow uni0E4A.small ;
+    sub uni0E4B by uni0E4D.narrow uni0E4B.small ;
+    sub uni0E4C by uni0E4D.narrow uni0E4C.small ;
+} ThaiTone.0E4D.narrow;
+
+#
+# This lookup will rewrite all Thai core composition
+#
+lookup ccmpThaiGeneralComposition {
+  lookupflag 0;
+
+    #sub @BASE @T.sd'lookup ThaiTone.0E4D [ uni0E33 ]'lookup ThaiSaraAmLakkhang ;
+    sub @BASE @T.sd'lookup ThaiTone.0E4D [ uni0E33 ];
+    sub uni0E4D [ @T ] [ uni0E33 ]'lookup ThaiSaraAmLakkhang ;
+    sub @BASE [ uni0E33 ]'lookup ThaiDecomp;
+
+    #sub @AC @T.sd'lookup ThaiTone.0E4D.narrow [ uni0E33 ]'lookup ThaiSaraAmLakkhang ;
+    sub @AC @T.sd'lookup ThaiTone.0E4D.narrow [ uni0E33 ];
+    sub uni0E4D.narrow [ @T ] [ uni0E33 ]'lookup ThaiSaraAmLakkhang ;
+    sub @AC [ uni0E33 ]'lookup ThaiDecomp.narrow;
+    sub @AC @BV @T.sd' by [ @T.sdl ];
+    sub @AC [ @AV @T.sd ]' by [ @AV.sl @T.sdl ];
+
+    sub [ @DC ]'lookup ThaiDC.alt @BV;
+    sub [ @DC.short ] @BV'lookup ThaiBV.sd;
+
+    sub [ @RC]'lookup ThaiRC.rd @BV;
+
+    sub [ uni0E2C ]'lookup Thai0E2C.alt [ @AV @T.sd ];
+
+    sub [ @AV.sl @T.sdl ] [ @AV @T.sd ]' by [ @AV.sl @T ];
+    sub [ @AV uni0E4E @AV.sl @T.sd ] @T.sd' by @T;
+
+} ccmpThaiGeneralComposition;
+
+feature ccmp {
+  lookup ccmpThaiGeneralComposition;
+} ccmp;
+
+#
+# Fix incomplete subs & sups
+#
+# figure related features
+@num = [ zero one two three four five six seven eight nine ];
+@sups = [ zero.superior uni00B9 uni00B2 uni00B3 four.superior five.superior six.superior seven.superior eight.superior nine.superior ];
+@subs = [ zero.inferior one.inferior two.inferior three.inferior four.inferior five.inferior six.inferior seven.inferior eight.inferior nine.inferior ];
+
+@add1 = [ parenleft parenright n ];
+@add1.sups = [ uni207D uni207E uni207F ];
+@add2 = [ parenleft parenright ];
+@add2.subs = [ uni208D uni208E ];
+@all.sups = [ @sups @add1.sups ];
+@all.subs = [ @subs @add2.subs ];
+
+feature sups {
+  lookup Latin.sups {
+    sub [ @num @add1 ] by @all.sups;
+  } Latin.sups;
+} sups;
+
+feature subs {
+  lookup Latin.subs {
+    sub [ @num @add2 ] by @all.subs;
+  } Latin.subs;
+} subs;
diff --git a/patch/patch.py b/patch/patch.py
new file mode 100755 (executable)
index 0000000..97a712a
--- /dev/null
@@ -0,0 +1,24 @@
+#!/usr/bin/env fontforge
+
+# This script will only work with FontForge's Python extension.
+import fontforge
+import glob
+
+exts = ['otf', 'ttf']
+patch = './patch/patch.fea'
+
+for ext in exts:
+  fontfile = './font/*.' + ext
+  fonts = glob.glob(fontfile)
+  for font in fonts:
+    f = fontforge.open(font)
+
+    # Remove all GSUB lookups
+    for lookup in f.gsub_lookups:  
+      f.removeLookup(lookup)
+      
+    # Merge patch features
+    f.mergeFeature(patch)
+    f.generate(font, flags=('opentype', 'no-hints'))
+
+    f.close()