summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelipe Corr??a da Silva Sanches <juca@members.fsf.org>2011-06-02 19:43:29 +0000
committerFelipe C. da S. Sanches <juca@members.fsf.org>2011-06-02 19:43:29 +0000
commit4128eee19eed18516dd6bb36beadc64d2af9ff9e (patch)
tree2fa0c0140b91a896df640b48c8b4bf9f5e9ceec5
parentimprove explanation of lpe parameter (diff)
downloadinkscape-4128eee19eed18516dd6bb36beadc64d2af9ff9e.tar.gz
inkscape-4128eee19eed18516dd6bb36beadc64d2af9ff9e.zip
some fixes to the svgfont2layers extension.
It still needs some performance optimization, as it is very slow. For that reason the current code has an arbitrary restriction to import only the first 30 glyphs from an svgfont. (bzr r10251)
-rw-r--r--share/extensions/svgfont2layers.py55
1 files changed, 37 insertions, 18 deletions
diff --git a/share/extensions/svgfont2layers.py b/share/extensions/svgfont2layers.py
index 4f23786d9..51eccb7f8 100644
--- a/share/extensions/svgfont2layers.py
+++ b/share/extensions/svgfont2layers.py
@@ -22,13 +22,15 @@ from PathData import PathData
class SVGFont2Layers(inkex.Effect):
def __init__(self):
+ self.count=0
inkex.Effect.__init__(self)
- def create_guideline(self, label, x, y):
+ def create_horiz_guideline(self, label, y):
namedview = self.svg.find(inkex.addNS('namedview', 'sodipodi'))
guide = inkex.etree.SubElement(namedview, inkex.addNS('guide', 'sodipodi'))
guide.set(inkex.addNS('label', 'inkscape'), label)
- guide.set("position" , str(x)+","+str(y))
+ guide.set("orientation", "0,1")
+ guide.set("position", "0,"+str(y))
def get_or_create(self, parentnode, nodetype):
node = parentnode.find(nodetype)
@@ -37,7 +39,11 @@ class SVGFont2Layers(inkex.Effect):
return node
def flip_cordinate_system(self, d, emsize, baseline):
- pathdata = PathData(d)
+
+ try:
+ pathdata = PathData(d)
+ except:
+ return d
def flip_cordinates(coordinates, emsize, baseline, relative):
x, y = coordinates
@@ -58,8 +64,10 @@ class SVGFont2Layers(inkex.Effect):
font = self.defs.find(inkex.addNS('font', 'svg'))
setwidth = font.get("horiz-adv-x")
baseline = font.get("horiz-origin-y")
+ if baseline is None:
+ baseline = 0
- fontface = self.font.find(inkex.addNS('font-face', 'svg'))
+ fontface = font.find(inkex.addNS('font-face', 'svg'))
#TODO: where should we save the font family name?
#fontfamily = fontface.get("font-family")
@@ -72,20 +80,25 @@ class SVGFont2Layers(inkex.Effect):
descender = fontface.get("descent")
self.svg.set("width", emsize)
- self.create_guideline("baseline", 0, int(baseline))
- self.create_guideline("ascender", 0, int(baseline) + int(ascender))
- self.create_guideline("caps", 0, int(baseline) + int(caps))
- self.create_guideline("xheight", 0, int(baseline) + int(xheight))
- self.create_guideline("descender", 0, int(baseline) - int(descender))
+ self.create_horiz_guideline("baseline", int(baseline))
+ self.create_horiz_guideline("ascender", int(baseline) + int(ascender))
+ self.create_horiz_guideline("caps", int(baseline) + int(caps))
+ self.create_horiz_guideline("xheight", int(baseline) + int(xheight))
+ self.create_horiz_guideline("descender", int(baseline) - int(descender))
#TODO: missing-glyph
glyphs = font.findall(inkex.addNS('glyph', 'svg'))
for glyph in glyphs:
- layer = inkex.etree.SubElement(self.svg, inkex.addNS('g', 'svg'))
unicode_char = glyph.get("unicode")
+ if unicode_char is None:
+ continue
+
+ layer = inkex.etree.SubElement(self.svg, inkex.addNS('g', 'svg'))
layer.set(inkex.addNS('label', 'inkscape'), "GlyphLayer-" + unicode_char)
layer.set(inkex.addNS('groupmode', 'inkscape'), "layer")
+ #TODO: interpret option 1
+
############################
#Option 1:
# Using clone (svg:use) as childnode of svg:glyph
@@ -98,23 +111,29 @@ class SVGFont2Layers(inkex.Effect):
#Option 2:
# Using svg:paths as childnodes of svg:glyph
- #paths = group.findall(inkex.addNS('path', 'svg'))
- #for p in paths:
- # d = p.get("d")
- # d = self.flip_cordinate_system(d, emsize, baseline)
- # path = inkex.etree.SubElement(glyph, inkex.addNS('path', 'svg'))
- # path.set("d", d)
+ paths = glyph.findall(inkex.addNS('path', 'svg'))
+ for path in paths:
+ d = path.get("d")
+ if d is None:
+ continue
+ d = self.flip_cordinate_system(d, emsize, baseline)
+ new_path = inkex.etree.SubElement(layer, inkex.addNS('path', 'svg'))
+ new_path.set("d", d)
############################
#Option 3:
# Using curve description in d attribute of svg:glyph
- paths = group.findall(inkex.addNS('path', 'svg'))
d = glyph.get("d")
+ if d is None:
+ continue
d = self.flip_cordinate_system(d, emsize, baseline)
path = inkex.etree.SubElement(layer, inkex.addNS('path', 'svg'))
path.set("d", d)
- #TODO: interpret options 1 and 2
+
+ self.count+=1
+ if self.count>30:
+ break
if __name__ == '__main__':
e = SVGFont2Layers()