[arabic] Split ligature array
Generate marks and 3-component ligatures in separate arrays. The new arrays are unused currently.
This commit is contained in:
parent
6e29060af2
commit
7f362196c5
|
@ -195,7 +195,7 @@ def print_shaping_table(f):
|
||||||
items = items[:0:-1]
|
items = items[:0:-1]
|
||||||
shape = None
|
shape = None
|
||||||
# We only care about a subset of ligatures
|
# We only care about a subset of ligatures
|
||||||
if c not in LIGATURES or len (items) != 2:
|
if c not in LIGATURES:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Save ligature
|
# Save ligature
|
||||||
|
@ -231,24 +231,45 @@ def print_shaping_table(f):
|
||||||
print ("#define SHAPING_TABLE_LAST 0x%04Xu" % max_u)
|
print ("#define SHAPING_TABLE_LAST 0x%04Xu" % max_u)
|
||||||
print ()
|
print ()
|
||||||
|
|
||||||
ligas = {}
|
ligas_2 = {}
|
||||||
for pair in ligatures.keys ():
|
ligas_3 = {}
|
||||||
for shape in ligatures[pair]:
|
ligas_mark_2 = {}
|
||||||
c = ligatures[pair][shape]
|
for key in ligatures.keys ():
|
||||||
if shape is None:
|
for shape in ligatures[key]:
|
||||||
liga = pair
|
c = ligatures[key][shape]
|
||||||
elif shape == 'isolated':
|
if len(key) == 3:
|
||||||
liga = (shapes[pair[0]]['initial'], shapes[pair[1]]['final'])
|
if shape == 'isolated':
|
||||||
elif shape == 'final':
|
liga = (shapes[key[0]]['initial'], shapes[key[1]]['medial'], shapes[key[2]]['final'])
|
||||||
liga = (shapes[pair[0]]['medial'], shapes[pair[1]]['final'])
|
elif shape == 'final':
|
||||||
elif shape == 'initial':
|
liga = (shapes[key[0]]['medial'], shapes[key[1]]['medial'], shapes[key[2]]['final'])
|
||||||
liga = (shapes[pair[0]]['initial'], shapes[pair[1]]['medial'])
|
elif shape == 'initial':
|
||||||
|
liga = (shapes[key[0]]['initial'], shapes[key[1]]['medial'], shapes[key[2]]['medial'])
|
||||||
|
else:
|
||||||
|
raise Exception ("Unexpected shape", shape)
|
||||||
|
if liga[0] not in ligas_3:
|
||||||
|
ligas_3[liga[0]] = []
|
||||||
|
ligas_3[liga[0]].append ((liga[1], liga[2], c))
|
||||||
|
elif len(key) == 2:
|
||||||
|
if shape is None:
|
||||||
|
liga = key
|
||||||
|
if liga[0] not in ligas_mark_2:
|
||||||
|
ligas_mark_2[liga[0]] = []
|
||||||
|
ligas_mark_2[liga[0]].append ((liga[1], c))
|
||||||
|
continue
|
||||||
|
elif shape == 'isolated':
|
||||||
|
liga = (shapes[key[0]]['initial'], shapes[key[1]]['final'])
|
||||||
|
elif shape == 'final':
|
||||||
|
liga = (shapes[key[0]]['medial'], shapes[key[1]]['final'])
|
||||||
|
elif shape == 'initial':
|
||||||
|
liga = (shapes[key[0]]['initial'], shapes[key[1]]['medial'])
|
||||||
|
else:
|
||||||
|
raise Exception ("Unexpected shape", shape)
|
||||||
|
if liga[0] not in ligas_2:
|
||||||
|
ligas_2[liga[0]] = []
|
||||||
|
ligas_2[liga[0]].append ((liga[1], c))
|
||||||
else:
|
else:
|
||||||
raise Exception ("Unexpected shape", shape)
|
raise Exception ("Unexpected number of ligature components", key)
|
||||||
if liga[0] not in ligas:
|
max_i = max (len (ligas_2[l]) for l in ligas_2)
|
||||||
ligas[liga[0]] = []
|
|
||||||
ligas[liga[0]].append ((liga[1], c))
|
|
||||||
max_i = max (len (ligas[l]) for l in ligas)
|
|
||||||
print ()
|
print ()
|
||||||
print ("static const struct ligature_set_t {")
|
print ("static const struct ligature_set_t {")
|
||||||
print (" uint16_t first;")
|
print (" uint16_t first;")
|
||||||
|
@ -258,16 +279,57 @@ def print_shaping_table(f):
|
||||||
print (" } ligatures[%d];" % max_i)
|
print (" } ligatures[%d];" % max_i)
|
||||||
print ("} ligature_table[] =")
|
print ("} ligature_table[] =")
|
||||||
print ("{")
|
print ("{")
|
||||||
for first in sorted (ligas.keys ()):
|
for first in sorted (ligas_2.keys ()):
|
||||||
|
|
||||||
print (" { 0x%04Xu, {" % (first))
|
print (" { 0x%04Xu, {" % (first))
|
||||||
for liga in ligas[first]:
|
for liga in ligas_2[first]:
|
||||||
print (" { 0x%04Xu, 0x%04Xu }, /* %s */" % (liga[0], liga[1], names[liga[1]]))
|
print (" { 0x%04Xu, 0x%04Xu }, /* %s */" % (liga[0], liga[1], names[liga[1]]))
|
||||||
print (" }},")
|
print (" }},")
|
||||||
|
|
||||||
print ("};")
|
print ("};")
|
||||||
print ()
|
print ()
|
||||||
|
|
||||||
|
max_i = max (len (ligas_mark_2[l]) for l in ligas_mark_2)
|
||||||
|
print ()
|
||||||
|
print ("static const struct ligature_mark_set_t {")
|
||||||
|
print (" uint16_t first;")
|
||||||
|
print (" struct ligature_pairs_t {")
|
||||||
|
print (" uint16_t second;")
|
||||||
|
print (" uint16_t ligature;")
|
||||||
|
print (" } ligatures[%d];" % max_i)
|
||||||
|
print ("} ligature_mark_table[] =")
|
||||||
|
print ("{")
|
||||||
|
for first in sorted (ligas_mark_2.keys ()):
|
||||||
|
|
||||||
|
print (" { 0x%04Xu, {" % (first))
|
||||||
|
for liga in ligas_mark_2[first]:
|
||||||
|
print (" { 0x%04Xu, 0x%04Xu }, /* %s */" % (liga[0], liga[1], names[liga[1]]))
|
||||||
|
print (" }},")
|
||||||
|
|
||||||
|
print ("};")
|
||||||
|
print ()
|
||||||
|
|
||||||
|
max_i = max (len (ligas_3[l]) for l in ligas_3)
|
||||||
|
print ()
|
||||||
|
print ("static const struct ligature_3_set_t {")
|
||||||
|
print (" uint16_t first;")
|
||||||
|
print (" struct ligature_triplets_t {")
|
||||||
|
print (" uint16_t second;")
|
||||||
|
print (" uint16_t third;")
|
||||||
|
print (" uint16_t ligature;")
|
||||||
|
print (" } ligatures[%d];" % max_i)
|
||||||
|
print ("} ligature_3_table[] =")
|
||||||
|
print ("{")
|
||||||
|
for first in sorted (ligas_3.keys ()):
|
||||||
|
|
||||||
|
print (" { 0x%04Xu, {" % (first))
|
||||||
|
for liga in ligas_3[first]:
|
||||||
|
print (" { 0x%04Xu, 0x%04Xu, 0x%04Xu}, /* %s */" % (liga[0], liga[1], liga[2], names[liga[2]]))
|
||||||
|
print (" }},")
|
||||||
|
|
||||||
|
print ("};")
|
||||||
|
print ()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
print ("/* == Start of generated table == */")
|
print ("/* == Start of generated table == */")
|
||||||
|
|
|
@ -421,13 +421,6 @@ static const struct ligature_set_t {
|
||||||
} ligatures[14];
|
} ligatures[14];
|
||||||
} ligature_table[] =
|
} ligature_table[] =
|
||||||
{
|
{
|
||||||
{ 0x0651u, {
|
|
||||||
{ 0x064Cu, 0xFC5Eu }, /* ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM */
|
|
||||||
{ 0x064Eu, 0xFC60u }, /* ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM */
|
|
||||||
{ 0x064Fu, 0xFC61u }, /* ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM */
|
|
||||||
{ 0x0650u, 0xFC62u }, /* ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM */
|
|
||||||
{ 0x064Bu, 0xF2EEu }, /* PUA ARABIC LIGATURE SHADDA WITH FATHATAN ISOLATED FORM */
|
|
||||||
}},
|
|
||||||
{ 0xFE91u, {
|
{ 0xFE91u, {
|
||||||
{ 0xFEE2u, 0xFC08u }, /* ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM */
|
{ 0xFEE2u, 0xFC08u }, /* ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM */
|
||||||
{ 0xFEE4u, 0xFC9Fu }, /* ARABIC LIGATURE BEH WITH MEEM INITIAL FORM */
|
{ 0xFEE4u, 0xFC9Fu }, /* ARABIC LIGATURE BEH WITH MEEM INITIAL FORM */
|
||||||
|
@ -524,6 +517,41 @@ static const struct ligature_set_t {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static const struct ligature_mark_set_t {
|
||||||
|
uint16_t first;
|
||||||
|
struct ligature_pairs_t {
|
||||||
|
uint16_t second;
|
||||||
|
uint16_t ligature;
|
||||||
|
} ligatures[5];
|
||||||
|
} ligature_mark_table[] =
|
||||||
|
{
|
||||||
|
{ 0x0651u, {
|
||||||
|
{ 0x064Cu, 0xFC5Eu }, /* ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM */
|
||||||
|
{ 0x064Eu, 0xFC60u }, /* ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM */
|
||||||
|
{ 0x064Fu, 0xFC61u }, /* ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM */
|
||||||
|
{ 0x0650u, 0xFC62u }, /* ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM */
|
||||||
|
{ 0x064Bu, 0xF2EEu }, /* PUA ARABIC LIGATURE SHADDA WITH FATHATAN ISOLATED FORM */
|
||||||
|
}},
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static const struct ligature_3_set_t {
|
||||||
|
uint16_t first;
|
||||||
|
struct ligature_triplets_t {
|
||||||
|
uint16_t second;
|
||||||
|
uint16_t third;
|
||||||
|
uint16_t ligature;
|
||||||
|
} ligatures[3];
|
||||||
|
} ligature_3_table[] =
|
||||||
|
{
|
||||||
|
{ 0xFEDFu, {
|
||||||
|
{ 0xFEE4u, 0xFEA4u, 0xFD88u}, /* ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM */
|
||||||
|
{ 0xFEE0u, 0xFEEAu, 0xF201u}, /* PUA ARABIC LIGATURE LELLAH ISOLATED FORM */
|
||||||
|
{ 0xFEE4u, 0xFEA0u, 0xF211u}, /* PUA ARABIC LIGATURE LAM WITH MEEM WITH JEEM INITIAL FORM */
|
||||||
|
}},
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif /* HB_OT_SHAPER_ARABIC_TABLE_HH */
|
#endif /* HB_OT_SHAPER_ARABIC_TABLE_HH */
|
||||||
|
|
||||||
/* == End of generated table == */
|
/* == End of generated table == */
|
||||||
|
|
Loading…
Reference in New Issue