%PDF- %PDF-
| Direktori : /proc/self/root/usr/share/texlive/texmf-dist/tex/luatex/luaotfload/ |
| Current File : //proc/self/root/usr/share/texlive/texmf-dist/tex/luatex/luaotfload/otfl-font-ott.lua |
if not modules then modules = { } end modules ['font-otf'] = {
version = 1.001,
comment = "companion to font-otf.lua (tables)",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
local type, next, tonumber, tostring = type, next, tonumber, tostring
local gsub, lower = string.gsub, string.lower
fonts = fonts or { }
fonts.otf = fonts.otf or { }
local otf = fonts.otf
otf.tables = otf.tables or { }
otf.meanings = otf.meanings or { }
otf.tables.scripts = {
['dflt'] = 'Default',
['arab'] = 'Arabic',
['armn'] = 'Armenian',
['bali'] = 'Balinese',
['beng'] = 'Bengali',
['bopo'] = 'Bopomofo',
['brai'] = 'Braille',
['bugi'] = 'Buginese',
['buhd'] = 'Buhid',
['byzm'] = 'Byzantine Music',
['cans'] = 'Canadian Syllabics',
['cher'] = 'Cherokee',
['copt'] = 'Coptic',
['cprt'] = 'Cypriot Syllabary',
['cyrl'] = 'Cyrillic',
['deva'] = 'Devanagari',
['dsrt'] = 'Deseret',
['ethi'] = 'Ethiopic',
['geor'] = 'Georgian',
['glag'] = 'Glagolitic',
['goth'] = 'Gothic',
['grek'] = 'Greek',
['gujr'] = 'Gujarati',
['guru'] = 'Gurmukhi',
['hang'] = 'Hangul',
['hani'] = 'CJK Ideographic',
['hano'] = 'Hanunoo',
['hebr'] = 'Hebrew',
['ital'] = 'Old Italic',
['jamo'] = 'Hangul Jamo',
['java'] = 'Javanese',
['kana'] = 'Hiragana and Katakana',
['khar'] = 'Kharosthi',
['khmr'] = 'Khmer',
['knda'] = 'Kannada',
['lao' ] = 'Lao',
['latn'] = 'Latin',
['limb'] = 'Limbu',
['linb'] = 'Linear B',
['math'] = 'Mathematical Alphanumeric Symbols',
['mlym'] = 'Malayalam',
['mong'] = 'Mongolian',
['musc'] = 'Musical Symbols',
['mymr'] = 'Myanmar',
['nko' ] = "N'ko",
['ogam'] = 'Ogham',
['orya'] = 'Oriya',
['osma'] = 'Osmanya',
['phag'] = 'Phags-pa',
['phnx'] = 'Phoenician',
['runr'] = 'Runic',
['shaw'] = 'Shavian',
['sinh'] = 'Sinhala',
['sylo'] = 'Syloti Nagri',
['syrc'] = 'Syriac',
['tagb'] = 'Tagbanwa',
['tale'] = 'Tai Le',
['talu'] = 'Tai Lu',
['taml'] = 'Tamil',
['telu'] = 'Telugu',
['tfng'] = 'Tifinagh',
['tglg'] = 'Tagalog',
['thaa'] = 'Thaana',
['thai'] = 'Thai',
['tibt'] = 'Tibetan',
['ugar'] = 'Ugaritic Cuneiform',
['xpeo'] = 'Old Persian Cuneiform',
['xsux'] = 'Sumero-Akkadian Cuneiform',
['yi' ] = 'Yi',
}
otf.tables.languages = {
['dflt'] = 'Default',
['aba'] = 'Abaza',
['abk'] = 'Abkhazian',
['ady'] = 'Adyghe',
['afk'] = 'Afrikaans',
['afr'] = 'Afar',
['agw'] = 'Agaw',
['als'] = 'Alsatian',
['alt'] = 'Altai',
['amh'] = 'Amharic',
['ara'] = 'Arabic',
['ari'] = 'Aari',
['ark'] = 'Arakanese',
['asm'] = 'Assamese',
['ath'] = 'Athapaskan',
['avr'] = 'Avar',
['awa'] = 'Awadhi',
['aym'] = 'Aymara',
['aze'] = 'Azeri',
['bad'] = 'Badaga',
['bag'] = 'Baghelkhandi',
['bal'] = 'Balkar',
['bau'] = 'Baule',
['bbr'] = 'Berber',
['bch'] = 'Bench',
['bcr'] = 'Bible Cree',
['bel'] = 'Belarussian',
['bem'] = 'Bemba',
['ben'] = 'Bengali',
['bgr'] = 'Bulgarian',
['bhi'] = 'Bhili',
['bho'] = 'Bhojpuri',
['bik'] = 'Bikol',
['bil'] = 'Bilen',
['bkf'] = 'Blackfoot',
['bli'] = 'Balochi',
['bln'] = 'Balante',
['blt'] = 'Balti',
['bmb'] = 'Bambara',
['bml'] = 'Bamileke',
['bos'] = 'Bosnian',
['bre'] = 'Breton',
['brh'] = 'Brahui',
['bri'] = 'Braj Bhasha',
['brm'] = 'Burmese',
['bsh'] = 'Bashkir',
['bti'] = 'Beti',
['cat'] = 'Catalan',
['ceb'] = 'Cebuano',
['che'] = 'Chechen',
['chg'] = 'Chaha Gurage',
['chh'] = 'Chattisgarhi',
['chi'] = 'Chichewa',
['chk'] = 'Chukchi',
['chp'] = 'Chipewyan',
['chr'] = 'Cherokee',
['chu'] = 'Chuvash',
['cmr'] = 'Comorian',
['cop'] = 'Coptic',
['cos'] = 'Corsican',
['cre'] = 'Cree',
['crr'] = 'Carrier',
['crt'] = 'Crimean Tatar',
['csl'] = 'Church Slavonic',
['csy'] = 'Czech',
['dan'] = 'Danish',
['dar'] = 'Dargwa',
['dcr'] = 'Woods Cree',
['deu'] = 'German',
['dgr'] = 'Dogri',
['div'] = 'Divehi',
['djr'] = 'Djerma',
['dng'] = 'Dangme',
['dnk'] = 'Dinka',
['dri'] = 'Dari',
['dun'] = 'Dungan',
['dzn'] = 'Dzongkha',
['ebi'] = 'Ebira',
['ecr'] = 'Eastern Cree',
['edo'] = 'Edo',
['efi'] = 'Efik',
['ell'] = 'Greek',
['eng'] = 'English',
['erz'] = 'Erzya',
['esp'] = 'Spanish',
['eti'] = 'Estonian',
['euq'] = 'Basque',
['evk'] = 'Evenki',
['evn'] = 'Even',
['ewe'] = 'Ewe',
['fan'] = 'French Antillean',
['far'] = 'Farsi',
['fin'] = 'Finnish',
['fji'] = 'Fijian',
['fle'] = 'Flemish',
['fne'] = 'Forest Nenets',
['fon'] = 'Fon',
['fos'] = 'Faroese',
['fra'] = 'French',
['fri'] = 'Frisian',
['frl'] = 'Friulian',
['fta'] = 'Futa',
['ful'] = 'Fulani',
['gad'] = 'Ga',
['gae'] = 'Gaelic',
['gag'] = 'Gagauz',
['gal'] = 'Galician',
['gar'] = 'Garshuni',
['gaw'] = 'Garhwali',
['gez'] = "Ge'ez",
['gil'] = 'Gilyak',
['gmz'] = 'Gumuz',
['gon'] = 'Gondi',
['grn'] = 'Greenlandic',
['gro'] = 'Garo',
['gua'] = 'Guarani',
['guj'] = 'Gujarati',
['hai'] = 'Haitian',
['hal'] = 'Halam',
['har'] = 'Harauti',
['hau'] = 'Hausa',
['haw'] = 'Hawaiin',
['hbn'] = 'Hammer-Banna',
['hil'] = 'Hiligaynon',
['hin'] = 'Hindi',
['hma'] = 'High Mari',
['hnd'] = 'Hindko',
['ho'] = 'Ho',
['hri'] = 'Harari',
['hrv'] = 'Croatian',
['hun'] = 'Hungarian',
['hye'] = 'Armenian',
['ibo'] = 'Igbo',
['ijo'] = 'Ijo',
['ilo'] = 'Ilokano',
['ind'] = 'Indonesian',
['ing'] = 'Ingush',
['inu'] = 'Inuktitut',
['iri'] = 'Irish',
['irt'] = 'Irish Traditional',
['isl'] = 'Icelandic',
['ism'] = 'Inari Sami',
['ita'] = 'Italian',
['iwr'] = 'Hebrew',
['jan'] = 'Japanese',
['jav'] = 'Javanese',
['jii'] = 'Yiddish',
['jud'] = 'Judezmo',
['jul'] = 'Jula',
['kab'] = 'Kabardian',
['kac'] = 'Kachchi',
['kal'] = 'Kalenjin',
['kan'] = 'Kannada',
['kar'] = 'Karachay',
['kat'] = 'Georgian',
['kaz'] = 'Kazakh',
['keb'] = 'Kebena',
['kge'] = 'Khutsuri Georgian',
['kha'] = 'Khakass',
['khk'] = 'Khanty-Kazim',
['khm'] = 'Khmer',
['khs'] = 'Khanty-Shurishkar',
['khv'] = 'Khanty-Vakhi',
['khw'] = 'Khowar',
['kik'] = 'Kikuyu',
['kir'] = 'Kirghiz',
['kis'] = 'Kisii',
['kkn'] = 'Kokni',
['klm'] = 'Kalmyk',
['kmb'] = 'Kamba',
['kmn'] = 'Kumaoni',
['kmo'] = 'Komo',
['kms'] = 'Komso',
['knr'] = 'Kanuri',
['kod'] = 'Kodagu',
['koh'] = 'Korean Old Hangul',
['kok'] = 'Konkani',
['kon'] = 'Kikongo',
['kop'] = 'Komi-Permyak',
['kor'] = 'Korean',
['koz'] = 'Komi-Zyrian',
['kpl'] = 'Kpelle',
['kri'] = 'Krio',
['krk'] = 'Karakalpak',
['krl'] = 'Karelian',
['krm'] = 'Karaim',
['krn'] = 'Karen',
['krt'] = 'Koorete',
['ksh'] = 'Kashmiri',
['ksi'] = 'Khasi',
['ksm'] = 'Kildin Sami',
['kui'] = 'Kui',
['kul'] = 'Kulvi',
['kum'] = 'Kumyk',
['kur'] = 'Kurdish',
['kuu'] = 'Kurukh',
['kuy'] = 'Kuy',
['kyk'] = 'Koryak',
['lad'] = 'Ladin',
['lah'] = 'Lahuli',
['lak'] = 'Lak',
['lam'] = 'Lambani',
['lao'] = 'Lao',
['lat'] = 'Latin',
['laz'] = 'Laz',
['lcr'] = 'L-Cree',
['ldk'] = 'Ladakhi',
['lez'] = 'Lezgi',
['lin'] = 'Lingala',
['lma'] = 'Low Mari',
['lmb'] = 'Limbu',
['lmw'] = 'Lomwe',
['lsb'] = 'Lower Sorbian',
['lsm'] = 'Lule Sami',
['lth'] = 'Lithuanian',
['ltz'] = 'Luxembourgish',
['lub'] = 'Luba',
['lug'] = 'Luganda',
['luh'] = 'Luhya',
['luo'] = 'Luo',
['lvi'] = 'Latvian',
['maj'] = 'Majang',
['mak'] = 'Makua',
['mal'] = 'Malayalam Traditional',
['man'] = 'Mansi',
['map'] = 'Mapudungun',
['mar'] = 'Marathi',
['maw'] = 'Marwari',
['mbn'] = 'Mbundu',
['mch'] = 'Manchu',
['mcr'] = 'Moose Cree',
['mde'] = 'Mende',
['men'] = "Me'en",
['miz'] = 'Mizo',
['mkd'] = 'Macedonian',
['mle'] = 'Male',
['mlg'] = 'Malagasy',
['mln'] = 'Malinke',
['mlr'] = 'Malayalam Reformed',
['mly'] = 'Malay',
['mnd'] = 'Mandinka',
['mng'] = 'Mongolian',
['mni'] = 'Manipuri',
['mnk'] = 'Maninka',
['mnx'] = 'Manx Gaelic',
['moh'] = 'Mohawk',
['mok'] = 'Moksha',
['mol'] = 'Moldavian',
['mon'] = 'Mon',
['mor'] = 'Moroccan',
['mri'] = 'Maori',
['mth'] = 'Maithili',
['mts'] = 'Maltese',
['mun'] = 'Mundari',
['nag'] = 'Naga-Assamese',
['nan'] = 'Nanai',
['nas'] = 'Naskapi',
['ncr'] = 'N-Cree',
['ndb'] = 'Ndebele',
['ndg'] = 'Ndonga',
['nep'] = 'Nepali',
['new'] = 'Newari',
['ngr'] = 'Nagari',
['nhc'] = 'Norway House Cree',
['nis'] = 'Nisi',
['niu'] = 'Niuean',
['nkl'] = 'Nkole',
['nko'] = "N'ko",
['nld'] = 'Dutch',
['nog'] = 'Nogai',
['nor'] = 'Norwegian',
['nsm'] = 'Northern Sami',
['nta'] = 'Northern Tai',
['nto'] = 'Esperanto',
['nyn'] = 'Nynorsk',
['oci'] = 'Occitan',
['ocr'] = 'Oji-Cree',
['ojb'] = 'Ojibway',
['ori'] = 'Oriya',
['oro'] = 'Oromo',
['oss'] = 'Ossetian',
['paa'] = 'Palestinian Aramaic',
['pal'] = 'Pali',
['pan'] = 'Punjabi',
['pap'] = 'Palpa',
['pas'] = 'Pashto',
['pgr'] = 'Polytonic Greek',
['pil'] = 'Pilipino',
['plg'] = 'Palaung',
['plk'] = 'Polish',
['pro'] = 'Provencal',
['ptg'] = 'Portuguese',
['qin'] = 'Chin',
['raj'] = 'Rajasthani',
['rbu'] = 'Russian Buriat',
['rcr'] = 'R-Cree',
['ria'] = 'Riang',
['rms'] = 'Rhaeto-Romanic',
['rom'] = 'Romanian',
['roy'] = 'Romany',
['rsy'] = 'Rusyn',
['rua'] = 'Ruanda',
['rus'] = 'Russian',
['sad'] = 'Sadri',
['san'] = 'Sanskrit',
['sat'] = 'Santali',
['say'] = 'Sayisi',
['sek'] = 'Sekota',
['sel'] = 'Selkup',
['sgo'] = 'Sango',
['shn'] = 'Shan',
['sib'] = 'Sibe',
['sid'] = 'Sidamo',
['sig'] = 'Silte Gurage',
['sks'] = 'Skolt Sami',
['sky'] = 'Slovak',
['sla'] = 'Slavey',
['slv'] = 'Slovenian',
['sml'] = 'Somali',
['smo'] = 'Samoan',
['sna'] = 'Sena',
['snd'] = 'Sindhi',
['snh'] = 'Sinhalese',
['snk'] = 'Soninke',
['sog'] = 'Sodo Gurage',
['sot'] = 'Sotho',
['sqi'] = 'Albanian',
['srb'] = 'Serbian',
['srk'] = 'Saraiki',
['srr'] = 'Serer',
['ssl'] = 'South Slavey',
['ssm'] = 'Southern Sami',
['sur'] = 'Suri',
['sva'] = 'Svan',
['sve'] = 'Swedish',
['swa'] = 'Swadaya Aramaic',
['swk'] = 'Swahili',
['swz'] = 'Swazi',
['sxt'] = 'Sutu',
['syr'] = 'Syriac',
['tab'] = 'Tabasaran',
['taj'] = 'Tajiki',
['tam'] = 'Tamil',
['tat'] = 'Tatar',
['tcr'] = 'TH-Cree',
['tel'] = 'Telugu',
['tgn'] = 'Tongan',
['tgr'] = 'Tigre',
['tgy'] = 'Tigrinya',
['tha'] = 'Thai',
['tht'] = 'Tahitian',
['tib'] = 'Tibetan',
['tkm'] = 'Turkmen',
['tmn'] = 'Temne',
['tna'] = 'Tswana',
['tne'] = 'Tundra Nenets',
['tng'] = 'Tonga',
['tod'] = 'Todo',
['trk'] = 'Turkish',
['tsg'] = 'Tsonga',
['tua'] = 'Turoyo Aramaic',
['tul'] = 'Tulu',
['tuv'] = 'Tuvin',
['twi'] = 'Twi',
['udm'] = 'Udmurt',
['ukr'] = 'Ukrainian',
['urd'] = 'Urdu',
['usb'] = 'Upper Sorbian',
['uyg'] = 'Uyghur',
['uzb'] = 'Uzbek',
['ven'] = 'Venda',
['vit'] = 'Vietnamese',
['wa' ] = 'Wa',
['wag'] = 'Wagdi',
['wcr'] = 'West-Cree',
['wel'] = 'Welsh',
['wlf'] = 'Wolof',
['xbd'] = 'Tai Lue',
['xhs'] = 'Xhosa',
['yak'] = 'Yakut',
['yba'] = 'Yoruba',
['ycr'] = 'Y-Cree',
['yic'] = 'Yi Classic',
['yim'] = 'Yi Modern',
['zhh'] = 'Chinese Hong Kong',
['zhp'] = 'Chinese Phonetic',
['zhs'] = 'Chinese Simplified',
['zht'] = 'Chinese Traditional',
['znd'] = 'Zande',
['zul'] = 'Zulu'
}
otf.tables.features = {
['aalt'] = 'Access All Alternates',
['abvf'] = 'Above-Base Forms',
['abvm'] = 'Above-Base Mark Positioning',
['abvs'] = 'Above-Base Substitutions',
['afrc'] = 'Alternative Fractions',
['akhn'] = 'Akhands',
['blwf'] = 'Below-Base Forms',
['blwm'] = 'Below-Base Mark Positioning',
['blws'] = 'Below-Base Substitutions',
['c2pc'] = 'Petite Capitals From Capitals',
['c2sc'] = 'Small Capitals From Capitals',
['calt'] = 'Contextual Alternates',
['case'] = 'Case-Sensitive Forms',
['ccmp'] = 'Glyph Composition/Decomposition',
['cjct'] = 'Conjunct Forms',
['clig'] = 'Contextual Ligatures',
['cpsp'] = 'Capital Spacing',
['cswh'] = 'Contextual Swash',
['curs'] = 'Cursive Positioning',
['dflt'] = 'Default Processing',
['dist'] = 'Distances',
['dlig'] = 'Discretionary Ligatures',
['dnom'] = 'Denominators',
['dtls'] = 'Dotless Forms', -- math
['expt'] = 'Expert Forms',
['falt'] = 'Final glyph Alternates',
['fin2'] = 'Terminal Forms #2',
['fin3'] = 'Terminal Forms #3',
['fina'] = 'Terminal Forms',
['flac'] = 'Flattened Accents Over Capitals', -- math
['frac'] = 'Fractions',
['fwid'] = 'Full Width',
['half'] = 'Half Forms',
['haln'] = 'Halant Forms',
['halt'] = 'Alternate Half Width',
['hist'] = 'Historical Forms',
['hkna'] = 'Horizontal Kana Alternates',
['hlig'] = 'Historical Ligatures',
['hngl'] = 'Hangul',
['hojo'] = 'Hojo Kanji Forms',
['hwid'] = 'Half Width',
['init'] = 'Initial Forms',
['isol'] = 'Isolated Forms',
['ital'] = 'Italics',
['jalt'] = 'Justification Alternatives',
['jp04'] = 'JIS2004 Forms',
['jp78'] = 'JIS78 Forms',
['jp83'] = 'JIS83 Forms',
['jp90'] = 'JIS90 Forms',
['kern'] = 'Kerning',
['lfbd'] = 'Left Bounds',
['liga'] = 'Standard Ligatures',
['ljmo'] = 'Leading Jamo Forms',
['lnum'] = 'Lining Figures',
['locl'] = 'Localized Forms',
['mark'] = 'Mark Positioning',
['med2'] = 'Medial Forms #2',
['medi'] = 'Medial Forms',
['mgrk'] = 'Mathematical Greek',
['mkmk'] = 'Mark to Mark Positioning',
['mset'] = 'Mark Positioning via Substitution',
['nalt'] = 'Alternate Annotation Forms',
['nlck'] = 'NLC Kanji Forms',
['nukt'] = 'Nukta Forms',
['numr'] = 'Numerators',
['onum'] = 'Old Style Figures',
['opbd'] = 'Optical Bounds',
['ordn'] = 'Ordinals',
['ornm'] = 'Ornaments',
['palt'] = 'Proportional Alternate Width',
['pcap'] = 'Petite Capitals',
['pnum'] = 'Proportional Figures',
['pref'] = 'Pre-base Forms',
['pres'] = 'Pre-base Substitutions',
['pstf'] = 'Post-base Forms',
['psts'] = 'Post-base Substitutions',
['pwid'] = 'Proportional Widths',
['qwid'] = 'Quarter Widths',
['rand'] = 'Randomize',
['rkrf'] = 'Rakar Forms',
['rlig'] = 'Required Ligatures',
['rphf'] = 'Reph Form',
['rtbd'] = 'Right Bounds',
['rtla'] = 'Right-To-Left Alternates',
['rtlm'] = 'Right To Left Math', -- math
['ruby'] = 'Ruby Notation Forms',
['salt'] = 'Stylistic Alternates',
['sinf'] = 'Scientific Inferiors',
['size'] = 'Optical Size',
['smcp'] = 'Small Capitals',
['smpl'] = 'Simplified Forms',
['ss01'] = 'Stylistic Set 1',
['ss02'] = 'Stylistic Set 2',
['ss03'] = 'Stylistic Set 3',
['ss04'] = 'Stylistic Set 4',
['ss05'] = 'Stylistic Set 5',
['ss06'] = 'Stylistic Set 6',
['ss07'] = 'Stylistic Set 7',
['ss08'] = 'Stylistic Set 8',
['ss09'] = 'Stylistic Set 9',
['ss10'] = 'Stylistic Set 10',
['ss11'] = 'Stylistic Set 11',
['ss12'] = 'Stylistic Set 12',
['ss13'] = 'Stylistic Set 13',
['ss14'] = 'Stylistic Set 14',
['ss15'] = 'Stylistic Set 15',
['ss16'] = 'Stylistic Set 16',
['ss17'] = 'Stylistic Set 17',
['ss18'] = 'Stylistic Set 18',
['ss19'] = 'Stylistic Set 19',
['ss20'] = 'Stylistic Set 20',
['ssty'] = 'Script Style', -- math
['subs'] = 'Subscript',
['sups'] = 'Superscript',
['swsh'] = 'Swash',
['titl'] = 'Titling',
['tjmo'] = 'Trailing Jamo Forms',
['tnam'] = 'Traditional Name Forms',
['tnum'] = 'Tabular Figures',
['trad'] = 'Traditional Forms',
['twid'] = 'Third Widths',
['unic'] = 'Unicase',
['valt'] = 'Alternate Vertical Metrics',
['vatu'] = 'Vattu Variants',
['vert'] = 'Vertical Writing',
['vhal'] = 'Alternate Vertical Half Metrics',
['vjmo'] = 'Vowel Jamo Forms',
['vkna'] = 'Vertical Kana Alternates',
['vkrn'] = 'Vertical Kerning',
['vpal'] = 'Proportional Alternate Vertical Metrics',
['vrt2'] = 'Vertical Rotation',
['zero'] = 'Slashed Zero',
['trep'] = 'Traditional TeX Replacements',
['tlig'] = 'Traditional TeX Ligatures',
}
otf.tables.baselines = {
['hang'] = 'Hanging baseline',
['icfb'] = 'Ideographic character face bottom edge baseline',
['icft'] = 'Ideographic character face tope edige baseline',
['ideo'] = 'Ideographic em-box bottom edge baseline',
['idtp'] = 'Ideographic em-box top edge baseline',
['math'] = 'Mathmatical centered baseline',
['romn'] = 'Roman baseline'
}
-- can be sped up by local tables
function otf.tables.to_tag(id)
return stringformat("%4s",lower(id))
end
local function resolve(tab,id)
if tab and id then
id = lower(id)
return tab[id] or tab[gsub(id," ","")] or tab['dflt'] or ''
else
return "unknown"
end
end
function otf.meanings.script(id)
return resolve(otf.tables.scripts,id)
end
function otf.meanings.language(id)
return resolve(otf.tables.languages,id)
end
function otf.meanings.feature(id)
return resolve(otf.tables.features,id)
end
function otf.meanings.baseline(id)
return resolve(otf.tables.baselines,id)
end
otf.tables.to_scripts = table.reverse_hash(otf.tables.scripts )
otf.tables.to_languages = table.reverse_hash(otf.tables.languages)
otf.tables.to_features = table.reverse_hash(otf.tables.features )
local scripts = otf.tables.scripts
local languages = otf.tables.languages
local features = otf.tables.features
local to_scripts = otf.tables.to_scripts
local to_languages = otf.tables.to_languages
local to_features = otf.tables.to_features
for k, v in next, to_features do
local stripped = gsub(k,"%-"," ")
to_features[stripped] = v
local stripped = gsub(k,"[^a-zA-Z0-9]","")
to_features[stripped] = v
end
for k, v in next, to_features do
to_features[lower(k)] = v
end
otf.meanings.checkers = {
rand = function(v)
return v and "random"
end
}
local checkers = otf.meanings.checkers
function otf.meanings.normalize(features)
local h = { }
for k,v in next, features do
k = lower(k)
if k == "language" or k == "lang" then
v = gsub(lower(v),"[^a-z0-9%-]","")
if not languages[v] then
h.language = to_languages[v] or "dflt"
else
h.language = v
end
elseif k == "script" then
v = gsub(lower(v),"[^a-z0-9%-]","")
if not scripts[v] then
h.script = to_scripts[v] or "dflt"
else
h.script = v
end
else
if type(v) == "string" then
local b = v:is_boolean()
if type(b) == "nil" then
v = tonumber(v) or lower(v)
else
v = b
end
end
k = to_features[k] or k
local c = checkers[k]
h[k] = c and c(v) or v
end
end
return h
end
-- When I feel the need ...
--~ otf.tables.aat = {
--~ [ 0] = {
--~ name = "allTypographicFeaturesType",
--~ [ 0] = "allTypeFeaturesOnSelector",
--~ [ 1] = "allTypeFeaturesOffSelector",
--~ },
--~ [ 1] = {
--~ name = "ligaturesType",
--~ [0 ] = "requiredLigaturesOnSelector",
--~ [1 ] = "requiredLigaturesOffSelector",
--~ [2 ] = "commonLigaturesOnSelector",
--~ [3 ] = "commonLigaturesOffSelector",
--~ [4 ] = "rareLigaturesOnSelector",
--~ [5 ] = "rareLigaturesOffSelector",
--~ [6 ] = "logosOnSelector ",
--~ [7 ] = "logosOffSelector ",
--~ [8 ] = "rebusPicturesOnSelector",
--~ [9 ] = "rebusPicturesOffSelector",
--~ [10] = "diphthongLigaturesOnSelector",
--~ [11] = "diphthongLigaturesOffSelector",
--~ [12] = "squaredLigaturesOnSelector",
--~ [13] = "squaredLigaturesOffSelector",
--~ [14] = "abbrevSquaredLigaturesOnSelector",
--~ [15] = "abbrevSquaredLigaturesOffSelector",
--~ },
--~ [ 2] = {
--~ name = "cursiveConnectionType",
--~ [ 0] = "unconnectedSelector",
--~ [ 1] = "partiallyConnectedSelector",
--~ [ 2] = "cursiveSelector ",
--~ },
--~ [ 3] = {
--~ name = "letterCaseType",
--~ [ 0] = "upperAndLowerCaseSelector",
--~ [ 1] = "allCapsSelector ",
--~ [ 2] = "allLowerCaseSelector",
--~ [ 3] = "smallCapsSelector ",
--~ [ 4] = "initialCapsSelector",
--~ [ 5] = "initialCapsAndSmallCapsSelector",
--~ },
--~ [ 4] = {
--~ name = "verticalSubstitutionType",
--~ [ 0] = "substituteVerticalFormsOnSelector",
--~ [ 1] = "substituteVerticalFormsOffSelector",
--~ },
--~ [ 5] = {
--~ name = "linguisticRearrangementType",
--~ [ 0] = "linguisticRearrangementOnSelector",
--~ [ 1] = "linguisticRearrangementOffSelector",
--~ },
--~ [ 6] = {
--~ name = "numberSpacingType",
--~ [ 0] = "monospacedNumbersSelector",
--~ [ 1] = "proportionalNumbersSelector",
--~ },
--~ [ 7] = {
--~ name = "appleReserved1Type",
--~ },
--~ [ 8] = {
--~ name = "smartSwashType",
--~ [ 0] = "wordInitialSwashesOnSelector",
--~ [ 1] = "wordInitialSwashesOffSelector",
--~ [ 2] = "wordFinalSwashesOnSelector",
--~ [ 3] = "wordFinalSwashesOffSelector",
--~ [ 4] = "lineInitialSwashesOnSelector",
--~ [ 5] = "lineInitialSwashesOffSelector",
--~ [ 6] = "lineFinalSwashesOnSelector",
--~ [ 7] = "lineFinalSwashesOffSelector",
--~ [ 8] = "nonFinalSwashesOnSelector",
--~ [ 9] = "nonFinalSwashesOffSelector",
--~ },
--~ [ 9] = {
--~ name = "diacriticsType",
--~ [ 0] = "showDiacriticsSelector",
--~ [ 1] = "hideDiacriticsSelector",
--~ [ 2] = "decomposeDiacriticsSelector",
--~ },
--~ [10] = {
--~ name = "verticalPositionType",
--~ [ 0] = "normalPositionSelector",
--~ [ 1] = "superiorsSelector ",
--~ [ 2] = "inferiorsSelector ",
--~ [ 3] = "ordinalsSelector ",
--~ },
--~ [11] = {
--~ name = "fractionsType",
--~ [ 0] = "noFractionsSelector",
--~ [ 1] = "verticalFractionsSelector",
--~ [ 2] = "diagonalFractionsSelector",
--~ },
--~ [12] = {
--~ name = "appleReserved2Type",
--~ },
--~ [13] = {
--~ name = "overlappingCharactersType",
--~ [ 0] = "preventOverlapOnSelector",
--~ [ 1] = "preventOverlapOffSelector",
--~ },
--~ [14] = {
--~ name = "typographicExtrasType",
--~ [0 ] = "hyphensToEmDashOnSelector",
--~ [1 ] = "hyphensToEmDashOffSelector",
--~ [2 ] = "hyphenToEnDashOnSelector",
--~ [3 ] = "hyphenToEnDashOffSelector",
--~ [4 ] = "unslashedZeroOnSelector",
--~ [5 ] = "unslashedZeroOffSelector",
--~ [6 ] = "formInterrobangOnSelector",
--~ [7 ] = "formInterrobangOffSelector",
--~ [8 ] = "smartQuotesOnSelector",
--~ [9 ] = "smartQuotesOffSelector",
--~ [10] = "periodsToEllipsisOnSelector",
--~ [11] = "periodsToEllipsisOffSelector",
--~ },
--~ [15] = {
--~ name = "mathematicalExtrasType",
--~ [ 0] = "hyphenToMinusOnSelector",
--~ [ 1] = "hyphenToMinusOffSelector",
--~ [ 2] = "asteriskToMultiplyOnSelector",
--~ [ 3] = "asteriskToMultiplyOffSelector",
--~ [ 4] = "slashToDivideOnSelector",
--~ [ 5] = "slashToDivideOffSelector",
--~ [ 6] = "inequalityLigaturesOnSelector",
--~ [ 7] = "inequalityLigaturesOffSelector",
--~ [ 8] = "exponentsOnSelector",
--~ [ 9] = "exponentsOffSelector",
--~ },
--~ [16] = {
--~ name = "ornamentSetsType",
--~ [ 0] = "noOrnamentsSelector",
--~ [ 1] = "dingbatsSelector ",
--~ [ 2] = "piCharactersSelector",
--~ [ 3] = "fleuronsSelector ",
--~ [ 4] = "decorativeBordersSelector",
--~ [ 5] = "internationalSymbolsSelector",
--~ [ 6] = "mathSymbolsSelector",
--~ },
--~ [17] = {
--~ name = "characterAlternativesType",
--~ [ 0] = "noAlternatesSelector",
--~ },
--~ [18] = {
--~ name = "designComplexityType",
--~ [ 0] = "designLevel1Selector",
--~ [ 1] = "designLevel2Selector",
--~ [ 2] = "designLevel3Selector",
--~ [ 3] = "designLevel4Selector",
--~ [ 4] = "designLevel5Selector",
--~ },
--~ [19] = {
--~ name = "styleOptionsType",
--~ [ 0] = "noStyleOptionsSelector",
--~ [ 1] = "displayTextSelector",
--~ [ 2] = "engravedTextSelector",
--~ [ 3] = "illuminatedCapsSelector",
--~ [ 4] = "titlingCapsSelector",
--~ [ 5] = "tallCapsSelector ",
--~ },
--~ [20] = {
--~ name = "characterShapeType",
--~ [0 ] = "traditionalCharactersSelector",
--~ [1 ] = "simplifiedCharactersSelector",
--~ [2 ] = "jis1978CharactersSelector",
--~ [3 ] = "jis1983CharactersSelector",
--~ [4 ] = "jis1990CharactersSelector",
--~ [5 ] = "traditionalAltOneSelector",
--~ [6 ] = "traditionalAltTwoSelector",
--~ [7 ] = "traditionalAltThreeSelector",
--~ [8 ] = "traditionalAltFourSelector",
--~ [9 ] = "traditionalAltFiveSelector",
--~ [10] = "expertCharactersSelector",
--~ },
--~ [21] = {
--~ name = "numberCaseType",
--~ [ 0] = "lowerCaseNumbersSelector",
--~ [ 1] = "upperCaseNumbersSelector",
--~ },
--~ [22] = {
--~ name = "textSpacingType",
--~ [ 0] = "proportionalTextSelector",
--~ [ 1] = "monospacedTextSelector",
--~ [ 2] = "halfWidthTextSelector",
--~ [ 3] = "normallySpacedTextSelector",
--~ },
--~ [23] = {
--~ name = "transliterationType",
--~ [ 0] = "noTransliterationSelector",
--~ [ 1] = "hanjaToHangulSelector",
--~ [ 2] = "hiraganaToKatakanaSelector",
--~ [ 3] = "katakanaToHiraganaSelector",
--~ [ 4] = "kanaToRomanizationSelector",
--~ [ 5] = "romanizationToHiraganaSelector",
--~ [ 6] = "romanizationToKatakanaSelector",
--~ [ 7] = "hanjaToHangulAltOneSelector",
--~ [ 8] = "hanjaToHangulAltTwoSelector",
--~ [ 9] = "hanjaToHangulAltThreeSelector",
--~ },
--~ [24] = {
--~ name = "annotationType",
--~ [ 0] = "noAnnotationSelector",
--~ [ 1] = "boxAnnotationSelector",
--~ [ 2] = "roundedBoxAnnotationSelector",
--~ [ 3] = "circleAnnotationSelector",
--~ [ 4] = "invertedCircleAnnotationSelector",
--~ [ 5] = "parenthesisAnnotationSelector",
--~ [ 6] = "periodAnnotationSelector",
--~ [ 7] = "romanNumeralAnnotationSelector",
--~ [ 8] = "diamondAnnotationSelector",
--~ },
--~ [25] = {
--~ name = "kanaSpacingType",
--~ [ 0] = "fullWidthKanaSelector",
--~ [ 1] = "proportionalKanaSelector",
--~ },
--~ [26] = {
--~ name = "ideographicSpacingType",
--~ [ 0] = "fullWidthIdeographsSelector",
--~ [ 1] = "proportionalIdeographsSelector",
--~ },
--~ [103] = {
--~ name = "cjkRomanSpacingType",
--~ [ 0] = "halfWidthCJKRomanSelector",
--~ [ 1] = "proportionalCJKRomanSelector",
--~ [ 2] = "defaultCJKRomanSelector",
--~ [ 3] = "fullWidthCJKRomanSelector",
--~ },
--~ }