Skip to content

Instantly share code, notes, and snippets.

@m4rc1e
Forked from anthrotype/gist:2539c6c6d56797b50abf19d64a4daee1
Last active February 11, 2020 11:44
Show Gist options
  • Save m4rc1e/241462309fc7c844633d269a37248459 to your computer and use it in GitHub Desktop.
Save m4rc1e/241462309fc7c844633d269a37248459 to your computer and use it in GitHub Desktop.
OTL json schema
# Lookup type 1: Single Adjustment Positioning
# format 1: Single Positioning Value & format 2: Array of Positioning Values
{
'format': int,
'valueRecord': [
{"a": {"XPlacement": 0, "XAdvance": 10, "YPlacement": 0, "YAdvance": 0},
...
}
]
# Lookup type 2: PairPos
# format 1: Adjustments for Glyph Pairs
{
"format": int,
"values": {
"A": {
"V": -120,
"W": -100
...
},
"V": {
"A": -120,
...
},
...
}
# format 2: Class Pair Adjustment
{
"classes": {
"kern1.0": ["a", "b"],
"kern2.0": ["c", "d"],
"kern2.1": ["e", "f", "g"],
},
"values": {
"kern1.0": {
"kern2.0": -40,
"kern2.1": 10
},
"kern1.1": {
"kern2.0": 3,
"kern2.1": -4,
}
}
}
# Lookup type 3: Cursive Attachment Positioning
# format 1: Cursive attachment
{
"format": int,
"records": [
{"a": ({"x": 0, "y": 0}, {"x": 400, "y": 0}),
...
]
}
# Lookup type 4: Mark-to-Base Attachment
# format 1: Mark-to-base Attachment Point
{
"format": int,
"base": {
"a": {0: {"x": 300, "y": 300},
1: {"x": 300, "y": 0},
...
},
"marks": {
"gravecomb": {0: {"x": 0, "y": 500}},
"acutecomb": {0, {"x": 0, "y": 489}},
"dotaccent": {1: {"x": 9, "y": 0}},
...
}
# Lookup type 5: Mark-to-Ligature Attachment
{
"format": int,
"ligs": {
"f_f": [
{0: {"deviceX": None, "deviceY": None, "x": 100, "y": 100},
1: {"deviceX": None, "deviceY": None, "x", 0, "y": 0},
...
},
{0: {"deviceX": None, "deviceY": None, "x": 500, "y" 100},
1: {"deviceX": None, "deviceY": None, "x", 500, "y": 0},
],
"f_i": [
...
],
...
},
"marks": {
"gravecomb": {0: {"x": 0, "y": 500}},
"acutecomb": {0, {"x": 0, "y": 489}},
"dotaccent": {1: {"x": 9, "y": 0}},
...
}
Lookup Type 6: Mark-to-Mark Attachment
# Format 1: Mark-to-Mark Attachment
{
"format": int,
"mark1": {
"gravecomb": {0: {"x": 0, "y": 550},
"acutecomb": {0: {"x": 0, "y": 550},
...
},
"mark2": {
"gravecomb": {0: {"x": 0, "y": 700}},
"acutecomb": {0, {"x": 0, "y": 700}},
...
}
# Lookup Type 7: Contextual Positioning
# Format 1: Simple Glyph Contexts
{
"format": int,
# NO FONTS IN GOOGLE FONTS!
}
# Format 2: Class based glyph contexts
{
"format": int,
# NO FONTS IN GOOGLE FONTS!
}
# Format 3: Coverage based glyph contexts
{
"format": int,
# NO FONTS IN GOOGLE FONTS!
}
# Lookup Type 8: Chaining Contextual Positioning
# Format 1: Simple Glyph Contexts
{
'format': 1,
'rules': [
{
'backtrack': [],
'input': ['u101B.alt', 'u103E_u1030'],
'lookahead': [],
'lookup_indices': [252, 253]
}
]
}
# Format 2: Class Based Contexts
{
'format': 2,
'backtrack_classes': {
'backtrack1': [
'uni0939',
'glyph03032',
'glyph03036'
],
'backtrack2': [
'uni0901',
'uni0902',
'glyph02844'
]
},
'input_classes': {
'input1': ['uni0952']
},
'lookahead_classes': {
'lookahead1': ['uni0000']
},
'rules': [
{
'backtrack': ['backtrack1'],
'input': ['uni0952'],
'lookahead': [],
'lookup_indices': [16]
},
{
'backtrack': ['backtrack2', 'backtrack1'],
'input': ['uni0952'],
'lookahead': [],
'lookup_indices': [16]
}
]
}
# Format 3: Coverage-based Glyph Contexts
{
'format': 3,
'backtrack': [
('Vattu.dv',),
('Ka.dv',
'Nga.dv',
'Tta.dv',
'SsaTta.dv',
'PaLaone.dv'),
('matraI.dv',)
],
'input': [('Chandrabinduone.dv',)],
'lookahead': [],
'lookup_indices': [15]
}
# Common structure for GPOS, GSUB
{
"Version": int,
"Scripts": [
{
"Tag": str,
"DefaultLangSys": {
"ReqFeatureIndex": int, # is it always 0xFFFF?
"FeatureIndices": List[int]
},
"LangSysRecords": [
{
"Tag": str,
"LangSys": {
"ReqFeatureIndex": int,
"FeatureIndices": List[int],
}
},
]
},
],
"Features": [
{
"Tag": str,
"FeatureParams": Optional[FeatureParams],
"LookupListIndices": List[int],
},
],
"Lookups": [
{
"LookupType": int,
"LookupFlag": List[LookupFlag(Enum)],
"MarkFilteringSet": int, # index into GDEF.MarkFilteringSets
"Subtables": [
# ...
],
},
]
}
# GSUB subtables:
# Lookup Type 1: Single Substitution
# Format 1 & 2:
{
'format': int,
'subs': {
'input_glyph': 'output_glyph',
# ...
}
}
# Lookup Type 2: Multiple Substitution
# Format 1: Multiple Substitution
{
'format': 1,
'subs': {'glyph02651': ['uni0919', 'glyph02969'],
# ...
}
}
# Lookup Type 3: Alternate Substitution
# Format 1:
{
'format': 1,
'alternates': {'A': ['ordfeminine', 'a.sc'],
# ...
}
}
# Lookup Type 4: Ligature Substitution
# Format 1:
{
'format': 1,
'ligatures': {
('input_glyph1','input_glyph2', ...): 'output_glyph',
# ...
}
}
# Lookup Type 5:
# Format 1: Simple Glyph Contexts
{
'format': 1,
'rules': [
{'input': ['glyph02673', 'uni0941'], 'lookup_indices': [96, 98]},
...
]
}
# Format 2: Class-based Glyph Contexts
{
'format': 2,
'classes': {
'class1': ['glyph02921'],
'class2': ['glyph02897', 'glyph02899'],
'class3': ['uni0930', 'uni0931', 'glyph02673', 'glyph02709'],
...
},
'rules': [
{'input': ['class1', 'class2', 'class3'], 'lookup_indices': [74]},
...
]
}
# Format 3: TODO Coverage-based Glyph Contexts
# Lookup Type 6: Chaining Contextual Substitution
# Format 1: Simple Glyph Contexts
{
'format': 1,
'rules': [
{'backtrack': [],
'input': ['viramadeva_radeva', 'zerowidthjoiner'],
'lookahead': ['hadeva'],
'lookup_indices': [31, 31]},
...
]
}
# Format 2: Class-based Glyph Contexts
{
'format': 2,
'backtrack_classes': {
'backtrack1': ['uni0000']
},
'input_classes': {
'input1': ['glyph02673']
},
'lookahead_classes': {
'lookahead1': [
'uni0943',
'uni0944',
'uni094D',
'uni0962',
'uni0963']
},
'rules': [{'backtrack': [],
'input': ['input1'],
'lookahead': ['lookahead1'],
'lookup_indices': [18]}]}
# Format 3: Coverage-based Glyph Contexts
{
'backtrack': [],
'input': [
('isign_ra_virama_anusvara.alt2',
'isign_ra_virama.alt2',
'isigndeva.alt2',
'isigndeva_anusvara.alt2')
],
'lookahead': [('vadeva_viramadeva',), ('hadeva',)],
'lookup_indices': [34]
}
{ 'scripts': [{'DefaultLangSys': {'FeatureIndices': [6], 'ReqFeatureIndex': 65535}, 'LangSysRecords': [], 'tag': 'DFLT'},
{'DefaultLangSys': {'FeatureIndices': [0, 1, 2, 3, 4, 5, 6, 9, 10, 11, 12, 13], 'ReqFeatureIndex': 65535},
'LangSysRecords': [{'FeatureIndices': [0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13],
'RequiredFeatureIndex': 65535,
'tag': 'MAR '},
{'FeatureIndices': [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13],
'RequiredFeatureIndex': 65535,
'tag': 'NEP '}],
'tag': 'dev2'},
{'DefaultLangSys': {'FeatureIndices': [0, 1, 2, 3, 4, 5, 6, 9, 10, 11, 12, 13], 'ReqFeatureIndex': 65535},
'LangSysRecords': [{'FeatureIndices': [0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13],
'RequiredFeatureIndex': 65535,
'tag': 'MAR '},
{'FeatureIndices': [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13],
'RequiredFeatureIndex': 65535,
'tag': 'NEP '}],
'tag': 'deva'}],
'features': [{'FeatureParams': None, 'lookup_indices': [25], 'tag': 'abvs'},
{'FeatureParams': None, 'lookup_indices': [6], 'tag': 'akhn'},
{'FeatureParams': None, 'lookup_indices': [8], 'tag': 'blwf'},
{'FeatureParams': None, 'lookup_indices': [27], 'tag': 'blws'},
{'FeatureParams': None, 'lookup_indices': [11], 'tag': 'cjct'},
{'FeatureParams': None, 'lookup_indices': [9], 'tag': 'half'},
{'FeatureParams': None, 'lookup_indices': [0], 'tag': 'haln'},
{'FeatureParams': None, 'lookup_indices': [1, 2], 'tag': 'locl'},
{'FeatureParams': None, 'lookup_indices': [3, 4], 'tag': 'locl'},
{'FeatureParams': None, 'lookup_indices': [5], 'tag': 'nukt'},
{'FeatureParams': None, 'lookup_indices': [12, 13, 16, 18, 20, 22, 24], 'tag': 'pres'},
{'FeatureParams': None, 'lookup_indices': [26, 28, 30, 32, 33], 'tag': 'psts'},
{'FeatureParams': None, 'lookup_indices': [7], 'tag': 'rphf'},
{'FeatureParams': None, 'lookup_indices': [10], 'tag': 'vatu'}],
'lookups': [{'flag': 0,
'subtables': [{'format': 1, 'ligatures': {('dadeva', 'viramadeva'): 'dadeva_viramadeva'}}],
'type': 4},
{'flag': 0,
'subtables': [{'format': 2, 'subs': {'ladeva': 'ladeva.mr', 'shadeva': 'shadeva.mr'}}],
'type': 1},
{'flag': 0,
'subtables': [{'format': 1,
'ligatures': {('cadeva', 'viramadeva', 'cadeva'): 'cadeva_viramadeva_cadeva',
('cadeva', 'viramadeva', 'vadeva'): 'chadeva_viramadeva_vadeva',
('dadeva', 'viramadeva', 'badeva'): 'dadeva_viramadeva_badeva',
('dadeva', 'viramadeva', 'bhadeva'): 'dadeva_viramadeva_bhadeva',
('dadeva', 'viramadeva', 'dadeva'): 'dadeva_viramadeva_dadeva',
('dadeva', 'viramadeva', 'dhadeva'): 'dadeva_viramadeva_dhadeva',
('dadeva', 'viramadeva', 'gadeva'): 'dadeva_viramadeva_gadeva',
('dadeva', 'viramadeva', 'ghadeva'): 'dadeva_viramadeva_ghadeva',
('dadeva', 'viramadeva', 'madeva'): 'dadeva_viramadeva_madeva',
('dadeva', 'viramadeva', 'nadeva'): 'dadeva_viramadeva_nadeva',
('dadeva', 'viramadeva', 'vadeva'): 'dadeva_viramadeva_vadeva',
('dadeva', 'viramadeva', 'yadeva'): 'dadeva_viramadeva_yadeva',
('ddadeva', 'viramadeva', 'ddadeva'): 'ddadeva_viramadeva_ddadeva',
('ddadeva', 'viramadeva', 'ddhadeva'): 'ddadeva_viramadeva_ddhadeva',
('ddadeva', 'viramadeva', 'yadeva'): 'ddadeva_viramadeva_yadeva',
('ddhadeva', 'viramadeva', 'ddhadeva'): 'ddhadeva_viramadeva_ddhadeva',
('ddhadeva', 'viramadeva', 'yadeva'): 'ddhadeva_viramadeva_yadeva',
('gadeva', 'viramadeva', 'nadeva'): 'gadeva_viramadeva_nadeva',
('hadeva', 'viramadeva', 'ladeva.mr'): 'hadeva_viramadeva_ladeva',
('hadeva', 'viramadeva', 'madeva'): 'hadeva_viramadeva_madeva',
('hadeva', 'viramadeva', 'nadeva'): 'hadeva_viramadeva_nadeva',
('hadeva', 'viramadeva', 'nnadeva'): 'hadeva_viramadeva_nnadeva',
('hadeva', 'viramadeva', 'radeva'): 'hadeva_viramadeva_radeva',
('hadeva', 'viramadeva', 'vadeva'): 'hadeva_viramadeva_vadeva',
('hadeva', 'viramadeva', 'yadeva'): 'hadeva_viramadeva_yadeva',
('jadeva', 'viramadeva', 'jadeva'): 'jadeva_viramadeva_jadeva',
('kadeva', 'viramadeva', 'kadeva'): 'kadeva_viramadeva_kadeva',
('kadeva', 'viramadeva', 'ladeva.mr'): 'kadeva_viramadeva_ladeva',
('kadeva', 'viramadeva', 'vadeva'): 'kadeva_viramadeva_vadeva',
('ladeva.mr', 'viramadeva', 'ladeva.mr'): 'ladeva_viramadeva_ladeva',
('nadeva', 'viramadeva', 'nadeva'): 'nadeva_viramadeva_nadeva',
('ngadeva', 'viramadeva', 'gadeva'): 'ngadeva_viramadeva_gadeva',
('ngadeva', 'viramadeva', 'ghadeva'): 'ngadeva_viramadeva_ghadeva',
('ngadeva', 'viramadeva', 'kadeva'): 'ngadeva_viramadeva_kadeva',
('ngadeva', 'viramadeva', 'kadeva', 'viramadeva', 'ssadeva'): 'nga_virama_ka_virama_ssadeva',
('ngadeva', 'viramadeva', 'khadeva'): 'ngadeva_viramadeva_khadeva',
('ngadeva', 'viramadeva', 'madeva'): 'ngadeva_viramadeva_madeva',
('nyadeva', 'viramadeva', 'cadeva'): 'nyadeva_viramadeva_cadeva',
('nyadeva', 'viramadeva', 'jadeva'): 'nyadeva_viramadeva_jadeva',
('padeva', 'viramadeva', 'ladeva.mr'): 'padeva_viramadeva_ladeva',
('padeva', 'viramadeva', 'tadeva'): 'padeva_viramadeva_tadeva',
('phadeva', 'viramadeva', 'ladeva.mr'): 'phadeva_viramadeva_ladeva',
('shadeva.mr', 'viramadeva', 'cadeva'): 'shadeva_viramadeva_cadeva',
('shadeva.mr', 'viramadeva', 'ladeva.mr'): 'shadeva_viramadeva_ladeva',
('shadeva.mr', 'viramadeva', 'nadeva'): 'shadeva_viramadeva_nadeva',
('shadeva.mr', 'viramadeva', 'vadeva'): 'shadeva_viramadeva_vadeva',
('ttadeva', 'viramadeva', 'ttadeva'): 'ttadeva_viramadeva_ttadeva',
('ttadeva', 'viramadeva', 'tthadeva'): 'ttadeva_viramadeva_tthadeva',
('ttadeva', 'viramadeva', 'vadeva'): 'ttadeva_viramadeva_vadeva',
('ttadeva', 'viramadeva', 'yadeva'): 'ttadeva_viramadeva_yadeva',
('tthadeva', 'viramadeva', 'tthadeva'): 'tthadeva_viraamdeva_tthadeva',
('tthadeva', 'viramadeva', 'yadeva'): 'tthadeva_viraamdeva_yadeva'}}],
'type': 4},
{'flag': 0,
'subtables': [{'format': 2,
'subs': {'eightdeva': 'eightdeva.np',
'fivedeva': 'fivedeva.np',
'jhadeva': 'jhadeva.np'}}],
'type': 1},
{'flag': 0,
'subtables': [{'format': 1,
'ligatures': {('kadeva', 'viramadeva', 'radeva'): 'kadeva_viramadeva_radeva.np'}}],
'type': 4},
{'flag': 0,
'subtables': [{'format': 1,
'ligatures': {('ddadeva', 'nuktadeva'): 'dddhadeva',
('ddhadeva', 'nuktadeva'): 'rhadeva',
('gadeva', 'nuktadeva'): 'ghhadeva',
('jadeva', 'nuktadeva'): 'zadeva',
('kadeva', 'nuktadeva'): 'qadeva',
('khadeva', 'nuktadeva'): 'khhadeva',
('lladeva', 'nuktadeva'): 'llladeva',
('nadeva', 'nuktadeva'): 'nnnadeva',
('phadeva', 'nuktadeva'): 'fadeva',
('radeva', 'nuktadeva'): 'rradeva',
('yadeva', 'nuktadeva'): 'yyadeva'}}],
'type': 4},
{'flag': 0,
'subtables': [{'format': 1,
'ligatures': {('jadeva', 'viramadeva', 'nyadeva'): 'jadeva_viramadeva_nyadeva',
('kadeva', 'viramadeva', 'ssadeva'): 'kadeva_viramadeva_ssadeva'}}],
'type': 4},
{'flag': 0,
'subtables': [{'format': 1, 'ligatures': {('radeva', 'viramadeva'): 'radeva_viramadeva'}}],
'type': 4},
{'flag': 0,
'subtables': [{'format': 1,
'ligatures': {('hadeva', 'viramadeva_radeva'): 'hadeva_viramadeva_radeva',
('radeva', 'viramadeva'): 'viramadeva_radeva',
('viramadeva', 'radeva'): 'viramadeva_radeva'}}],
'type': 4},
{'flag': 0,
'subtables': [{'format': 1,
'ligatures': {('badeva', 'viramadeva'): 'badeva_viramadeva',
('badeva_viramadeva_radeva', 'viramadeva'): 'ba_virama_ra_viramadeva',
('bhadeva', 'viramadeva'): 'bhadeva_viramadeva',
('cadeva', 'viramadeva'): 'cadeva_viramadeva',
('chadeva', 'viramadeva'): 'chadeva_viramadeva',
('dadeva', 'viramadeva'): 'dadeva_viramadeva',
('ddadeva', 'viramadeva'): 'ddadeva_viramadeva',
('ddhadeva', 'viramadeva'): 'ddhadeva_viramadeva',
('dhadeva', 'viramadeva'): 'dhadeva_viramadeva',
('fadeva', 'viramadeva'): 'fadeva_viramadeva',
('gadeva', 'viramadeva'): 'gadeva_viramadeva',
('ghadeva', 'viramadeva'): 'ghadeva_viramadeva',
('ghhadeva', 'viramadeva'): 'ghhadeva_viramadeva',
('hadeva', 'viramadeva'): 'hadeva_viramadeva',
('jadeva', 'viramadeva'): 'jadeva_viramadeva',
('jadeva_viramadeva_nyadeva', 'viramadeva'): 'ja_virama_nya_viramadeva',
('jhadeva', 'viramadeva'): 'jhadeva_viramadeva',
('kadeva', 'viramadeva'): 'kadeva_viramadeva',
('kadeva_viramadeva_ssadeva', 'viramadeva'): 'ka_virama_ssa_viramadeva',
('khadeva', 'viramadeva'): 'khadeva_viramadeva',
('khhadeva', 'viramadeva'): 'khhadeva_viramadeva',
('ladeva', 'viramadeva'): 'ladeva_viramadeva',
('ladeva.mr', 'viramadeva'): 'ladeva_viramadeva',
('lladeva', 'viramadeva'): 'lladeva_viramadeva',
('llladeva', 'viramadeva'): 'llladeva_viramadeva',
('madeva', 'viramadeva'): 'madeva_viramadeva',
('nadeva', 'viramadeva'): 'nadeva_viramadeva',
('ngadeva', 'viramadeva'): 'ngadeva_viramadeva',
('nnadeva', 'viramadeva'): 'nnadeva_viramadeva',
('nnnadeva', 'viramadeva'): 'nnnadeva_viramadeva',
('nyadeva', 'viramadeva'): 'nyadeva_viramadeva',
('padeva', 'viramadeva'): 'padeva_viramadeva',
('phadeva', 'viramadeva'): 'phadeva_viramadeva',
('qadeva', 'viramadeva'): 'qadeva_viramadeva',
('radeva', 'viramadeva', 'zerowidthjoiner'): 'radeva_viramadeva.alt',
('sadeva', 'viramadeva'): 'sadeva_viramadeva',
('shadeva', 'viramadeva'): 'shadeva_viramadeva',
('shadeva.mr', 'viramadeva'): 'shadeva_viramadeva.mr',
('ssadeva', 'viramadeva'): 'ssadeva_viramadeva',
('tadeva', 'viramadeva'): 'tadeva_viramadeva',
('tadeva_viramadeva_radeva', 'viramadeva'): 'ta_virama_ra_viramadeva',
('thadeva', 'viramadeva'): 'thadeva_viramadeva',
('ttadeva', 'viramadeva'): 'ttadeva_viramadeva',
('tthadeva', 'viramadeva'): 'tthadeva_viramadeva',
('vadeva', 'viramadeva'): 'vadeva_viramadeva',
('yadeva', 'viramadeva'): 'yadeva_viramadeva',
('zadeva', 'viramadeva'): 'zadeva_viramadeva'}}],
'type': 4},
{'flag': 0,
'subtables': [{'format': 1,
'ligatures': {('badeva', 'viramadeva_radeva'): 'badeva_viramadeva_radeva',
('badeva', 'viramadeva_radeva', 'viramadeva'): 'ba_virama_ra_viramadeva',
('badeva_viramadeva', 'viramadeva_radeva'): 'ba_virama_ra_viramadeva',
('bhadeva', 'viramadeva_radeva'): 'bhadeva_viramadeva_radeva',
('cadeva', 'viramadeva_radeva'): 'cadeva_viramadeva_radeva',
('dadeva', 'viramadeva_radeva'): 'dadeva_viramadeva_radeva',
('dhadeva', 'viramadeva_radeva'): 'dhadeva_viramadeva_radeva',
('gadeva', 'viramadeva_radeva'): 'gadeva_viramadeva_radeva',
('ghadeva', 'viramadeva_radeva'): 'ghadeva_viramadeva_radeva',
('hadeva', 'viramadeva_radeva'): 'hadeva_viramadeva_radeva',
('jadeva', 'viramadeva_radeva'): 'jadeva_viramadeva_radeva',
('jadeva_viramadeva_nyadeva', 'viramadeva_radeva'): 'ja_virama_nya_virama_radeva',
('jhadeva', 'viramadeva_radeva'): 'jhadeva_viramadeva_radeva',
('kadeva', 'viramadeva_radeva'): 'kadeva_viramadeva_radeva',
('kadeva_viramadeva_ssadeva', 'viramadeva_radeva'): 'ka_virama_ssa_virama_radeva',
('khadeva', 'viramadeva_radeva'): 'khadeva_viramadeva_radeva',
('ladeva', 'viramadeva_radeva'): 'ladeva_viramadeva_radeva',
('ladeva.mr', 'viramadeva_radeva'): 'ladeva_viramadeva_radeva',
('madeva', 'viramadeva_radeva'): 'madeva_viramadeva_radeva',
('nadeva', 'viramadeva_radeva'): 'nadeva_viramadeva_radeva',
('nnadeva', 'viramadeva_radeva'): 'nnadeva_viramadeva_radeva',
('nyadeva', 'viramadeva_radeva'): 'nyadeva_viramadeva_radeva',
('padeva', 'viramadeva_radeva'): 'padeva_viramadeva_radeva',
('phadeva', 'viramadeva_radeva'): 'phadeva_viramadeva_radeva',
('sadeva', 'viramadeva_radeva'): 'sadeva_viramadeva_radeva',
('shadeva', 'viramadeva_radeva'): 'shadeva_viramadeva_radeva',
('shadeva.mr', 'viramadeva_radeva'): 'shadeva_viramadeva_radeva',
('shadeva_viramadeva.alt', 'radeva'): 'shadeva_viramadeva_radeva',
('ssadeva', 'viramadeva_radeva'): 'ssadeva_viramadeva_radeva',
('tadeva', 'viramadeva_radeva'): 'tadeva_viramadeva_radeva',
('tadeva', 'viramadeva_radeva', 'viramadeva'): 'ta_virama_ra_viramadeva',
('tadeva_viramadeva', 'viramadeva_radeva'): 'ta_virama_ra_viramadeva',
('thadeva', 'viramadeva_radeva'): 'thadeva_viramadeva_radeva',
('vadeva', 'viramadeva_radeva'): 'vadeva_viramadeva_radeva',
('yadeva', 'viramadeva_radeva'): 'yadeva_viramadeva_radeva'}}],
'type': 4},
{'flag': 0,
'subtables': [{'format': 1,
'ligatures': {('dadeva', 'viramadeva', 'badeva'): 'dadeva_viramadeva_badeva',
('dadeva', 'viramadeva', 'bhadeva'): 'dadeva_viramadeva_bhadeva',
('dadeva', 'viramadeva', 'dadeva'): 'dadeva_viramadeva_dadeva',
('dadeva', 'viramadeva', 'dhadeva'): 'dadeva_viramadeva_dhadeva',
('dadeva', 'viramadeva', 'gadeva'): 'dadeva_viramadeva_gadeva',
('dadeva', 'viramadeva', 'ghadeva'): 'dadeva_viramadeva_ghadeva',
('dadeva', 'viramadeva', 'madeva'): 'dadeva_viramadeva_madeva',
('dadeva', 'viramadeva', 'nadeva'): 'dadeva_viramadeva_nadeva',
('dadeva', 'viramadeva', 'vadeva'): 'dadeva_viramadeva_vadeva',
('dadeva', 'viramadeva', 'yadeva'): 'dadeva_viramadeva_yadeva',
('dadeva_viramadeva', 'dhadeva_viramadeva_radeva', 'viramadeva', 'yadeva'): 'da_ddha_ra_yadeva',
('dadeva_viramadeva_dhadeva', 'viramadeva_radeva', 'viramadeva', 'yadeva'): 'da_ddha_ra_yadeva'}}],
'type': 4},
{'flag': 0,
'subtables': [{'format': 1,
'ligatures': {('cadeva_viramadeva', 'cadeva'): 'cadeva_viramadeva_cadeva',
('chadeva_viramadeva', 'vadeva'): 'chadeva_viramadeva_vadeva',
('dadeva_viramadeva', 'badeva'): 'dadeva_viramadeva_badeva',
('dadeva_viramadeva', 'bhadeva'): 'dadeva_viramadeva_bhadeva',
('dadeva_viramadeva', 'dadeva'): 'dadeva_viramadeva_dadeva',
('dadeva_viramadeva', 'dhadeva'): 'dadeva_viramadeva_dhadeva',
('dadeva_viramadeva', 'gadeva'): 'dadeva_viramadeva_gadeva',
('dadeva_viramadeva', 'ghadeva'): 'dadeva_viramadeva_ghadeva',
('dadeva_viramadeva', 'madeva'): 'dadeva_viramadeva_madeva',
('dadeva_viramadeva', 'nadeva'): 'dadeva_viramadeva_nadeva',
('dadeva_viramadeva', 'vadeva'): 'dadeva_viramadeva_vadeva',
('dadeva_viramadeva', 'yadeva'): 'dadeva_viramadeva_yadeva',
('ddadeva_viramadeva', 'ddadeva'): 'ddadeva_viramadeva_ddadeva',
('ddadeva_viramadeva', 'ddhadeva'): 'ddadeva_viramadeva_ddhadeva',
('ddadeva_viramadeva', 'yadeva'): 'ddadeva_viramadeva_yadeva',
('ddhadeva_viramadeva', 'ddhadeva'): 'ddhadeva_viramadeva_ddhadeva',
('ddhadeva_viramadeva', 'yadeva'): 'ddhadeva_viramadeva_yadeva',
('gadeva_viramadeva', 'nadeva'): 'gadeva_viramadeva_nadeva',
('hadeva_viramadeva', 'ladeva'): 'hadeva_viramadeva_ladeva',
('hadeva_viramadeva', 'madeva'): 'hadeva_viramadeva_madeva',
('hadeva_viramadeva', 'nadeva'): 'hadeva_viramadeva_nadeva',
('hadeva_viramadeva', 'nnadeva'): 'hadeva_viramadeva_nnadeva',
('hadeva_viramadeva', 'vadeva'): 'hadeva_viramadeva_vadeva',
('hadeva_viramadeva', 'yadeva'): 'hadeva_viramadeva_yadeva',
('jadeva_viramadeva', 'jadeva'): 'jadeva_viramadeva_jadeva',
('jadeva_viramadeva', 'jadeva_viramadeva'): 'ja_virama_ja_viramadeva',
('kadeva_viramadeva', 'kadeva'): 'kadeva_viramadeva_kadeva',
('kadeva_viramadeva', 'ladeva'): 'kadeva_viramadeva_ladeva',
('kadeva_viramadeva', 'tadeva'): 'kadeva_viramadeva_tadeva',
('kadeva_viramadeva', 'vadeva'): 'kadeva_viramadeva_vadeva',
('ladeva_viramadeva', 'ladeva'): 'ladeva_viramadeva_ladeva',
('nadeva_viramadeva', 'nadeva'): 'nadeva_viramadeva_nadeva',
('ngadeva_viramadeva', 'gadeva'): 'ngadeva_viramadeva_gadeva',
('ngadeva_viramadeva', 'ghadeva'): 'ngadeva_viramadeva_ghadeva',
('ngadeva_viramadeva', 'kadeva'): 'ngadeva_viramadeva_kadeva',
('ngadeva_viramadeva', 'kadeva_viramadeva_ssadeva'): 'nga_virama_ka_virama_ssadeva',
('ngadeva_viramadeva', 'khadeva'): 'ngadeva_viramadeva_khadeva',
('ngadeva_viramadeva', 'madeva'): 'ngadeva_viramadeva_madeva',
('nyadeva_viramadeva', 'cadeva'): 'nyadeva_viramadeva_cadeva',
('nyadeva_viramadeva', 'jadeva'): 'nyadeva_viramadeva_jadeva',
('padeva_viramadeva', 'ladeva'): 'padeva_viramadeva_ladeva',
('padeva_viramadeva', 'tadeva'): 'padeva_viramadeva_tadeva',
('phadeva_viramadeva', 'ladeva'): 'phadeva_viramadeva_ladeva',
('sadeva_viramadeva', 'tadeva_viramadeva_radeva'): 'sa_virama_ta_virama_radeva',
('shadeva', 'rvocalicsigndeva'): 'sha_virama_rvocalicdeva',
('shadeva', 'viramadeva', 'radeva'): 'shadeva_viramadeva_radeva',
('shadeva.mr', 'rvocalicsigndeva'): 'sha_virama_rvocalicdeva',
('shadeva_viramadeva', 'cadeva'): 'shadeva_viramadeva_cadeva',
('shadeva_viramadeva', 'ladeva'): 'shadeva_viramadeva_ladeva',
('shadeva_viramadeva', 'nadeva'): 'shadeva_viramadeva_nadeva',
('shadeva_viramadeva', 'vadeva'): 'shadeva_viramadeva_vadeva',
('shadeva_viramadeva.mr', 'radeva'): 'shadeva_viramadeva_radeva',
('ssadeva_viramadeva', 'ttadeva'): 'ssadeva_viramadeva_ttadeva',
('ssadeva_viramadeva', 'tthadeva'): 'ssadeva_viramadeva_tthadeva',
('tadeva_viramadeva', 'tadeva'): 'tadeva_viramadeva_tadeva',
('tadeva_viramadeva', 'tadeva_viramadeva'): 'ta_virama_ta_viramadeva',
('ttadeva_viramadeva', 'ttadeva'): 'ttadeva_viramadeva_ttadeva',
('ttadeva_viramadeva', 'tthadeva'): 'ttadeva_viramadeva_tthadeva',
('ttadeva_viramadeva', 'vadeva'): 'ttadeva_viramadeva_vadeva',
('ttadeva_viramadeva', 'yadeva'): 'ttadeva_viramadeva_yadeva',
('tthadeva_viramadeva', 'tthadeva'): 'tthadeva_viraamdeva_tthadeva',
('tthadeva_viramadeva', 'yadeva'): 'tthadeva_viraamdeva_yadeva'}}],
'type': 4},
{'flag': 0,
'subtables': [{'backtrack': [],
'format': 3,
'input': [('isigndeva',)],
'lookahead': [('khadeva',
'ladeva',
'khhadeva',
'tadeva_viramadeva_tadeva',
'gadeva_viramadeva',
'ghhadeva_viramadeva',
'khadeva_viramadeva_radeva',
'sadeva_viramadeva_radeva',
'jadeva_viramadeva_jadeva',
'hadeva_viramadeva_yadeva',
'sa_virama_ta_virama_radeva',
'ladeva_viramadeva_radeva')],
'lookup_indices': [14]},
{'backtrack': [],
'format': 3,
'input': [('isigndeva',)],
'lookahead': [('radeva', 'rradeva')],
'lookup_indices': [15]}],
'type': 6},
{'flag': 0, 'subtables': [{'format': 1, 'subs': {'isigndeva': 'isigndeva.alt1'}}], 'type': 1},
{'flag': 0, 'subtables': [{'format': 1, 'subs': {'isigndeva': 'isigndeva.alt3'}}], 'type': 1},
{'flag': 0,
'subtables': [{'backtrack': [],
'format': 3,
'input': [('isigndeva',)],
'lookahead': [('kadeva_viramadeva',
'khadeva_viramadeva',
'ghadeva_viramadeva',
'ngadeva_viramadeva',
'cadeva_viramadeva',
'chadeva_viramadeva',
'jadeva_viramadeva',
'jhadeva_viramadeva',
'nyadeva_viramadeva',
'ttadeva_viramadeva',
'tthadeva_viramadeva',
'ddadeva_viramadeva',
'ddhadeva_viramadeva',
'nnadeva_viramadeva',
'tadeva_viramadeva',
'thadeva_viramadeva',
'dadeva_viramadeva',
'dhadeva_viramadeva',
'nadeva_viramadeva',
'nnnadeva_viramadeva',
'padeva_viramadeva',
'phadeva_viramadeva',
'badeva_viramadeva',
'bhadeva_viramadeva',
'madeva_viramadeva',
'yadeva_viramadeva',
'ladeva_viramadeva',
'lladeva_viramadeva',
'llladeva_viramadeva',
'vadeva_viramadeva',
'shadeva_viramadeva',
'ssadeva_viramadeva',
'sadeva_viramadeva',
'qadeva_viramadeva',
'khhadeva_viramadeva',
'zadeva_viramadeva',
'fadeva_viramadeva',
'shadeva_viramadeva.alt',
'ta_virama_ra_viramadeva',
'ta_virama_ta_viramadeva',
'ka_virama_ssa_viramadeva',
'ja_virama_nya_viramadeva',
'yadeva_alt',
'ttadeva_viramadeva_yadeva',
'tthadeva_viraamdeva_yadeva',
'ddadeva_viramadeva_yadeva',
'ddhadeva_viramadeva_yadeva',
'da_ddha_ra_yadeva',
'shadeva_viramadeva.mr')],
'lookup_indices': [17]}],
'type': 6},
{'flag': 0, 'subtables': [{'format': 1, 'subs': {'isigndeva': 'isigndeva.alt2'}}], 'type': 1},
{'flag': 0,
'subtables': [{'backtrack': [],
'format': 3,
'input': [('isigndeva',)],
'lookahead': [('ghadeva',
'ngadeva',
'cadeva',
'ddadeva',
'tadeva',
'dhadeva',
'yadeva',
'kadeva_viramadeva_ssadeva',
'ngadeva_viramadeva_kadeva',
'ngadeva_viramadeva_khadeva',
'ngadeva_viramadeva_gadeva',
'ngadeva_viramadeva_ghadeva',
'ngadeva_viramadeva_madeva',
'nga_virama_ka_virama_ssadeva',
'cadeva_viramadeva_cadeva',
'chadeva_viramadeva_vadeva',
'ddadeva_viramadeva_ddadeva',
'ddadeva_viramadeva_ddhadeva',
'dadeva_viramadeva_ghadeva',
'dadeva_viramadeva_dhadeva',
'nadeva_viramadeva_nadeva',
'shadeva_viramadeva_cadeva',
'shadeva_viramadeva_nadeva',
'shadeva_viramadeva_ladeva',
'shadeva_viramadeva_vadeva',
'ghadeva_viramadeva_radeva',
'cadeva_viramadeva_radeva',
'dhadeva_viramadeva_radeva',
'nadeva_viramadeva_radeva',
'ssadeva_viramadeva_radeva',
'ka_virama_ssa_virama_radeva')],
'lookup_indices': [19]}],
'type': 6},
{'flag': 0, 'subtables': [{'format': 1, 'subs': {'isigndeva': 'isigndeva.alt4'}}], 'type': 1},
{'flag': 0,
'subtables': [{'backtrack': [],
'format': 3,
'input': [('isigndeva',)],
'lookahead': [('chadeva',
'nnadeva',
'thadeva',
'bhadeva',
'lladeva',
'llladeva',
'shadeva',
'shadeva_viramadeva_radeva',
'jadeva_viramadeva_nyadeva',
'bhadeva_viramadeva_radeva',
'thadeva_viramadeva_radeva',
'ja_virama_nya_virama_radeva',
'shadeva.mr')],
'lookup_indices': [21]}],
'type': 6},
{'flag': 0, 'subtables': [{'format': 1, 'subs': {'isigndeva': 'isigndeva.tha'}}], 'type': 1},
{'flag': 0,
'subtables': [{'backtrack': [],
'format': 3,
'input': [('isigndeva',)],
'lookahead': [('jadeva',
'jhadeva',
'nyadeva',
'sadeva',
'jadeva_viramadeva_radeva',
'jhadeva_viramadeva_radeva',
'nyadeva_viramadeva_cadeva',
'nyadeva_viramadeva_jadeva',
'dadeva_viramadeva_madeva',
'dadeva_viramadeva_yadeva',
'ladeva_viramadeva_ladeva',
'hadeva_viramadeva_madeva',
'ladeva.mr')],
'lookup_indices': [23]}],
'type': 6},
{'flag': 0, 'subtables': [{'format': 1, 'subs': {'isigndeva': 'isigndeva.ja'}}], 'type': 1},
{'flag': 6,
'subtables': [{'format': 1,
'ligatures': {('isigndeva', 'anusvaradeva'): 'isigndeva_anusvaradeva',
('isigndeva', 'radeva_viramadeva'): 'isign_ra_virama',
('isigndeva', 'radeva_viramadeva', 'anusvaradeva'): 'isign_ra_virama_anusvara',
('isigndeva.alt1', 'anusvaradeva'): 'isigndeva_anusvara.alt1',
('isigndeva.alt1', 'radeva_viramadeva'): 'isign_ra_virama.alt1',
('isigndeva.alt1', 'radeva_viramadeva', 'anusvaradeva'): 'isign_ra_virama_anusvara.alt1',
('isigndeva.alt2', 'anusvaradeva'): 'isigndeva_anusvara.alt2',
('isigndeva.alt2', 'radeva_viramadeva'): 'isign_ra_virama.alt2',
('isigndeva.alt2', 'radeva_viramadeva', 'anusvaradeva'): 'isign_ra_virama_anusvara.alt2',
('isigndeva.alt3', 'anusvaradeva'): 'isigndeva_anusvaradeva.alt3',
('isigndeva.alt3', 'radeva_viramadeva'): 'isign_ra_virama.alt3',
('isigndeva.alt3', 'radeva_viramadeva', 'anusvaradeva'): 'isign_ra_virama_anusvara.alt3',
('isigndeva.alt4', 'anusvaradeva'): 'isigndeva_anusvaradeva.alt4',
('isigndeva.alt4', 'radeva_viramadeva'): 'isign_ra_virama.alt4',
('isigndeva.alt4', 'radeva_viramadeva', 'anusvaradeva'): 'isign_ra_virama_anusvara.alt4',
('isigndeva.ja', 'anusvaradeva'): 'isigndeva_anusvaradeva.ja',
('isigndeva.tha', 'anusvaradeva'): 'isigndeva_anusvara.tha',
('isigndeva.tha', 'radeva_viramadeva'): 'isign_ra_virama.ja',
('isigndeva.tha', 'radeva_viramadeva', 'anusvaradeva'): 'isign_ra_virama_anusvara.tha'}}],
'type': 4},
{'flag': 0,
'subtables': [{'format': 1,
'ligatures': {('aisigndeva', 'anusvaradeva'): 'aisigndeva_anusvaradeva',
('aisigndeva', 'radeva_viramadeva'): 'aisign_ra_virama.alt1',
('aisigndeva', 'radeva_viramadeva', 'anusvaradeva'): 'aisign_ra_virama_anusvara',
('ausigndeva', 'anusvaradeva'): 'ausigndeva_anusvaradeva',
('ausigndeva', 'radeva_viramadeva'): 'ausign_ra_virama.alt1',
('ausigndeva', 'radeva_viramadeva', 'anusvaradeva'): 'ausign_ra_virama_anusvara',
('esigndeva', 'anusvaradeva'): 'esigndeva_anusvaradeva',
('esigndeva', 'radeva_viramadeva'): 'esign_ra_virama.alt1',
('esigndeva', 'radeva_viramadeva', 'anusvaradeva'): 'esign_ra_virama_anusvara',
('osigndeva', 'anusvaradeva'): 'osigndeva_anusvaradeva',
('osigndeva', 'radeva_viramadeva'): 'osign_ra_virama.alt1',
('osigndeva', 'radeva_viramadeva', 'anusvaradeva'): 'osign_ra_virama_anusvara',
('radeva_viramadeva', 'anusvaradeva'): 'radeva_viramadeva_anusvaradeva'}}],
'type': 4},
{'flag': 0,
'subtables': [{'format': 1,
'ligatures': {('iisigndeva', 'anusvaradeva'): 'iisigndeva_anusvaradeva',
('iisigndeva', 'radeva_viramadeva'): 'iisigndeva_ra_virama',
('iisigndeva', 'radeva_viramadeva_anusvaradeva'): 'iisign_ra_virama_anusvara',
('iisigndeva.alt1', 'anusvaradeva'): 'iisigndeva_anusvaradeva.alt1',
('iisigndeva.alt1', 'radeva_viramadeva'): 'iisigndeva_ra_virama.alt1',
('iisigndeva.alt1', 'radeva_viramadeva_anusvaradeva'): 'iisign_ra_virama_anusvara.alt1',
('isigndeva', 'anusvaradeva'): 'isigndeva_anusvaradeva',
('isigndeva', 'radeva_viramadeva'): 'isign_ra_virama',
('isigndeva', 'radeva_viramadeva_anusvaradeva'): 'isign_ra_virama_anusvara'}}],
'type': 4},
{'flag': 0,
'subtables': [{'format': 1,
'ligatures': {('dadeva', 'rvocalicsigndeva'): 'dadeva_rvocalicsigndeva',
('hadeva', 'rvocalicsigndeva'): 'hadeva_rvocalicdeva',
('viramadeva_radeva', 'usigndeva'): 'vattudeva_ulowdeva',
('viramadeva_radeva', 'uusigndeva'): 'vattudeva_uulowdeva'}}],
'type': 4},
{'flag': 0,
'subtables': [{'backtrack': [('rvocalicdeva',
'kadeva',
'phadeva',
'qadeva',
'fadeva',
'rrvocalicdeva',
'phadeva_radeva_nuktadeva',
'phadeva_viramadeva_radeva',
'kadeva_viramadeva_kadeva',
'kadeva_viramadeva_tadeva',
'kadeva_viramadeva_ladeva',
'kadeva_viramadeva_vadeva',
'phadeva_viramadeva_ladeva')],
'format': 3,
'input': [('iisigndeva',
'iisigndeva_anusvaradeva',
'iisigndeva_ra_virama',
'iisign_ra_virama_anusvara')],
'lookahead': [],
'lookup_indices': [29]}],
'type': 6},
{'flag': 0,
'subtables': [{'format': 2,
'subs': {'iisign_ra_virama_anusvara': 'iisign_ra_virama_anusvara.alt1',
'iisigndeva': 'iisigndeva.alt1',
'iisigndeva_anusvaradeva': 'iisign_ra_virama_anusvara.alt1',
'iisigndeva_ra_virama': 'iisigndeva_ra_virama.alt1'}}],
'type': 1},
{'flag': 0,
'subtables': [{'format': 1,
'ligatures': {('radeva', 'usigndeva'): 'radeva_usigndeva',
('radeva', 'uusigndeva'): 'radeva_uusigndeva'}}],
'type': 4},
{'flag': 0,
'subtables': [{'format': 1,
'ligatures': {('rradeva', 'viramadeva'): 'radeva_viramadeva.alt',
('viramadeva_radeva', 'zerowidthjoiner'): 'radeva_viramadeva.alt'}}],
'type': 4},
{'flag': 0,
'subtables': [{'format': 1,
'rules': [{'backtrack': [],
'input': ['rradeva', 'viramadeva'],
'lookahead': ['yadeva'],
'lookup_indices': [31, 31]}]},
{'format': 1,
'rules': [{'backtrack': [],
'input': ['rradeva', 'viramadeva'],
'lookahead': ['hadeva'],
'lookup_indices': [31, 31]}]},
{'format': 1,
'rules': [{'backtrack': [],
'input': ['viramadeva_radeva', 'zerowidthjoiner'],
'lookahead': ['yadeva'],
'lookup_indices': [31, 31]}]},
{'format': 1,
'rules': [{'backtrack': [],
'input': ['viramadeva_radeva', 'zerowidthjoiner'],
'lookahead': ['hadeva'],
'lookup_indices': [31, 31]}]}],
'type': 6},
{'flag': 0,
'subtables': [{'backtrack': [],
'format': 3,
'input': [('isign_ra_virama_anusvara.alt2',
'isign_ra_virama.alt2',
'isigndeva.alt2',
'isigndeva_anusvara.alt2')],
'lookahead': [('vadeva_viramadeva',), ('hadeva',)],
'lookup_indices': [34]}],
'type': 6},
{'flag': 0,
'subtables': [{'format': 2,
'subs': {'isign_ra_virama.alt2': 'isign_ra_virama.alt1',
'isign_ra_virama_anusvara.alt2': 'isign_ra_virama_anusvara.alt1',
'isigndeva.alt2': 'isigndeva.alt1',
'isigndeva_anusvara.alt2': 'isigndeva_anusvara.alt1'}}],
'type': 1}],
'version': 65536}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment