summaryrefslogtreecommitdiffstats
path: root/share/extensions
diff options
context:
space:
mode:
authorJabier Arraiza Cenoz <jabier.arraiza@marker.es>2015-02-02 20:08:49 +0000
committerJabiertxof <jtx@jtx.marker.es>2015-02-02 20:08:49 +0000
commit1d3b98e5f5311479cd87f20e3656b0133bff73bd (patch)
tree95eea2fcac18f236b31053e4d1493aa644760df0 /share/extensions
parentupdate to trunk (diff)
parentTranslations. Arabic translation update. (diff)
downloadinkscape-1d3b98e5f5311479cd87f20e3656b0133bff73bd.tar.gz
inkscape-1d3b98e5f5311479cd87f20e3656b0133bff73bd.zip
update to trunk
(bzr r13645.1.4)
Diffstat (limited to 'share/extensions')
-rw-r--r--share/extensions/Makefile.am6
-rw-r--r--share/extensions/dimension.inx2
-rw-r--r--share/extensions/dxf_input.inx14
-rwxr-xr-xshare/extensions/dxf_input.py24
-rw-r--r--share/extensions/dxf_outlines.inx24
-rwxr-xr-xshare/extensions/dxf_outlines.py4
-rw-r--r--share/extensions/gimp_xcf.inx2
-rwxr-xr-xshare/extensions/gimp_xcf.py2
-rw-r--r--share/extensions/hpgl_decoder.py87
-rwxr-xr-xshare/extensions/inkex.py62
-rw-r--r--share/extensions/inkscape_help_keys.inx2
-rwxr-xr-xshare/extensions/jessyInk.js13
-rw-r--r--share/extensions/layout_nup.inx4
-rwxr-xr-xshare/extensions/layout_nup_pageframe.py2
-rwxr-xr-xshare/extensions/measure.py7
-rwxr-xr-xshare/extensions/perfectboundcover.py2
-rw-r--r--share/extensions/plotter.inx3
-rw-r--r--share/extensions/plotter.py30
-rw-r--r--share/extensions/print_win32_vector.py2
-rw-r--r--share/extensions/seamless_pattern.inx4
-rwxr-xr-xshare/extensions/svg2fxg.xsl12
-rwxr-xr-xshare/extensions/svg2xaml.xsl12
-rwxr-xr-xshare/extensions/synfig_prepare.py10
-rw-r--r--share/extensions/test/svg/default-inkscape-SVG.svg4
-rw-r--r--share/extensions/test/svg/default-plain-SVG.svg4
-rw-r--r--share/extensions/test/svg/empty-SVG.svg4
-rw-r--r--share/extensions/webslicer_create_rect.inx2
27 files changed, 192 insertions, 152 deletions
diff --git a/share/extensions/Makefile.am b/share/extensions/Makefile.am
index d9d56a362..130ed6e40 100644
--- a/share/extensions/Makefile.am
+++ b/share/extensions/Makefile.am
@@ -13,7 +13,11 @@ otherstuffdir = $(datadir)/inkscape/extensions
moduledir = $(datadir)/inkscape/extensions
-extension_SCRIPTS = $(wildcard $(srcdir)/*.py)
+extension_SCRIPTS = \
+ $(wildcard $(srcdir)/*.py) \
+ $(wildcard $(srcdir)/*.pl) \
+ $(wildcard $(srcdir)/*.sh) \
+ $(wildcard $(srcdir)/*.rb)
otherstuff_DATA = \
fontfix.conf \
diff --git a/share/extensions/dimension.inx b/share/extensions/dimension.inx
index 343ad27bf..d89e5afa4 100644
--- a/share/extensions/dimension.inx
+++ b/share/extensions/dimension.inx
@@ -7,7 +7,7 @@
<dependency type="executable" location="extensions">pathmodifier.py</dependency>
<param name="xoffset" type="float" min="0" max="1000" _gui-text="X Offset:">50</param>
<param name="yoffset" type="float" min="0" max="1000" _gui-text="Y Offset:">50</param>
- <param name="type" type="enum" _gui-text="Bounding box type :">
+ <param name="type" type="enum" _gui-text="Bounding box type:">
<_item value="geometric">Geometric</_item>
<_item value="visual">Visual</_item>
</param>
diff --git a/share/extensions/dxf_input.inx b/share/extensions/dxf_input.inx
index 0ba38252a..4488774a3 100644
--- a/share/extensions/dxf_input.inx
+++ b/share/extensions/dxf_input.inx
@@ -6,8 +6,12 @@
<dependency type="executable" location="extensions">inkex.py</dependency>
<param name="tab" type="notebook">
<page name="options" _gui-text="Options">
- <param name="auto" type="boolean" _gui-text="Use automatic scaling to size A4">true</param>
- <param name="scale" type="string" _gui-text="Or, use manual scale factor:">1.0</param>
+ <param name="scalemethod" type="optiongroup" _gui-text="Method of Scaling:">
+ <option value="manual">Manual scale</option>
+ <option value="auto">Automatic scaling to size A4</option>
+ <option value="file">Read from file</option>
+ </param>
+ <param name="scale" type="string" _gui-text="Manual scale factor:">1.0</param>
<param name="xmin" type="string" _gui-text="Manual x-axis origin (mm):">0.0</param>
<param name="ymin" type="string" _gui-text="Manual y-axis origin (mm):">0.0</param>
<param name="gcodetoolspoints" type="boolean" _gui-text="Gcodetools compatible point import">false</param>
@@ -22,9 +26,11 @@
</page>
<page name="help" _gui-text="Help">
<_param name="inputhelp" type="description" xml:space="preserve">- AutoCAD Release 13 and newer.
-- assume dxf drawing is in mm.
-- assume svg drawing is in pixels, at 90 dpi.
+- for manual scaling, assume dxf drawing is in mm.
+- assume svg drawing is in pixels, at 96 dpi.
- scale factor and origin apply only to manual scaling.
+- 'Automatic scaling' will fit the width of an A4 page.
+- 'Read from file' uses the variable $MEASUREMENT.
- layers are preserved only on File->Open, not Import.
- limited support for BLOCKS, use AutoCAD Explode Blocks instead, if needed.</_param>
</page>
diff --git a/share/extensions/dxf_input.py b/share/extensions/dxf_input.py
index 7ca176c92..f0a1296f1 100755
--- a/share/extensions/dxf_input.py
+++ b/share/extensions/dxf_input.py
@@ -344,7 +344,7 @@ colors = { 1: '#FF0000', 2: '#FFFF00', 3: '#00FF00', 4: '#00FFFF', 5: '
250: '#333333', 251: '#505050', 252: '#696969', 253: '#828282', 254: '#BEBEBE', 255: '#FFFFFF'}
parser = inkex.optparse.OptionParser(usage="usage: %prog [options] SVGfile", option_class=inkex.InkOption)
-parser.add_option("--auto", action="store", type="inkbool", dest="auto", default=True)
+parser.add_option("--scalemethod", action="store", type="string", dest="scalemethod", default="manual")
parser.add_option("--scale", action="store", type="string", dest="scale", default="1.0")
parser.add_option("--xmin", action="store", type="string", dest="xmin", default="0.0")
parser.add_option("--ymin", action="store", type="string", dest="ymin", default="0.0")
@@ -354,7 +354,7 @@ parser.add_option("--font", action="store", type="string", dest="font", default=
parser.add_option("--tab", action="store", type="string", dest="tab", default="Options")
parser.add_option("--inputhelp", action="store", type="string", dest="inputhelp", default="")
(options, args) = parser.parse_args(inkex.sys.argv[1:])
-doc = inkex.etree.parse(StringIO('<svg xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" width="%s" height="%s"></svg>' % (210*90/25.4, 297*90/25.4)))
+doc = inkex.etree.parse(StringIO('<svg xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" width="%s" height="%s"></svg>' % (210*96/25.4, 297*96/25.4)))
desc = inkex.etree.SubElement(doc.getroot(), 'desc', {})
defs = inkex.etree.SubElement(doc.getroot(), 'defs', {})
marker = inkex.etree.SubElement(defs, 'marker', {'id': 'DistanceX', 'orient': 'auto', 'refX': '0.0', 'refY': '0.0', 'style': 'overflow:visible'})
@@ -365,7 +365,8 @@ inkex.etree.SubElement(pattern, 'path', {'d': 'M6 2 l-4,4', 'stroke': '#000000',
inkex.etree.SubElement(pattern, 'path', {'d': 'M4 0 l-4,4', 'stroke': '#000000', 'stroke-width': '0.25', 'linecap': 'square'})
stream = open(args[0], 'r')
xmax = xmin = ymin = 0.0
-height = 297.0*90.0/25.4 # default A4 height in pixels
+height = 297.0*96.0/25.4 # default A4 height in pixels
+measurement = 0 # default inches
line = get_line()
polylines = 0
flag = 0 # (0, 1, 2, 3) = (none, LAYER, LTYPE, DIMTXT)
@@ -376,7 +377,10 @@ DIMTXT = {} # store DIMENSION text sizes
while line[0] and line[1] != 'BLOCKS':
line = get_line()
- if options.auto:
+ if options.scalemethod == 'file':
+ if line[1] == '$MEASUREMENT':
+ measurement = get_group('70')
+ elif options.scalemethod == 'auto':
if line[1] == '$EXTMIN':
xmin = get_group('10')
ymin = get_group('20')
@@ -406,7 +410,11 @@ while line[0] and line[1] != 'BLOCKS':
if line[0] == '0' and line[1] == 'ENDTAB':
flag = 0
-if options.auto:
+if options.scalemethod == 'file':
+ scale = 25.4 # default inches
+ if measurement == 1.0:
+ scale = 1.0 # use mm
+elif options.scalemethod == 'auto':
scale = 1.0
if xmax > xmin:
scale = 210.0/(xmax - xmin) # scale to A4 width
@@ -414,8 +422,8 @@ else:
scale = float(options.scale) # manual scale factor
xmin = float(options.xmin)
ymin = float(options.ymin)
-desc.text = '%s - scale = %f, origin = (%f, %f), auto = %s' % (unicode(args[0], options.input_encode), scale, xmin, ymin, options.auto)
-scale *= 90.0/25.4 # convert from mm to pixels
+desc.text = '%s - scale = %f, origin = (%f, %f), method = %s' % (unicode(args[0], options.input_encode), scale, xmin, ymin, options.scalemethod)
+scale *= 96.0/25.4 # convert from mm to pixels
if not layer_nodes.has_key('0'):
attribs = {inkex.addNS('groupmode','inkscape'): 'layer', inkex.addNS('label','inkscape'): '0'}
@@ -487,7 +495,7 @@ while line[0] and (line[1] != 'ENDSEC' or not inENTITIES):
w = 0.5 # default lineweight for POINT
if vals[groups['370']]: # Common Lineweight
if vals[groups['370']][0] > 0:
- w = 90.0/25.4*vals[groups['370']][0]/100.0
+ w = 96.0/25.4*vals[groups['370']][0]/100.0
if w < 0.5:
w = 0.5
style = simplestyle.formatStyle({'stroke': '%s' % color, 'fill': 'none', 'stroke-width': '%.1f' % w})
diff --git a/share/extensions/dxf_outlines.inx b/share/extensions/dxf_outlines.inx
index ad3aef17f..3b90afcc8 100644
--- a/share/extensions/dxf_outlines.inx
+++ b/share/extensions/dxf_outlines.inx
@@ -9,32 +9,32 @@
<page name="options" _gui-text="Options">
<param name="ROBO" type="boolean" _gui-text="use ROBO-Master type of spline output">false</param>
<param name="POLY" type="boolean" _gui-text="use LWPOLYLINE type of line output">true</param>
- <param name="units" type="enum" _gui-text="Base unit">
- <_item value="72./90">pt</_item>
- <_item value="1./15">pc</_item>
+ <param name="units" type="enum" _gui-text="Base unit:">
+ <_item value="72./96">pt</_item>
+ <_item value="1./16">pc</_item>
<_item value="1.">px</_item>
- <_item value="25.4/90">mm</_item>
- <_item value="2.54/90">cm</_item>
- <_item value=".0254/90">m</_item>
- <_item value="1./90">in</_item>
- <_item value="1./1080">ft</_item>
+ <_item value="25.4/96">mm</_item>
+ <_item value="2.54/96">cm</_item>
+ <_item value=".0254/96">m</_item>
+ <_item value="1./96">in</_item>
+ <_item value="1./1152">ft</_item>
</param>
- <param name="encoding" type="enum" _gui-text="Character Encoding">
+ <param name="encoding" type="enum" _gui-text="Character Encoding:">
<_item value="latin_1">Latin 1</_item>
<_item value="cp1250">CP 1250</_item>
<_item value="cp1252">CP 1252</_item>
<_item value="utf_8">UTF 8</_item>
</param>
- <param name="layer_option" type="enum" _gui-text="Layer export selection">
+ <param name="layer_option" type="enum" _gui-text="Layer export selection:">
<_item value="all">All (default)</_item>
<_item value="visible">Visible only</_item>
<_item value="name">By name match</_item>
</param>
- <param name="layer_name" type="string" _gui-text="Layer match name"></param>
+ <param name="layer_name" type="string" _gui-text="Layer match name:"></param>
</page>
<page name="help" _gui-text="Help">
<_param name="inputhelp" type="description" xml:space="preserve">- AutoCAD Release 14 DXF format.
-- The base unit parameter specifies in what unit the coordinates are output (90 px = 1 in).
+- The base unit parameter specifies in what unit the coordinates are output (96 px = 1 in).
- Supported element types
- paths (lines and splines)
- rectangles
diff --git a/share/extensions/dxf_outlines.py b/share/extensions/dxf_outlines.py
index f5cf37aff..f7e57c32e 100755
--- a/share/extensions/dxf_outlines.py
+++ b/share/extensions/dxf_outlines.py
@@ -76,7 +76,7 @@ class MyEffect(inkex.Effect):
default=True)
self.OptionParser.add_option("--units", action="store",
type="string", dest="units",
- default="72./90") # Points
+ default="72./96") # Points
self.OptionParser.add_option("--encoding", action="store",
type="string", dest="char_encode",
default="latin_1")
@@ -324,7 +324,7 @@ class MyEffect(inkex.Effect):
scale = eval(self.options.units)
if not scale:
- scale = 25.4/90 # if no scale is specified, assume inch as baseunit
+ scale = 25.4/96 # if no scale is specified, assume inch as baseunit
h = self.unittouu(self.document.getroot().xpath('@height', namespaces=inkex.NSS)[0])
self.groupmat = [[[scale, 0.0, 0.0], [0.0, -scale, h*scale]]]
doc = self.document.getroot()
diff --git a/share/extensions/gimp_xcf.inx b/share/extensions/gimp_xcf.inx
index 10bcef627..30406b62d 100644
--- a/share/extensions/gimp_xcf.inx
+++ b/share/extensions/gimp_xcf.inx
@@ -11,7 +11,7 @@
<param name="guides" type="boolean" _gui-text="Save Guides">false</param>
<param name="grid" type="boolean" _gui-text="Save Grid">false</param>
<param name="background" type="boolean" _gui-text="Save Background">false</param>
- <param name="dpi" type="int" min="1" max="3000" _gui-text="File Resolution:">90</param>
+ <param name="dpi" type="int" min="1" max="3000" _gui-text="File Resolution:">96</param>
</page>
<page name="Help" _gui-text="Help">
<_param name="instructions" type="description" xml:space="preserve">This extension exports the document to Gimp XCF format according to the following options:
diff --git a/share/extensions/gimp_xcf.py b/share/extensions/gimp_xcf.py
index c2a8cb274..11c9d041f 100755
--- a/share/extensions/gimp_xcf.py
+++ b/share/extensions/gimp_xcf.py
@@ -63,7 +63,7 @@ class MyEffect(inkex.Effect):
help="Add background color to each layer")
self.OptionParser.add_option("-i", "--dpi",
action="store", type="string",
- dest="resolution", default="90",
+ dest="resolution", default="96",
help="File resolution")
def output(self):
diff --git a/share/extensions/hpgl_decoder.py b/share/extensions/hpgl_decoder.py
index e909790b7..cd900202b 100644
--- a/share/extensions/hpgl_decoder.py
+++ b/share/extensions/hpgl_decoder.py
@@ -41,84 +41,63 @@ class hpglDecoder:
self.scaleY = options.resolutionY / 25.4 # dots/inch to dots/mm
self.warning = ''
self.textMovements = _("Movements")
- self.textPenNumber = _("Pen #")
+ self.textPenNumber = _("Pen ")
+ self.layers = {}
+ self.oldCoordinates = (0.0, self.options.docHeight)
def getSvg(self):
+ actualLayer = 0
# prepare document
- self.doc = inkex.etree.parse(StringIO('<svg xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="%smm" height="%smm" viewBox="0 0 %s %s"></svg>' %
+ self.doc = inkex.etree.parse(StringIO('<svg xmlns:sodipodi="' + inkex.NSS['sodipodi'] + '" xmlns:inkscape="' + inkex.NSS['inkscape'] + '" width="%smm" height="%smm" viewBox="0 0 %s %s"></svg>' %
(self.options.docWidth, self.options.docHeight, self.options.docWidth, self.options.docHeight)))
inkex.etree.SubElement(self.doc.getroot(), inkex.addNS('namedview', 'sodipodi'), {inkex.addNS('document-units', 'inkscape'): 'mm'})
- actualLayer = 0
- self.layers = {}
if self.options.showMovements:
self.layers[0] = inkex.etree.SubElement(self.doc.getroot(), 'g', {inkex.addNS('groupmode', 'inkscape'): 'layer', inkex.addNS('label', 'inkscape'): self.textMovements, 'id': self.textMovements})
- # parse paths
+ # cut stream into commands
hpglData = self.hpglString.split(';')
+ # if number of commands is under needed minimum, no data was found
if len(hpglData) < 3:
raise Exception('NO_HPGL_DATA')
- oldCoordinates = (0.0, self.options.docHeight)
- path = ''
+ # decode commands into svg data
for i, command in enumerate(hpglData):
if command.strip() != '':
if command[:2] == 'IN' or command[:2] == 'FS' or command[:2] == 'VS':
- # if Initialize, force or speed command, ignore
+ # if Initialize, force or speed command ignore it
pass
elif command[:2] == 'SP':
# if Select Pen command
- actualLayer = command[2:]
- self.createLayer(actualLayer)
+ actualLayer = int(command[2:])
elif command[:2] == 'PU':
# if Pen Up command
- if ' L ' in path:
- self.addPathToLayer(path, actualLayer)
- if self.options.showMovements and oldCoordinates != self.getParameters(command[2:]):
- path = 'M %f,%f' % oldCoordinates
- path += ' L %f,%f' % self.getParameters(command[2:])
- self.addPathToLayer(path, 0)
- path = 'M %f,%f' % self.getParameters(command[2:])
- oldCoordinates = self.getParameters(command[2:])
+ self.parametersToPath(command[2:], 0, True)
elif command[:2] == 'PD':
# if Pen Down command
- parameterString = command[2:]
- if parameterString.strip() != '':
- parameterString = parameterString.replace(';', '').strip()
- parameter = parameterString.split(',')
- for i, param in enumerate(parameter):
- if i % 2 == 0:
- parameter[i] = str(float(param) / self.scaleX)
- else:
- parameter[i] = str(self.options.docHeight - (float(param) / self.scaleY))
- parameterString = ','.join(parameter)
- path += ' L %s' % parameterString
- oldCoordinates = (float(parameter[-2]), float(parameter[-1]))
+ self.parametersToPath(command[2:], actualLayer + 1, False)
else:
self.warning = 'UNKNOWN_COMMANDS'
- if ' L ' in path:
- self.addPathToLayer(path, actualLayer)
return (self.doc, self.warning)
- def createLayer(self, layerNumber):
- try:
- self.layers[layerNumber]
- except KeyError:
- self.layers[layerNumber] = inkex.etree.SubElement(self.doc.getroot(), 'g',
- {inkex.addNS('groupmode', 'inkscape'): 'layer', inkex.addNS('label', 'inkscape'): self.textPenNumber + layerNumber, 'id': self.textPenNumber + layerNumber})
-
- def addPathToLayer(self, path, layerNumber):
- lineColor = '000000'
- if layerNumber == 0:
- lineColor = 'ff0000'
- inkex.etree.SubElement(self.layers[layerNumber], 'path', {'d': path, 'style': 'stroke:#' + lineColor + '; stroke-width:0.4; fill:none;'})
+ def parametersToPath(self, parameters, layerNum, isPU):
+ # split params and sanity check them
+ parameters = parameters.strip().split(',')
+ if len(parameters) > 0 and len(parameters) % 2 == 0:
+ for i, param in enumerate(parameters):
+ # convert params to document units
+ if i % 2 == 0:
+ parameters[i] = str(float(param) / self.scaleX)
+ else:
+ parameters[i] = str(self.options.docHeight - (float(param) / self.scaleY))
+ # create path and add it to the corresponding layer
+ if not isPU or (self.options.showMovements and isPU):
+ # create layer if it does not exist
+ try:
+ self.layers[layerNum]
+ except KeyError:
+ self.layers[layerNum] = inkex.etree.SubElement(self.doc.getroot(), 'g',
+ {inkex.addNS('groupmode', 'inkscape'): 'layer', inkex.addNS('label', 'inkscape'): self.textPenNumber + str(layerNum - 1), 'id': self.textPenNumber + str(layerNum - 1)})
+ path = 'M %f,%f L %s' % (self.oldCoordinates[0], self.oldCoordinates[1], ','.join(parameters))
+ inkex.etree.SubElement(self.layers[layerNum], 'path', {'d': path, 'style': 'stroke:#' + ('ff0000' if isPU else '000000') + '; stroke-width:0.2; fill:none;'})
+ self.oldCoordinates = (float(parameters[-2]), float(parameters[-1]))
- def getParameters(self, parameterString):
- # process coordinates
- if parameterString.strip() == '':
- parameterString = '0,0;'
- # remove command delimiter
- parameterString = parameterString.replace(';', '').strip()
- # split parameter
- parameter = parameterString.split(',')
- # convert to svg coordinate system and return
- return (float(parameter[0]) / self.scaleX, self.options.docHeight - (float(parameter[1]) / self.scaleY))
# vim: expandtab shiftwidth=4 tabstop=8 softtabstop=4 fileencoding=utf-8 textwidth=99 \ No newline at end of file
diff --git a/share/extensions/inkex.py b/share/extensions/inkex.py
index 0f880005d..19e860b9a 100755
--- a/share/extensions/inkex.py
+++ b/share/extensions/inkex.py
@@ -101,6 +101,13 @@ def errormsg(msg):
else:
sys.stderr.write((unicode(msg, "utf-8", errors='replace') + "\n").encode("UTF-8"))
+def are_near_relative(a, b, eps):
+ if (a-b <= a*eps) and (a-b >= -a*eps):
+ return True
+ else:
+ return False
+
+
# third party library
try:
from lxml import etree
@@ -277,16 +284,57 @@ class Effect:
retval = None
return retval
- def getDocumentUnit(self):
- docunit = self.document.xpath('//sodipodi:namedview/@inkscape:document-units', namespaces=NSS)
- if docunit:
- return docunit[0]
- else:
- return 'px'
-
#a dictionary of unit to user unit conversion factors
__uuconv = {'in':96.0, 'pt':1.33333333333, 'px':1.0, 'mm':3.77952755913, 'cm':37.7952755913,
'm':3779.52755913, 'km':3779527.55913, 'pc':16.0, 'yd':3456.0 , 'ft':1152.0}
+
+ # Function returns the unit used for the values in SVG.
+ # For lack of an attribute in SVG that explicitly defines what units are used for SVG coordinates,
+ # try to calculate the unit from the SVG width and SVG viewbox.
+ # Defaults to 'px' units.
+ def getDocumentUnit(self):
+ svgunit = 'px' #default to pixels
+
+ svgwidth = self.document.getroot().get('width')
+ viewboxstr = self.document.getroot().get('viewBox')
+ if viewboxstr:
+ unitmatch = re.compile('(%s)$' % '|'.join(self.__uuconv.keys()))
+ param = re.compile(r'(([-+]?[0-9]+(\.[0-9]*)?|[-+]?\.[0-9]+)([eE][-+]?[0-9]+)?)')
+
+ p = param.match(svgwidth)
+ u = unitmatch.search(svgwidth)
+
+ width = 100 #default
+ viewboxwidth = 100 #default
+ svgwidthunit = 'px' #default assume 'px' unit
+ if p:
+ width = float(p.string[p.start():p.end()])
+ else:
+ errormsg(_("SVG Width not set correctly! Assuming width = 100"))
+ if u:
+ svgwidthunit = u.string[u.start():u.end()]
+
+ viewboxnumbers = []
+ for t in viewboxstr.split():
+ try:
+ viewboxnumbers.append(float(t))
+ except ValueError:
+ pass
+ if len(viewboxnumbers) == 4: #check for correct number of numbers
+ viewboxwidth = viewboxnumbers[2]
+
+ svgunitfactor = self.__uuconv[svgwidthunit] * width / viewboxwidth
+
+ # try to find the svgunitfactor in the list of units known. If we don't find something, ...
+ eps = 0.01 #allow 1% error in factor
+ for key in self.__uuconv:
+ if are_near_relative(self.__uuconv[key], svgunitfactor, eps):
+ #found match!
+ svgunit = key;
+
+ return svgunit
+
+
def unittouu(self, string):
'''Returns userunits given a string representation of units in another system'''
unit = re.compile('(%s)$' % '|'.join(self.__uuconv.keys()))
diff --git a/share/extensions/inkscape_help_keys.inx b/share/extensions/inkscape_help_keys.inx
index 9608ac7b9..612524517 100644
--- a/share/extensions/inkscape_help_keys.inx
+++ b/share/extensions/inkscape_help_keys.inx
@@ -4,7 +4,7 @@
<id>org.inkscape.help.keys</id>
<dependency type="executable" location="extensions">launch_webbrowser.py</dependency>
<!-- i18n. Please don't translate it unless a page exists in your language -->
- <_param name="url" gui-hidden="true" type="string">http://inkscape.org/doc/keys048.html</_param>
+ <_param name="url" gui-hidden="true" type="string">http://inkscape.org/doc/keys091.html</_param>
<effect needs-document="false">
<object-type>all</object-type>
<effects-menu hidden="true" />
diff --git a/share/extensions/jessyInk.js b/share/extensions/jessyInk.js
index 78b4bf896..74e9c0b9c 100755
--- a/share/extensions/jessyInk.js
+++ b/share/extensions/jessyInk.js
@@ -1419,18 +1419,7 @@ function slideUpdateExportLayer()
}
// Serialise the new document.
- var serializer = new XMLSerializer();
- var strm =
- {
- content : "",
- close : function() {},
- flush : function() {},
- write : function(str, count) { this.content += str; }
- };
-
- var xml = serializer.serializeToStream(newDoc, strm, 'UTF-8');
-
- window.location = 'data:application/svg+xml;base64;charset=utf-8,' + window.btoa(strm.content);
+ window.location = 'data:application/svg+xml;base64;charset=utf-8,' + window.btoa(unescape(encodeURIComponent((new XMLSerializer()).serializeToString(newDoc))));
// Unsuspend redraw.
ROOT_NODE.unsuspendRedraw(suspendHandle);
diff --git a/share/extensions/layout_nup.inx b/share/extensions/layout_nup.inx
index bdf650722..2b7734fc3 100644
--- a/share/extensions/layout_nup.inx
+++ b/share/extensions/layout_nup.inx
@@ -15,8 +15,8 @@
<item value="cm">cm</item>
<item value="mm">mm</item>
</param>
- <param name="pgSizeX" type="float" min="0.0" max="9999.0" _gui-text="Size X:">765</param>
- <param name="pgSizeY" type="float" min="0.0" max="9999.0" _gui-text="Size Y:">990</param>
+ <param name="pgSizeX" type="float" min="0.0" max="9999.0" _gui-text="Size X:">816</param>
+ <param name="pgSizeY" type="float" min="0.0" max="9999.0" _gui-text="Size Y:">1056</param>
<_param name="pgMargin" type="description" appearance="header">Page margins</_param>
<param name="pgMarginTop" type="float" indent="1" min="0.0" max="9999.0" _gui-text="Top:">0</param>
<param name="pgMarginBottom" type="float" indent="1" min="0.0" max="9999.0" _gui-text="Bottom:">0</param>
diff --git a/share/extensions/layout_nup_pageframe.py b/share/extensions/layout_nup_pageframe.py
index 59da1f4bb..471a75dd3 100755
--- a/share/extensions/layout_nup_pageframe.py
+++ b/share/extensions/layout_nup_pageframe.py
@@ -38,7 +38,7 @@ def expandTuple(unit, x, length = 4):
#@-node:tbrown.20070622103716.1:expandTuple
#@+node:tbrown.20070622103716.2:GenerateNup
def GenerateNup(unit="px",
- pgSize=("8.5*90","11*90"),
+ pgSize=("8.5*96","11*96"),
pgMargin=(0,0),
pgPadding=(0,0),
num=(2,2),
diff --git a/share/extensions/measure.py b/share/extensions/measure.py
index edcd2e92f..cdccb6bb8 100755
--- a/share/extensions/measure.py
+++ b/share/extensions/measure.py
@@ -183,9 +183,10 @@ class Length(inkex.Effect):
doc = self.document.getroot()
if doc.get('viewBox'):
[viewx, viewy, vieww, viewh] = doc.get('viewBox').split(' ')
- factor = float(doc.get('width'))/float(vieww)
- if float(doc.get('height'))/float(viewh) < factor:
- factor = float(doc.get('height'))/float(viewh)
+ factor = self.unittouu(doc.get('width'))/float(vieww)
+ if self.unittouu(doc.get('height'))/float(viewh) < factor:
+ factor = self.unittouu(doc.get('height'))/float(viewh)
+ factor /= self.unittouu('1px')
self.options.fontsize /= factor
# loop over all selected paths
for id, node in self.selected.iteritems():
diff --git a/share/extensions/perfectboundcover.py b/share/extensions/perfectboundcover.py
index 6cdab7eab..9f81dbb36 100755
--- a/share/extensions/perfectboundcover.py
+++ b/share/extensions/perfectboundcover.py
@@ -135,7 +135,7 @@ class PerfectBoundCover(inkex.Effect):
for guide in guides:
newguide = inkex.etree.Element(inkex.addNS('guide','sodipodi'))
newguide.set("orientation", guide[0])
- newguide.set("position", "%f" % (guide[1] * 90))
+ newguide.set("position", "%f" % (guide[1] * 96))
namedview[0].append(newguide)
'''
diff --git a/share/extensions/plotter.inx b/share/extensions/plotter.inx
index 80543f02a..5a6d8ce06 100644
--- a/share/extensions/plotter.inx
+++ b/share/extensions/plotter.inx
@@ -36,8 +36,9 @@
<param name="commandLanguage" type="enum" _gui-text="Command language:" _gui-description="The command language to use (Default: HPGL)">
<_item value="HPGL">HPGL</_item>
<_item value="DMPL">DMPL</_item>
- <_item value="ZING">KNK Zing (HPGL variant)</_item>
+ <_item value="KNK">KNK Plotter (HPGL variant)</_item>
</param>
+ <param name="initCommands" type="string" _gui-text="Initialization commands:" _gui-description="Commands that will be sent to the plotter before the main data stream, only use this if you know what you are doing! (Default: Empty)"></param>
<param name="space" type="description">&#xa0;</param>
<_param name="freezeHelp" type="description">Using wrong settings can under certain circumstances cause Inkscape to freeze. Always save your work before plotting!</_param>
<_param name="serialHelp" type="description">This can be a physical serial connection or a USB-to-Serial bridge. Ask your plotter manufacturer for drivers if needed.</_param>
diff --git a/share/extensions/plotter.py b/share/extensions/plotter.py
index 398ab683e..7e24d0824 100644
--- a/share/extensions/plotter.py
+++ b/share/extensions/plotter.py
@@ -39,6 +39,7 @@ class Plot(inkex.Effect):
self.OptionParser.add_option('--serialBaudRate', action='store', type='string', dest='serialBaudRate', default='9600', help='Serial Baud rate')
self.OptionParser.add_option('--flowControl', action='store', type='string', dest='flowControl', default='0', help='Flow control')
self.OptionParser.add_option('--commandLanguage', action='store', type='string', dest='commandLanguage', default='hpgl', help='Command Language')
+ self.OptionParser.add_option('--initCommands', action='store', type='string', dest='initCommands', default='', help='Initialization commands')
self.OptionParser.add_option('--resolutionX', action='store', type='float', dest='resolutionX', default=1016.0, help='Resolution X (dpi)')
self.OptionParser.add_option('--resolutionY', action='store', type='float', dest='resolutionY', default=1016.0, help='Resolution Y (dpi)')
self.OptionParser.add_option('--pen', action='store', type='int', dest='pen', default=1, help='Pen number')
@@ -52,7 +53,7 @@ class Plot(inkex.Effect):
self.OptionParser.add_option('--toolOffset', action='store', type='float', dest='toolOffset', default=0.25, help='Tool offset (mm)')
self.OptionParser.add_option('--precut', action='store', type='inkbool', dest='precut', default='TRUE', help='Use precut')
self.OptionParser.add_option('--flat', action='store', type='float', dest='flat', default=1.2, help='Curve flatness')
- self.OptionParser.add_option('--autoAlign', action='store', type='inkbool', dest='autoAlign', default='TRUE', help='Auto align')
+ self.OptionParser.add_option('--autoAlign', action='store', type='inkbool', dest='autoAlign', default='TRUE', help='Auto align')
self.OptionParser.add_option('--debug', action='store', type='inkbool', dest='debug', default='FALSE', help='Show debug information')
def effect(self):
@@ -87,8 +88,8 @@ class Plot(inkex.Effect):
self.convertToHpgl()
if self.options.commandLanguage == 'DMPL':
self.convertToDmpl()
- if self.options.commandLanguage == 'ZING':
- self.convertToZing()
+ if self.options.commandLanguage == 'KNK':
+ self.convertToKNK()
# output
if self.options.debug:
self.showDebugInfo(debugObject)
@@ -102,7 +103,7 @@ class Plot(inkex.Effect):
hpglInit += ';FS%d' % self.options.force
if self.options.speed > 0:
hpglInit += ';VS%d' % self.options.speed
- self.hpgl = hpglInit + self.hpgl + ';PU0,0;SP0;IN;'
+ self.hpgl = hpglInit + self.hpgl + ';PU0,0;SP0;IN; '
def convertToDmpl(self):
# convert HPGL to DMPL
@@ -124,16 +125,16 @@ class Plot(inkex.Effect):
if self.options.speed > 0:
dmplInit += 'V%d' % self.options.speed
dmplInit += 'EC1'
- self.hpgl = dmplInit + self.hpgl[1:] + ',U0,0,P0Z'
+ self.hpgl = dmplInit + self.hpgl[1:] + ',U0,0,P0Z '
- def convertToZing(self):
- # convert HPGL to Zing
+ def convertToKNK(self):
+ # convert HPGL to KNK Plotter Language
hpglInit = 'ZG;SP%d' % self.options.pen
if self.options.force > 0:
hpglInit += ';FS%d' % self.options.force
if self.options.speed > 0:
hpglInit += ';VS%d' % self.options.speed
- self.hpgl = hpglInit + self.hpgl + ';PU0,0;SP0;@'
+ self.hpgl = hpglInit + self.hpgl + ';PU0,0;SP0;@ '
def sendHpglToSerial(self):
# gracefully exit script when pySerial is missing
@@ -165,6 +166,8 @@ class Plot(inkex.Effect):
else:
type, value, traceback = sys.exc_info()
raise ValueError, ('', type, value), traceback
+ if self.options.initCommands != '':
+ mySerial.write(self.options.initCommands.decode('string_escape'))
mySerial.write(self.hpgl)
mySerial.read(2)
mySerial.close()
@@ -172,16 +175,17 @@ class Plot(inkex.Effect):
def showDebugInfo(self, debugObject):
# show debug information
inkex.errormsg("---------------------------------\nDebug information\n---------------------------------\n\nSettings:\n")
- inkex.errormsg(' Serial Port: ' + str(self.options.serialPort))
- inkex.errormsg(' Serial baud rate: ' + str(self.options.serialBaudRate))
- inkex.errormsg(' Flow control: ' + str(self.options.flowControl))
- inkex.errormsg(' Command language: ' + str(self.options.commandLanguage))
+ inkex.errormsg(' Serial Port: ' + self.options.serialPort)
+ inkex.errormsg(' Serial baud rate: ' + self.options.serialBaudRate)
+ inkex.errormsg(' Flow control: ' + self.options.flowControl)
+ inkex.errormsg(' Command language: ' + self.options.commandLanguage)
+ inkex.errormsg(' Initialization commands: ' + self.options.initCommands)
inkex.errormsg(' Resolution X (dpi): ' + str(self.options.resolutionX))
inkex.errormsg(' Resolution Y (dpi): ' + str(self.options.resolutionY))
inkex.errormsg(' Pen number: ' + str(self.options.pen))
inkex.errormsg(' Pen force (g): ' + str(self.options.force))
inkex.errormsg(' Pen speed (cm/s): ' + str(self.options.speed))
- inkex.errormsg(' Rotation (Clockwise): ' + str(self.options.orientation))
+ inkex.errormsg(' Rotation (Clockwise): ' + self.options.orientation)
inkex.errormsg(' Mirror X axis: ' + str(self.options.mirrorX))
inkex.errormsg(' Mirror Y axis: ' + str(self.options.mirrorY))
inkex.errormsg(' Center zero point: ' + str(self.options.center))
diff --git a/share/extensions/print_win32_vector.py b/share/extensions/print_win32_vector.py
index ca166d25a..37c2021ac 100644
--- a/share/extensions/print_win32_vector.py
+++ b/share/extensions/print_win32_vector.py
@@ -199,7 +199,7 @@ class MyEffect(inkex.Effect):
if mygdi.StartDocA(self.hDC, byref(docInfo)) < 0:
exit() # user clicked Cancel
- self.scale = (ord(pDevMode[58]) + 256.0*ord(pDevMode[59]))/90 # use PrintQuality from DEVMODE
+ self.scale = (ord(pDevMode[58]) + 256.0*ord(pDevMode[59]))/96 # use PrintQuality from DEVMODE
self.groupmat = [[[self.scale, 0.0, 0.0], [0.0, self.scale, 0.0]]]
doc = self.document.getroot()
self.process_group(doc)
diff --git a/share/extensions/seamless_pattern.inx b/share/extensions/seamless_pattern.inx
index fe4098e05..f63872272 100644
--- a/share/extensions/seamless_pattern.inx
+++ b/share/extensions/seamless_pattern.inx
@@ -4,8 +4,8 @@
<id>org.inkscape.render.seamless_pattern</id>
<dependency type="executable" location="extensions">seamless_pattern.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
- <param name="width" _gui-text="Custom Width (px.):" type="int" min="1" max="99999999">100</param>
- <param name="height" _gui-text="Custom Height (px.):" type="int" min="1" max="99999999">100</param>
+ <param name="width" _gui-text="Custom Width (px):" type="int" min="1" max="99999999">100</param>
+ <param name="height" _gui-text="Custom Height (px):" type="int" min="1" max="99999999">100</param>
<_param name="help-info" type="description">This extension overwrite current document</_param>
<effect needs-live-preview="false">
diff --git a/share/extensions/svg2fxg.xsl b/share/extensions/svg2fxg.xsl
index db9f61f22..3853b4d7b 100755
--- a/share/extensions/svg2fxg.xsl
+++ b/share/extensions/svg2fxg.xsl
@@ -832,22 +832,22 @@ extension-element-prefixes="math">
<xsl:value-of select="round(translate($convert_value, 'px', ''))" />
</xsl:when>
<xsl:when test="contains($convert_value, 'pt')">
- <xsl:value-of select="round(translate($convert_value, 'pt', '') * 1.25)" />
+ <xsl:value-of select="round(translate($convert_value, 'pt', '') * 1.333333)" />
</xsl:when>
<xsl:when test="contains($convert_value, 'pc')">
- <xsl:value-of select="round(translate($convert_value, 'pc', '') * 15)" />
+ <xsl:value-of select="round(translate($convert_value, 'pc', '') * 16)" />
</xsl:when>
<xsl:when test="contains($convert_value, 'mm')">
- <xsl:value-of select="round(translate($convert_value, 'mm', '') * 3.543307)" />
+ <xsl:value-of select="round(translate($convert_value, 'mm', '') * 3.779527)" />
</xsl:when>
<xsl:when test="contains($convert_value, 'cm')">
- <xsl:value-of select="round(translate($convert_value, 'cm', '') * 35.43307)" />
+ <xsl:value-of select="round(translate($convert_value, 'cm', '') * 37.79527)" />
</xsl:when>
<xsl:when test="contains($convert_value, 'in')">
- <xsl:value-of select="round(translate($convert_value, 'in', '') * 90)" />
+ <xsl:value-of select="round(translate($convert_value, 'in', '') * 96)" />
</xsl:when>
<xsl:when test="contains($convert_value, 'ft')">
- <xsl:value-of select="round(translate($convert_value, 'ft', '') * 1080)" />
+ <xsl:value-of select="round(translate($convert_value, 'ft', '') * 1152)" />
</xsl:when>
<xsl:when test="not(string(number($convert_value))='NaN')">
<xsl:value-of select="round($convert_value)" />
diff --git a/share/extensions/svg2xaml.xsl b/share/extensions/svg2xaml.xsl
index 040e6bcb2..fa785fa4f 100755
--- a/share/extensions/svg2xaml.xsl
+++ b/share/extensions/svg2xaml.xsl
@@ -854,22 +854,22 @@ exclude-result-prefixes="rdf xlink xs exsl libxslt">
<xsl:value-of select="translate($convert_value, 'px', '')" />
</xsl:when>
<xsl:when test="contains($convert_value, 'pt')">
- <xsl:value-of select="translate($convert_value, 'pt', '') * 1.25" />
+ <xsl:value-of select="translate($convert_value, 'pt', '') * 1.333333" />
</xsl:when>
<xsl:when test="contains($convert_value, 'pc')">
- <xsl:value-of select="translate($convert_value, 'pc', '') * 15" />
+ <xsl:value-of select="translate($convert_value, 'pc', '') * 16" />
</xsl:when>
<xsl:when test="contains($convert_value, 'mm')">
- <xsl:value-of select="translate($convert_value, 'mm', '') * 3.543307" />
+ <xsl:value-of select="translate($convert_value, 'mm', '') * 3.779527" />
</xsl:when>
<xsl:when test="contains($convert_value, 'cm')">
- <xsl:value-of select="translate($convert_value, 'cm', '') * 35.43307" />
+ <xsl:value-of select="translate($convert_value, 'cm', '') * 37.79527" />
</xsl:when>
<xsl:when test="contains($convert_value, 'in')">
- <xsl:value-of select="translate($convert_value, 'in', '') * 90" />
+ <xsl:value-of select="translate($convert_value, 'in', '') * 96" />
</xsl:when>
<xsl:when test="contains($convert_value, 'ft')">
- <xsl:value-of select="translate($convert_value, 'ft', '') * 1080" />
+ <xsl:value-of select="translate($convert_value, 'ft', '') * 1152" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$convert_value" />
diff --git a/share/extensions/synfig_prepare.py b/share/extensions/synfig_prepare.py
index e06efde9b..c6ad48c97 100755
--- a/share/extensions/synfig_prepare.py
+++ b/share/extensions/synfig_prepare.py
@@ -457,17 +457,17 @@ def get_dimension(s="1024"):
elif s[-2:] == "px":
return float(s[:-2])
elif s[-2:] == "pt":
- return float(s[:-2])*1.25
+ return float(s[:-2])*1.333
elif s[-2:] == "em":
return float(s[:-2])*16
elif s[-2:] == "mm":
- return float(s[:-2])*3.54
+ return float(s[:-2])*3.779
elif s[-2:] == "pc":
- return float(s[:-2])*15
+ return float(s[:-2])*16
elif s[-2:] == "cm":
- return float(s[:-2])*35.43
+ return float(s[:-2])*37.79
elif s[-2:] == "in":
- return float(s[:-2])*90
+ return float(s[:-2])*96
else:
return 1024
diff --git a/share/extensions/test/svg/default-inkscape-SVG.svg b/share/extensions/test/svg/default-inkscape-SVG.svg
index a6a610fdb..259e13c0d 100644
--- a/share/extensions/test/svg/default-inkscape-SVG.svg
+++ b/share/extensions/test/svg/default-inkscape-SVG.svg
@@ -8,8 +8,8 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://web.resource.org/cc/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
- width="744.09448819"
- height="1052.3622047">
+ width="793.7007874"
+ height="1122.519685">
<defs />
<sodipodi:namedview
id="base"
diff --git a/share/extensions/test/svg/default-plain-SVG.svg b/share/extensions/test/svg/default-plain-SVG.svg
index 544273366..9c0884789 100644
--- a/share/extensions/test/svg/default-plain-SVG.svg
+++ b/share/extensions/test/svg/default-plain-SVG.svg
@@ -8,8 +8,8 @@
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
version="1.1"
- width="744.09448819"
- height="1052.3622047">
+ width="793.7007874"
+ height="1122.519685">
<defs
id="defs4" />
<metadata
diff --git a/share/extensions/test/svg/empty-SVG.svg b/share/extensions/test/svg/empty-SVG.svg
index 475cc856b..d6c680b67 100644
--- a/share/extensions/test/svg/empty-SVG.svg
+++ b/share/extensions/test/svg/empty-SVG.svg
@@ -8,6 +8,6 @@
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
version="1.1"
- width="744.09448819"
- height="1052.3622047">
+ width="793.7007874"
+ height="1122.519685">
</svg>
diff --git a/share/extensions/webslicer_create_rect.inx b/share/extensions/webslicer_create_rect.inx
index 5b3b447e9..85578e24e 100644
--- a/share/extensions/webslicer_create_rect.inx
+++ b/share/extensions/webslicer_create_rect.inx
@@ -11,7 +11,7 @@
<item value="jpg">JPG</item>
<item value="gif">GIF</item>
</param>
- <param name="dpi" type="float" min="1" max="9999" _gui-text="DPI:">90</param>
+ <param name="dpi" type="float" min="1" max="9999" _gui-text="DPI:">96</param>
<param name="dimension" type="string" _gui-text="Force Dimension:"></param>
<!-- i18n. Description duplicated in a fake value attribute in order to make it translatable -->
<param name="help-dimension1" type="description" _value="Force Dimension must be set as &lt;width&gt;x&lt;height&gt;">Force Dimension must be set as &lt;width&gt;x&lt;height&gt;</param>