diff options
| -rw-r--r-- | share/extensions/svgfont2layers.py | 55 |
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() |
