summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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()