summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoshua L. Blocher <verbalshadow@gmail.com>2006-09-13 03:30:07 +0000
committerverbalshadow <verbalshadow@users.sourceforge.net>2006-09-13 03:30:07 +0000
commit6f5a03c96d479a5e0ccf896f91de79078e5ba4ec (patch)
treec5e3189683d229a03bd2c6dae5593f7de7547ecd
parentadding optional minidom (diff)
downloadinkscape-6f5a03c96d479a5e0ccf896f91de79078e5ba4ec.tar.gz
inkscape-6f5a03c96d479a5e0ccf896f91de79078e5ba4ec.zip
Adding GPL palatte file export from patches.
(bzr r1705)
-rw-r--r--share/extensions/Makefile.am2
-rw-r--r--share/extensions/export_gimp_palette.inx15
-rw-r--r--share/extensions/export_gimp_palette.py47
-rwxr-xr-xshare/extensions/simplestyle.py182
4 files changed, 246 insertions, 0 deletions
diff --git a/share/extensions/Makefile.am b/share/extensions/Makefile.am
index 592afbd27..3dc36b08f 100644
--- a/share/extensions/Makefile.am
+++ b/share/extensions/Makefile.am
@@ -21,6 +21,7 @@ extensions = \
bezmisc.py \
cubicsuperpath.py \
dots.py \
+ export_gimp_palette.py \
ffgeom.py \
ffproc.py \
ffscale.py \
@@ -68,6 +69,7 @@ modules = \
aisvg.inx \
ps_input.inx \
eps_input.inx \
+ export_gimp_palette.inx \
sk_input.inx \
wmf_input.inx \
svg_dropshadow.inx \
diff --git a/share/extensions/export_gimp_palette.inx b/share/extensions/export_gimp_palette.inx
new file mode 100644
index 000000000..e4c4b419b
--- /dev/null
+++ b/share/extensions/export_gimp_palette.inx
@@ -0,0 +1,15 @@
+<inkscape-extension>
+ <_name>Export as GIMP Palette</_name>
+ <id>com.kaioa.export_gimp_palette</id>
+ <dependency type="executable" location="extensions">export_gimp_palette.py</dependency>
+ <dependency type="executable" location="extensions">simplestyle.py</dependency>
+ <output>
+ <extension>.gpl</extension>
+ <mimetype>text/plain</mimetype>
+ <_filetypename>GIMP Palette (*.gpl)</_filetypename>
+ <_filetypetooltip>Exports the colors of this document as GIMP Palette</_filetypetooltip>
+ </output>
+ <script>
+ <command reldir="extensions" interpreter="python">export_gimp_palette.py</command>
+ </script>
+</inkscape-extension> \ No newline at end of file
diff --git a/share/extensions/export_gimp_palette.py b/share/extensions/export_gimp_palette.py
new file mode 100644
index 000000000..886ef6c87
--- /dev/null
+++ b/share/extensions/export_gimp_palette.py
@@ -0,0 +1,47 @@
+#!/usr/bin/env python
+'''
+Author: Jos Hirth, kaioa.com
+License: GNU General Public License - http://www.gnu.org/licenses/gpl.html
+Warranty: see above
+'''
+
+DOCNAME='sodipodi:docname'
+
+import sys, simplestyle
+try:
+ from xml.dom.minidom import parse
+except:
+ sys.exit('The export_gpl.py module requires PyXML. Please download the latest version from <http://pyxml.sourceforge.net/>.')
+
+colortags=(u'fill',u'stroke',u'stop-color',u'flood-color',u'lighting-color')
+colors={}
+
+def walk(node):
+ checkStyle(node)
+ if node.hasChildNodes():
+ childs=node.childNodes
+ for child in childs:
+ walk(child)
+
+def checkStyle(node):
+ if node.hasAttributes():
+ sa=node.getAttribute('style')
+ if sa!='':
+ styles=simplestyle.parseStyle(sa)
+ for c in range(len(colortags)):
+ if colortags[c] in styles.keys():
+ addColor(styles[colortags[c]])
+
+def addColor(col):
+ if simplestyle.isColor(col):
+ c=simplestyle.parseColor(col)
+ colors['%3i %3i %3i ' % (c[0],c[1],c[2])]=simplestyle.formatColoria(c).upper()
+
+stream = open(sys.argv[-1:][0],'r')
+dom = parse(stream)
+stream.close()
+walk(dom)
+print 'GIMP Palette\nName: %s\n#' % (dom.getElementsByTagName('svg')[0].getAttribute(DOCNAME).split('.')[0])
+
+for k,v in sorted(colors.items()):
+ print k+v \ No newline at end of file
diff --git a/share/extensions/simplestyle.py b/share/extensions/simplestyle.py
index e11f91ae0..6ed6a10d0 100755
--- a/share/extensions/simplestyle.py
+++ b/share/extensions/simplestyle.py
@@ -2,6 +2,7 @@
"""
simplestyle.py
Two simple functions for working with inline css
+and some color handling on top.
Copyright (C) 2005 Aaron Spike, aaron@ekips.org
@@ -19,9 +20,190 @@ 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
"""
+
+svgcolors={
+ 'aliceblue':'#f0f8ff',
+ 'antiquewhite':'#faebd7',
+ 'aqua':'#00ffff',
+ 'aquamarine':'#7fffd4',
+ 'azure':'#f0ffff',
+ 'beige':'#f5f5dc',
+ 'bisque':'#ffe4c4',
+ 'black':'#000000',
+ 'blanchedalmond':'#ffebcd',
+ 'blue':'#0000ff',
+ 'blueviolet':'#8a2be2',
+ 'brown':'#a52a2a',
+ 'burlywood':'#deb887',
+ 'cadetblue':'#5f9ea0',
+ 'chartreuse':'#7fff00',
+ 'chocolate':'#d2691e',
+ 'coral':'#ff7f50',
+ 'cornflowerblue':'#6495ed',
+ 'cornsilk':'#fff8dc',
+ 'crimson':'#dc143c',
+ 'cyan':'#00ffff',
+ 'darkblue':'#00008b',
+ 'darkcyan':'#008b8b',
+ 'darkgoldenrod':'#b8860b',
+ 'darkgray':'#a9a9a9',
+ 'darkgreen':'#006400',
+ 'darkgrey':'#a9a9a9',
+ 'darkkhaki':'#bdb76b',
+ 'darkmagenta':'#8b008b',
+ 'darkolivegreen':'#556b2f',
+ 'darkorange':'#ff8c00',
+ 'darkorchid':'#9932cc',
+ 'darkred':'#8b0000',
+ 'darksalmon':'#e9967a',
+ 'darkseagreen':'#8fbc8f',
+ 'darkslateblue':'#483d8b',
+ 'darkslategray':'#2f4f4f',
+ 'darkslategrey':'#2f4f4f',
+ 'darkturquoise':'#00ced1',
+ 'darkviolet':'#9400d3',
+ 'deeppink':'#ff1493',
+ 'deepskyblue':'#00bfff',
+ 'dimgray':'#696969',
+ 'dimgrey':'#696969',
+ 'dodgerblue':'#1e90ff',
+ 'firebrick':'#b22222',
+ 'floralwhite':'#fffaf0',
+ 'forestgreen':'#228b22',
+ 'fuchsia':'#ff00ff',
+ 'gainsboro':'#dcdcdc',
+ 'ghostwhite':'#f8f8ff',
+ 'gold':'#ffd700',
+ 'goldenrod':'#daa520',
+ 'gray':'#808080',
+ 'grey':'#808080',
+ 'green':'#008000',
+ 'greenyellow':'#adff2f',
+ 'honeydew':'#f0fff0',
+ 'hotpink':'#ff69b4',
+ 'indianred':'#cd5c5c',
+ 'indigo':'#4b0082',
+ 'ivory':'#fffff0',
+ 'khaki':'#f0e68c',
+ 'lavender':'#e6e6fa',
+ 'lavenderblush':'#fff0f5',
+ 'lawngreen':'#7cfc00',
+ 'lemonchiffon':'#fffacd',
+ 'lightblue':'#add8e6',
+ 'lightcoral':'#f08080',
+ 'lightcyan':'#e0ffff',
+ 'lightgoldenrodyellow':'#fafad2',
+ 'lightgray':'#d3d3d3',
+ 'lightgreen':'#90ee90',
+ 'lightgrey':'#d3d3d3',
+ 'lightpink':'#ffb6c1',
+ 'lightsalmon':'#ffa07a',
+ 'lightseagreen':'#20b2aa',
+ 'lightskyblue':'#87cefa',
+ 'lightslategray':'#778899',
+ 'lightslategrey':'#778899',
+ 'lightsteelblue':'#b0c4de',
+ 'lightyellow':'#ffffe0',
+ 'lime':'#00ff00',
+ 'limegreen':'#32cd32',
+ 'linen':'#faf0e6',
+ 'magenta':'#ff00ff',
+ 'maroon':'#800000',
+ 'mediumaquamarine':'#66cdaa',
+ 'mediumblue':'#0000cd',
+ 'mediumorchid':'#ba55d3',
+ 'mediumpurple':'#9370db',
+ 'mediumseagreen':'#3cb371',
+ 'mediumslateblue':'#7b68ee',
+ 'mediumspringgreen':'#00fa9a',
+ 'mediumturquoise':'#48d1cc',
+ 'mediumvioletred':'#c71585',
+ 'midnightblue':'#191970',
+ 'mintcream':'#f5fffa',
+ 'mistyrose':'#ffe4e1',
+ 'moccasin':'#ffe4b5',
+ 'navajowhite':'#ffdead',
+ 'navy':'#000080',
+ 'oldlace':'#fdf5e6',
+ 'olive':'#808000',
+ 'olivedrab':'#6b8e23',
+ 'orange':'#ffa500',
+ 'orangered':'#ff4500',
+ 'orchid':'#da70d6',
+ 'palegoldenrod':'#eee8aa',
+ 'palegreen':'#98fb98',
+ 'paleturquoise':'#afeeee',
+ 'palevioletred':'#db7093',
+ 'papayawhip':'#ffefd5',
+ 'peachpuff':'#ffdab9',
+ 'peru':'#cd853f',
+ 'pink':'#ffc0cb',
+ 'plum':'#dda0dd',
+ 'powderblue':'#b0e0e6',
+ 'purple':'#800080',
+ 'red':'#ff0000',
+ 'rosybrown':'#bc8f8f',
+ 'royalblue':'#4169e1',
+ 'saddlebrown':'#8b4513',
+ 'salmon':'#fa8072',
+ 'sandybrown':'#f4a460',
+ 'seagreen':'#2e8b57',
+ 'seashell':'#fff5ee',
+ 'sienna':'#a0522d',
+ 'silver':'#c0c0c0',
+ 'skyblue':'#87ceeb',
+ 'slateblue':'#6a5acd',
+ 'slategray':'#708090',
+ 'slategrey':'#708090',
+ 'snow':'#fffafa',
+ 'springgreen':'#00ff7f',
+ 'steelblue':'#4682b4',
+ 'tan':'#d2b48c',
+ 'teal':'#008080',
+ 'thistle':'#d8bfd8',
+ 'tomato':'#ff6347',
+ 'turquoise':'#40e0d0',
+ 'violet':'#ee82ee',
+ 'wheat':'#f5deb3',
+ 'white':'#ffffff',
+ 'whitesmoke':'#f5f5f5',
+ 'yellow':'#ffff00',
+ 'yellowgreen':'#9acd32'
+}
def parseStyle(s):
"""Create a dictionary from the value of an inline style attribute"""
return dict([i.split(":") for i in s.split(";") if len(i)])
def formatStyle(a):
"""Format an inline style attribute from a dictionary"""
return ";".join([":".join(i) for i in a.iteritems()])
+def isColor(c):
+ """Determine if its a color we can use. If not, leave it unchanged."""
+ if c.startswith('#') and (len(c)==4 or len(c)==7):
+ return True
+ if c in svgcolors.keys():
+ return True
+ #might be "none" or some undefined color constant or rgb()
+ #however, rgb() shouldnt occur at this point
+ return False
+def parseColor(c):
+ """Creates a rgb int array"""
+ if c in svgcolors.keys():
+ c=svgcolors[c]
+ if c.startswith('#') and len(c)==4:
+ c='#'+c[1:2]+c[1:2]+c[2:3]+c[2:3]+c[3:]+c[3:]
+ r=int(c[1:3],16)
+ g=int(c[3:5],16)
+ b=int(c[5:],16)
+ return (r,g,b)
+def formatColoria(a):
+ """int array to #rrggbb"""
+ return '#%02x%02x%02x' % (a[0],a[1],a[2])
+def formatColorfa(a):
+ """float array to #rrggbb"""
+ return '#%02x%02x%02x' % (int(round(a[0]*255)),int(round(a[1]*255)),int(round(a[2]*255)))
+def formatColor3i(r,g,b):
+ """3 ints to #rrggbb"""
+ return '#%02x%02x%02x' % (r,g,b)
+def formatColor3f(r,g,b):
+ """3 floats to #rrggbb"""
+ return '#%02x%02x%02x' % (int(round(r*255)),int(round(g*255)),int(round(b*255)))