Added attributes importer, editorand cleaner extensions
This commit is contained in:
parent
b22f862b94
commit
b8cd24d689
@ -1,5 +1,4 @@
|
||||
#! /usr/bin/env python
|
||||
# coding=utf-8
|
||||
#! /usr/bin/env python3
|
||||
#
|
||||
#
|
||||
# Este script dibuja el perfil exterior de corte la caja en un solo
|
||||
|
@ -1,4 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import inkex
|
||||
import fablabchemnitz_apolloniangasket_func
|
||||
from lxml import etree
|
||||
|
18
extensions/fablabchemnitz_attributes_cleaner.inx
Normal file
18
extensions/fablabchemnitz_attributes_cleaner.inx
Normal file
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
|
||||
<name>Remove Obsolete Attributes</name>
|
||||
<id>fablabchemnitz.deattributes_cleaner</id>
|
||||
<param name="introduction" type="description">Remove attributes "sodipodi:absref", "sodipodi:docbase" and "sodipodi:docname" from all elements that contain them. These attributes contain absolute paths to resources which can pose a security issue.</param>
|
||||
<param name="removeAbsref" type="bool" gui-text="Remove sodipodi:absref">true</param>
|
||||
<param name="removeDocbase" type="bool" gui-text="Remove sodipodi:docbase">true</param>
|
||||
<param name="removeDocname" type="bool" gui-text="Remove sodipodi:docname">true</param>
|
||||
<effect>
|
||||
<object-type>all</object-type>
|
||||
<effects-menu>
|
||||
<submenu name="Attributes"/>
|
||||
</effects-menu>
|
||||
</effect>
|
||||
<script>
|
||||
<command location="inx" interpreter="python">fablabchemnitz_attributes_cleaner.py</command>
|
||||
</script>
|
||||
</inkscape-extension>
|
44
extensions/fablabchemnitz_attributes_cleaner.py
Normal file
44
extensions/fablabchemnitz_attributes_cleaner.py
Normal file
@ -0,0 +1,44 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
"""
|
||||
Removes attributes sodipodi:absref, sodipodi:docbase and sodipodi:docname from all elements that contain them.
|
||||
|
||||
full names of attributes
|
||||
sodipodi:absref
|
||||
{http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd}absref
|
||||
sodipodi:docbase
|
||||
{http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd}docbase
|
||||
sodipodi:docname
|
||||
{http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd}docname
|
||||
|
||||
element.attrib.pop("{http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd}absref", None)
|
||||
"""
|
||||
|
||||
import inkex
|
||||
import sys
|
||||
|
||||
class AbsrefRemover(inkex.Effect):
|
||||
def __init__(self):
|
||||
inkex.Effect.__init__(self)
|
||||
self.arg_parser.add_argument("-a", "--removeAbsref", type=inkex.Boolean, default=True, help="Remove sodipodi:absref")
|
||||
self.arg_parser.add_argument("-b", "--removeDocbase", type=inkex.Boolean, default=True, help="Remove sodipodi:docbase")
|
||||
self.arg_parser.add_argument("-n", "--removeDocname", type=inkex.Boolean, default=True, help="Remove sodipodi:docname")
|
||||
|
||||
def effect(self):
|
||||
if self.options.removeAbsref:
|
||||
elements = self.document.xpath("//*[@sodipodi:absref]", namespaces=inkex.NSS)
|
||||
for element in elements:
|
||||
element.attrib.pop("{http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd}absref", None)
|
||||
|
||||
if self.options.removeDocbase:
|
||||
elements = self.document.xpath("//*[@sodipodi:docbase]", namespaces=inkex.NSS)
|
||||
for element in elements:
|
||||
element.attrib.pop("{http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd}docbase", None)
|
||||
|
||||
if self.options.removeDocname:
|
||||
elements = self.document.xpath("//*[@sodipodi:docname]", namespaces=inkex.NSS)
|
||||
for element in elements:
|
||||
element.attrib.pop("{http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd}docname", None)
|
||||
|
||||
if __name__ == "__main__":
|
||||
AbsrefRemover().run()
|
25
extensions/fablabchemnitz_attributes_editor.inx
Normal file
25
extensions/fablabchemnitz_attributes_editor.inx
Normal file
@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
|
||||
<name>Edit Attributes</name>
|
||||
<id>fablabchemnitz.de.attributes_editor</id>
|
||||
<param name="introduction" type="description">Edit value of attribute on selected elements.</param>
|
||||
<param name="tip" type="description">For namespaces use {namespaceUrl}attributeName</param>
|
||||
<param name="attributeName" type="string" gui-text="Name:"></param>
|
||||
<param name="attributeValue" type="string" gui-text="Value: "></param>
|
||||
<param name="mode" type="optiongroup" appearance="combo" gui-text="Operation on attribute">
|
||||
<option value="set">Set</option>
|
||||
<option value="append">Append</option>
|
||||
<option value="prefix">Prefix</option>
|
||||
<option value="subtract">Remove content</option>
|
||||
<option value="remove">Remove attribute</option>
|
||||
</param>
|
||||
<effect>
|
||||
<object-type>all</object-type>
|
||||
<effects-menu>
|
||||
<submenu name="Attributes" />
|
||||
</effects-menu>
|
||||
</effect>
|
||||
<script>
|
||||
<command location="inx" interpreter="python">fablabchemnitz_attributes_editor.py</command>
|
||||
</script>
|
||||
</inkscape-extension>
|
38
extensions/fablabchemnitz_attributes_editor.py
Normal file
38
extensions/fablabchemnitz_attributes_editor.py
Normal file
@ -0,0 +1,38 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import inkex
|
||||
import sys
|
||||
|
||||
class AttribEditor(inkex.Effect):
|
||||
def __init__(self):
|
||||
inkex.Effect.__init__(self)
|
||||
self.arg_parser.add_argument("-a", "--attributeName", help="attribute name to set")
|
||||
self.arg_parser.add_argument("-v", "--attributeValue", help="attribute value to set")
|
||||
self.arg_parser.add_argument("-m", "--mode", default="set", help="mode of operation")
|
||||
|
||||
def effect(self):
|
||||
if not self.options.attributeName: # if attributeName is not given
|
||||
self.OptionParser.error("Attribute name not given")
|
||||
|
||||
elements = self.svg.selected.values()
|
||||
for el in elements:
|
||||
currentAtt = el.attrib.get(self.options.attributeName)
|
||||
if currentAtt is None:
|
||||
currentAtt = ""
|
||||
|
||||
if self.options.mode == "set":
|
||||
el.attrib[self.options.attributeName] = self.options.attributeValue
|
||||
elif self.options.mode == "append":
|
||||
el.attrib[self.options.attributeName] = currentAtt + self.options.attributeValue
|
||||
elif self.options.mode == "prefix":
|
||||
el.attrib[self.options.attributeName] = self.options.attributeValue + currentAtt
|
||||
elif self.options.mode == "subtract":
|
||||
el.attrib[self.options.attributeName] = currentAtt.replace(self.options.attributeValue, "")
|
||||
elif self.options.mode == "remove":
|
||||
if self.options.attributeName in el.attrib:
|
||||
del el.attrib[self.options.attributeName]
|
||||
else:
|
||||
inkex.errormsg(_("Invalid mode: " + self.options.mode))
|
||||
|
||||
if __name__ == "__main__":
|
||||
AttribEditor().run()
|
18
extensions/fablabchemnitz_attributes_import.inx
Normal file
18
extensions/fablabchemnitz_attributes_import.inx
Normal file
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
|
||||
<name>Import Attributes</name>
|
||||
<id>fablabchemnitz.de.attributes_import</id>
|
||||
<param name="introduction" type="description"> Uses lines in text file to edit attributes of elements.</param>
|
||||
<_param name="usage" type="description">Line: 'elementID,attributeName,attributeValue'. </param>
|
||||
<param name="namespaceTip" type="description"> For namespaces use {namespaceUrl}attributeName</param>
|
||||
<param name="data" type="path" _gui-text="Data file:" mode="file" filetypes="txt,csv"/>
|
||||
<effect>
|
||||
<object-type>all</object-type>
|
||||
<effects-menu>
|
||||
<submenu name="Attributes" />
|
||||
</effects-menu>
|
||||
</effect>
|
||||
<script>
|
||||
<command location="inx" interpreter="python">fablabchemnitz_attributes_import.py</command>
|
||||
</script>
|
||||
</inkscape-extension>
|
30
extensions/fablabchemnitz_attributes_import.py
Normal file
30
extensions/fablabchemnitz_attributes_import.py
Normal file
@ -0,0 +1,30 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import inkex
|
||||
|
||||
class AttribImport(inkex.Effect):
|
||||
def __init__(self):
|
||||
inkex.Effect.__init__(self)
|
||||
self.arg_parser.add_argument("--data", default="", help="data file")
|
||||
|
||||
def effect(self):
|
||||
with open(self.options.data, 'r') as f:
|
||||
lines = f.read().splitlines()
|
||||
for line in lines:
|
||||
#split on , max 2+1 = 3 items
|
||||
parts = line.split(",", 2)
|
||||
if len(parts) >= 3:
|
||||
id = parts[0]
|
||||
attribute = parts[1]
|
||||
value = parts[2]
|
||||
try:
|
||||
node = self.svg.getElementById(id)
|
||||
if node is not None:
|
||||
try:
|
||||
node.set(attribute, value)
|
||||
except AttributeError:
|
||||
inkex.utils.debug("Unknown Attribute")
|
||||
except AttributeError:
|
||||
inkex.utils.debug("element with id '" + id + "' not found in current selection.")
|
||||
if __name__ == '__main__':
|
||||
AttribImport().run()
|
Reference in New Issue
Block a user