From 4128eee19eed18516dd6bb36beadc64d2af9ff9e Mon Sep 17 00:00:00 2001 From: Felipe Corr??a da Silva Sanches Date: Thu, 2 Jun 2011 16:43:29 -0300 Subject: 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) --- share/extensions/svgfont2layers.py | 55 +++++++++++++++++++++++++------------- 1 file 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() -- cgit v1.2.3