You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

GSUBTestCase.java 116KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262
  1. /*
  2. * Licensed to the Apache Software Foundation (ASF) under one or more
  3. * contributor license agreements. See the NOTICE file distributed with
  4. * this work for additional information regarding copyright ownership.
  5. * The ASF licenses this file to You under the Apache License, Version 2.0
  6. * (the "License"); you may not use this file except in compliance with
  7. * the License. You may obtain a copy of the License at
  8. *
  9. * http://www.apache.org/licenses/LICENSE-2.0
  10. *
  11. * Unless required by applicable law or agreed to in writing, software
  12. * distributed under the License is distributed on an "AS IS" BASIS,
  13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. * See the License for the specific language governing permissions and
  15. * limitations under the License.
  16. */
  17. /* $Id$ */
  18. package org.apache.fop.complexscripts.fonts;
  19. import java.io.File;
  20. import java.nio.IntBuffer;
  21. import org.junit.Test;
  22. import static org.junit.Assert.assertEquals;
  23. import static org.junit.Assert.assertNotNull;
  24. import static org.junit.Assert.assertTrue;
  25. import static org.junit.Assert.fail;
  26. import org.apache.fop.complexscripts.fonts.GlyphTable.LookupTable;
  27. import org.apache.fop.complexscripts.fonts.ttx.TTXFile;
  28. import org.apache.fop.complexscripts.util.GlyphContextTester;
  29. import org.apache.fop.complexscripts.util.GlyphSequence;
  30. import org.apache.fop.complexscripts.util.ScriptContextTester;
  31. // CSOFF: LineLength
  32. public class GSUBTestCase implements ScriptContextTester, GlyphContextTester {
  33. private static String ttxFilesRoot = "test/resources/complexscripts";
  34. private static String[][] ttxFonts = {
  35. { "f0", "arab/ttx/arab-001.ttx" }, // simplified arabic
  36. { "f1", "arab/ttx/arab-002.ttx" }, // traditional arabic
  37. { "f2", "arab/ttx/arab-003.ttx" }, // lateef
  38. { "f3", "arab/ttx/arab-004.ttx" }, // scheherazade
  39. };
  40. private static Object[][] ltSingle = {
  41. { GlyphSubstitutionTable.GSUB_LOOKUP_TYPE_SINGLE },
  42. // arab-001.ttx
  43. { "f0", "lu2", "arab", "dflt", "isol",
  44. new String[][][] {
  45. { { "ainisolated" }, { "ain" } },
  46. { { "alefmaksuraisolated" }, { "alefmaksura" } },
  47. { { "behisolated" }, { "beh" } },
  48. { { "dadisolated" }, { "dad" } },
  49. { { "dalisolated" }, { "dal" } },
  50. { { "farsiyehisolated" }, { "farsiyeh" } },
  51. { { "fehisolated" }, { "feh" } },
  52. { { "gafisolated" }, { "gaf" } },
  53. { { "ghainisolated" }, { "ghain" } },
  54. { { "hahisolated" }, { "hah" } },
  55. { { "jeemisolated" }, { "jeem" } },
  56. { { "jehisolated" }, { "jeh" } },
  57. { { "kafisolated" }, { "arabickaf" } },
  58. { { "kehehisolated" }, { "keheh" } },
  59. { { "khahisolated" }, { "khah" } },
  60. { { "meemisolated" }, { "meem" } },
  61. { { "noonisolated" }, { "noon" } },
  62. { { "pehisolated" }, { "peh" } },
  63. { { "qafisolated" }, { "qaf" } },
  64. { { "rehisolated" }, { "reh" } },
  65. { { "sadisolated" }, { "sad" } },
  66. { { "seenisolated" }, { "seen" } },
  67. { { "sheenisolated" }, { "sheen" } },
  68. { { "tahisolated" }, { "tah" } },
  69. { { "tchehisolated" }, { "tcheh" } },
  70. { { "tehisolated" }, { "teh" } },
  71. { { "tehmarbutaisolated" }, { "tehmarbuta" } },
  72. { { "thalisolated" }, { "thal" } },
  73. { { "thehisolated" }, { "theh" } },
  74. { { "vehisolated" }, { "veh" } },
  75. { { "wawisolated" }, { "waw" } },
  76. { { "yehisolated" }, { "yeh" } },
  77. { { "yehwithhamzaaboveisolated" }, { "yehwithhamzaabove" } },
  78. { { "zahisolated" }, { "zah" } },
  79. { { "zainisolated" }, { "zain" } },
  80. },
  81. },
  82. { "f0", "lu4", "arab", "dflt", "fina",
  83. new String[][][] {
  84. { { "ain" }, { "ainfinal" } },
  85. { { "alefmaksura" }, { "alefmaksurafinal" } },
  86. { { "alefwasla" }, { "alefwaslafinal" } },
  87. { { "alefwithhamzaabove" }, { "alefwithhamzaabovefinal" } },
  88. { { "alefwithhamzabelow" }, { "alefwithhamzabelowfinal" } },
  89. { { "alefwithmaddaabove" }, { "alefwithmaddaabovefinal" } },
  90. { { "arabicae" }, { "hehfinal" } },
  91. { { "arabicalef" }, { "aleffinal" } },
  92. { { "arabickaf" }, { "arabickaf" } },
  93. { { "beh" }, { "beh" } },
  94. { { "dad" }, { "dad" } },
  95. { { "dal" }, { "dal" } },
  96. { { "farsiyeh" }, { "farsiyehfinal" } },
  97. { { "feh" }, { "feh" } },
  98. { { "gaf" }, { "gaffinal" } },
  99. { { "ghain" }, { "ghainfinal" } },
  100. { { "hah" }, { "hahfinal" } },
  101. { { "heh" }, { "hehfinal" } },
  102. { { "jeem" }, { "jeemfinal" } },
  103. { { "jeh" }, { "jeh" } },
  104. { { "keheh" }, { "kehehfinal" } },
  105. { { "khah" }, { "khahfinal" } },
  106. { { "lam" }, { "lam" } },
  107. { { "meem" }, { "meem" } },
  108. { { "noon" }, { "noon" } },
  109. { { "peh" }, { "peh" } },
  110. { { "qaf" }, { "qaf" } },
  111. { { "reh" }, { "reh" } },
  112. { { "sad" }, { "sad" } },
  113. { { "seen" }, { "seen" } },
  114. { { "sheen" }, { "sheen" } },
  115. { { "tah" }, { "tah" } },
  116. { { "tcheh" }, { "tchehfinal" } },
  117. { { "teh" }, { "teh" } },
  118. { { "tehmarbuta" }, { "tehmarbutafinal" } },
  119. { { "thal" }, { "thal" } },
  120. { { "theh" }, { "theh" } },
  121. { { "veh" }, { "veh" } },
  122. { { "waw" }, { "waw" } },
  123. { { "wawwithhamzaabove" }, { "wawwithhamzaabove" } },
  124. { { "yeh" }, { "yehfinal" } },
  125. { { "yehwithhamzaabove" }, { "yehwithhamzaabovefinal" } },
  126. { { "zah" }, { "zah" } },
  127. { { "zain" }, { "zain" } },
  128. }
  129. },
  130. { "f0", "lu5", "arab", "dflt", "init",
  131. new String[][][] {
  132. { { "ain" }, { "aininitial" } },
  133. { { "alefmaksura" }, { "uni0649.init" } },
  134. { { "arabickaf" }, { "kafmedial" } },
  135. { { "beh" }, { "behmedial" } },
  136. { { "dad" }, { "dadmedial" } },
  137. { { "farsiyeh" }, { "yehmedial" } },
  138. { { "feh" }, { "fehinitial" } },
  139. { { "gaf" }, { "gafinitial" } },
  140. { { "ghain" }, { "ghaininitial" } },
  141. { { "hah" }, { "hahmedial" } },
  142. { { "heh" }, { "hehinitial" } },
  143. { { "jeem" }, { "jeemmedial" } },
  144. { { "keheh" }, { "kehehinitial" } },
  145. { { "khah" }, { "khahmedial" } },
  146. { { "lam" }, { "lamisolated" } },
  147. { { "meem" }, { "meemmedial" } },
  148. { { "noon" }, { "noonmedial" } },
  149. { { "peh" }, { "pehmedial" } },
  150. { { "qaf" }, { "qafinitial" } },
  151. { { "sad" }, { "sadmedial" } },
  152. { { "seen" }, { "seenmedial" } },
  153. { { "sheen" }, { "sheenmedial" } },
  154. { { "tah" }, { "tah" } },
  155. { { "tcheh" }, { "tchehmedial" } },
  156. { { "teh" }, { "tehmedial" } },
  157. { { "theh" }, { "thehmedial" } },
  158. { { "veh" }, { "uni06A5.init" } },
  159. { { "yeh" }, { "yehmedial" } },
  160. { { "yehwithhamzaabove" }, { "yehwithhamzaabovemedial" } },
  161. { { "zah" }, { "zah" } },
  162. }
  163. },
  164. { "f0", "lu6", "arab", "dflt", "medi",
  165. new String[][][] {
  166. { { "ain" }, { "ainmedial" } },
  167. { { "alefmaksura" }, { "uni0649.init" } },
  168. { { "arabickaf" }, { "kafmedial" } },
  169. { { "beh" }, { "behmedial" } },
  170. { { "dad" }, { "dadmedial" } },
  171. { { "farsiyeh" }, { "yehmedial" } },
  172. { { "feh" }, { "fehmedial" } },
  173. { { "gaf" }, { "gafmedial" } },
  174. { { "ghain" }, { "ghainmedial" } },
  175. { { "hah" }, { "hahmedial" } },
  176. { { "heh" }, { "hehmedial" } },
  177. { { "jeem" }, { "jeemmedial" } },
  178. { { "keheh" }, { "kehehmedial" } },
  179. { { "khah" }, { "khahmedial" } },
  180. { { "lam" }, { "lammedial" } },
  181. { { "meem" }, { "meemmedial" } },
  182. { { "noon" }, { "noonmedial" } },
  183. { { "peh" }, { "pehmedial" } },
  184. { { "qaf" }, { "qafmedial" } },
  185. { { "sad" }, { "sadmedial" } },
  186. { { "seen" }, { "seenmedial" } },
  187. { { "sheen" }, { "sheenmedial" } },
  188. { { "tah" }, { "tah" } },
  189. { { "tcheh" }, { "tchehmedial" } },
  190. { { "teh" }, { "tehmedial" } },
  191. { { "theh" }, { "thehmedial" } },
  192. { { "veh" }, { "vehmedial" } },
  193. { { "yeh" }, { "yehmedial" } },
  194. { { "yehwithhamzaabove" }, { "yehwithhamzaabovemedial" } },
  195. { { "zah" }, { "zah" } },
  196. }
  197. },
  198. // arab-002.ttx
  199. { "f1", "lu1", "arab", "*", "isol",
  200. new String[][][] {
  201. { { "ainisolated" }, { "ain" } },
  202. { { "alefmaksuraisolated" }, { "alefmaksura" } },
  203. { { "behisolated" }, { "beh" } },
  204. { { "dadisolated" }, { "dad" } },
  205. { { "dalisolated" }, { "dal" } },
  206. { { "farsiyehisolated" }, { "farsiyeh" } },
  207. { { "fehisolated" }, { "feh" } },
  208. { { "gafisolated" }, { "gaf" } },
  209. { { "ghainisolated" }, { "ghain" } },
  210. { { "hahisolated" }, { "hah" } },
  211. { { "jeemisolated" }, { "jeem" } },
  212. { { "jehisolated" }, { "jeh" } },
  213. { { "kafisolated" }, { "arabickaf" } },
  214. { { "kehehisolated" }, { "keheh" } },
  215. { { "khahisolated" }, { "khah" } },
  216. { { "meemisolated" }, { "meem" } },
  217. { { "noonisolated" }, { "noon" } },
  218. { { "pehisolated" }, { "peh" } },
  219. { { "qafisolated" }, { "qaf" } },
  220. { { "rehisolated" }, { "reh" } },
  221. { { "sadisolated" }, { "sad" } },
  222. { { "seenisolated" }, { "seen" } },
  223. { { "sheenisolated" }, { "sheen" } },
  224. { { "tahisolated" }, { "tah" } },
  225. { { "tchehisolated" }, { "tcheh" } },
  226. { { "tehisolated" }, { "teh" } },
  227. { { "tehmarbutaisolated" }, { "tehmarbuta" } },
  228. { { "thalisolated" }, { "thal" } },
  229. { { "thehisolated" }, { "theh" } },
  230. { { "vehisolated" }, { "veh" } },
  231. { { "wawisolated" }, { "waw" } },
  232. { { "yehisolated" }, { "yeh" } },
  233. { { "yehwithhamzaaboveisolated" }, { "yehwithhamzaabove" } },
  234. { { "zahisolated" }, { "zah" } },
  235. { { "zainisolated" }, { "zain" } },
  236. }
  237. },
  238. { "f1", "lu3", "arab", "*", "fina",
  239. new String[][][] {
  240. { { "ain" }, { "ainfinal" } },
  241. { { "alefmaksura" }, { "alefmaksurafinal" } },
  242. { { "alefwasla" }, { "alefwaslafinal" } },
  243. { { "alefwithhamzaabove" }, { "alefwithhamzaabovefinal" } },
  244. { { "alefwithhamzabelow" }, { "alefwithhamzabelowfinal" } },
  245. { { "alefwithmaddaabove" }, { "alefwithmaddaabovefinal" } },
  246. { { "arabicae" }, { "hehfinal" } },
  247. { { "arabicalef" }, { "aleffinal" } },
  248. { { "arabickaf" }, { "arabickaffinal" } },
  249. { { "beh" }, { "behfinal" } },
  250. { { "dad" }, { "dadfinal" } },
  251. { { "dal" }, { "dalfinal" } },
  252. { { "farsiyeh" }, { "farsiyehfinal" } },
  253. { { "feh" }, { "fehfinal" } },
  254. { { "gaf" }, { "gaffinal" } },
  255. { { "ghain" }, { "ghainfinal" } },
  256. { { "hah" }, { "hahfinal" } },
  257. { { "heh" }, { "hehfinal" } },
  258. { { "jeem" }, { "jeemfinal" } },
  259. { { "jeh" }, { "jehfinal" } },
  260. { { "keheh" }, { "kehehfinal" } },
  261. { { "khah" }, { "khahfinal" } },
  262. { { "lam" }, { "lamfinal" } },
  263. { { "meem" }, { "meemfinal" } },
  264. { { "noon" }, { "noonfinal" } },
  265. { { "peh" }, { "pehfinal" } },
  266. { { "qaf" }, { "qaffinal" } },
  267. { { "reh" }, { "rehfinal" } },
  268. { { "sad" }, { "sadfinal" } },
  269. { { "seen" }, { "seenfinal" } },
  270. { { "sheen" }, { "sheenfinal" } },
  271. { { "tah" }, { "tahfinal" } },
  272. { { "tcheh" }, { "tchehfinal" } },
  273. { { "teh" }, { "tehfinal" } },
  274. { { "tehmarbuta" }, { "tehmarbutafinal" } },
  275. { { "thal" }, { "thalfinal" } },
  276. { { "theh" }, { "thehfinal" } },
  277. { { "veh" }, { "vehfinal" } },
  278. { { "waw" }, { "wawfinal" } },
  279. { { "wawwithhamzaabove" }, { "wawwithhamzaabovefinal" } },
  280. { { "yeh" }, { "yehfinal" } },
  281. { { "yehwithhamzaabove" }, { "yehwithhamzaabovefinal" } },
  282. { { "zah" }, { "zahfinal" } },
  283. { { "zain" }, { "zainfinal" } },
  284. }
  285. },
  286. { "f1", "lu4", "arab", "*", "init",
  287. new String[][][] {
  288. { { "ain" }, { "aininitial" } },
  289. { { "alefmaksura" }, { "uni0649.init" } },
  290. { { "arabickaf" }, { "kafinitial" } },
  291. { { "beh" }, { "behinitial" } },
  292. { { "dad" }, { "dadinitial" } },
  293. { { "farsiyeh" }, { "yehinitial" } },
  294. { { "feh" }, { "fehinitial" } },
  295. { { "gaf" }, { "gafinitial" } },
  296. { { "ghain" }, { "ghaininitial" } },
  297. { { "hah" }, { "hahinitial" } },
  298. { { "heh" }, { "hehinitial" } },
  299. { { "jeem" }, { "jeeminitial" } },
  300. { { "keheh" }, { "kehehinitial" } },
  301. { { "khah" }, { "khahinitial" } },
  302. { { "lam" }, { "laminitial" } },
  303. { { "meem" }, { "meeminitial" } },
  304. { { "noon" }, { "nooninitial" } },
  305. { { "peh" }, { "pehinitial" } },
  306. { { "qaf" }, { "qafinitial" } },
  307. { { "sad" }, { "sadinitial" } },
  308. { { "seen" }, { "seeninitial" } },
  309. { { "sheen" }, { "sheeninitial" } },
  310. { { "tah" }, { "tahinitial" } },
  311. { { "tcheh" }, { "tchehinitial" } },
  312. { { "teh" }, { "tehinitial" } },
  313. { { "theh" }, { "thehinitial" } },
  314. { { "veh" }, { "vehinitial" } },
  315. { { "yeh" }, { "yehinitial" } },
  316. { { "yehwithhamzaabove" }, { "yehwithhamzaaboveinitial" } },
  317. { { "zah" }, { "zahinitial" } },
  318. }
  319. },
  320. { "f1", "lu5", "arab", "*", "medi",
  321. new String[][][] {
  322. { { "ain" }, { "ainmedial" } },
  323. { { "alefmaksura" }, { "uni0649.medi" } },
  324. { { "arabickaf" }, { "kafmedial" } },
  325. { { "beh" }, { "behmedial" } },
  326. { { "dad" }, { "dadmedial" } },
  327. { { "farsiyeh" }, { "yehmedial" } },
  328. { { "feh" }, { "fehmedial" } },
  329. { { "gaf" }, { "gafmedial" } },
  330. { { "ghain" }, { "ghainmedial" } },
  331. { { "hah" }, { "hahmedial" } },
  332. { { "heh" }, { "hehmedial" } },
  333. { { "jeem" }, { "jeemmedial" } },
  334. { { "keheh" }, { "kehehmedial" } },
  335. { { "khah" }, { "khahmedial" } },
  336. { { "lam" }, { "lammedial" } },
  337. { { "meem" }, { "meemmedial" } },
  338. { { "noon" }, { "noonmedial" } },
  339. { { "peh" }, { "pehmedial" } },
  340. { { "qaf" }, { "qafmedial" } },
  341. { { "sad" }, { "sadmedial" } },
  342. { { "seen" }, { "seenmedial" } },
  343. { { "sheen" }, { "sheenmedial" } },
  344. { { "tah" }, { "tahmedial" } },
  345. { { "tcheh" }, { "tchehmedial" } },
  346. { { "teh" }, { "tehmedial" } },
  347. { { "theh" }, { "thehmedial" } },
  348. { { "veh" }, { "vehmedial" } },
  349. { { "yeh" }, { "yehmedial" } },
  350. { { "yehwithhamzaabove" }, { "yehwithhamzaabovemedial" } },
  351. { { "zah" }, { "zahmedial" } },
  352. }
  353. },
  354. { "f1", "lu13", "arab", "*", "*",
  355. new String[][][] {
  356. { { "heh" }, { "hehisolated" } },
  357. }
  358. },
  359. // arab-003.ttx
  360. { "f2", "lu1", "arab", "dflt", "init",
  361. new String[][][] {
  362. { { "absJeemRetro1" }, { "absJeemRetro1Ini" } },
  363. { { "absJeemRetro2" }, { "absJeemRetro2Ini" } },
  364. { { "absJeemRetro3" }, { "absJeemRetro3Ini" } },
  365. { { "absLamRetro" }, { "absLamRetroIni" } },
  366. { { "absSheenRetro1" }, { "absSheenRetro1Ini" } },
  367. { { "absSheenRetro2" }, { "absSheenRetro2Ini" } },
  368. { { "absTchehRetro1" }, { "absTchehRetro1Ini" } },
  369. { { "absTchehRetro2" }, { "absTchehRetro2Ini" } },
  370. { { "uni0626" }, { "uni0626.init" } },
  371. { { "uni0628" }, { "uni0628.init" } },
  372. { { "uni062A" }, { "uni062A.init" } },
  373. { { "uni062B" }, { "uni062B.init" } },
  374. { { "uni062C" }, { "uni062C.init" } },
  375. { { "uni062D" }, { "uni062D.init" } },
  376. { { "uni062E" }, { "uni062E.init" } },
  377. { { "uni0633" }, { "uni0633.init" } },
  378. { { "uni0634" }, { "uni0634.init" } },
  379. { { "uni0635" }, { "uni0635.init" } },
  380. { { "uni0636" }, { "uni0636.init" } },
  381. { { "uni0637" }, { "uni0637.init" } },
  382. { { "uni0638" }, { "uni0638.init" } },
  383. { { "uni0639" }, { "uni0639.init" } },
  384. { { "uni063A" }, { "uni063A.init" } },
  385. { { "uni0641" }, { "uni0641.init" } },
  386. { { "uni0642" }, { "uni0642.init" } },
  387. { { "uni0643" }, { "uni0643.init" } },
  388. { { "uni0644" }, { "uni0644.init" } },
  389. { { "uni0645" }, { "uni0645.init" } },
  390. { { "uni0646" }, { "uni0646.init" } },
  391. { { "uni0647" }, { "uni0647.init" } },
  392. { { "uni0649" }, { "uni0649.init" } },
  393. { { "uni064A" }, { "uni064A.init" } },
  394. { { "uni064A.noDots" }, { "uni064A.init.noDots" } },
  395. { { "uni066E" }, { "uni066E.init" } },
  396. { { "uni066F" }, { "uni066F.init" } },
  397. { { "uni0678" }, { "uni0678.init" } },
  398. { { "uni0679" }, { "uni0679.init" } },
  399. { { "uni067A" }, { "uni067A.init" } },
  400. { { "uni067B" }, { "uni067B.init" } },
  401. { { "uni067C" }, { "uni067C.init" } },
  402. { { "uni067D" }, { "uni067D.init" } },
  403. { { "uni067E" }, { "uni067E.init" } },
  404. { { "uni067F" }, { "uni067F.init" } },
  405. { { "uni0680" }, { "uni0680.init" } },
  406. { { "uni0681" }, { "uni0681.init" } },
  407. { { "uni0682" }, { "uni0682.init" } },
  408. { { "uni0683" }, { "uni0683.init" } },
  409. { { "uni0684" }, { "uni0684.init" } },
  410. { { "uni0685" }, { "uni0685.init" } },
  411. { { "uni0686" }, { "uni0686.init" } },
  412. { { "uni0687" }, { "uni0687.init" } },
  413. { { "uni069A" }, { "uni069A.init" } },
  414. { { "uni069B" }, { "uni069B.init" } },
  415. { { "uni069C" }, { "uni069C.init" } },
  416. { { "uni069D" }, { "uni069D.init" } },
  417. { { "uni069E" }, { "uni069E.init" } },
  418. { { "uni069F" }, { "uni069F.init" } },
  419. { { "uni06A0" }, { "uni06A0.init" } },
  420. { { "uni06A1" }, { "uni06A1.init" } },
  421. { { "uni06A2" }, { "uni06A2.init" } },
  422. { { "uni06A3" }, { "uni06A3.init" } },
  423. { { "uni06A4" }, { "uni06A4.init" } },
  424. { { "uni06A5" }, { "uni06A5.init" } },
  425. { { "uni06A6" }, { "uni06A6.init" } },
  426. { { "uni06A7" }, { "uni06A7.init" } },
  427. { { "uni06A8" }, { "uni06A8.init" } },
  428. { { "uni06A9" }, { "uni06A9.init" } },
  429. { { "uni06AA" }, { "uni06AA.init" } },
  430. { { "uni06AB" }, { "uni06AB.init" } },
  431. { { "uni06AC" }, { "uni06AC.init" } },
  432. { { "uni06AD" }, { "uni06AD.init" } },
  433. { { "uni06AE" }, { "uni06AE.init" } },
  434. { { "uni06AF" }, { "uni06AF.init" } },
  435. { { "uni06B0" }, { "uni06B0.init" } },
  436. { { "uni06B1" }, { "uni06B1.init" } },
  437. { { "uni06B2" }, { "uni06B2.init" } },
  438. { { "uni06B3" }, { "uni06B3.init" } },
  439. { { "uni06B4" }, { "uni06B4.init" } },
  440. { { "uni06B5" }, { "uni06B5.init" } },
  441. { { "uni06B6" }, { "uni06B6.init" } },
  442. { { "uni06B7" }, { "uni06B7.init" } },
  443. { { "uni06B8" }, { "uni06B8.init" } },
  444. { { "uni06B9" }, { "uni06B9.init" } },
  445. { { "uni06BA" }, { "uni06BA.init" } },
  446. { { "uni06BB" }, { "uni06BB.init" } },
  447. { { "uni06BC" }, { "uni06BC.init" } },
  448. { { "uni06BD" }, { "uni06BD.init" } },
  449. { { "uni06BE" }, { "uni06BE.init" } },
  450. { { "uni06BF" }, { "uni06BF.init" } },
  451. { { "uni06C1" }, { "uni06C1.init" } },
  452. { { "uni06C2" }, { "uni06C2.init" } },
  453. { { "uni06CC" }, { "uni06CC.init" } },
  454. { { "uni06CE" }, { "uni06CE.init" } },
  455. { { "uni06D0" }, { "uni06D0.init" } },
  456. { { "uni06D1" }, { "uni06D1.init" } },
  457. { { "uni06FA" }, { "uni06FA.init" } },
  458. { { "uni06FB" }, { "uni06FB.init" } },
  459. { { "uni06FC" }, { "uni06FC.init" } },
  460. { { "uni06FF" }, { "uni06FF.init" } },
  461. { { "uni0750" }, { "uni0750.init" } },
  462. { { "uni0751" }, { "uni0751.init" } },
  463. { { "uni0752" }, { "uni0752.init" } },
  464. { { "uni0753" }, { "uni0753.init" } },
  465. { { "uni0754" }, { "uni0754.init" } },
  466. { { "uni0755" }, { "uni0755.init" } },
  467. { { "uni0756" }, { "uni0756.init" } },
  468. { { "uni0757" }, { "uni0757.init" } },
  469. { { "uni0758" }, { "uni0758.init" } },
  470. { { "uni075C" }, { "uni075C.init" } },
  471. { { "uni075D" }, { "uni075D.init" } },
  472. { { "uni075E" }, { "uni075E.init" } },
  473. { { "uni075F" }, { "uni075F.init" } },
  474. { { "uni0760" }, { "uni0760.init" } },
  475. { { "uni0761" }, { "uni0761.init" } },
  476. { { "uni0762" }, { "uni0762.init" } },
  477. { { "uni0763" }, { "uni0763.init" } },
  478. { { "uni0764" }, { "uni0764.init" } },
  479. { { "uni0765" }, { "uni0765.init" } },
  480. { { "uni0766" }, { "uni0766.init" } },
  481. { { "uni0767" }, { "uni0767.init" } },
  482. { { "uni0768" }, { "uni0768.init" } },
  483. { { "uni0769" }, { "uni0769.init" } },
  484. { { "uni076A" }, { "uni076A.init" } },
  485. { { "uni076D" }, { "uni076D.init" } },
  486. }
  487. },
  488. { "f2", "lu2", "arab", "dflt", "fina",
  489. new String[][][] {
  490. { { "absJeemRetro1" }, { "absJeemRetro1Fin" } },
  491. { { "absJeemRetro2" }, { "absJeemRetro2Fin" } },
  492. { { "absJeemRetro3" }, { "absJeemRetro3Fin" } },
  493. { { "absJehRetro1" }, { "absJehRetro1Fin" } },
  494. { { "absJehRetro2" }, { "absJehRetro2Fin" } },
  495. { { "absLamRetro" }, { "absLamRetroFin" } },
  496. { { "absSheenRetro1" }, { "absSheenRetro1Fin" } },
  497. { { "absSheenRetro2" }, { "absSheenRetro2Fin" } },
  498. { { "absTchehRetro1" }, { "absTchehRetro1Fin" } },
  499. { { "absTchehRetro2" }, { "absTchehRetro2Fin" } },
  500. { { "absWawDotBelow" }, { "absWawDotBelowFin" } },
  501. { { "uni0622" }, { "uni0622.fina" } },
  502. { { "uni0623" }, { "uni0623.fina" } },
  503. { { "uni0624" }, { "uni0624.fina" } },
  504. { { "uni0625" }, { "uni0625.fina" } },
  505. { { "uni0626" }, { "uni0626.fina" } },
  506. { { "uni0627" }, { "uni0627.fina" } },
  507. { { "uni0628" }, { "uni0628.fina" } },
  508. { { "uni0629" }, { "uni0629.fina" } },
  509. { { "uni062A" }, { "uni062A.fina" } },
  510. { { "uni062B" }, { "uni062B.fina" } },
  511. { { "uni062C" }, { "uni062C.fina" } },
  512. { { "uni062D" }, { "uni062D.fina" } },
  513. { { "uni062E" }, { "uni062E.fina" } },
  514. { { "uni062F" }, { "uni062F.fina" } },
  515. { { "uni0630" }, { "uni0630.fina" } },
  516. { { "uni0631" }, { "uni0631.fina" } },
  517. { { "uni0632" }, { "uni0632.fina" } },
  518. { { "uni0633" }, { "uni0633.fina" } },
  519. { { "uni0634" }, { "uni0634.fina" } },
  520. { { "uni0635" }, { "uni0635.fina" } },
  521. { { "uni0636" }, { "uni0636.fina" } },
  522. { { "uni0637" }, { "uni0637.fina" } },
  523. { { "uni0638" }, { "uni0638.fina" } },
  524. { { "uni0639" }, { "uni0639.fina" } },
  525. { { "uni063A" }, { "uni063A.fina" } },
  526. { { "uni0641" }, { "uni0641.fina" } },
  527. { { "uni0642" }, { "uni0642.fina" } },
  528. { { "uni0643" }, { "uni0643.fina" } },
  529. { { "uni0644" }, { "uni0644.fina" } },
  530. { { "uni0645" }, { "uni0645.fina" } },
  531. { { "uni0646" }, { "uni0646.fina" } },
  532. { { "uni0647" }, { "uni0647.fina" } },
  533. { { "uni0648" }, { "uni0648.fina" } },
  534. { { "uni0649" }, { "uni0649.fina" } },
  535. { { "uni064A" }, { "uni064A.fina" } },
  536. { { "uni064A.noDots" }, { "uni064A.fina.noDots" } },
  537. { { "uni066E" }, { "uni066E.fina" } },
  538. { { "uni066F" }, { "uni066F.fina" } },
  539. { { "uni0671" }, { "uni0671.fina" } },
  540. { { "uni0672" }, { "uni0672.fina" } },
  541. { { "uni0673" }, { "uni0673.fina" } },
  542. { { "uni0675" }, { "uni0675.fina" } },
  543. { { "uni0676" }, { "uni0676.fina" } },
  544. { { "uni0677" }, { "uni0677.fina" } },
  545. { { "uni0678" }, { "uni0678.fina" } },
  546. { { "uni0679" }, { "uni0679.fina" } },
  547. { { "uni067A" }, { "uni067A.fina" } },
  548. { { "uni067B" }, { "uni067B.fina" } },
  549. { { "uni067C" }, { "uni067C.fina" } },
  550. { { "uni067D" }, { "uni067D.fina" } },
  551. { { "uni067E" }, { "uni067E.fina" } },
  552. { { "uni067F" }, { "uni067F.fina" } },
  553. { { "uni0680" }, { "uni0680.fina" } },
  554. { { "uni0681" }, { "uni0681.fina" } },
  555. { { "uni0682" }, { "uni0682.fina" } },
  556. { { "uni0683" }, { "uni0683.fina" } },
  557. { { "uni0684" }, { "uni0684.fina" } },
  558. { { "uni0685" }, { "uni0685.fina" } },
  559. { { "uni0686" }, { "uni0686.fina" } },
  560. { { "uni0687" }, { "uni0687.fina" } },
  561. { { "uni0688" }, { "uni0688.fina" } },
  562. { { "uni0689" }, { "uni0689.fina" } },
  563. { { "uni068A" }, { "uni068A.fina" } },
  564. { { "uni068B" }, { "uni068B.fina" } },
  565. { { "uni068C" }, { "uni068C.fina" } },
  566. { { "uni068D" }, { "uni068D.fina" } },
  567. { { "uni068E" }, { "uni068E.fina" } },
  568. { { "uni068F" }, { "uni068F.fina" } },
  569. { { "uni0690" }, { "uni0690.fina" } },
  570. { { "uni0691" }, { "uni0691.fina" } },
  571. { { "uni0692" }, { "uni0692.fina" } },
  572. { { "uni0693" }, { "uni0693.fina" } },
  573. { { "uni0694" }, { "uni0694.fina" } },
  574. { { "uni0695" }, { "uni0695.fina" } },
  575. { { "uni0696" }, { "uni0696.fina" } },
  576. { { "uni0697" }, { "uni0697.fina" } },
  577. { { "uni0698" }, { "uni0698.fina" } },
  578. { { "uni0698.dotHat" }, { "uni0698.fina.dotHat" } },
  579. { { "uni0699" }, { "uni0699.fina" } },
  580. { { "uni069A" }, { "uni069A.fina" } },
  581. { { "uni069B" }, { "uni069B.fina" } },
  582. { { "uni069C" }, { "uni069C.fina" } },
  583. { { "uni069D" }, { "uni069D.fina" } },
  584. { { "uni069E" }, { "uni069E.fina" } },
  585. { { "uni069F" }, { "uni069F.fina" } },
  586. { { "uni06A0" }, { "uni06A0.fina" } },
  587. { { "uni06A1" }, { "uni06A1.fina" } },
  588. { { "uni06A2" }, { "uni06A2.fina" } },
  589. { { "uni06A3" }, { "uni06A3.fina" } },
  590. { { "uni06A4" }, { "uni06A4.fina" } },
  591. { { "uni06A5" }, { "uni06A5.fina" } },
  592. { { "uni06A6" }, { "uni06A6.fina" } },
  593. { { "uni06A7" }, { "uni06A7.fina" } },
  594. { { "uni06A8" }, { "uni06A8.fina" } },
  595. { { "uni06A9" }, { "uni06A9.fina" } },
  596. { { "uni06AA" }, { "uni06AA.fina" } },
  597. { { "uni06AB" }, { "uni06AB.fina" } },
  598. { { "uni06AC" }, { "uni06AC.fina" } },
  599. { { "uni06AD" }, { "uni06AD.fina" } },
  600. { { "uni06AE" }, { "uni06AE.fina" } },
  601. { { "uni06AF" }, { "uni06AF.fina" } },
  602. { { "uni06B0" }, { "uni06B0.fina" } },
  603. { { "uni06B1" }, { "uni06B1.fina" } },
  604. { { "uni06B2" }, { "uni06B2.fina" } },
  605. { { "uni06B3" }, { "uni06B3.fina" } },
  606. { { "uni06B4" }, { "uni06B4.fina" } },
  607. { { "uni06B5" }, { "uni06B5.fina" } },
  608. { { "uni06B6" }, { "uni06B6.fina" } },
  609. { { "uni06B7" }, { "uni06B7.fina" } },
  610. { { "uni06B8" }, { "uni06B8.fina" } },
  611. { { "uni06B9" }, { "uni06B9.fina" } },
  612. { { "uni06BA" }, { "uni06BA.fina" } },
  613. { { "uni06BB" }, { "uni06BB.fina" } },
  614. { { "uni06BC" }, { "uni06BC.fina" } },
  615. { { "uni06BD" }, { "uni06BD.fina" } },
  616. { { "uni06BE" }, { "uni06BE.fina" } },
  617. { { "uni06BF" }, { "uni06BF.fina" } },
  618. { { "uni06C0" }, { "uni06C0.fina" } },
  619. { { "uni06C1" }, { "uni06C1.fina" } },
  620. { { "uni06C2" }, { "uni06C2.fina" } },
  621. { { "uni06C3" }, { "uni06C3.fina" } },
  622. { { "uni06C4" }, { "uni06C4.fina" } },
  623. { { "uni06C5" }, { "uni06C5.fina" } },
  624. { { "uni06C6" }, { "uni06C6.fina" } },
  625. { { "uni06C7" }, { "uni06C7.fina" } },
  626. { { "uni06C8" }, { "uni06C8.fina" } },
  627. { { "uni06C9" }, { "uni06C9.fina" } },
  628. { { "uni06CA" }, { "uni06CA.fina" } },
  629. { { "uni06CB" }, { "uni06CB.fina" } },
  630. { { "uni06CC" }, { "uni06CC.fina" } },
  631. { { "uni06CD" }, { "uni06CD.fina" } },
  632. { { "uni06CE" }, { "uni06CE.fina" } },
  633. { { "uni06CF" }, { "uni06CF.fina" } },
  634. { { "uni06D0" }, { "uni06D0.fina" } },
  635. { { "uni06D1" }, { "uni06D1.fina" } },
  636. { { "uni06D2" }, { "uni06D2.fina" } },
  637. { { "uni06D3" }, { "uni06D3.fina" } },
  638. { { "uni06D5" }, { "uni06D5.fina" } },
  639. { { "uni06EE" }, { "uni06EE.fina" } },
  640. { { "uni06EF" }, { "uni06EF.fina" } },
  641. { { "uni06FA" }, { "uni06FA.fina" } },
  642. { { "uni06FB" }, { "uni06FB.fina" } },
  643. { { "uni06FC" }, { "uni06FC.fina" } },
  644. { { "uni06FF" }, { "uni06FF.fina" } },
  645. { { "uni0750" }, { "uni0750.fina" } },
  646. { { "uni0751" }, { "uni0751.fina" } },
  647. { { "uni0752" }, { "uni0752.fina" } },
  648. { { "uni0753" }, { "uni0753.fina" } },
  649. { { "uni0754" }, { "uni0754.fina" } },
  650. { { "uni0755" }, { "uni0755.fina" } },
  651. { { "uni0756" }, { "uni0756.fina" } },
  652. { { "uni0757" }, { "uni0757.fina" } },
  653. { { "uni0758" }, { "uni0758.fina" } },
  654. { { "uni0759" }, { "uni0759.fina" } },
  655. { { "uni075A" }, { "uni075A.fina" } },
  656. { { "uni075B" }, { "uni075B.fina" } },
  657. { { "uni075C" }, { "uni075C.fina" } },
  658. { { "uni075D" }, { "uni075D.fina" } },
  659. { { "uni075E" }, { "uni075E.fina" } },
  660. { { "uni075F" }, { "uni075F.fina" } },
  661. { { "uni0760" }, { "uni0760.fina" } },
  662. { { "uni0761" }, { "uni0761.fina" } },
  663. { { "uni0762" }, { "uni0762.fina" } },
  664. { { "uni0763" }, { "uni0763.fina" } },
  665. { { "uni0764" }, { "uni0764.fina" } },
  666. { { "uni0765" }, { "uni0765.fina" } },
  667. { { "uni0766" }, { "uni0766.fina" } },
  668. { { "uni0767" }, { "uni0767.fina" } },
  669. { { "uni0768" }, { "uni0768.fina" } },
  670. { { "uni0769" }, { "uni0769.fina" } },
  671. { { "uni076A" }, { "uni076A.fina" } },
  672. { { "uni076B" }, { "uni076B.fina" } },
  673. { { "uni076C" }, { "uni076C.fina" } },
  674. { { "uni076D" }, { "uni076D.fina" } },
  675. }
  676. },
  677. { "f2", "lu3", "arab", "dflt", "medi",
  678. new String[][][] {
  679. { { "absJeemRetro1" }, { "absJeemRetro1Med" } },
  680. { { "absJeemRetro2" }, { "absJeemRetro2Med" } },
  681. { { "absJeemRetro3" }, { "absJeemRetro3Med" } },
  682. { { "absLamRetro" }, { "absLamRetroMed" } },
  683. { { "absSheenRetro1" }, { "absSheenRetro1Med" } },
  684. { { "absSheenRetro2" }, { "absSheenRetro2Med" } },
  685. { { "absTchehRetro1" }, { "absTchehRetro1Med" } },
  686. { { "absTchehRetro2" }, { "absTchehRetro2Med" } },
  687. { { "uni0626" }, { "uni0626.medi" } },
  688. { { "uni0628" }, { "uni0628.medi" } },
  689. { { "uni062A" }, { "uni062A.medi" } },
  690. { { "uni062B" }, { "uni062B.medi" } },
  691. { { "uni062C" }, { "uni062C.medi" } },
  692. { { "uni062D" }, { "uni062D.medi" } },
  693. { { "uni062E" }, { "uni062E.medi" } },
  694. { { "uni0633" }, { "uni0633.medi" } },
  695. { { "uni0634" }, { "uni0634.medi" } },
  696. { { "uni0635" }, { "uni0635.medi" } },
  697. { { "uni0636" }, { "uni0636.medi" } },
  698. { { "uni0637" }, { "uni0637.medi" } },
  699. { { "uni0638" }, { "uni0638.medi" } },
  700. { { "uni0639" }, { "uni0639.medi" } },
  701. { { "uni063A" }, { "uni063A.medi" } },
  702. { { "uni0641" }, { "uni0641.medi" } },
  703. { { "uni0642" }, { "uni0642.medi" } },
  704. { { "uni0643" }, { "uni0643.medi" } },
  705. { { "uni0644" }, { "uni0644.medi" } },
  706. { { "uni0645" }, { "uni0645.medi" } },
  707. { { "uni0646" }, { "uni0646.medi" } },
  708. { { "uni0647" }, { "uni0647.medi" } },
  709. { { "uni0649" }, { "uni0649.medi" } },
  710. { { "uni064A" }, { "uni064A.medi" } },
  711. { { "uni064A.noDots" }, { "uni064A.medi.noDots" } },
  712. { { "uni066E" }, { "uni066E.medi" } },
  713. { { "uni066F" }, { "uni066F.medi" } },
  714. { { "uni0678" }, { "uni0678.medi" } },
  715. { { "uni0679" }, { "uni0679.medi" } },
  716. { { "uni067A" }, { "uni067A.medi" } },
  717. { { "uni067B" }, { "uni067B.medi" } },
  718. { { "uni067C" }, { "uni067C.medi" } },
  719. { { "uni067D" }, { "uni067D.medi" } },
  720. { { "uni067E" }, { "uni067E.medi" } },
  721. { { "uni067F" }, { "uni067F.medi" } },
  722. { { "uni0680" }, { "uni0680.medi" } },
  723. { { "uni0681" }, { "uni0681.medi" } },
  724. { { "uni0682" }, { "uni0682.medi" } },
  725. { { "uni0683" }, { "uni0683.medi" } },
  726. { { "uni0684" }, { "uni0684.medi" } },
  727. { { "uni0685" }, { "uni0685.medi" } },
  728. { { "uni0686" }, { "uni0686.medi" } },
  729. { { "uni0687" }, { "uni0687.medi" } },
  730. { { "uni069A" }, { "uni069A.medi" } },
  731. { { "uni069B" }, { "uni069B.medi" } },
  732. { { "uni069C" }, { "uni069C.medi" } },
  733. { { "uni069D" }, { "uni069D.medi" } },
  734. { { "uni069E" }, { "uni069E.medi" } },
  735. { { "uni069F" }, { "uni069F.medi" } },
  736. { { "uni06A0" }, { "uni06A0.medi" } },
  737. { { "uni06A1" }, { "uni06A1.medi" } },
  738. { { "uni06A2" }, { "uni06A2.medi" } },
  739. { { "uni06A3" }, { "uni06A3.medi" } },
  740. { { "uni06A4" }, { "uni06A4.medi" } },
  741. { { "uni06A5" }, { "uni06A5.medi" } },
  742. { { "uni06A6" }, { "uni06A6.medi" } },
  743. { { "uni06A7" }, { "uni06A7.medi" } },
  744. { { "uni06A8" }, { "uni06A8.medi" } },
  745. { { "uni06A9" }, { "uni06A9.medi" } },
  746. { { "uni06AA" }, { "uni06AA.medi" } },
  747. { { "uni06AB" }, { "uni06AB.medi" } },
  748. { { "uni06AC" }, { "uni06AC.medi" } },
  749. { { "uni06AD" }, { "uni06AD.medi" } },
  750. { { "uni06AE" }, { "uni06AE.medi" } },
  751. { { "uni06AF" }, { "uni06AF.medi" } },
  752. { { "uni06B0" }, { "uni06B0.medi" } },
  753. { { "uni06B1" }, { "uni06B1.medi" } },
  754. { { "uni06B2" }, { "uni06B2.medi" } },
  755. { { "uni06B3" }, { "uni06B3.medi" } },
  756. { { "uni06B4" }, { "uni06B4.medi" } },
  757. { { "uni06B5" }, { "uni06B5.medi" } },
  758. { { "uni06B6" }, { "uni06B6.medi" } },
  759. { { "uni06B7" }, { "uni06B7.medi" } },
  760. { { "uni06B8" }, { "uni06B8.medi" } },
  761. { { "uni06B9" }, { "uni06B9.medi" } },
  762. { { "uni06BA" }, { "uni06BA.medi" } },
  763. { { "uni06BB" }, { "uni06BB.medi" } },
  764. { { "uni06BC" }, { "uni06BC.medi" } },
  765. { { "uni06BD" }, { "uni06BD.medi" } },
  766. { { "uni06BE" }, { "uni06BE.medi" } },
  767. { { "uni06BF" }, { "uni06BF.medi" } },
  768. { { "uni06C1" }, { "uni06C1.medi" } },
  769. { { "uni06C2" }, { "uni06C2.medi" } },
  770. { { "uni06CC" }, { "uni06CC.medi" } },
  771. { { "uni06CE" }, { "uni06CE.medi" } },
  772. { { "uni06D0" }, { "uni06D0.medi" } },
  773. { { "uni06D1" }, { "uni06D1.medi" } },
  774. { { "uni06FA" }, { "uni06FA.medi" } },
  775. { { "uni06FB" }, { "uni06FB.medi" } },
  776. { { "uni06FC" }, { "uni06FC.medi" } },
  777. { { "uni06FF" }, { "uni06FF.medi" } },
  778. { { "uni0750" }, { "uni0750.medi" } },
  779. { { "uni0751" }, { "uni0751.medi" } },
  780. { { "uni0752" }, { "uni0752.medi" } },
  781. { { "uni0753" }, { "uni0753.medi" } },
  782. { { "uni0754" }, { "uni0754.medi" } },
  783. { { "uni0755" }, { "uni0755.medi" } },
  784. { { "uni0756" }, { "uni0756.medi" } },
  785. { { "uni0757" }, { "uni0757.medi" } },
  786. { { "uni0758" }, { "uni0758.medi" } },
  787. { { "uni075C" }, { "uni075C.medi" } },
  788. { { "uni075D" }, { "uni075D.medi" } },
  789. { { "uni075E" }, { "uni075E.medi" } },
  790. { { "uni075F" }, { "uni075F.medi" } },
  791. { { "uni0760" }, { "uni0760.medi" } },
  792. { { "uni0761" }, { "uni0761.medi" } },
  793. { { "uni0762" }, { "uni0762.medi" } },
  794. { { "uni0763" }, { "uni0763.medi" } },
  795. { { "uni0764" }, { "uni0764.medi" } },
  796. { { "uni0765" }, { "uni0765.medi" } },
  797. { { "uni0766" }, { "uni0766.medi" } },
  798. { { "uni0767" }, { "uni0767.medi" } },
  799. { { "uni0768" }, { "uni0768.medi" } },
  800. { { "uni0769" }, { "uni0769.medi" } },
  801. { { "uni076A" }, { "uni076A.medi" } },
  802. { { "uni076D" }, { "uni076D.medi" } },
  803. }
  804. },
  805. { "f2", "lu9", "arab", "SND ", "calt",
  806. new String[][][] {
  807. { { "uni060C" }, { "uni060C.downward" } },
  808. { { "uni061B" }, { "uni061B.downward" } },
  809. { { "uni0645" }, { "uni0645.sindhi" } },
  810. { { "uni0645.fina" }, { "uni0645.fina.sindhi" } },
  811. { { "uni0647" }, { "uni0647.knotted" } },
  812. { { "uni0647.fina" }, { "uni0647.fina.knottedHigh" } },
  813. { { "uni0647.medi" }, { "uni0647.medi.knottedHigh" } },
  814. { { "uni064C" }, { "uni064C.sixNine" } },
  815. { { "uni06F6" }, { "uni06F6.urdu" } },
  816. { { "uni06F7" }, { "uni06F7.urdu" } },
  817. }
  818. },
  819. { "f2", "lu10", "arab", "URD ", "calt",
  820. new String[][][] {
  821. { { "uni0647.fina" }, { "uni0647.fina.hooked" } },
  822. { { "uni0647.init" }, { "uni0647.init.hooked" } },
  823. { { "uni0647.medi" }, { "uni0647.medi.hooked" } },
  824. { { "uni06F4" }, { "uni06F4.urdu" } },
  825. { { "uni06F6" }, { "uni06F6.urdu" } },
  826. { { "uni06F7" }, { "uni06F7.urdu" } },
  827. }
  828. },
  829. { "f2", "lu11", "arab", "KUR ", "calt",
  830. new String[][][] {
  831. { { "uni0647" }, { "uni0647.knotted" } },
  832. { { "uni0647.fina" }, { "uni0647.fina.knottedHigh" } },
  833. }
  834. },
  835. { "f2", "lu12", "latn", "dflt", "ccmp",
  836. new String[][][] {
  837. { { "asterisk.arab" }, { "asterisk" } },
  838. { { "colon.arab" }, { "colon" } },
  839. { { "exclam.arab" }, { "exclam" } },
  840. { { "parenleft.arab" }, { "parenleft" } },
  841. { { "parenright.arab" }, { "parenright" } },
  842. { { "quotedblleft.arab" }, { "quotedblleft" } },
  843. { { "quotedblright.arab" }, { "quotedblright" } },
  844. { { "quoteleft.arab" }, { "quoteleft" } },
  845. { { "quoteright.arab" }, { "quoteright" } },
  846. }
  847. },
  848. { "f2", "lu14", "arab", "*", "*",
  849. new String[][][] {
  850. { { "absLamRetroIni" }, { "absLamRetroIni.preAlef" } },
  851. { { "absLamRetroMed" }, { "absLamRetroMed.preAlef" } },
  852. { { "uni0644.init" }, { "uni0644.init.preAlef" } },
  853. { { "uni0644.medi" }, { "uni0644.medi.preAlef" } },
  854. { { "uni06B5.init" }, { "uni06B5.init.preAlef" } },
  855. { { "uni06B5.medi" }, { "uni06B5.medi.preAlef" } },
  856. { { "uni06B6.init" }, { "uni06B6.init.preAlef" } },
  857. { { "uni06B6.medi" }, { "uni06B6.medi.preAlef" } },
  858. { { "uni06B7.init" }, { "uni06B7.init.preAlef" } },
  859. { { "uni06B7.medi" }, { "uni06B7.medi.preAlef" } },
  860. { { "uni06B8.init" }, { "uni06B8.init.preAlef" } },
  861. { { "uni06B8.medi" }, { "uni06B8.medi.preAlef" } },
  862. { { "uni076A.init" }, { "uni076A.init.preAlef" } },
  863. { { "uni076A.medi" }, { "uni076A.medi.preAlef" } },
  864. }
  865. },
  866. { "f2", "lu15", "arab", "*", "*",
  867. new String[][][] {
  868. { { "uni0622.fina" }, { "uni0622.fina.postLamIni" } },
  869. { { "uni0623.fina" }, { "uni0623.fina.postLamIni" } },
  870. { { "uni0625.fina" }, { "uni0625.fina.postLamIni" } },
  871. { { "uni0627.fina" }, { "uni0627.fina.postLamIni" } },
  872. { { "uni0671.fina" }, { "uni0671.fina.postLamIni" } },
  873. { { "uni0672.fina" }, { "uni0672.fina.postLamIni" } },
  874. { { "uni0673.fina" }, { "uni0673.fina.postLamIni" } },
  875. { { "uni0675.fina" }, { "uni0675.fina.postLamIni" } },
  876. }
  877. },
  878. { "f2", "lu16", "arab", "*", "*",
  879. new String[][][] {
  880. { { "uni0622.fina" }, { "uni0622.fina.postLamMed" } },
  881. { { "uni0623.fina" }, { "uni0623.fina.postLamMed" } },
  882. { { "uni0625.fina" }, { "uni0625.fina.postLamMed" } },
  883. { { "uni0627.fina" }, { "uni0627.fina.postLamMed" } },
  884. { { "uni0671.fina" }, { "uni0671.fina.postLamMed" } },
  885. { { "uni0672.fina" }, { "uni0672.fina.postLamMed" } },
  886. { { "uni0673.fina" }, { "uni0673.fina.postLamMed" } },
  887. { { "uni0675.fina" }, { "uni0675.fina.postLamMed" } },
  888. }
  889. },
  890. { "f2", "lu17", "arab", "*", "*",
  891. new String[][][] {
  892. { { "uni0670" }, { "uni0670.large" } },
  893. }
  894. },
  895. { "f2", "lu18", "arab", "*", "*",
  896. new String[][][] {
  897. { { "uni06DD" }, { "uni06DD.3" } },
  898. }
  899. },
  900. { "f2", "lu19", "arab", "*", "*",
  901. new String[][][] {
  902. { { "uni06DD" }, { "uni06DD.2" } },
  903. }
  904. },
  905. { "f2", "lu20", "arab", "*", "*",
  906. new String[][][] {
  907. { { "eight" }, { "eightMedium" } },
  908. { { "five" }, { "fiveMedium" } },
  909. { { "four" }, { "fourMedium" } },
  910. { { "nine" }, { "nineMedium" } },
  911. { { "one" }, { "oneMedium" } },
  912. { { "seven" }, { "sevenMedium" } },
  913. { { "six" }, { "sixMedium" } },
  914. { { "three" }, { "threeMedium" } },
  915. { { "two" }, { "twoMedium" } },
  916. { { "uni0660" }, { "uni0660.Medium" } },
  917. { { "uni0661" }, { "uni0661.Medium" } },
  918. { { "uni0662" }, { "uni0662.Medium" } },
  919. { { "uni0663" }, { "uni0663.Medium" } },
  920. { { "uni0664" }, { "uni0664.Medium" } },
  921. { { "uni0665" }, { "uni0665.Medium" } },
  922. { { "uni0666" }, { "uni0666.Medium" } },
  923. { { "uni0667" }, { "uni0667.Medium" } },
  924. { { "uni0668" }, { "uni0668.Medium" } },
  925. { { "uni0669" }, { "uni0669.Medium" } },
  926. { { "uni06F0" }, { "uni06F0.Medium" } },
  927. { { "uni06F1" }, { "uni06F1.Medium" } },
  928. { { "uni06F2" }, { "uni06F2.Medium" } },
  929. { { "uni06F3" }, { "uni06F3.Medium" } },
  930. { { "uni06F4" }, { "uni06F4.Medium" } },
  931. { { "uni06F4.urdu" }, { "uni06F4.Medium.urdu" } },
  932. { { "uni06F5" }, { "uni06F5.Medium" } },
  933. { { "uni06F6" }, { "uni06F6.Medium" } },
  934. { { "uni06F6.urdu" }, { "uni06F6.Medium.urdu" } },
  935. { { "uni06F7" }, { "uni06F7.Medium" } },
  936. { { "uni06F7.urdu" }, { "uni06F7.Medium.urdu" } },
  937. { { "uni06F8" }, { "uni06F8.Medium" } },
  938. { { "uni06F9" }, { "uni06F9.Medium" } },
  939. { { "zero" }, { "zeroMedium" } },
  940. }
  941. },
  942. { "f2", "lu21", "arab", "*", "*",
  943. new String[][][] {
  944. { { "eight" }, { "eightSmall" } },
  945. { { "five" }, { "fiveSmall" } },
  946. { { "four" }, { "fourSmall" } },
  947. { { "nine" }, { "nineSmall" } },
  948. { { "one" }, { "oneSmall" } },
  949. { { "seven" }, { "sevenSmall" } },
  950. { { "six" }, { "sixSmall" } },
  951. { { "three" }, { "threeSmall" } },
  952. { { "two" }, { "twoSmall" } },
  953. { { "uni0660" }, { "uni0660.Small" } },
  954. { { "uni0661" }, { "uni0661.Small" } },
  955. { { "uni0662" }, { "uni0662.Small" } },
  956. { { "uni0663" }, { "uni0663.Small" } },
  957. { { "uni0664" }, { "uni0664.Small" } },
  958. { { "uni0665" }, { "uni0665.Small" } },
  959. { { "uni0666" }, { "uni0666.Small" } },
  960. { { "uni0667" }, { "uni0667.Small" } },
  961. { { "uni0668" }, { "uni0668.Small" } },
  962. { { "uni0669" }, { "uni0669.Small" } },
  963. { { "uni06F0" }, { "uni06F0.Small" } },
  964. { { "uni06F1" }, { "uni06F1.Small" } },
  965. { { "uni06F2" }, { "uni06F2.Small" } },
  966. { { "uni06F3" }, { "uni06F3.Small" } },
  967. { { "uni06F4" }, { "uni06F4.Small" } },
  968. { { "uni06F4.urdu" }, { "uni06F4.Small.urdu" } },
  969. { { "uni06F5" }, { "uni06F5.Small" } },
  970. { { "uni06F6" }, { "uni06F6.Small" } },
  971. { { "uni06F6.urdu" }, { "uni06F6.Small.urdu" } },
  972. { { "uni06F7" }, { "uni06F7.Small" } },
  973. { { "uni06F7.urdu" }, { "uni06F7.Small.urdu" } },
  974. { { "uni06F8" }, { "uni06F8.Small" } },
  975. { { "uni06F9" }, { "uni06F9.Small" } },
  976. { { "zero" }, { "zeroSmall" } },
  977. }
  978. },
  979. // arab-004.ttx
  980. { "f3", "lu1", "arab", "dflt", "init",
  981. new String[][][] {
  982. { { "absJeemRetro1" }, { "absJeemRetro1Ini" } },
  983. { { "absJeemRetro2" }, { "absJeemRetro2Ini" } },
  984. { { "absJeemRetro3" }, { "absJeemRetro3Ini" } },
  985. { { "absLamRetro" }, { "absLamRetroIni" } },
  986. { { "absSheenRetro1" }, { "absSheenRetro1Ini" } },
  987. { { "absSheenRetro2" }, { "absSheenRetro2Ini" } },
  988. { { "absTchehRetro1" }, { "absTchehRetro1Ini" } },
  989. { { "absTchehRetro2" }, { "absTchehRetro2Ini" } },
  990. { { "uni0626" }, { "uni0626.init" } },
  991. { { "uni0628" }, { "uni0628.init" } },
  992. { { "uni062A" }, { "uni062A.init" } },
  993. { { "uni062B" }, { "uni062B.init" } },
  994. { { "uni062C" }, { "uni062C.init" } },
  995. { { "uni062D" }, { "uni062D.init" } },
  996. { { "uni062E" }, { "uni062E.init" } },
  997. { { "uni0633" }, { "uni0633.init" } },
  998. { { "uni0634" }, { "uni0634.init" } },
  999. { { "uni0635" }, { "uni0635.init" } },
  1000. { { "uni0636" }, { "uni0636.init" } },
  1001. { { "uni0637" }, { "uni0637.init" } },
  1002. { { "uni0638" }, { "uni0638.init" } },
  1003. { { "uni0639" }, { "uni0639.init" } },
  1004. { { "uni063A" }, { "uni063A.init" } },
  1005. { { "uni0641" }, { "uni0641.init" } },
  1006. { { "uni0642" }, { "uni0642.init" } },
  1007. { { "uni0643" }, { "uni0643.init" } },
  1008. { { "uni0644" }, { "uni0644.init" } },
  1009. { { "uni0645" }, { "uni0645.init" } },
  1010. { { "uni0646" }, { "uni0646.init" } },
  1011. { { "uni0647" }, { "uni0647.init" } },
  1012. { { "uni0649" }, { "uni0649.init" } },
  1013. { { "uni064A" }, { "uni064A.init" } },
  1014. { { "uni064A.noDots" }, { "uni064A.init.noDots" } },
  1015. { { "uni066E" }, { "uni066E.init" } },
  1016. { { "uni066F" }, { "uni066F.init" } },
  1017. { { "uni0678" }, { "uni0678.init" } },
  1018. { { "uni0679" }, { "uni0679.init" } },
  1019. { { "uni067A" }, { "uni067A.init" } },
  1020. { { "uni067B" }, { "uni067B.init" } },
  1021. { { "uni067C" }, { "uni067C.init" } },
  1022. { { "uni067D" }, { "uni067D.init" } },
  1023. { { "uni067E" }, { "uni067E.init" } },
  1024. { { "uni067F" }, { "uni067F.init" } },
  1025. { { "uni0680" }, { "uni0680.init" } },
  1026. { { "uni0681" }, { "uni0681.init" } },
  1027. { { "uni0682" }, { "uni0682.init" } },
  1028. { { "uni0683" }, { "uni0683.init" } },
  1029. { { "uni0684" }, { "uni0684.init" } },
  1030. { { "uni0685" }, { "uni0685.init" } },
  1031. { { "uni0686" }, { "uni0686.init" } },
  1032. { { "uni0687" }, { "uni0687.init" } },
  1033. { { "uni069A" }, { "uni069A.init" } },
  1034. { { "uni069B" }, { "uni069B.init" } },
  1035. { { "uni069C" }, { "uni069C.init" } },
  1036. { { "uni069D" }, { "uni069D.init" } },
  1037. { { "uni069E" }, { "uni069E.init" } },
  1038. { { "uni069F" }, { "uni069F.init" } },
  1039. { { "uni06A0" }, { "uni06A0.init" } },
  1040. { { "uni06A1" }, { "uni06A1.init" } },
  1041. { { "uni06A2" }, { "uni06A2.init" } },
  1042. { { "uni06A3" }, { "uni06A3.init" } },
  1043. { { "uni06A4" }, { "uni06A4.init" } },
  1044. { { "uni06A5" }, { "uni06A5.init" } },
  1045. { { "uni06A6" }, { "uni06A6.init" } },
  1046. { { "uni06A7" }, { "uni06A7.init" } },
  1047. { { "uni06A8" }, { "uni06A8.init" } },
  1048. { { "uni06A9" }, { "uni06A9.init" } },
  1049. { { "uni06AA" }, { "uni06AA.init" } },
  1050. { { "uni06AB" }, { "uni06AB.init" } },
  1051. { { "uni06AC" }, { "uni06AC.init" } },
  1052. { { "uni06AD" }, { "uni06AD.init" } },
  1053. { { "uni06AE" }, { "uni06AE.init" } },
  1054. { { "uni06AF" }, { "uni06AF.init" } },
  1055. { { "uni06B0" }, { "uni06B0.init" } },
  1056. { { "uni06B1" }, { "uni06B1.init" } },
  1057. { { "uni06B2" }, { "uni06B2.init" } },
  1058. { { "uni06B3" }, { "uni06B3.init" } },
  1059. { { "uni06B4" }, { "uni06B4.init" } },
  1060. { { "uni06B5" }, { "uni06B5.init" } },
  1061. { { "uni06B6" }, { "uni06B6.init" } },
  1062. { { "uni06B7" }, { "uni06B7.init" } },
  1063. { { "uni06B8" }, { "uni06B8.init" } },
  1064. { { "uni06B9" }, { "uni06B9.init" } },
  1065. { { "uni06BA" }, { "uni06BA.init" } },
  1066. { { "uni06BB" }, { "uni06BB.init" } },
  1067. { { "uni06BC" }, { "uni06BC.init" } },
  1068. { { "uni06BD" }, { "uni06BD.init" } },
  1069. { { "uni06BE" }, { "uni06BE.init" } },
  1070. { { "uni06BF" }, { "uni06BF.init" } },
  1071. { { "uni06C1" }, { "uni06C1.init" } },
  1072. { { "uni06CC" }, { "uni06CC.init" } },
  1073. { { "uni06CE" }, { "uni06CE.init" } },
  1074. { { "uni06D0" }, { "uni06D0.init" } },
  1075. { { "uni06D1" }, { "uni06D1.init" } },
  1076. { { "uni06FA" }, { "uni06FA.init" } },
  1077. { { "uni06FB" }, { "uni06FB.init" } },
  1078. { { "uni06FC" }, { "uni06FC.init" } },
  1079. { { "uni06FF" }, { "uni06FF.init" } },
  1080. { { "uni0750" }, { "uni0750.init" } },
  1081. { { "uni0751" }, { "uni0751.init" } },
  1082. { { "uni0752" }, { "uni0752.init" } },
  1083. { { "uni0753" }, { "uni0753.init" } },
  1084. { { "uni0754" }, { "uni0754.init" } },
  1085. { { "uni0755" }, { "uni0755.init" } },
  1086. { { "uni0756" }, { "uni0756.init" } },
  1087. { { "uni0757" }, { "uni0757.init" } },
  1088. { { "uni0758" }, { "uni0758.init" } },
  1089. { { "uni075C" }, { "uni075C.init" } },
  1090. { { "uni075D" }, { "uni075D.init" } },
  1091. { { "uni075E" }, { "uni075E.init" } },
  1092. { { "uni075F" }, { "uni075F.init" } },
  1093. { { "uni0760" }, { "uni0760.init" } },
  1094. { { "uni0761" }, { "uni0761.init" } },
  1095. { { "uni0762" }, { "uni0762.init" } },
  1096. { { "uni0763" }, { "uni0763.init" } },
  1097. { { "uni0764" }, { "uni0764.init" } },
  1098. { { "uni0765" }, { "uni0765.init" } },
  1099. { { "uni0766" }, { "uni0766.init" } },
  1100. { { "uni0767" }, { "uni0767.init" } },
  1101. { { "uni0768" }, { "uni0768.init" } },
  1102. { { "uni0769" }, { "uni0769.init" } },
  1103. { { "uni076A" }, { "uni076A.init" } },
  1104. { { "uni076D" }, { "uni076D.init" } },
  1105. }
  1106. },
  1107. { "f3", "lu2", "arab", "dflt", "fina",
  1108. new String[][][] {
  1109. { { "absJeemRetro1" }, { "absJeemRetro1Fin" } },
  1110. { { "absJeemRetro2" }, { "absJeemRetro2Fin" } },
  1111. { { "absJeemRetro3" }, { "absJeemRetro3Fin" } },
  1112. { { "absJehRetro1" }, { "absJehRetro1Fin" } },
  1113. { { "absJehRetro2" }, { "absJehRetro2Fin" } },
  1114. { { "absLamRetro" }, { "absLamRetroFin" } },
  1115. { { "absSheenRetro1" }, { "absSheenRetro1Fin" } },
  1116. { { "absSheenRetro2" }, { "absSheenRetro2Fin" } },
  1117. { { "absTchehRetro1" }, { "absTchehRetro1Fin" } },
  1118. { { "absTchehRetro2" }, { "absTchehRetro2Fin" } },
  1119. { { "absWawDotBelow" }, { "absWawDotBelowFin" } },
  1120. { { "uni0622" }, { "uni0622.fina" } },
  1121. { { "uni0623" }, { "uni0623.fina" } },
  1122. { { "uni0624" }, { "uni0624.fina" } },
  1123. { { "uni0625" }, { "uni0625.fina" } },
  1124. { { "uni0626" }, { "uni0626.fina" } },
  1125. { { "uni0627" }, { "uni0627.fina" } },
  1126. { { "uni0628" }, { "uni0628.fina" } },
  1127. { { "uni0629" }, { "uni0629.fina" } },
  1128. { { "uni062A" }, { "uni062A.fina" } },
  1129. { { "uni062B" }, { "uni062B.fina" } },
  1130. { { "uni062C" }, { "uni062C.fina" } },
  1131. { { "uni062D" }, { "uni062D.fina" } },
  1132. { { "uni062E" }, { "uni062E.fina" } },
  1133. { { "uni062F" }, { "uni062F.fina" } },
  1134. { { "uni0630" }, { "uni0630.fina" } },
  1135. { { "uni0631" }, { "uni0631.fina" } },
  1136. { { "uni0632" }, { "uni0632.fina" } },
  1137. { { "uni0633" }, { "uni0633.fina" } },
  1138. { { "uni0634" }, { "uni0634.fina" } },
  1139. { { "uni0635" }, { "uni0635.fina" } },
  1140. { { "uni0636" }, { "uni0636.fina" } },
  1141. { { "uni0637" }, { "uni0637.fina" } },
  1142. { { "uni0638" }, { "uni0638.fina" } },
  1143. { { "uni0639" }, { "uni0639.fina" } },
  1144. { { "uni063A" }, { "uni063A.fina" } },
  1145. { { "uni0641" }, { "uni0641.fina" } },
  1146. { { "uni0642" }, { "uni0642.fina" } },
  1147. { { "uni0643" }, { "uni0643.fina" } },
  1148. { { "uni0644" }, { "uni0644.fina" } },
  1149. { { "uni0645" }, { "uni0645.fina" } },
  1150. { { "uni0646" }, { "uni0646.fina" } },
  1151. { { "uni0647" }, { "uni0647.fina" } },
  1152. { { "uni0648" }, { "uni0648.fina" } },
  1153. { { "uni0649" }, { "uni0649.fina" } },
  1154. { { "uni064A" }, { "uni064A.fina" } },
  1155. { { "uni064A.noDots" }, { "uni064A.fina.noDots" } },
  1156. { { "uni066E" }, { "uni066E.fina" } },
  1157. { { "uni066F" }, { "uni066F.fina" } },
  1158. { { "uni0671" }, { "uni0671.fina" } },
  1159. { { "uni0672" }, { "uni0672.fina" } },
  1160. { { "uni0673" }, { "uni0673.fina" } },
  1161. { { "uni0675" }, { "uni0675.fina" } },
  1162. { { "uni0676" }, { "uni0676.fina" } },
  1163. { { "uni0677" }, { "uni0677.fina" } },
  1164. { { "uni0678" }, { "uni0678.fina" } },
  1165. { { "uni0679" }, { "uni0679.fina" } },
  1166. { { "uni067A" }, { "uni067A.fina" } },
  1167. { { "uni067B" }, { "uni067B.fina" } },
  1168. { { "uni067C" }, { "uni067C.fina" } },
  1169. { { "uni067D" }, { "uni067D.fina" } },
  1170. { { "uni067E" }, { "uni067E.fina" } },
  1171. { { "uni067F" }, { "uni067F.fina" } },
  1172. { { "uni0680" }, { "uni0680.fina" } },
  1173. { { "uni0681" }, { "uni0681.fina" } },
  1174. { { "uni0682" }, { "uni0682.fina" } },
  1175. { { "uni0683" }, { "uni0683.fina" } },
  1176. { { "uni0684" }, { "uni0684.fina" } },
  1177. { { "uni0685" }, { "uni0685.fina" } },
  1178. { { "uni0686" }, { "uni0686.fina" } },
  1179. { { "uni0687" }, { "uni0687.fina" } },
  1180. { { "uni0688" }, { "uni0688.fina" } },
  1181. { { "uni0689" }, { "uni0689.fina" } },
  1182. { { "uni068A" }, { "uni068A.fina" } },
  1183. { { "uni068B" }, { "uni068B.fina" } },
  1184. { { "uni068C" }, { "uni068C.fina" } },
  1185. { { "uni068D" }, { "uni068D.fina" } },
  1186. { { "uni068E" }, { "uni068E.fina" } },
  1187. { { "uni068F" }, { "uni068F.fina" } },
  1188. { { "uni0690" }, { "uni0690.fina" } },
  1189. { { "uni0691" }, { "uni0691.fina" } },
  1190. { { "uni0692" }, { "uni0692.fina" } },
  1191. { { "uni0693" }, { "uni0693.fina" } },
  1192. { { "uni0694" }, { "uni0694.fina" } },
  1193. { { "uni0695" }, { "uni0695.fina" } },
  1194. { { "uni0696" }, { "uni0696.fina" } },
  1195. { { "uni0697" }, { "uni0697.fina" } },
  1196. { { "uni0698" }, { "uni0698.fina" } },
  1197. { { "uni0698.dotHat" }, { "uni0698.fina.dotHat" } },
  1198. { { "uni0699" }, { "uni0699.fina" } },
  1199. { { "uni069A" }, { "uni069A.fina" } },
  1200. { { "uni069B" }, { "uni069B.fina" } },
  1201. { { "uni069C" }, { "uni069C.fina" } },
  1202. { { "uni069D" }, { "uni069D.fina" } },
  1203. { { "uni069E" }, { "uni069E.fina" } },
  1204. { { "uni069F" }, { "uni069F.fina" } },
  1205. { { "uni06A0" }, { "uni06A0.fina" } },
  1206. { { "uni06A1" }, { "uni06A1.fina" } },
  1207. { { "uni06A2" }, { "uni06A2.fina" } },
  1208. { { "uni06A3" }, { "uni06A3.fina" } },
  1209. { { "uni06A4" }, { "uni06A4.fina" } },
  1210. { { "uni06A5" }, { "uni06A5.fina" } },
  1211. { { "uni06A6" }, { "uni06A6.fina" } },
  1212. { { "uni06A7" }, { "uni06A7.fina" } },
  1213. { { "uni06A8" }, { "uni06A8.fina" } },
  1214. { { "uni06A9" }, { "uni06A9.fina" } },
  1215. { { "uni06AA" }, { "uni06AA.fina" } },
  1216. { { "uni06AB" }, { "uni06AB.fina" } },
  1217. { { "uni06AC" }, { "uni06AC.fina" } },
  1218. { { "uni06AD" }, { "uni06AD.fina" } },
  1219. { { "uni06AE" }, { "uni06AE.fina" } },
  1220. { { "uni06AF" }, { "uni06AF.fina" } },
  1221. { { "uni06B0" }, { "uni06B0.fina" } },
  1222. { { "uni06B1" }, { "uni06B1.fina" } },
  1223. { { "uni06B2" }, { "uni06B2.fina" } },
  1224. { { "uni06B3" }, { "uni06B3.fina" } },
  1225. { { "uni06B4" }, { "uni06B4.fina" } },
  1226. { { "uni06B5" }, { "uni06B5.fina" } },
  1227. { { "uni06B6" }, { "uni06B6.fina" } },
  1228. { { "uni06B7" }, { "uni06B7.fina" } },
  1229. { { "uni06B8" }, { "uni06B8.fina" } },
  1230. { { "uni06B9" }, { "uni06B9.fina" } },
  1231. { { "uni06BA" }, { "uni06BA.fina" } },
  1232. { { "uni06BB" }, { "uni06BB.fina" } },
  1233. { { "uni06BC" }, { "uni06BC.fina" } },
  1234. { { "uni06BD" }, { "uni06BD.fina" } },
  1235. { { "uni06BE" }, { "uni06BE.fina" } },
  1236. { { "uni06BF" }, { "uni06BF.fina" } },
  1237. { { "uni06C0" }, { "uni06C0.fina" } },
  1238. { { "uni06C1" }, { "uni06C1.fina" } },
  1239. { { "uni06C2" }, { "uni06C2.fina" } },
  1240. { { "uni06C3" }, { "uni06C3.fina" } },
  1241. { { "uni06C4" }, { "uni06C4.fina" } },
  1242. { { "uni06C5" }, { "uni06C5.fina" } },
  1243. { { "uni06C6" }, { "uni06C6.fina" } },
  1244. { { "uni06C7" }, { "uni06C7.fina" } },
  1245. { { "uni06C8" }, { "uni06C8.fina" } },
  1246. { { "uni06C9" }, { "uni06C9.fina" } },
  1247. { { "uni06CA" }, { "uni06CA.fina" } },
  1248. { { "uni06CB" }, { "uni06CB.fina" } },
  1249. { { "uni06CC" }, { "uni06CC.fina" } },
  1250. { { "uni06CD" }, { "uni06CD.fina" } },
  1251. { { "uni06CE" }, { "uni06CE.fina" } },
  1252. { { "uni06CF" }, { "uni06CF.fina" } },
  1253. { { "uni06D0" }, { "uni06D0.fina" } },
  1254. { { "uni06D1" }, { "uni06D1.fina" } },
  1255. { { "uni06D2" }, { "uni06D2.fina" } },
  1256. { { "uni06D3" }, { "uni06D3.fina" } },
  1257. { { "uni06D5" }, { "uni06D5.fina" } },
  1258. { { "uni06EE" }, { "uni06EE.fina" } },
  1259. { { "uni06EF" }, { "uni06EF.fina" } },
  1260. { { "uni06FA" }, { "uni06FA.fina" } },
  1261. { { "uni06FB" }, { "uni06FB.fina" } },
  1262. { { "uni06FC" }, { "uni06FC.fina" } },
  1263. { { "uni06FF" }, { "uni06FF.fina" } },
  1264. { { "uni0750" }, { "uni0750.fina" } },
  1265. { { "uni0751" }, { "uni0751.fina" } },
  1266. { { "uni0752" }, { "uni0752.fina" } },
  1267. { { "uni0753" }, { "uni0753.fina" } },
  1268. { { "uni0754" }, { "uni0754.fina" } },
  1269. { { "uni0755" }, { "uni0755.fina" } },
  1270. { { "uni0756" }, { "uni0756.fina" } },
  1271. { { "uni0757" }, { "uni0757.fina" } },
  1272. { { "uni0758" }, { "uni0758.fina" } },
  1273. { { "uni0759" }, { "uni0759.fina" } },
  1274. { { "uni075A" }, { "uni075A.fina" } },
  1275. { { "uni075B" }, { "uni075B.fina" } },
  1276. { { "uni075C" }, { "uni075C.fina" } },
  1277. { { "uni075D" }, { "uni075D.fina" } },
  1278. { { "uni075E" }, { "uni075E.fina" } },
  1279. { { "uni075F" }, { "uni075F.fina" } },
  1280. { { "uni0760" }, { "uni0760.fina" } },
  1281. { { "uni0761" }, { "uni0761.fina" } },
  1282. { { "uni0762" }, { "uni0762.fina" } },
  1283. { { "uni0763" }, { "uni0763.fina" } },
  1284. { { "uni0764" }, { "uni0764.fina" } },
  1285. { { "uni0765" }, { "uni0765.fina" } },
  1286. { { "uni0766" }, { "uni0766.fina" } },
  1287. { { "uni0767" }, { "uni0767.fina" } },
  1288. { { "uni0768" }, { "uni0768.fina" } },
  1289. { { "uni0769" }, { "uni0769.fina" } },
  1290. { { "uni076A" }, { "uni076A.fina" } },
  1291. { { "uni076B" }, { "uni076B.fina" } },
  1292. { { "uni076C" }, { "uni076C.fina" } },
  1293. { { "uni076D" }, { "uni076D.fina" } },
  1294. }
  1295. },
  1296. { "f3", "lu3", "arab", "dflt", "medi",
  1297. new String[][][] {
  1298. { { "absJeemRetro1" }, { "absJeemRetro1Med" } },
  1299. { { "absJeemRetro2" }, { "absJeemRetro2Med" } },
  1300. { { "absJeemRetro3" }, { "absJeemRetro3Med" } },
  1301. { { "absLamRetro" }, { "absLamRetroMed" } },
  1302. { { "absSheenRetro1" }, { "absSheenRetro1Med" } },
  1303. { { "absSheenRetro2" }, { "absSheenRetro2Med" } },
  1304. { { "absTchehRetro1" }, { "absTchehRetro1Med" } },
  1305. { { "absTchehRetro2" }, { "absTchehRetro2Med" } },
  1306. { { "uni0626" }, { "uni0626.medi" } },
  1307. { { "uni0628" }, { "uni0628.medi" } },
  1308. { { "uni062A" }, { "uni062A.medi" } },
  1309. { { "uni062B" }, { "uni062B.medi" } },
  1310. { { "uni062C" }, { "uni062C.medi" } },
  1311. { { "uni062D" }, { "uni062D.medi" } },
  1312. { { "uni062E" }, { "uni062E.medi" } },
  1313. { { "uni0633" }, { "uni0633.medi" } },
  1314. { { "uni0634" }, { "uni0634.medi" } },
  1315. { { "uni0635" }, { "uni0635.medi" } },
  1316. { { "uni0636" }, { "uni0636.medi" } },
  1317. { { "uni0637" }, { "uni0637.medi" } },
  1318. { { "uni0638" }, { "uni0638.medi" } },
  1319. { { "uni0639" }, { "uni0639.medi" } },
  1320. { { "uni063A" }, { "uni063A.medi" } },
  1321. { { "uni0641" }, { "uni0641.medi" } },
  1322. { { "uni0642" }, { "uni0642.medi" } },
  1323. { { "uni0643" }, { "uni0643.medi" } },
  1324. { { "uni0644" }, { "uni0644.medi" } },
  1325. { { "uni0645" }, { "uni0645.medi" } },
  1326. { { "uni0646" }, { "uni0646.medi" } },
  1327. { { "uni0647" }, { "uni0647.medi" } },
  1328. { { "uni0649" }, { "uni0649.medi" } },
  1329. { { "uni064A" }, { "uni064A.medi" } },
  1330. { { "uni064A.noDots" }, { "uni064A.medi.noDots" } },
  1331. { { "uni066E" }, { "uni066E.medi" } },
  1332. { { "uni066F" }, { "uni066F.medi" } },
  1333. { { "uni0678" }, { "uni0678.medi" } },
  1334. { { "uni0679" }, { "uni0679.medi" } },
  1335. { { "uni067A" }, { "uni067A.medi" } },
  1336. { { "uni067B" }, { "uni067B.medi" } },
  1337. { { "uni067C" }, { "uni067C.medi" } },
  1338. { { "uni067D" }, { "uni067D.medi" } },
  1339. { { "uni067E" }, { "uni067E.medi" } },
  1340. { { "uni067F" }, { "uni067F.medi" } },
  1341. { { "uni0680" }, { "uni0680.medi" } },
  1342. { { "uni0681" }, { "uni0681.medi" } },
  1343. { { "uni0682" }, { "uni0682.medi" } },
  1344. { { "uni0683" }, { "uni0683.medi" } },
  1345. { { "uni0684" }, { "uni0684.medi" } },
  1346. { { "uni0685" }, { "uni0685.medi" } },
  1347. { { "uni0686" }, { "uni0686.medi" } },
  1348. { { "uni0687" }, { "uni0687.medi" } },
  1349. { { "uni069A" }, { "uni069A.medi" } },
  1350. { { "uni069B" }, { "uni069B.medi" } },
  1351. { { "uni069C" }, { "uni069C.medi" } },
  1352. { { "uni069D" }, { "uni069D.medi" } },
  1353. { { "uni069E" }, { "uni069E.medi" } },
  1354. { { "uni069F" }, { "uni069F.medi" } },
  1355. { { "uni06A0" }, { "uni06A0.medi" } },
  1356. { { "uni06A1" }, { "uni06A1.medi" } },
  1357. { { "uni06A2" }, { "uni06A2.medi" } },
  1358. { { "uni06A3" }, { "uni06A3.medi" } },
  1359. { { "uni06A4" }, { "uni06A4.medi" } },
  1360. { { "uni06A5" }, { "uni06A5.medi" } },
  1361. { { "uni06A6" }, { "uni06A6.medi" } },
  1362. { { "uni06A7" }, { "uni06A7.medi" } },
  1363. { { "uni06A8" }, { "uni06A8.medi" } },
  1364. { { "uni06A9" }, { "uni06A9.medi" } },
  1365. { { "uni06AA" }, { "uni06AA.medi" } },
  1366. { { "uni06AB" }, { "uni06AB.medi" } },
  1367. { { "uni06AC" }, { "uni06AC.medi" } },
  1368. { { "uni06AD" }, { "uni06AD.medi" } },
  1369. { { "uni06AE" }, { "uni06AE.medi" } },
  1370. { { "uni06AF" }, { "uni06AF.medi" } },
  1371. { { "uni06B0" }, { "uni06B0.medi" } },
  1372. { { "uni06B1" }, { "uni06B1.medi" } },
  1373. { { "uni06B2" }, { "uni06B2.medi" } },
  1374. { { "uni06B3" }, { "uni06B3.medi" } },
  1375. { { "uni06B4" }, { "uni06B4.medi" } },
  1376. { { "uni06B5" }, { "uni06B5.medi" } },
  1377. { { "uni06B6" }, { "uni06B6.medi" } },
  1378. { { "uni06B7" }, { "uni06B7.medi" } },
  1379. { { "uni06B8" }, { "uni06B8.medi" } },
  1380. { { "uni06B9" }, { "uni06B9.medi" } },
  1381. { { "uni06BA" }, { "uni06BA.medi" } },
  1382. { { "uni06BB" }, { "uni06BB.medi" } },
  1383. { { "uni06BC" }, { "uni06BC.medi" } },
  1384. { { "uni06BD" }, { "uni06BD.medi" } },
  1385. { { "uni06BE" }, { "uni06BE.medi" } },
  1386. { { "uni06BF" }, { "uni06BF.medi" } },
  1387. { { "uni06C1" }, { "uni06C1.medi" } },
  1388. { { "uni06CC" }, { "uni06CC.medi" } },
  1389. { { "uni06CE" }, { "uni06CE.medi" } },
  1390. { { "uni06D0" }, { "uni06D0.medi" } },
  1391. { { "uni06D1" }, { "uni06D1.medi" } },
  1392. { { "uni06FA" }, { "uni06FA.medi" } },
  1393. { { "uni06FB" }, { "uni06FB.medi" } },
  1394. { { "uni06FC" }, { "uni06FC.medi" } },
  1395. { { "uni06FF" }, { "uni06FF.medi" } },
  1396. { { "uni0750" }, { "uni0750.medi" } },
  1397. { { "uni0751" }, { "uni0751.medi" } },
  1398. { { "uni0752" }, { "uni0752.medi" } },
  1399. { { "uni0753" }, { "uni0753.medi" } },
  1400. { { "uni0754" }, { "uni0754.medi" } },
  1401. { { "uni0755" }, { "uni0755.medi" } },
  1402. { { "uni0756" }, { "uni0756.medi" } },
  1403. { { "uni0757" }, { "uni0757.medi" } },
  1404. { { "uni0758" }, { "uni0758.medi" } },
  1405. { { "uni075C" }, { "uni075C.medi" } },
  1406. { { "uni075D" }, { "uni075D.medi" } },
  1407. { { "uni075E" }, { "uni075E.medi" } },
  1408. { { "uni075F" }, { "uni075F.medi" } },
  1409. { { "uni0760" }, { "uni0760.medi" } },
  1410. { { "uni0761" }, { "uni0761.medi" } },
  1411. { { "uni0762" }, { "uni0762.medi" } },
  1412. { { "uni0763" }, { "uni0763.medi" } },
  1413. { { "uni0764" }, { "uni0764.medi" } },
  1414. { { "uni0765" }, { "uni0765.medi" } },
  1415. { { "uni0766" }, { "uni0766.medi" } },
  1416. { { "uni0767" }, { "uni0767.medi" } },
  1417. { { "uni0768" }, { "uni0768.medi" } },
  1418. { { "uni0769" }, { "uni0769.medi" } },
  1419. { { "uni076A" }, { "uni076A.medi" } },
  1420. { { "uni076D" }, { "uni076D.medi" } },
  1421. }
  1422. },
  1423. { "f3", "lu11", "arab", "SND ", "calt",
  1424. new String[][][] {
  1425. { { "uni0645" }, { "uni0645.sindhi" } },
  1426. { { "uni0645.fina" }, { "uni0645.fina.sindhi" } },
  1427. { { "uni0647" }, { "uni0647.knotted" } },
  1428. { { "uni0647.fina" }, { "uni0647.fina.knottedHigh" } },
  1429. { { "uni0647.medi" }, { "uni0647.medi.knottedHigh" } },
  1430. { { "uni06F6" }, { "uni06F6.urdu" } },
  1431. { { "uni06F7" }, { "uni06F7.urdu" } },
  1432. }
  1433. },
  1434. { "f3", "lu12", "arab", "KUR ", "calt",
  1435. new String[][][] {
  1436. { { "uni0647" }, { "uni0647.knotted" } },
  1437. { { "uni0647.fina" }, { "uni0647.fina.knottedHigh" } },
  1438. }
  1439. },
  1440. { "f3", "lu13", "arab", "URD ", "calt",
  1441. new String[][][] {
  1442. { { "uni0647.fina" }, { "uni0647.fina.hooked" } },
  1443. { { "uni0647.init" }, { "uni0647.init.hooked" } },
  1444. { { "uni0647.medi" }, { "uni0647.medi.hooked" } },
  1445. { { "uni06F4" }, { "uni06F4.urdu" } },
  1446. { { "uni06F6" }, { "uni06F6.urdu" } },
  1447. { { "uni06F7" }, { "uni06F7.urdu" } },
  1448. }
  1449. },
  1450. { "f3", "lu15", "arab", "*", "*",
  1451. new String[][][] {
  1452. { { "absLamRetroIni" }, { "absLamRetroIni.preAlef" } },
  1453. { { "absLamRetroMed" }, { "absLamRetroMed.preAlef" } },
  1454. { { "uni0644.init" }, { "uni0644.init.preAlef" } },
  1455. { { "uni0644.medi" }, { "uni0644.medi.preAlef" } },
  1456. { { "uni06B5.init" }, { "uni06B5.init.preAlef" } },
  1457. { { "uni06B5.medi" }, { "uni06B5.medi.preAlef" } },
  1458. { { "uni06B6.init" }, { "uni06B6.init.preAlef" } },
  1459. { { "uni06B6.medi" }, { "uni06B6.medi.preAlef" } },
  1460. { { "uni06B7.init" }, { "uni06B7.init.preAlef" } },
  1461. { { "uni06B7.medi" }, { "uni06B7.medi.preAlef" } },
  1462. { { "uni06B8.init" }, { "uni06B8.init.preAlef" } },
  1463. { { "uni06B8.medi" }, { "uni06B8.medi.preAlef" } },
  1464. { { "uni076A.init" }, { "uni076A.init.preAlef" } },
  1465. { { "uni076A.medi" }, { "uni076A.medi.preAlef" } },
  1466. }
  1467. },
  1468. { "f3", "lu16", "arab", "*", "*",
  1469. new String[][][] {
  1470. { { "uni0622.fina" }, { "uni0622.fina.postLamIni" } },
  1471. { { "uni0623.fina" }, { "uni0623.fina.postLamIni" } },
  1472. { { "uni0625.fina" }, { "uni0625.fina.postLamIni" } },
  1473. { { "uni0627.fina" }, { "uni0627.fina.postLamIni" } },
  1474. { { "uni0671.fina" }, { "uni0671.fina.postLamIni" } },
  1475. { { "uni0672.fina" }, { "uni0672.fina.postLamIni" } },
  1476. { { "uni0673.fina" }, { "uni0673.fina.postLamIni" } },
  1477. { { "uni0675.fina" }, { "uni0675.fina.postLamIni" } },
  1478. }
  1479. },
  1480. { "f3", "lu17", "arab", "*", "*",
  1481. new String[][][] {
  1482. { { "uni0622.fina" }, { "uni0622.fina.postLamMed" } },
  1483. { { "uni0623.fina" }, { "uni0623.fina.postLamMed" } },
  1484. { { "uni0625.fina" }, { "uni0625.fina.postLamMed" } },
  1485. { { "uni0627.fina" }, { "uni0627.fina.postLamMed" } },
  1486. { { "uni0671.fina" }, { "uni0671.fina.postLamMed" } },
  1487. { { "uni0672.fina" }, { "uni0672.fina.postLamMed" } },
  1488. { { "uni0673.fina" }, { "uni0673.fina.postLamMed" } },
  1489. { { "uni0675.fina" }, { "uni0675.fina.postLamMed" } },
  1490. }
  1491. },
  1492. { "f3", "lu18", "arab", "*", "*",
  1493. new String[][][] {
  1494. { { "uni0601" }, { "uni0601.4" } },
  1495. }
  1496. },
  1497. { "f3", "lu19", "arab", "*", "*",
  1498. new String[][][] {
  1499. { { "uni0600" }, { "uni0600.3" } },
  1500. { { "uni0601" }, { "uni0601.3" } },
  1501. { { "uni0603" }, { "uni0603.3" } },
  1502. { { "uni06DD" }, { "uni06DD.3" } },
  1503. { { "uni06DD.alt" }, { "uni06DD.alt.3" } },
  1504. { { "uni06DD.altB" }, { "uni06DD.altB.3" } },
  1505. }
  1506. },
  1507. { "f3", "lu20", "arab", "*", "*",
  1508. new String[][][] {
  1509. { { "uni0600" }, { "uni0600.2" } },
  1510. { { "uni0601" }, { "uni0601.2" } },
  1511. { { "uni0602" }, { "uni0602.2" } },
  1512. { { "uni0603" }, { "uni0603.2" } },
  1513. { { "uni06DD" }, { "uni06DD.2" } },
  1514. { { "uni06DD.alt" }, { "uni06DD.alt.2" } },
  1515. { { "uni06DD.altB" }, { "uni06DD.altB.2" } },
  1516. }
  1517. },
  1518. { "f3", "lu21", "arab", "*", "*",
  1519. new String[][][] {
  1520. { { "eight" }, { "eightMedium" } },
  1521. { { "five" }, { "fiveMedium" } },
  1522. { { "four" }, { "fourMedium" } },
  1523. { { "nine" }, { "nineMedium" } },
  1524. { { "one" }, { "oneMedium" } },
  1525. { { "seven" }, { "sevenMedium" } },
  1526. { { "six" }, { "sixMedium" } },
  1527. { { "three" }, { "threeMedium" } },
  1528. { { "two" }, { "twoMedium" } },
  1529. { { "uni0660" }, { "uni0660.Medium" } },
  1530. { { "uni0661" }, { "uni0661.Medium" } },
  1531. { { "uni0662" }, { "uni0662.Medium" } },
  1532. { { "uni0663" }, { "uni0663.Medium" } },
  1533. { { "uni0664" }, { "uni0664.Medium" } },
  1534. { { "uni0665" }, { "uni0665.Medium" } },
  1535. { { "uni0666" }, { "uni0666.Medium" } },
  1536. { { "uni0667" }, { "uni0667.Medium" } },
  1537. { { "uni0668" }, { "uni0668.Medium" } },
  1538. { { "uni0669" }, { "uni0669.Medium" } },
  1539. { { "uni06F0" }, { "uni06F0.Medium" } },
  1540. { { "uni06F1" }, { "uni06F1.Medium" } },
  1541. { { "uni06F2" }, { "uni06F2.Medium" } },
  1542. { { "uni06F3" }, { "uni06F3.Medium" } },
  1543. { { "uni06F4" }, { "uni06F4.Medium" } },
  1544. { { "uni06F4.urdu" }, { "uni06F4.Medium.urdu" } },
  1545. { { "uni06F5" }, { "uni06F5.Medium" } },
  1546. { { "uni06F6" }, { "uni06F6.Medium" } },
  1547. { { "uni06F6.urdu" }, { "uni06F6.Medium.urdu" } },
  1548. { { "uni06F7" }, { "uni06F7.Medium" } },
  1549. { { "uni06F7.urdu" }, { "uni06F7.Medium.urdu" } },
  1550. { { "uni06F8" }, { "uni06F8.Medium" } },
  1551. { { "uni06F9" }, { "uni06F9.Medium" } },
  1552. { { "zero" }, { "zeroMedium" } },
  1553. }
  1554. },
  1555. { "f3", "lu22", "arab", "*", "*",
  1556. new String[][][] {
  1557. { { "eight" }, { "eightSmall" } },
  1558. { { "five" }, { "fiveSmall" } },
  1559. { { "four" }, { "fourSmall" } },
  1560. { { "nine" }, { "nineSmall" } },
  1561. { { "one" }, { "oneSmall" } },
  1562. { { "seven" }, { "sevenSmall" } },
  1563. { { "six" }, { "sixSmall" } },
  1564. { { "three" }, { "threeSmall" } },
  1565. { { "two" }, { "twoSmall" } },
  1566. { { "uni0660" }, { "uni0660.Small" } },
  1567. { { "uni0661" }, { "uni0661.Small" } },
  1568. { { "uni0662" }, { "uni0662.Small" } },
  1569. { { "uni0663" }, { "uni0663.Small" } },
  1570. { { "uni0664" }, { "uni0664.Small" } },
  1571. { { "uni0665" }, { "uni0665.Small" } },
  1572. { { "uni0666" }, { "uni0666.Small" } },
  1573. { { "uni0667" }, { "uni0667.Small" } },
  1574. { { "uni0668" }, { "uni0668.Small" } },
  1575. { { "uni0669" }, { "uni0669.Small" } },
  1576. { { "uni06F0" }, { "uni06F0.Small" } },
  1577. { { "uni06F1" }, { "uni06F1.Small" } },
  1578. { { "uni06F2" }, { "uni06F2.Small" } },
  1579. { { "uni06F3" }, { "uni06F3.Small" } },
  1580. { { "uni06F4" }, { "uni06F4.Small" } },
  1581. { { "uni06F4.urdu" }, { "uni06F4.Small.urdu" } },
  1582. { { "uni06F5" }, { "uni06F5.Small" } },
  1583. { { "uni06F6" }, { "uni06F6.Small" } },
  1584. { { "uni06F6.urdu" }, { "uni06F6.Small.urdu" } },
  1585. { { "uni06F7" }, { "uni06F7.Small" } },
  1586. { { "uni06F7.urdu" }, { "uni06F7.Small.urdu" } },
  1587. { { "uni06F8" }, { "uni06F8.Small" } },
  1588. { { "uni06F9" }, { "uni06F9.Small" } },
  1589. { { "zero" }, { "zeroSmall" } },
  1590. }
  1591. },
  1592. { "f3", "lu23", "arab", "*", "*",
  1593. new String[][][] {
  1594. { { "uni0670" }, { "uni0670.large" } },
  1595. }
  1596. },
  1597. };
  1598. private static Object[][] ltMultiple = {
  1599. { GlyphSubstitutionTable.GSUB_LOOKUP_TYPE_MULTIPLE },
  1600. // arab-001.ttx
  1601. { "f0", "lu9", "arab", "*", "*",
  1602. new String[][][] {
  1603. { { "alefwithhamzabelow" }, { "arabicalef", "uni0655" } },
  1604. }
  1605. },
  1606. // arab-002.ttx
  1607. { "f1", "lu14", "arab", "*", "*",
  1608. new String[][][] {
  1609. { { "pehinitial" }, { "pehinitial", "tatweel" } },
  1610. { { "yehwithhamzaaboveinitial" }, { "yehwithhamzaaboveinitial", "tatweel" } },
  1611. { { "behinitial" }, { "behinitial", "tatweel" } },
  1612. { { "tehinitial" }, { "tehinitial", "tatweel" } },
  1613. { { "thehinitial" }, { "thehinitial", "tatweel" } },
  1614. { { "fehinitial" }, { "fehinitial", "tatweel" } },
  1615. { { "qafinitial" }, { "qafinitial", "tatweel" } },
  1616. { { "nooninitial" }, { "nooninitial", "tatweel" } },
  1617. { { "yehinitial" }, { "yehinitial", "tatweel" } },
  1618. { { "uni0649.init" }, { "uni0649.init", "tatweel" } },
  1619. }
  1620. },
  1621. { "f1", "lu15", "arab", "*", "*",
  1622. new String[][][] {
  1623. { { "pehmedial" }, { "pehmedial", "tatweel" } },
  1624. { { "yehwithhamzaabovemedial" }, { "yehwithhamzaabovemedial", "tatweel" } },
  1625. { { "behmedial" }, { "behmedial", "tatweel" } },
  1626. { { "tehmedial" }, { "tehmedial", "tatweel" } },
  1627. { { "thehmedial" }, { "thehmedial", "tatweel" } },
  1628. { { "noonmedial" }, { "noonmedial", "tatweel" } },
  1629. { { "yehmedial" }, { "yehmedial", "tatweel" } },
  1630. { { "uni0649.medi" }, { "uni0649.medi", "tatweel" } },
  1631. }
  1632. },
  1633. // arab-003.ttx
  1634. { "f2", "lu0", "arab", "dflt", "ccmp",
  1635. new String[][][] {
  1636. { { "uni0622" }, { "uni0627", "uni0653" } },
  1637. { { "uni0623" }, { "uni0627", "uni0654" } },
  1638. { { "uni0625" }, { "uni0627", "uni0655" } },
  1639. { { "uni0626" }, { "uni064A", "uni0654" } },
  1640. }
  1641. },
  1642. // arab-004.ttx
  1643. { "f3", "lu0", "arab", "dflt", "ccmp",
  1644. new String[][][] {
  1645. { { "uni0622" }, { "uni0627", "uni0653" } },
  1646. { { "uni0623" }, { "uni0627", "uni0654" } },
  1647. { { "uni0625" }, { "uni0627", "uni0655" } },
  1648. }
  1649. },
  1650. };
  1651. private static Object[][] ltAlternate = {
  1652. { GlyphSubstitutionTable.GSUB_LOOKUP_TYPE_ALTERNATE },
  1653. // arab-001.ttx - none used
  1654. // arab-002.ttx - none used
  1655. // arab-003.ttx - none used
  1656. // arab-004.ttx - add tests
  1657. { "f3", "lu14", "arab", "dflt", "salt" },
  1658. };
  1659. private static Object[][] ltLigature = {
  1660. { GlyphSubstitutionTable.GSUB_LOOKUP_TYPE_LIGATURE },
  1661. // arab-001.ttx
  1662. { "f0", "lu0", "arab", "dflt", "ccmp",
  1663. new String[][][] {
  1664. { { "damma", "shadda" }, { "shaddawithdammalow" } },
  1665. { { "damma", "highhamza" }, { "dammaonhamza" } },
  1666. { { "dammatan", "shadda" }, { "shaddawithdammatanlow" } },
  1667. { { "dammatan", "highhamza" }, { "dammatanonhamza" } },
  1668. { { "fatha", "shadda" }, { "shaddawithfathalow" } },
  1669. { { "fatha", "highhamza" }, { "fathaonhamza" } },
  1670. { { "fathatan", "shadda" }, { "shaddawithfathatanlow" } },
  1671. { { "fathatan", "highhamza" }, { "fathatanonhamza" } },
  1672. { { "highhamza", "fatha" }, { "fathaonhamza" } },
  1673. { { "highhamza", "fathatan" }, { "fathatanonhamza" } },
  1674. { { "highhamza", "sukun" }, { "sukunonhamza" } },
  1675. { { "highhamza", "damma" }, { "dammaonhamza" } },
  1676. { { "highhamza", "dammatan" }, { "dammatanonhamza" } },
  1677. { { "kasra", "shadda" }, { "shaddawithkasralow" } },
  1678. { { "kasra", "uni0655" }, { "uni06550650" } },
  1679. { { "kasratan", "shadda" }, { "shaddawithkasratanlow" } },
  1680. { { "kasratan", "uni0655" }, { "uni0655064D" } },
  1681. { { "shadda", "dammatan" }, { "shaddawithdammatanlow" } },
  1682. { { "shadda", "fatha" }, { "shaddawithfathalow" } },
  1683. { { "shadda", "damma" }, { "shaddawithdammalow" } },
  1684. { { "shadda", "fathatan" }, { "shaddawithfathatanlow" } },
  1685. { { "shadda", "kasratan" }, { "shaddawithkasratanlow" } },
  1686. { { "shadda", "kasra" }, { "shaddawithkasralow" } },
  1687. { { "sukun", "highhamza" }, { "sukunonhamza" } },
  1688. { { "uni0655", "kasratan" }, { "uni0655064D" } },
  1689. { { "uni0655", "kasra" }, { "uni06550650" } },
  1690. }
  1691. },
  1692. { "f0", "lu7", "arab", "dflt", "rlig",
  1693. new String[][][] {
  1694. { { "lamisolated", "alefwithmaddaabovefinal" }, { "lamwithalefmaddaaboveisolatedd" } },
  1695. { { "lamisolated", "alefwithhamzaabovefinal" }, { "lamwithalefhamzaaboveisolatedd" } },
  1696. { { "lamisolated", "alefwithhamzabelowfinal" }, { "lamwithalefhamzabelowisolated" } },
  1697. { { "lamisolated", "aleffinal" }, { "lamwithalefisolated" } },
  1698. { { "lammedial", "alefwithmaddaabovefinal" }, { "lamwithalefmaddaabovefinal" } },
  1699. { { "lammedial", "alefwithhamzaabovefinal" }, { "lamwithalefhamzaabovefinal" } },
  1700. { { "lammedial", "alefwithhamzabelowfinal" }, { "lamwithalefhamzabelowfinal" } },
  1701. { { "lammedial", "aleffinal" }, { "lamwithaleffinal" } },
  1702. }
  1703. },
  1704. { "f0", "lu8", "arab", "dflt", "liga",
  1705. new String[][][] {
  1706. { { "lamisolated", "lammedial", "hehfinal" }, { "allahisolated" } },
  1707. { { "reh", "yehmedial", "aleffinal", "lam" }, { "rayaleflam" } },
  1708. }
  1709. },
  1710. // arab-002.ttx
  1711. { "f1", "lu0", "arab", "dflt", "ccmp",
  1712. new String[][][] {
  1713. { { "damma", "shadda" }, { "shaddawithdammaisolatedlow" } },
  1714. { { "damma", "highhamza" }, { "dammaonhamza" } },
  1715. { { "dammatan", "shadda" }, { "shaddawithdammatanisolatedlow" } },
  1716. { { "dammatan", "highhamza" }, { "dammatanonhamza" } },
  1717. { { "fatha", "shadda" }, { "shaddawithfathaisolatedlow" } },
  1718. { { "fatha", "highhamza" }, { "fathaonhamza" } },
  1719. { { "fathatan", "shadda" }, { "shaddawithfathatanisolatedlow" } },
  1720. { { "fathatan", "highhamza" }, { "fathatanonhamza" } },
  1721. { { "highhamza", "fatha" }, { "fathaonhamza" } },
  1722. { { "highhamza", "fathatan" }, { "fathatanonhamza" } },
  1723. { { "highhamza", "sukun" }, { "sukunonhamza" } },
  1724. { { "highhamza", "damma" }, { "dammaonhamza" } },
  1725. { { "highhamza", "dammatan" }, { "dammatanonhamza" } },
  1726. { { "kasra", "shadda" }, { "shaddawithkasraisolatedlow" } },
  1727. { { "kasra", "uni0655" }, { "uni06550650" } },
  1728. { { "kasratan", "shadda" }, { "shaddawithkasratanisolatedlow" } },
  1729. { { "kasratan", "uni0655" }, { "uni0655064D" } },
  1730. { { "shadda", "dammatan" }, { "shaddawithdammatanisolatedlow" } },
  1731. { { "shadda", "fatha" }, { "shaddawithfathaisolatedlow" } },
  1732. { { "shadda", "damma" }, { "shaddawithdammaisolatedlow" } },
  1733. { { "shadda", "fathatan" }, { "shaddawithfathatanisolatedlow" } },
  1734. { { "shadda", "kasratan" }, { "shaddawithkasratanisolatedlow" } },
  1735. { { "shadda", "kasra" }, { "shaddawithkasraisolatedlow" } },
  1736. { { "sukun", "highhamza" }, { "sukunonhamza" } },
  1737. { { "uni0655", "kasratan" }, { "uni0655064D" } },
  1738. { { "uni0655", "kasra" }, { "uni06550650" } },
  1739. }
  1740. },
  1741. { "f1", "lu6", "arab", "dflt", "liga",
  1742. new String[][][] {
  1743. { { "behinitial", "hehmedial" }, { "behwithhehinitial" } },
  1744. { { "behinitial", "meemfinal" }, { "behwithmeemisolated" } },
  1745. { { "behinitial", "meemmedial" }, { "behwithmeeminitial" } },
  1746. { { "behinitial", "alefmaksurafinal" }, { "behwithalefmaksuraisolated" } },
  1747. { { "behinitial", "yehfinal" }, { "behwithyehisolated" } },
  1748. { { "behinitial", "jeemmedial" }, { "behwithjeeminitial" } },
  1749. { { "behinitial", "hahmedial" }, { "behwithhahinitial" } },
  1750. { { "behinitial", "khahmedial" }, { "behwithkhahinitial" } },
  1751. { { "behmedial", "alefmaksurafinal" }, { "behwithalefmaksurafinal" } },
  1752. { { "behmedial", "yehfinal" }, { "behwithyehfinal" } },
  1753. { { "behmedial", "rehfinal" }, { "behwithrehfinal" } },
  1754. { { "behmedial", "noonfinal" }, { "behwithnoonfinal" } },
  1755. { { "fehinitial", "alefmaksurafinal" }, { "fehwithalefmaksuraisolated" } },
  1756. { { "fehinitial", "yehfinal" }, { "fehwithyehisolated" } },
  1757. { { "hahinitial", "meemmedial" }, { "hahwithmeeminitial" } },
  1758. { { "hehinitial", "meemmedial" }, { "hehwithmeeminitial" } },
  1759. { { "jeeminitial", "meemmedial" }, { "jeemwithmeeminitial" } },
  1760. { { "khahinitial", "meemmedial" }, { "khahwithmeeminitial" } },
  1761. { { "laminitial", "jeemmedial" }, { "lamwithjeeminitial" } },
  1762. { { "laminitial", "hahmedial" }, { "lamwithhahinitial" } },
  1763. { { "laminitial", "khahmedial" }, { "lamwithkhahinitial" } },
  1764. { { "laminitial", "hehmedial" }, { "lamwithhehinitial" } },
  1765. { { "laminitial", "meemfinal" }, { "lamwithmeemisolated" } },
  1766. { { "laminitial", "alefmaksurafinal" }, { "lamwithalefmaksuraisolated" } },
  1767. { { "laminitial", "yehfinal" }, { "lamwithyehisolated" } },
  1768. { { "meeminitial", "jeemmedial" }, { "meemwithjeeminitial" } },
  1769. { { "meeminitial", "hahmedial" }, { "meemwithhahinitial" } },
  1770. { { "meeminitial", "khahmedial" }, { "meemwithkhahinitial" } },
  1771. { { "meeminitial", "meemmedial" }, { "meemwithmeeminitial" } },
  1772. { { "nooninitial", "hehmedial" }, { "noonwithhehinitial" } },
  1773. { { "nooninitial", "meemfinal" }, { "noonwithmeemisolated" } },
  1774. { { "nooninitial", "meemmedial" }, { "noonwithmeeminitial" } },
  1775. { { "nooninitial", "alefmaksurafinal" }, { "noonwithalefmaksuraisolated" } },
  1776. { { "nooninitial", "yehfinal" }, { "noonwithyehisolated" } },
  1777. { { "nooninitial", "jeemmedial" }, { "noonwithjeeminitial" } },
  1778. { { "nooninitial", "hahmedial" }, { "noonwithhahinitial" } },
  1779. { { "nooninitial", "khahmedial" }, { "noonwithkhahinitial" } },
  1780. { { "noonmedial", "alefmaksurafinal" }, { "noonwithalefmaksurafinal" } },
  1781. { { "noonmedial", "yehfinal" }, { "noonwithyehfinal" } },
  1782. { { "pehinitial", "hehmedial" }, { "pehwithhehinitial" } },
  1783. { { "seeninitial", "meemmedial" }, { "seenwithmeeminitial" } },
  1784. { { "sheeninitial", "meemmedial" }, { "sheenwithmeeminitial" } },
  1785. { { "tchehinitial", "meemmedial" }, { "uniE817" } },
  1786. { { "tehinitial", "hehmedial" }, { "tehwithhehinitial" } },
  1787. { { "tehinitial", "meemfinal" }, { "tehwithmeemisolated" } },
  1788. { { "tehinitial", "meemmedial" }, { "tehwithmeeminitial" } },
  1789. { { "tehinitial", "yehfinal" }, { "tehwithyehisolated" } },
  1790. { { "tehinitial", "jeemmedial" }, { "tehwithjeeminitial" } },
  1791. { { "tehinitial", "hahmedial" }, { "tehwithhahinitial" } },
  1792. { { "tehinitial", "khahmedial" }, { "tehwithkhahinitial" } },
  1793. { { "tehmedial", "alefmaksurafinal" }, { "tehwithalefmaksurafinal" } },
  1794. { { "tehmedial", "yehfinal" }, { "tehwithyehfinal" } },
  1795. { { "tehmedial", "rehfinal" }, { "noonwithzainfinal" } },
  1796. { { "tehmedial", "noonfinal" }, { "tehwithnoonfinal" } },
  1797. { { "thehinitial", "meemfinal" }, { "thehwithmeemisolated" } },
  1798. { { "thehinitial", "meemmedial" }, { "thehwithmeeminitial" } },
  1799. { { "yehinitial", "meemfinal" }, { "yehwithmeemisolated" } },
  1800. { { "yehinitial", "meemmedial" }, { "yehwithmeeminitial" } },
  1801. { { "yehinitial", "alefmaksurafinal" }, { "yehwithalefmaksuraisolated" } },
  1802. { { "yehinitial", "jeemmedial" }, { "yehwithjeeminitial" } },
  1803. { { "yehinitial", "hahmedial" }, { "yehwithhahinitial" } },
  1804. { { "yehinitial", "khahmedial" }, { "yehwithkhahinitial" } },
  1805. { { "yehmedial", "alefmaksurafinal" }, { "yehwithalefmaksurafinal" } },
  1806. { { "yehmedial", "rehfinal" }, { "yehwithrehfinal" } },
  1807. { { "yehmedial", "noonfinal" }, { "yehwithnoonfinal" } },
  1808. }
  1809. },
  1810. { "f1", "lu7", "arab", "dflt", "liga",
  1811. new String[][][] {
  1812. { { "laminitial", "meemmedial", "jeemmedial" }, { "lamwithmeemwithjeeminitial" } },
  1813. { { "laminitial", "meemmedial", "hahmedial" }, { "lamwithmeemwithhahinitial" } },
  1814. { { "laminitial", "meemmedial" }, { "lamwithmeeminitial" } },
  1815. }
  1816. },
  1817. { "f1", "lu8", "arab", "dflt", "liga",
  1818. new String[][][] {
  1819. { { "laminitial", "jeemfinal" }, { "lamwithjeemisolated" } },
  1820. { { "laminitial", "hahfinal" }, { "lamwithhahisolated" } },
  1821. { { "laminitial", "khahfinal" }, { "lamwithkhahisolated" } },
  1822. }
  1823. },
  1824. { "f1", "lu9", "arab", "dflt", "rlig",
  1825. new String[][][] {
  1826. { { "laminitial", "alefwithmaddaabovefinal" }, { "lamwithalefmaddaaboveisolatedd" } },
  1827. { { "laminitial", "alefwithhamzaabovefinal" }, { "lamwithalefhamzaaboveisolatedd" } },
  1828. { { "laminitial", "alefwithhamzabelowfinal" }, { "lamwithalefhamzabelowisolated" } },
  1829. { { "laminitial", "aleffinal" }, { "lamwithalefisolated" } },
  1830. { { "lammedial", "alefwithmaddaabovefinal" }, { "lamwithalefmaddaabovefinal" } },
  1831. { { "lammedial", "alefwithhamzaabovefinal" }, { "lamwithalefhamzaabovefinal" } },
  1832. { { "lammedial", "alefwithhamzabelowfinal" }, { "lamwithalefhamzabelowfinal" } },
  1833. { { "lammedial", "aleffinal" }, { "lamwithaleffinal" } },
  1834. }
  1835. },
  1836. { "f1", "lu10", "arab", "dflt", "liga",
  1837. new String[][][] {
  1838. { { "laminitial", "lammedial", "hehfinal" }, { "allahisolated" } },
  1839. { { "reh", "yehinitial", "aleffinal", "lam" }, { "rayaleflam" } },
  1840. }
  1841. },
  1842. // arab-003.ttx
  1843. { "f2", "lu5", "arab", "dflt", "rlig",
  1844. new String[][][] {
  1845. { { "uni064B", "uni0651" }, { "uni0651064B" } },
  1846. { { "uni064C", "uni0651" }, { "uni0651064C" } },
  1847. { { "uni064E", "uni0651" }, { "uni0651064E" } },
  1848. { { "uni064F", "uni0651" }, { "uni0651064F" } },
  1849. { { "uni0651", "uni064B" }, { "uni0651064B" } },
  1850. { { "uni0651", "uni064C" }, { "uni0651064C" } },
  1851. { { "uni0651", "uni064E" }, { "uni0651064E" } },
  1852. { { "uni0651", "uni064F" }, { "uni0651064F" } },
  1853. { { "uni0651", "uni0670" }, { "absShaddaAlef" } },
  1854. { { "uni0670", "uni0651" }, { "absShaddaAlef" } },
  1855. }
  1856. },
  1857. { "f2", "lu6", "arab", "dflt", "rlig",
  1858. new String[][][] {
  1859. { { "uni064D", "uni0651" }, { "uni0651064D" } },
  1860. { { "uni0650", "uni0651" }, { "uni06510650" } },
  1861. { { "uni0651", "uni0650" }, { "uni06510650" } },
  1862. { { "uni0651", "uni064D" }, { "uni0651064D" } },
  1863. }
  1864. },
  1865. { "f2", "lu7", "arab", "dflt", "rlig",
  1866. new String[][][] {
  1867. { { "uni0647", "uni0654" }, { "uni06C0" } },
  1868. { { "uni0647.fina", "uni0654" }, { "uni06C0.fina" } },
  1869. { { "uni0647.init", "uni0654" }, { "uni06C0.init" } },
  1870. { { "uni0647.medi", "uni0654" }, { "uni06C0.medi" } },
  1871. { { "uni0648", "uni0654" }, { "uni0624" } },
  1872. { { "uni0648.fina", "uni0654" }, { "uni0624.fina" } },
  1873. { { "uni064A", "uni0654" }, { "uni0626" } },
  1874. { { "uni064A.fina", "uni0654" }, { "uni0626.fina" } },
  1875. { { "uni064A.init", "uni0654" }, { "uni0626.init" } },
  1876. { { "uni064A.medi", "uni0654" }, { "uni0626.medi" } },
  1877. { { "uni06C1", "uni0654" }, { "uni06C2" } },
  1878. { { "uni06C1.fina", "uni0654" }, { "uni06C2.fina" } },
  1879. { { "uni06C1.init", "uni0654" }, { "uni06C2.init" } },
  1880. { { "uni06C1.medi", "uni0654" }, { "uni06C2.medi" } },
  1881. }
  1882. },
  1883. // arab-004.ttx
  1884. { "f3", "lu5", "arab", "dflt", "rlig",
  1885. new String[][][] {
  1886. { { "uni064B", "uni0651" }, { "uni0651064B" } },
  1887. { { "uni064C", "uni0651" }, { "uni0651064C" } },
  1888. { { "uni064E", "uni0651" }, { "uni0651064E" } },
  1889. { { "uni064F", "uni0651" }, { "uni0651064F" } },
  1890. { { "uni0651", "uni064B" }, { "uni0651064B" } },
  1891. { { "uni0651", "uni064C" }, { "uni0651064C" } },
  1892. { { "uni0651", "uni064E" }, { "uni0651064E" } },
  1893. { { "uni0651", "uni064F" }, { "uni0651064F" } },
  1894. { { "uni0651", "uni0670" }, { "absShaddaAlef" } },
  1895. { { "uni0670", "uni0651" }, { "absShaddaAlef" } },
  1896. }
  1897. },
  1898. { "f3", "lu6", "arab", "dflt", "rlig",
  1899. new String[][][] {
  1900. { { "uni064D", "uni0651" }, { "uni0651064D" } },
  1901. { { "uni0650", "uni0651" }, { "uni06510650" } },
  1902. { { "uni0651", "uni0650" }, { "uni06510650" } },
  1903. { { "uni0651", "uni064D" }, { "uni0651064D" } },
  1904. }
  1905. },
  1906. { "f3", "lu7", "arab", "dflt", "rlig",
  1907. new String[][][] {
  1908. { { "uni0647", "uni0654" }, { "uni06C0" } },
  1909. { { "uni0647.fina", "uni0654" }, { "uni06C0.fina" } },
  1910. { { "uni0647.init", "uni0654" }, { "uni06C0.init" } },
  1911. { { "uni0647.medi", "uni0654" }, { "uni06C0.medi" } },
  1912. { { "uni0648", "uni0654" }, { "uni0624" } },
  1913. { { "uni0648.fina", "uni0654" }, { "uni0624.fina" } },
  1914. { { "uni064A", "uni0654" }, { "uni0626" } },
  1915. { { "uni064A.fina", "uni0654" }, { "uni0626.fina" } },
  1916. { { "uni064A.init", "uni0654" }, { "uni0626.init" } },
  1917. { { "uni064A.medi", "uni0654" }, { "uni0626.medi" } },
  1918. { { "uni06C1", "uni0654" }, { "uni06C2" } },
  1919. { { "uni06C1.fina", "uni0654" }, { "uni06C2.fina" } },
  1920. { { "uni06C1.init", "uni0654" }, { "uni06C2.init" } },
  1921. { { "uni06C1.medi", "uni0654" }, { "uni06C2.medi" } },
  1922. }
  1923. },
  1924. { "f3", "lu8", "arab", "dflt", "rlig",
  1925. new String[][][] {
  1926. { { "uni064E", "uni0654" }, { "uni0654064E" } },
  1927. { { "uni064F", "uni0654" }, { "uni0654064F" } },
  1928. { { "uni0654", "uni064E" }, { "uni0654064E" } },
  1929. { { "uni0654", "uni064F" }, { "uni0654064F" } },
  1930. }
  1931. },
  1932. };
  1933. private static Object[][] ltContextual = {
  1934. { GlyphSubstitutionTable.GSUB_LOOKUP_TYPE_CONTEXTUAL },
  1935. // arab-001.ttx - none used
  1936. // arab-002.ttx - none used
  1937. // arab-003.ttx - none used
  1938. // arab-004.ttx - none used
  1939. };
  1940. private static Object[][] ltChainedContextual = {
  1941. { GlyphSubstitutionTable.GSUB_LOOKUP_TYPE_CHAINED_CONTEXTUAL },
  1942. // arab-001.ttx
  1943. { "f0", "lu1", "arab", "dflt", "ccmp",
  1944. new String[][][] {
  1945. { { "wawwithhamzaabove", "alefwithhamzabelow" }, { "wawwithhamzaabove", "arabicalef", "uni0655" } },
  1946. { { "reh", "alefwithhamzabelow" }, { "reh", "arabicalef", "uni0655" } },
  1947. { { "zain", "alefwithhamzabelow" }, { "zain", "arabicalef", "uni0655" } },
  1948. { { "waw", "alefwithhamzabelow" }, { "waw", "arabicalef", "uni0655" } },
  1949. { { "jeh", "alefwithhamzabelow" }, { "jeh", "arabicalef", "uni0655" } },
  1950. }
  1951. },
  1952. { "f0", "lu3", "arab", "dflt", "isol",
  1953. new String[][][] {
  1954. { { "hamza", "heh" }, { "hamza", "hehisolated" } },
  1955. { { "alefwithmaddaabove", "heh" }, { "alefwithmaddaabove", "hehisolated" } },
  1956. { { "alefwithhamzaabove", "heh" }, { "alefwithhamzaabove", "hehisolated" } },
  1957. { { "wawwithhamzaabove", "heh" }, { "wawwithhamzaabove", "hehisolated" } },
  1958. { { "alefwithhamzabelow", "heh" }, { "alefwithhamzabelow", "hehisolated" } },
  1959. { { "arabicalef", "heh" }, { "arabicalef", "hehisolated" } },
  1960. { { "tehmarbuta", "heh" }, { "tehmarbuta", "hehisolated" } },
  1961. { { "dal", "heh" }, { "dal", "hehisolated" } },
  1962. { { "thal", "heh" }, { "thal", "hehisolated" } },
  1963. { { "reh", "heh" }, { "reh", "hehisolated" } },
  1964. { { "zain", "heh" }, { "zain", "hehisolated" } },
  1965. { { "waw", "heh" }, { "waw", "hehisolated" } },
  1966. { { "alefwasla", "heh" }, { "alefwasla", "hehisolated" } },
  1967. { { "jeh", "heh" }, { "jeh", "hehisolated" } },
  1968. { { "arabicae", "heh" }, { "arabicae", "hehisolated" } },
  1969. { { "alefwaslafinal", "heh" }, { "alefwaslafinal", "hehisolated" } },
  1970. { { "alefwithmaddaabovefinal", "heh" }, { "alefwithmaddaabovefinal", "hehisolated" } },
  1971. { { "alefwithhamzaabovefinal", "heh" }, { "alefwithhamzaabovefinal", "hehisolated" } },
  1972. { { "alefwithhamzabelowfinal", "heh" }, { "alefwithhamzabelowfinal", "hehisolated" } },
  1973. { { "aleffinal", "heh" }, { "aleffinal", "hehisolated" } },
  1974. { { "tehmarbutafinal", "heh" }, { "tehmarbutafinal", "hehisolated" } },
  1975. { { "lamwithalefmaddaaboveisolatedd", "heh" }, { "lamwithalefmaddaaboveisolatedd", "hehisolated" } },
  1976. { { "lamwithalefmaddaabovefinal", "heh" }, { "lamwithalefmaddaabovefinal", "hehisolated" } },
  1977. { { "lamwithalefhamzaaboveisolatedd", "heh" }, { "lamwithalefhamzaaboveisolatedd", "hehisolated" } },
  1978. { { "lamwithalefhamzaabovefinal", "heh" }, { "lamwithalefhamzaabovefinal", "hehisolated" } },
  1979. { { "lamwithalefhamzabelowisolated", "heh" }, { "lamwithalefhamzabelowisolated", "hehisolated" } },
  1980. { { "lamwithalefhamzabelowfinal", "heh" }, { "lamwithalefhamzabelowfinal", "hehisolated" } },
  1981. { { "lamwithalefisolated", "heh" }, { "lamwithalefisolated", "hehisolated" } },
  1982. { { "lamwithaleffinal", "heh" }, { "lamwithaleffinal", "hehisolated" } },
  1983. }
  1984. },
  1985. // arab-002.ttx
  1986. { "f1", "lu2", "arab", "dflt", "isol",
  1987. new String[][][] {
  1988. { { "hamza", "heh" }, { "hamza", "hehisolated" } },
  1989. { { "alefwithmaddaabove", "heh" }, { "alefwithmaddaabove", "hehisolated" } },
  1990. { { "alefwithhamzaabove", "heh" }, { "alefwithhamzaabove", "hehisolated" } },
  1991. { { "wawwithhamzaabove", "heh" }, { "wawwithhamzaabove", "hehisolated" } },
  1992. { { "alefwithhamzabelow", "heh" }, { "alefwithhamzabelow", "hehisolated" } },
  1993. { { "arabicalef", "heh" }, { "arabicalef", "hehisolated" } },
  1994. { { "tehmarbuta", "heh" }, { "tehmarbuta", "hehisolated" } },
  1995. { { "dal", "heh" }, { "dal", "hehisolated" } },
  1996. { { "thal", "heh" }, { "thal", "hehisolated" } },
  1997. { { "reh", "heh" }, { "reh", "hehisolated" } },
  1998. { { "zain", "heh" }, { "zain", "hehisolated" } },
  1999. { { "waw", "heh" }, { "waw", "hehisolated" } },
  2000. { { "alefwasla", "heh" }, { "alefwasla", "hehisolated" } },
  2001. { { "jeh", "heh" }, { "jeh", "hehisolated" } },
  2002. { { "arabicae", "heh" }, { "arabicae", "hehisolated" } },
  2003. { { "alefwaslafinal", "heh" }, { "alefwaslafinal", "hehisolated" } },
  2004. { { "alefwithmaddaabovefinal", "heh" }, { "alefwithmaddaabovefinal", "hehisolated" } },
  2005. { { "alefwithhamzaabovefinal", "heh" }, { "alefwithhamzaabovefinal", "hehisolated" } },
  2006. { { "alefwithhamzabelowfinal", "heh" }, { "alefwithhamzabelowfinal", "hehisolated" } },
  2007. { { "aleffinal", "heh" }, { "aleffinal", "hehisolated" } },
  2008. { { "tehmarbutafinal", "heh" }, { "tehmarbutafinal", "hehisolated" } },
  2009. { { "lamwithalefmaddaaboveisolatedd", "heh" }, { "lamwithalefmaddaaboveisolatedd", "hehisolated" } },
  2010. { { "lamwithalefmaddaabovefinal", "heh" }, { "lamwithalefmaddaabovefinal", "hehisolated" } },
  2011. { { "lamwithalefhamzaaboveisolatedd", "heh" }, { "lamwithalefhamzaaboveisolatedd", "hehisolated" } },
  2012. { { "lamwithalefhamzaabovefinal", "heh" }, { "lamwithalefhamzaabovefinal", "hehisolated" } },
  2013. { { "lamwithalefhamzabelowisolated", "heh" }, { "lamwithalefhamzabelowisolated", "hehisolated" } },
  2014. { { "lamwithalefhamzabelowfinal", "heh" }, { "lamwithalefhamzabelowfinal", "hehisolated" } },
  2015. { { "lamwithalefisolated", "heh" }, { "lamwithalefisolated", "hehisolated" } },
  2016. { { "lamwithaleffinal", "heh" }, { "lamwithaleffinal", "hehisolated" } },
  2017. }
  2018. },
  2019. { "f1", "lu11", "arab", "dflt", "calt",
  2020. new String[][][] {
  2021. { { "pehinitial", "fatha", "pehmedial", "fatha" }, { "pehinitial", "tatweel", "fatha", "pehmedial", "fatha" } },
  2022. { { "yehwithhamzaaboveinitial", "damma", "vehmedial", "damma" }, { "yehwithhamzaaboveinitial", "tatweel", "damma", "vehmedial", "damma" } },
  2023. { { "behinitial", "shadda", "jehfinal", "shadda" }, { "behinitial", "tatweel", "shadda", "jehfinal", "shadda" } },
  2024. { { "tehinitial", "sukun", "behmedial", "sukun" }, { "tehinitial", "tatweel", "sukun", "behmedial", "sukun" } },
  2025. { { "thehinitial", "smallhighmadda", "tehmedial", "smallhighmadda" }, { "thehinitial", "tatweel", "smallhighmadda", "tehmedial", "smallhighmadda" } },
  2026. { { "fehinitial", "fathaonhamza", "ainmedial", "fathaonhamza" }, { "fehinitial", "tatweel", "fathaonhamza", "ainmedial", "fathaonhamza" } },
  2027. { { "qafinitial", "dammaonhamza", "qafmedial", "dammaonhamza" }, { "qafinitial", "tatweel", "dammaonhamza", "qafmedial", "dammaonhamza" } },
  2028. { { "nooninitial", "superscriptalef", "wawfinal", "superscriptalef" }, { "nooninitial", "tatweel", "superscriptalef", "wawfinal", "superscriptalef" } },
  2029. { { "yehinitial", "dammatanonhamza", "rehfinal", "dammatanonhamza" }, { "yehinitial", "tatweel", "dammatanonhamza", "rehfinal", "dammatanonhamza" } },
  2030. { { "uni0649.init", "uni0654", "wawwithhamzaabovefinal", "uni0654" }, { "uni0649.init", "tatweel", "uni0654", "wawwithhamzaabovefinal", "uni0654" } },
  2031. }
  2032. },
  2033. { "f1", "lu12", "arab", "dflt", "calt",
  2034. new String[][][] {
  2035. { { "pehmedial", "fatha", "pehmedial", "fatha" }, { "pehmedial", "tatweel", "fatha", "pehmedial", "fatha" } },
  2036. { { "yehwithhamzaabovemedial", "damma", "vehmedial", "damma" }, { "yehwithhamzaabovemedial", "tatweel", "damma", "vehmedial", "damma" } },
  2037. { { "behmedial", "shadda", "wawwithhamzaabovefinal", "shadda" }, { "behmedial", "tatweel", "shadda", "wawwithhamzaabovefinal", "shadda" } },
  2038. { { "tehmedial", "sukun", "rehfinal", "sukun" }, { "tehmedial", "tatweel", "sukun", "rehfinal", "sukun" } },
  2039. { { "thehmedial", "smallhighmadda", "zainfinal", "smallhighmadda" }, { "thehmedial", "tatweel", "smallhighmadda", "zainfinal", "smallhighmadda" } },
  2040. { { "noonmedial", "superscriptalef", "ainmedial", "superscriptalef" }, { "noonmedial", "tatweel", "superscriptalef", "ainmedial", "superscriptalef" } },
  2041. { { "yehmedial", "dammatanonhamza", "wawfinal", "dammatanonhamza" }, { "yehmedial", "tatweel", "dammatanonhamza", "wawfinal", "dammatanonhamza" } },
  2042. { { "uni0649.medi", "uni0654", "yehmedial", "uni0654" }, { "uni0649.medi", "tatweel", "uni0654", "yehmedial", "uni0654" } },
  2043. }
  2044. },
  2045. // arab-003.ttx
  2046. { "f2", "lu4", "arab", "dflt", "rlig",
  2047. new String[][][] {
  2048. { { "uni0644.medi", "uni0622.fina" }, { "uni0644.medi.preAlef", "uni0622.fina.postLamMed" } },
  2049. { { "uni06B5.medi", "uni0622.fina" }, { "uni06B5.medi.preAlef", "uni0622.fina.postLamMed" } },
  2050. { { "uni06B6.medi", "uni0622.fina" }, { "uni06B6.medi.preAlef", "uni0622.fina.postLamMed" } },
  2051. { { "uni06B7.medi", "uni0622.fina" }, { "uni06B7.medi.preAlef", "uni0622.fina.postLamMed" } },
  2052. { { "uni06B8.medi", "uni0622.fina" }, { "uni06B8.medi.preAlef", "uni0622.fina.postLamMed" } },
  2053. { { "absLamRetroMed", "uni0622.fina" }, { "absLamRetroMed.preAlef", "uni0622.fina.postLamMed" } },
  2054. { { "uni076A.medi", "uni0622.fina" }, { "uni076A.medi.preAlef", "uni0622.fina.postLamMed" } },
  2055. { { "uni0644.init", "uni0622.fina" }, { "uni0644.init.preAlef", "uni0622.fina.postLamIni" } },
  2056. { { "uni06B5.init", "uni0622.fina" }, { "uni06B5.init.preAlef", "uni0622.fina.postLamIni" } },
  2057. { { "uni06B6.init", "uni0622.fina" }, { "uni06B6.init.preAlef", "uni0622.fina.postLamIni" } },
  2058. { { "uni06B7.init", "uni0622.fina" }, { "uni06B7.init.preAlef", "uni0622.fina.postLamIni" } },
  2059. { { "uni06B8.init", "uni0622.fina" }, { "uni06B8.init.preAlef", "uni0622.fina.postLamIni" } },
  2060. { { "absLamRetroIni", "uni0622.fina" }, { "absLamRetroIni.preAlef", "uni0622.fina.postLamIni" } },
  2061. { { "uni076A.init", "uni0622.fina" }, { "uni076A.init.preAlef", "uni0622.fina.postLamIni" } },
  2062. }
  2063. },
  2064. { "f2", "lu8", "arab", "dflt", "calt",
  2065. new String[][][] {
  2066. { { "uni064A", "uni0670" }, { "uni064A", "uni0670.large" } },
  2067. }
  2068. },
  2069. { "f2", "lu13", "arab", "dflt", "calt",
  2070. new String[][][] {
  2071. { { "uni06DD", "one" }, { "uni06DD", "oneMedium" } },
  2072. { { "uni06DD", "one", "two" }, { "uni06DD.2", "oneMedium", "twoMedium" } },
  2073. { { "uni06DD", "one", "two", "three" }, { "uni06DD.3", "oneSmall", "twoSmall", "threeSmall" } },
  2074. }
  2075. },
  2076. // arab-004.ttx
  2077. { "f3", "lu4", "arab", "dflt", "rlig",
  2078. new String[][][] {
  2079. { { "uni0644.medi", "uni0622.fina" }, { "uni0644.medi.preAlef", "uni0622.fina.postLamMed" } },
  2080. { { "uni06B5.medi", "uni0622.fina" }, { "uni06B5.medi.preAlef", "uni0622.fina.postLamMed" } },
  2081. { { "uni06B6.medi", "uni0622.fina" }, { "uni06B6.medi.preAlef", "uni0622.fina.postLamMed" } },
  2082. { { "uni06B7.medi", "uni0622.fina" }, { "uni06B7.medi.preAlef", "uni0622.fina.postLamMed" } },
  2083. { { "uni06B8.medi", "uni0622.fina" }, { "uni06B8.medi.preAlef", "uni0622.fina.postLamMed" } },
  2084. { { "absLamRetroMed", "uni0622.fina" }, { "absLamRetroMed.preAlef", "uni0622.fina.postLamMed" } },
  2085. { { "uni076A.medi", "uni0622.fina" }, { "uni076A.medi.preAlef", "uni0622.fina.postLamMed" } },
  2086. { { "uni0644.init", "uni0622.fina" }, { "uni0644.init.preAlef", "uni0622.fina.postLamIni" } },
  2087. { { "uni06B5.init", "uni0622.fina" }, { "uni06B5.init.preAlef", "uni0622.fina.postLamIni" } },
  2088. { { "uni06B6.init", "uni0622.fina" }, { "uni06B6.init.preAlef", "uni0622.fina.postLamIni" } },
  2089. { { "uni06B7.init", "uni0622.fina" }, { "uni06B7.init.preAlef", "uni0622.fina.postLamIni" } },
  2090. { { "uni06B8.init", "uni0622.fina" }, { "uni06B8.init.preAlef", "uni0622.fina.postLamIni" } },
  2091. { { "absLamRetroIni", "uni0622.fina" }, { "absLamRetroIni.preAlef", "uni0622.fina.postLamIni" } },
  2092. { { "uni076A.init", "uni0622.fina" }, { "uni076A.init.preAlef", "uni0622.fina.postLamIni" } },
  2093. }
  2094. },
  2095. { "f3", "lu9", "arab", "dflt", "calt",
  2096. new String[][][] {
  2097. { { "uni0601", "uni0661" }, { "uni0601", "uni0661.Medium" } },
  2098. { { "uni0601", "uni0661", "uni0662" }, { "uni0601.2", "uni0661.Medium", "uni0662.Medium" } },
  2099. { { "uni0601", "uni0661", "uni0662", "uni0663" }, { "uni0601.3", "uni0661.Medium", "uni0662.Medium", "uni0663.Medium", } },
  2100. { { "uni0601", "uni0661", "uni0662", "uni0663", "uni0664" }, { "uni0601.4", "uni0661.Medium", "uni0662.Medium", "uni0663.Medium", "uni0664.Medium" } },
  2101. }
  2102. },
  2103. { "f3", "lu10", "arab", "dflt", "calt",
  2104. new String[][][] {
  2105. { { "uni064A", "uni0670" }, { "uni064A", "uni0670.large" } },
  2106. }
  2107. },
  2108. };
  2109. @Test
  2110. public void testGSUBSingle() throws Exception {
  2111. performSubstitutions(ltSingle);
  2112. }
  2113. @Test
  2114. public void testGSUBMultiple() throws Exception {
  2115. performSubstitutions(ltMultiple);
  2116. }
  2117. @Test
  2118. public void testGSUBAlternate() throws Exception {
  2119. performSubstitutions(ltAlternate);
  2120. }
  2121. @Test
  2122. public void testGSUBLigature() throws Exception {
  2123. performSubstitutions(ltLigature);
  2124. }
  2125. @Test
  2126. public void testGSUBContextual() throws Exception {
  2127. performSubstitutions(ltContextual);
  2128. }
  2129. @Test
  2130. public void testGSUBChainedContextual() throws Exception {
  2131. performSubstitutions(ltChainedContextual);
  2132. }
  2133. /**
  2134. * Perform substitutions on all test data in test specification TS.
  2135. * @param ts test specification
  2136. */
  2137. private void performSubstitutions(Object[][] ts) {
  2138. assert ts.length > 0;
  2139. Object[] tp = ts[0];
  2140. for (int i = 1; i < ts.length; i++) {
  2141. performSubstitutions(tp, ts[i]);
  2142. }
  2143. }
  2144. /**
  2145. * Perform substitutions on all test data TD using test parameters TP.
  2146. * @param tp test parameters
  2147. * @param td test data
  2148. */
  2149. private void performSubstitutions(Object[] tp, Object[] td) {
  2150. assert tp.length > 0;
  2151. if (td.length > 5) {
  2152. String fid = (String) td[0];
  2153. String lid = (String) td[1];
  2154. String script = (String) td[2];
  2155. String language = (String) td[3];
  2156. String feature = (String) td[4];
  2157. TTXFile tf = findTTX(fid);
  2158. assertTrue(tf != null);
  2159. GlyphSubstitutionTable gsub = tf.getGSUB();
  2160. assertTrue(gsub != null);
  2161. GlyphSubstitutionSubtable[] sta = findGSUBSubtables(gsub, script, language, feature, lid);
  2162. assertTrue(sta != null);
  2163. assertTrue(sta.length > 0);
  2164. ScriptContextTester sct = findScriptContextTester(script, language, feature);
  2165. String[][][] tia = (String[][][]) td[5]; // test instance array
  2166. for (String[][] ti : tia) { // test instance
  2167. if (ti != null) {
  2168. if (ti.length > 1) { // must have at least input and output glyph id arrays
  2169. String[] igia = ti[0]; // input glyph id array
  2170. String[] ogia = ti[1]; // output glyph id array
  2171. GlyphSequence igs = tf.getGlyphSequence(igia);
  2172. GlyphSequence ogs = tf.getGlyphSequence(ogia);
  2173. GlyphSequence tgs = GlyphSubstitutionSubtable.substitute(igs, script, language, feature, sta, sct);
  2174. assertSameGlyphs(ogs, tgs);
  2175. }
  2176. }
  2177. }
  2178. }
  2179. }
  2180. private String findTTXPath(String fid) {
  2181. for (String[] fs : ttxFonts) {
  2182. if ((fs != null) && (fs.length > 1)) {
  2183. if (fs[0].equals(fid)) {
  2184. return ttxFilesRoot + File.separator + fs[1];
  2185. }
  2186. }
  2187. }
  2188. return null;
  2189. }
  2190. private TTXFile findTTX(String fid) {
  2191. String pn = findTTXPath(fid);
  2192. assertTrue(pn != null);
  2193. try {
  2194. TTXFile tf = TTXFile.getFromCache(pn);
  2195. return tf;
  2196. } catch (Exception e) {
  2197. fail(e.getMessage());
  2198. return null;
  2199. }
  2200. }
  2201. private GlyphSubstitutionSubtable[] findGSUBSubtables(GlyphSubstitutionTable gsub, String script, String language, String feature, String lid) {
  2202. LookupTable lt = gsub.getLookupTable(lid);
  2203. if (lt != null) {
  2204. return (GlyphSubstitutionSubtable[]) lt.getSubtables();
  2205. } else {
  2206. return null;
  2207. }
  2208. }
  2209. private ScriptContextTester findScriptContextTester(String script, String language, String feature) {
  2210. return this;
  2211. }
  2212. public GlyphContextTester getTester(String feature) {
  2213. return this;
  2214. }
  2215. public boolean test(String script, String language, String feature, GlyphSequence gs, int index, int flags) {
  2216. return true;
  2217. }
  2218. private void assertSameGlyphs(GlyphSequence gs1, GlyphSequence gs2) {
  2219. assertNotNull(gs1);
  2220. assertNotNull(gs2);
  2221. IntBuffer gb1 = gs1.getGlyphs();
  2222. IntBuffer gb2 = gs2.getGlyphs();
  2223. assertEquals("unequal glyph count", gb1.limit(), gb2.limit());
  2224. for (int i = 0; i < gb1.limit(); i++) {
  2225. int g1 = gb1.get(i);
  2226. int g2 = gb2.get(i);
  2227. assertEquals("unequal glyph code", g1, g2);
  2228. }
  2229. }
  2230. }