diff options
| author | Felipe Corr??a da Silva Sanches <juca@members.fsf.org> | 2011-06-02 19:43:29 +0000 |
|---|---|---|
| committer | Felipe C. da S. Sanches <juca@members.fsf.org> | 2011-06-02 19:43:29 +0000 |
| commit | 4128eee19eed18516dd6bb36beadc64d2af9ff9e (patch) | |
| tree | 2fa0c0140b91a896df640b48c8b4bf9f5e9ceec5 | |
| parent | improve explanation of lpe parameter (diff) | |
| download | inkscape-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.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() |
