Changes

Jump to navigation Jump to search
| [[Image:Test-ROOT1.jpg|300px]]
|}
 
 
== Fontforge ==
In this example, we will use Metapost to draw a bezier curve of a glyph.<br/>
We will use 3-layer approach:
# a python layer that export a class,
# a lua layer to manage objects of this class
# a (con)TeX(t) layer that exports macro
 
Let's start with python code, <tt>test-fontforge.py</tt>:
<pre>
import sys
import fontforge
 
 
class simpledraw(object):
 
def __init__(self,font_file):
self.font = fontforge.open(font_file)
 
def getcurve(self,letter):
self.glname = letter
res = dict()
try :
glyph_letter = [ g for g in self.font.glyphs() if g.glyphname == self.glname][0]
except Exception ,e :
res['err'] = str(e)
return res
cnt= glyph_letter.layers[1][0]
res['is_quadratic'] = cnt.is_quadratic
res['closed'] = cnt.closed
res['points'] = [(p.x,p.y,"%i" %p.on_curve) for p in cnt ]
res['design_size'] = self.font.design_size
res['em'] = self.font.em
return res
 
 
def getmpostoutline(self,letter):
res = self.getcurve(letter)
path = '..'.join( [str((p[0],p[1])) for p in res['points'] if p[2] == '1'] )
return path
 
def getmpostpoints(self,letter):
res = self.getcurve(letter)
path = [str((p[0],p[1])) for p in res['points'] if p[2] == '1']
return path
 
def getmpostpointsSugar(self,letter):
res = self.getcurve(letter)
path = 'drawdot '.join( ["%s;" %str((p[0],p[1])) for p in res['points'] if p[2] == '1'] )
return 'drawdot ' +path
 
 
 
if __name__ == '__main__':
s = simpledraw("koeieletters.pfb")
res = s.getmpostpointsSugar('C')
print res
</pre>
 
Note the <tt>'__main__'</tt> check, so we can test this class from python. <br/>
Next lua layer

Navigation menu