diff options
| author | Jabier Arraiza Cenoz <jabier.arraiza@marker.es> | 2015-03-18 18:13:01 +0000 |
|---|---|---|
| committer | Jabiertxof <jtx@jtx.marker.es> | 2015-03-18 18:13:01 +0000 |
| commit | 0d3d7f676b29f9d9a9cd53f08ced76e6588b856a (patch) | |
| tree | 12a2646048750e49e7edee42046b8aa138207f2c /share | |
| parent | warping into a layer (diff) | |
| parent | Replace sp_style_xxx functions with SPStyle member functions. (diff) | |
| download | inkscape-0d3d7f676b29f9d9a9cd53f08ced76e6588b856a.tar.gz inkscape-0d3d7f676b29f9d9a9cd53f08ced76e6588b856a.zip | |
update to trunk
(bzr r13682.1.22)
Diffstat (limited to 'share')
| -rw-r--r-- | share/extensions/Makefile.am | 6 | ||||
| -rw-r--r-- | share/extensions/dpiswitcher.inx | 29 | ||||
| -rw-r--r-- | share/extensions/dpiswitcher.py | 236 | ||||
| -rwxr-xr-x | share/extensions/inkex.py | 62 | ||||
| -rwxr-xr-x | share/extensions/jessyInk.js | 13 | ||||
| -rwxr-xr-x | share/extensions/measure.py | 7 | ||||
| -rw-r--r-- | share/markers/markers.svg | 7 | ||||
| -rw-r--r-- | share/symbols/MapSymbolsNPS.svg | 5 | ||||
| -rw-r--r-- | share/ui/units.xml | 16 |
9 files changed, 84 insertions, 297 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/dpiswitcher.inx b/share/extensions/dpiswitcher.inx deleted file mode 100644 index a4f487c97..000000000 --- a/share/extensions/dpiswitcher.inx +++ /dev/null @@ -1,29 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> - <inkscape-extension xmlns= - "http://www.inkscape.org/namespace/inkscape/extension"> - <_name>DPI Switcher</_name> - <id>org.inkscape.dpiswitcher</id> - <dependency type="executable" location="extensions">dpiswitcher.py</dependency> - <dependency type="executable" location="extensions">inkex.py</dependency> - <param name="action" type="notebook"> - <page name="dpi_swicher" _gui-text="Switch DPI"> - <param name="switcher" type="enum" _gui-text="Type of convert:"> - <_item value="0">DPI Switch from 90 to 96</_item> - <_item value="1">DPI Switch from 96 to 90</_item> - </param> - </page> - <page name="page_info" _gui-text="Show page info"> - <_param name="d" type="description">Choose this tab if you would like to see page info previously to apply DPI Switcher.</_param> - </page> - </param> - - <effect needs-live-preview="false" needs-document="no"> - <object-type>all</object-type> - <effects-menu> - <submenu _name="Document"/> - </effects-menu> - </effect> - <script> - <command reldir="extensions" interpreter="python">dpiswitcher.py</command> - </script> -</inkscape-extension> diff --git a/share/extensions/dpiswitcher.py b/share/extensions/dpiswitcher.py deleted file mode 100644 index b110c259f..000000000 --- a/share/extensions/dpiswitcher.py +++ /dev/null @@ -1,236 +0,0 @@ -#!/usr/bin/env python -''' -This extension scale or reduce a document to fit diferent SVG DPI -90/96- - -Copyright (C) 2012 Jabiertxo Arraiza, jabier.arraiza@marker.es - -Version 0.4 - DPI Switcher - -TODO: -Comment Better!!! - -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 inkex, sys, re, string -from lxml import etree - -class DPISwitcher(inkex.Effect): - - def __init__(self): - inkex.Effect.__init__(self) - self.OptionParser.add_option("--switcher", action="store", - type="string", dest="switcher", default="0", - help="Select the DPI switch you want") - self.OptionParser.add_option("--action", action="store", - type="string", dest="action", - default=None, help="") - self.factor = 90.0/96.0 - self.units = "px" - self.unitExponent = 1.0 - - def scaleRoot(self, svg): - widthNumber = re.sub("[a-zA-Z]", "", svg.get('width')) - heightNumber = re.sub("[a-zA-Z]", "", svg.get('height')) - if svg.get('viewBox'): - widthNumber = svg.get('viewBox').split(" ")[2] - heightNumber = svg.get('viewBox').split(" ")[3] - widthDoc = str(float(widthNumber) * self.factor * self.unitExponent) - heightDoc = str(float(heightNumber) * self.factor * self.unitExponent) - if svg.get('height'): - svg.set('height', heightDoc) - if svg.get('width'): - svg.set('width', widthDoc) - svg.set('viewBox',"0 0 " + widthDoc + " " + heightDoc) - self.scaleGuides(svg) - self.scaleGrid(svg) - if self.options.switcher == "1": - self.factor = self.factor * self.unitExponent - xpathStr = '//svg:rect | //svg:image | //svg:path | //svg:circle | //svg:ellipse | //svg:text' - elements = svg.xpath(xpathStr, namespaces=inkex.NSS) - for element in elements: - box3DSide = element.get(inkex.addNS('box3dsidetype', 'inkscape')) - if box3DSide: - continue - if element.get('transform'): - if "matrix" in str(element.get('transform')): - result = re.sub(r".*?matrix( \(|\()(.*?)\)", self.matrixElement, str(element.get('transform'))) - element.set('transform', result) - if "scale" in str(element.get('transform')): - result = re.sub(r".*?scale( \(|\()(.*?)\)", self.scaleElement, str(element.get('transform'))) - element.set('transform', result) - if "translate" in str(element.get('transform')): - result = re.sub(r".*?translate( \(|\()(.*?)\)", self.translateElement, str(element.get('transform'))) - element.set('transform', result) - if "skew" in str(element.get('transform')): - result = re.sub(r".*?skew( \(|\()(.*?)\)", self.skewElement, str(element.get('transform'))) - element.set('transform', result) - if "scale" not in str(element.get('transform')) and "matrix" not in str(element.get('transform')): - element.set('transform', str(element.get('transform')) + "scale(" + str(self.factor) + ", " + str(self.factor) + ")") - else: - element.set('transform', "scale(" + str(self.factor) + ", " + str(self.factor) + ")") - xpathStr = '//svg:g' - elements = svg.xpath(xpathStr, namespaces=inkex.NSS) - for element in elements: - if element.get('transform'): - if "matrix" in str(element.get('transform')): - result = re.sub(r".*?matrix( \(|\()(.*?)\)", self.matrixGroupElement, str(element.get('transform'))) - element.set('transform', result) - if "translate" in str(element.get('transform')): - result = re.sub(r".*?translate( \(|\()(.*?)\)", self.translateElement, str(element.get('transform'))) - element.set('transform', result) - if "skew" in str(element.get('transform')): - result = re.sub(r".*?skew( \(|\()(.*?)\)", self.skewElement, str(element.get('transform'))) - element.set('transform', result) - - def scaleGuides(self, svg): - xpathStr = '//sodipodi:guide' - guides = svg.xpath(xpathStr, namespaces=inkex.NSS) - for guide in guides: - point = string.split(guide.get("position"), ",") - guide.set("position", str(float(point[0].strip()) * self.factor ) + "," + str(float(point[1].strip()) * self.factor )) - - def scaleGrid(self, svg): - xpathStr = '//inkscape:grid' - grids = svg.xpath(xpathStr, namespaces=inkex.NSS) - for grid in grids: - if self.options.switcher == "0": - self.unitExponent = 1.0/(self.factor/self.__uuconv[grid.get("units")]) - self.factor = self.factor * self.unitExponent - grid.set("units", "px") - if grid.get("spacingx"): - spacingx = str(float(re.sub("[a-zA-Z]", "", grid.get("spacingx"))) * self.factor) + "px" - grid.set("spacingx", str(spacingx)) - if grid.get("spacingy"): - spacingy = str(float(re.sub("[a-zA-Z]", "", grid.get("spacingy"))) * self.factor) + "px" - grid.set("spacingy", str(spacingy)) - if grid.get("originx"): - originx = str(float(re.sub("[a-zA-Z]", "", grid.get("originx"))) * self.factor) + "px" - grid.set("originx", str(originx)) - if grid.get("originy"): - originy = str(float(re.sub("[a-zA-Z]", "", grid.get("originy"))) * self.factor) + "px" - grid.set("originy", str(originy)) - - #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} - - __uuconvLegazy = {'in':90.0, 'pt':1.25, 'px':1, 'mm':3.5433070866, 'cm':35.433070866, 'm':3543.3070866, - 'km':3543307.0866, 'pc':15.0, 'yd':3240 , 'ft':1080} - - def scaleElement(self, m): - scaleVal = m.group(2).replace(" ","") - total = scaleVal.count(',') - if total == 1: - scaleVal = scaleVal.split(",") - return "scale(" + str(float(scaleVal[0]) * self.factor) + "," + str(float(scaleVal[1]) * self.factor) + ")" - else: - return "scale(" + str(float(scaleVal) * self.factor) + ")" - - - def translateElement(self, m): - translateVal = m.group(2).replace(" ","") - total = translateVal.count(',') - if total == 1: - translateVal = translateVal.split(",") - return "translate(" + str(float(translateVal[0]) * self.factor) + "," + str(float(translateVal[1]) * self.factor) + ")" - else: - return "translate(" + str(float(translateVal) * self.factor) + ")" - - def skewElement(self, m): - skeweVal = m.group(2).replace(" ","") - total = skewVal.count(',') - if total == 1: - skeweVal = skewVal.split(",") - return "skew(" + str(float(skewVal[0]) * self.factor) + "," + str(float(skewVal[1]) * self.factor) + ")" - else: - return "skew(" + str(float(skewVal) * self.factor) + ")" - - def matrixElement(self, m): - matrixVal = m.group(2).replace(" ","") - total = matrixVal.count(',') - matrixVal = matrixVal.split(",") - if total > 2: - return "matrix(" + str(float(matrixVal[0]) * self.factor) + "," + str(float(matrixVal[1]) * self.factor) + "," + str(float(matrixVal[2]) * self.factor) + "," + str(float(matrixVal[3]) * self.factor) + "," + str(float(matrixVal[4]) * self.factor) + "," + str(float(matrixVal[5]) * self.factor) + ")" - else: - return "matrix(" + str(float(matrixVal[0]) * self.factor) + "," + str(float(matrixVal[1]) * self.factor) + "," + str(float(matrixVal[2]) * self.factor) + ")" - - def matrixGroupElement(self, m): - matrixVal = m.group(2).replace(" ","") - total = matrixVal.count(',') - matrixVal = matrixVal.split(",") - if total > 2: - return "matrix(" + matrixVal[0] + "," + str(float(matrixVal[1]) * self.factor) + "," + matrixVal[2] + "," + str(float(matrixVal[3]) * self.factor) + "," + str(float(matrixVal[4]) * self.factor) + "," + str(float(matrixVal[5]) * self.factor) + ")" - else: - return "matrix(" + matrixVal[0] + "," + str(float(matrixVal[1]) * self.factor) + "," + str(float(matrixVal[2]) * self.factor) + ")" - - def effect(self): - action = self.options.action.strip("\"") # TODO Is this a bug? (Extra " characters) - saveout = sys.stdout - sys.stdout = sys.stderr - svg = self.document.getroot() - if action == "page_info": - print ":::SVG document related info:::" - width = svg.get('width') - if width: - print "width: " + width - height = svg.get('height') - if height: - print "height: " + height - viewBox = svg.get('viewBox') - if viewBox: - print "viewBox: " + viewBox - namedview = svg.find(inkex.addNS('namedview', 'sodipodi')) - docunits= namedview.get(inkex.addNS('document-units', 'inkscape')) - if docunits: - print "document-units: " + docunits - units = namedview.get('units') - if units: - print "units: " + units - xpathStr = '//sodipodi:guide' - guides = svg.xpath(xpathStr, namespaces=inkex.NSS) - xpathStr = '//inkscape:grid' - if guides: - numberGuides = len(guides) - print "Document has " + str(numberGuides) + " guides" - grids = svg.xpath(xpathStr, namespaces=inkex.NSS) - i = 1 - for grid in grids: - print "Grid number " + str(i) + ": Units: " + grid.get("units") - i = i+1 - else: - if self.options.switcher == "0": - self.factor = 96.0/90.0 - namedview = svg.find(inkex.addNS('namedview', 'sodipodi')) - namedview.set(inkex.addNS('document-units', 'inkscape'), "px") - self.units = re.sub("[0-9]*\.?[0-9]", "", svg.get('width')) - if self.units and self.units <> "px": - if self.options.switcher == "0": - self.unitExponent = 1.0/(self.factor/self.__uuconv[self.units]) - else: - self.unitExponent = 1.0/(self.factor/self.__uuconvLegazy[self.units]) - ''' - else: - self.scaleGuides(svg) - self.unitExponent = 1.0 - self.scaleGrid(svg) - sys.stdout = saveout - return - ''' - self.scaleRoot(svg); - sys.stdout = saveout - -effect = DPISwitcher() -effect.affect() 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/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/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/markers/markers.svg b/share/markers/markers.svg index de877a287..91de99ed3 100644 --- a/share/markers/markers.svg +++ b/share/markers/markers.svg @@ -4,7 +4,8 @@ NOTE: this file is currently (0.48+) edited manually. Insert the new markers into the <defs>. --> <svg xmlns="http://www.w3.org/2000/svg" - xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"> + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + id="InkscapeMarkers"> <defs id="defs3"> <!-- Arrows --> @@ -300,5 +301,9 @@ Insert the new markers into the <defs>. </g> </marker> + <marker id="ExperimentalArrow" refX="5.0" refY="3.0" orient="auto-start-reverse" inkscape:stockid="ExperimentalArrow"> + <path style="fill:context-stroke" d="m 10,3 -10,3 0,-6 z"/> + </marker> + </defs> </svg> diff --git a/share/symbols/MapSymbolsNPS.svg b/share/symbols/MapSymbolsNPS.svg index 81b24adde..aa558c9b2 100644 --- a/share/symbols/MapSymbolsNPS.svg +++ b/share/symbols/MapSymbolsNPS.svg @@ -469,6 +469,7 @@ </symbol> <symbol id="MotorBikeTrail"> + <title>Motorbike Trail</title> <g style="stroke:none"> <path d="m 36.625,26.25 6.125,0 a 1.75,1.75 0 0 1 0,3.5 l -7.25,0 c -0.75,0 -1.625,-0.25 -2.25,-1.25 l -2.75,-4.25 -5.25,8 7.25,3.75 c 2,1 2,2.5 2,3.5 l 0,13.5 a 2.75,2.75 0 0 1 -5.5,0 l 0,-11 -11.5,-6.25 c -2,-1.25 -2.25,-3.75 -1.25,-5.25 l 8.5,-13 c 1.25,-1.875 4.5,-2.25 6,-0.25 z"/> <path d="m 26.5,43.75 0,2.5 -13.5,-7.5 c -2.5,-1.25 -5,-1 -7,0 -0.5,0.25 -1.25,-0.5 -0.5,-1.25 2.5,-2.125 6.5,-2 9,-0.5 z"/> @@ -484,6 +485,7 @@ </symbol> <symbol id="MotorBikeTrail_Inv"> + <title>Motorbike Trail</title> <rect x="0.5" y="0.5" width="71" height="71" ry="6" style="stroke:white"/> <g style="fill:white;stroke:none"> <path d="m 36.625,26.25 6.125,0 a 1.75,1.75 0 0 1 0,3.5 l -7.25,0 c -0.75,0 -1.625,-0.25 -2.25,-1.25 l -2.75,-4.25 -5.25,8 7.25,3.75 c 2,1 2,2.5 2,3.5 l 0,13.5 a 2.75,2.75 0 0 1 -5.5,0 l 0,-11 -11.5,-6.25 c -2,-1.25 -2.25,-3.75 -1.25,-5.25 l 8.5,-13 c 1.25,-1.875 4.5,-2.25 6,-0.25 z"/> @@ -501,6 +503,7 @@ <symbol id="RadiatorWater"> + <title>Radiator Water</title> <g style="stroke:none"> <path d="m 17.75,48 c 0.5,-4 2,-6 3.25,-6.5 6.5,-1.5 18.25,-2.25 23,-2.5 l -11.75,-19.625 3.5,0 11.5,19.125 7.25,-12 c 1,-1.5 2.25,-2 4.5,-2 l 7,0 0,3 -7,0 c -1.5,0 -2,1 -2.5,1.75 l -5.75,9.5 15.25,0 0,15.75 -20.5,0 a 11.03,11.03 0 0 0 -22,0 l -4,0 c -1,0 -2.25,-0.5 -2.25,-2 z"/> <path d="m 20,33.5 c 0,-2 4,-11 4,-11 0,0 4,9 4,11 a 4,4 0 0 1 -8,0 z"/> @@ -511,6 +514,7 @@ <symbol id="RadiatorWater_Inv"> + <title>Radiator Water</title> <rect x="0.5" y="0.5" width="71" height="71" ry="6" style="stroke:white"/> <g style="fill:white;stroke:none"> <path d="m 17.75,48 c 0.5,-4 2,-6 3.25,-6.5 6.5,-1.5 18.25,-2.25 23,-2.5 l -11.75,-19.625 3.5,0 11.5,19.125 7.25,-12 c 1,-1.5 2.25,-2 4.5,-2 l 7,0 0,3 -7,0 c -1.5,0 -2,1 -2.5,1.75 l -5.75,9.5 15.25,0 0,15.75 -20.5,0 a 11.03,11.03 0 0 0 -22,0 l -4,0 c -1,0 -2.25,-0.5 -2.25,-2 z"/> @@ -1040,6 +1044,7 @@ </symbol> <symbol id="blank"> + <title>Blank</title> <rect x="1" y="1" width="70" height="70" rx="6" style="fill:none;stroke:black;stroke-width:2"/> </symbol> </defs> diff --git a/share/ui/units.xml b/share/ui/units.xml index bdfe27919..364515679 100644 --- a/share/ui/units.xml +++ b/share/ui/units.xml @@ -18,7 +18,7 @@ <name>point</name> <plural>points</plural> <abbr>pt</abbr> - <factor>1.3333333333</factor> + <factor>1.333333333333333</factor> <description>PostScript points (72/inch)</description> </unit> <unit type="LINEAR" pri="n"> @@ -39,21 +39,21 @@ <name>millimeter</name> <plural>millimeters</plural> <abbr>mm</abbr> - <factor>3.77952755913</factor> + <factor>3.779527559055119</factor> <description>Millimeters (25.4 mm/in)</description> </unit> <unit type="LINEAR" pri="n"> <name>centimeter</name> <plural>centimeters</plural> <abbr>cm</abbr> - <factor>37.7952755913</factor> + <factor>37.79527559055119</factor> <description>Centimeters (10 mm/cm)</description> </unit> <unit type="LINEAR" pri="n"> <name>meter</name> <plural>meters</plural> <abbr>m</abbr> - <factor>3779.52755913</factor> + <factor>3779.527559055119</factor> <description>Meters (100 cm/m)</description> </unit> <unit type="LINEAR" pri="n"> @@ -74,15 +74,15 @@ <name>radian</name> <plural>radians</plural> <abbr>rad</abbr> - <factor>57.296</factor> - <description>Radians (57.296 deg/rad)</description> + <factor>57.29577951308232</factor> + <description>Radians (180/pi deg/rad)</description> </unit> <unit type="RADIAL" pri="n"> <name>gradian</name> <plural>gradians</plural> <abbr>grad</abbr> - <factor>1.111</factor> - <description>Gradians (1.111 deg/grad)</description> + <factor>0.9</factor> + <description>Gradians (360/400 deg/grad)</description> </unit> <unit type="RADIAL" pri="n"> <name>turn</name> |
