diff options
Diffstat (limited to 'share/extensions/hershey.py')
| -rwxr-xr-x | share/extensions/hershey.py | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/share/extensions/hershey.py b/share/extensions/hershey.py new file mode 100755 index 000000000..931e5f337 --- /dev/null +++ b/share/extensions/hershey.py @@ -0,0 +1,109 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +""" +Hershey Text - renders a line of text using "Hershey" fonts for plotters + +Copyright 2011, Windell H. Oskay, www.evilmadscientist.com + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +""" +import hersheydata #data file w/ Hershey font data +import inkex +import simplestyle + +Debug = False + +def draw_svg_text(char, face, offset, vertoffset, parent): + style = { 'stroke': '#000000', 'fill': 'none' } + pathString = face[char] + splitString = pathString.split() + midpoint = offset - int(splitString[0]) + pathString = pathString[pathString.find("M"):] #portion after first move + trans = 'translate(' + str(midpoint) + ',' + str(vertoffset) + ')' + text_attribs = {'style':simplestyle.formatStyle(style), 'd':pathString, 'transform':trans} + inkex.etree.SubElement(parent, inkex.addNS('path','svg'), text_attribs) + return midpoint + int(splitString[1]) #new offset value + + +class Hershey( inkex.Effect ): + def __init__( self ): + inkex.Effect.__init__( self ) + self.OptionParser.add_option( "--tab", #NOTE: value is not used. + action="store", type="string", + dest="tab", default="splash", + help="The active tab when Apply was pressed" ) + self.OptionParser.add_option( "--text", + action="store", type="string", + dest="text", default="Hershey Text for Inkscape", + help="The input text to render") + self.OptionParser.add_option( "--action", + action="store", type="string", + dest="action", default="render", + help="The active option when Apply was pressed" ) + self.OptionParser.add_option( "--fontface", + action="store", type="string", + dest="fontface", default="rowmans", + help="The selected font face when Apply was pressed" ) + + def effect( self ): + + # Embed text in group to make manipulation easier: + g_attribs = {inkex.addNS('label','inkscape'):'Hershey Text' } + g = inkex.etree.SubElement(self.current_layer, 'g', g_attribs) + + font = eval('hersheydata.' + str(self.options.fontface)) + clearfont = hersheydata.futural + #Baseline: modernized roman simplex from JHF distribution. + + w = 0 #Initial spacing offset + spacing = 3 # spacing between letters + + if self.options.action == "render": + #evaluate text string + letterVals = [ord(q) - 32 for q in self.options.text] + for q in letterVals: + if (q < 0) or (q > 95): + w += 2*spacing + else: + w = draw_svg_text(q, font, w, 0, g) + else: + #Generate glyph table + wmax = 0; + for p in range(0,10): + w = 0 + v = spacing * (15*p - 67 ) + for q in range(0,10): + r = p*10 + q + if (r < 0) or (r > 95): + w += 5*spacing + else: + w = draw_svg_text(r, clearfont, w, v, g) + w = draw_svg_text(r, font, w, v, g) + w += 5*spacing + if w > wmax: + wmax = w + w = wmax + + # Translate group to center of view, approximately + t = 'translate(' + str( self.view_center[0] - w/2) + ',' + str( self.view_center[1] ) + ')' + g.set( 'transform',t) + + + +if __name__ == '__main__': + e = Hershey() + e.affect() + +# vim: expandtab shiftwidth=4 tabstop=8 softtabstop=4 fileencoding=utf-8 textwidth=99 |
