diff options
| author | Joshua L. Blocher <verbalshadow@gmail.com> | 2006-09-13 03:30:07 +0000 |
|---|---|---|
| committer | verbalshadow <verbalshadow@users.sourceforge.net> | 2006-09-13 03:30:07 +0000 |
| commit | 6f5a03c96d479a5e0ccf896f91de79078e5ba4ec (patch) | |
| tree | c5e3189683d229a03bd2c6dae5593f7de7547ecd | |
| parent | adding optional minidom (diff) | |
| download | inkscape-6f5a03c96d479a5e0ccf896f91de79078e5ba4ec.tar.gz inkscape-6f5a03c96d479a5e0ccf896f91de79078e5ba4ec.zip | |
Adding GPL palatte file export from patches.
(bzr r1705)
| -rw-r--r-- | share/extensions/Makefile.am | 2 | ||||
| -rw-r--r-- | share/extensions/export_gimp_palette.inx | 15 | ||||
| -rw-r--r-- | share/extensions/export_gimp_palette.py | 47 | ||||
| -rwxr-xr-x | share/extensions/simplestyle.py | 182 |
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))) |
