1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
#import numpy as np
from FL import *
def getGlyph(gname,font):
index = font.FindGlyph(gname)
if index != -1:
return font.glyphs[index]
else:
return None
def getComponentByName(f,g,componentName):
componentIndex = f.FindGlyph(componentName)
for c in g.components:
if c.index == componentIndex:
return c
def getAnchorByName(g,anchorName):
for a in g.anchors:
if a.name == anchorName:
return a
def moveMarkAnchors(f, g, anchorName, accentName, dx, dy):
if "top"==anchorName:
anchors = f[accentName].anchors
for anchor in anchors:
if "mkmktop_acc" == anchor.name:
for i in range(len(g.anchors)):
if g.anchors[i].name == "top":
del g.anchors[i]
break
anchor2 = Anchor()
#print anchor.x, dx, anchor.y, dy
anchor2.name = "top"
anchor2.x = anchor.x + int(dx)
anchor2.y = anchor.y + int(dy)
g.anchors.append(anchor2)
elif anchorName in ["bottom", "bottomu"]:
anchors = f[accentName].anchors
for anchor in anchors:
if "mkmkbottom_acc" == anchor.name:
for n in range(len(g.anchors)):
if g.anchors[n].name == "bottom":
del g.anchors[n]
break
anchor2 = Anchor()
#print anchor.x, dx, anchor.y, dy
anchor2.name = "bottom"
anchor2.x = anchor.x + int(dx)
anchor2.y = anchor.y + int(dy)
for anc in anchors:
if "top" == anc.name:
anchor2.x = anc.x + int(dx)
g.anchors.append(anchor2)
def alignComponentToAnchor(f,glyphName,baseName,accentName,anchorName):
g = getGlyph(glyphName,f)
base = getGlyph(baseName,f)
accent = getGlyph(accentName,f)
if g == None or base == None or accent == None:
return
a1 = getAnchorByName(base,anchorName)
a2 = getAnchorByName(accent,"_" + anchorName)
if a1 == None or a2 == None:
return
offset = a1.p - a2.p
c = getComponentByName(f,g,accentName)
c.deltas[0].x = offset.x
c.deltas[0].y = offset.y
moveMarkAnchors(f, g, anchorName, accentName, offset.x, offset.y)
def alignComponentsToAnchors(f,glyphName,baseName,accentNames):
for a in accentNames:
if len(a) == 1:
continue
alignComponentToAnchor(f,glyphName,baseName,a[0],a[1])
|