45 lines
1.6 KiB
Python
45 lines
1.6 KiB
Python
|
#!/usr/bin/env python3
|
|||
|
|
|||
|
import inkex
|
|||
|
import os
|
|||
|
import lxml
|
|||
|
|
|||
|
class ImportAttributes(inkex.EffectExtension):
|
|||
|
|
|||
|
def add_arguments(self, pars):
|
|||
|
pars.add_argument("--data", default="", help="data file")
|
|||
|
|
|||
|
def effect(self):
|
|||
|
|
|||
|
if not os.path.exists(self.options.data):
|
|||
|
self.msg("The input file does not exist. Please select a proper file and try again.")
|
|||
|
exit(1)
|
|||
|
|
|||
|
if os.path.isdir(self.options.data):
|
|||
|
self.msg("You must specify a file, not a directory!")
|
|||
|
exit(1)
|
|||
|
|
|||
|
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.")
|
|||
|
except lxml.etree.XPathEvalError:
|
|||
|
inkex.utils.debug("invalid input file")
|
|||
|
exit(1)
|
|||
|
|
|||
|
if __name__ == '__main__':
|
|||
|
ImportAttributes().run()
|