This repository has been archived on 2023-03-25. You can view files and clone it, but cannot push or open issues or pull requests.
mightyscape-1.1-deprecated/extensions/fablabchemnitz/stroke_color_as_fill/stroke_color_as_fill.py

111 lines
5.2 KiB
Python

#!/usr/bin/env python3
'''
This extension set the stroke of selected elements as fill color and fill opacity (and optional inversed)
Copyright (C) 2016 Jabiertxo Arraiza, jabier.arraiza@marker.es
Version 0.2
CHANGE LOG
0.2 Added features done by suv in his swamp color extension https://gitlab.com/su-v/inx-modifycolor/
0.1 Start 25/11/2016
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
import sys
import re
from lxml import etree
class StrokeColorAsFill(inkex.EffectExtension):
def add_arguments(self, pars):
pars.add_argument("--tab", help="The selected UI-tab")
pars.add_argument("--fill_stroke_mode", default="fillstroke", help="Exchange mode fill, stroke")
pars.add_argument("--fill_stroke_copy_alpha", type=inkex.Boolean, default=True, help="Copy alpha")
pars.add_argument("--fill_stroke_copy_none", type=inkex.Boolean, default=True, help="Copy 'None' property")
pars.add_argument("--fill_stroke_copy_unset", type=inkex.Boolean, default=True, help="Copy 'Unset' property")
pars.add_argument("--fill_stroke_convert_unset", type=inkex.Boolean, default=True, help="Convert 'Unset' property")
pars.add_argument("--nodash", type=inkex.Boolean, default="false", help="Fix dash-stroke to alow no line only markers")
def color_swapper(self, element):
if element.tag == inkex.addNS('g', 'svg'):
for e in element:
self.color_swaper(e)
else:
style = element.get('style')
if style:
fill = re.search('fill:(.*?)(;|$)', style)
if fill is not None:
style = style.replace(fill.group(),'')
fill = fill.group(1)
stroke = re.search('stroke:(.*?)(;|$)', style)
if stroke is not None:
style = style.replace(stroke.group(),'')
stroke = stroke.group(1)
fill_opacity = re.search('fill-opacity:(.*?)(;|$)', style)
if fill_opacity is not None:
style = style.replace(fill_opacity.group(),'')
fill_opacity = fill_opacity.group()
stroke_opacity = re.search('stroke-opacity:(.*?)(;|$)', style)
if stroke_opacity is not None:
style = style.replace(stroke_opacity.group(),'')
stroke_opacity = stroke_opacity.group()
if 'fill' in self.options.fill_stroke_mode:
if self.options.fill_stroke_copy_none or fill != 'none':
if fill is None:
if self.options.fill_stroke_convert_unset:
style += ';stroke:black'
else:
style += ';stroke:' + fill
if self.options.fill_stroke_copy_alpha and fill_opacity is not None:
style += ';stroke-opacity:' + fill_opacity
if 'stroke' in self.options.fill_stroke_mode:
if self.options.fill_stroke_copy_none or stroke != 'none':
if stroke is None:
if self.options.fill_stroke_convert_unset:
style += ';fill:none'
else:
style += ';fill:' + stroke
if self.options.fill_stroke_copy_alpha and stroke_opacity is not None:
style += ';fill-opacity:' + stroke_opacity
if self.options.fill_stroke_mode == 'fill':
if fill is not None:
style += ';fill:' + fill
if fill_opacity is not None:
style += ';fill-opacity:' + fill_opacity
if self.options.fill_stroke_mode == 'stroke':
if stroke is not None:
style += ';stroke:' + stroke
if stroke_opacity is not None:
style += ';stroke-opacity:' + stroke_opacity
if self.options.nodash:
style = re.sub('stroke-dasharray:.*?(;|$)', '', style)
style = re.sub('stroke-dashoffset:.*?(;|$)', '', style)
style = re.sub('$', ';stroke-dasharray:0, 11;stroke-dashoffset:10$', style)
element.set('style',style)
def effect(self):
saveout = sys.stdout
sys.stdout = sys.stderr
svg = self.document.getroot()
for id, element in self.svg.selected.items():
self.color_swapper(element)
sys.stdout = saveout
if __name__ == '__main__':
StrokeColorAsFill().run()