diff --git a/extensions/fablabchemnitz_migrategroups.inx b/extensions/fablabchemnitz_migrategroups.inx
index a4eb2921..181fcfdf 100644
--- a/extensions/fablabchemnitz_migrategroups.inx
+++ b/extensions/fablabchemnitz_migrategroups.inx
@@ -29,11 +29,11 @@
- true
- true
- true
- true
- true
+ true
+ true
+ true
+ true
+ true
true
@@ -67,4 +67,4 @@
-
\ No newline at end of file
+
diff --git a/extensions/fablabchemnitz_migrategroups.py b/extensions/fablabchemnitz_migrategroups.py
index c7d951d0..d00fa20b 100644
--- a/extensions/fablabchemnitz_migrategroups.py
+++ b/extensions/fablabchemnitz_migrategroups.py
@@ -8,7 +8,7 @@ This extension parses the selection and will put all elements into one single gr
Author: Mario Voigt / FabLab Chemnitz
Mail: mario.voigt@stadtfabrikanten.org
Date: 13.08.2020
-Last Patch: 23.08.2020
+Last Patch: 29.08.2020
License: GNU GPL v3
"""
@@ -17,9 +17,9 @@ from lxml import etree
class MigrateGroups(inkex.Effect):
- allElements = []
- allGroups = []
- allNonMigrates = []
+ allElements = [] #list of all (sub)elements to process within selection
+ allGroups = [] #list of all groups (svg:g and svg:svg items) to delete
+ allNonMigrates = [] #list of all other elements except svg:g and svg:svg to drop while migrating
def __init__(self):
inkex.Effect.__init__(self)
@@ -40,11 +40,11 @@ class MigrateGroups(inkex.Effect):
self.arg_parser.add_argument("--svg", type=inkex.Boolean, default=True)
self.arg_parser.add_argument("--text", type=inkex.Boolean, default=True)
self.arg_parser.add_argument("--tspan", type=inkex.Boolean, default=True)
- self.arg_parser.add_argument("--lineargradient", type=inkex.Boolean, default=True)
- self.arg_parser.add_argument("--radialgradient", type=inkex.Boolean, default=True)
- self.arg_parser.add_argument("--meshgradient", type=inkex.Boolean, default=True)
- self.arg_parser.add_argument("--meshrow", type=inkex.Boolean, default=True)
- self.arg_parser.add_argument("--meshpatch", type=inkex.Boolean, default=True)
+ self.arg_parser.add_argument("--linearGradient", type=inkex.Boolean, default=True)
+ self.arg_parser.add_argument("--radialGradient", type=inkex.Boolean, default=True)
+ self.arg_parser.add_argument("--meshGradient", type=inkex.Boolean, default=True)
+ self.arg_parser.add_argument("--meshRow", type=inkex.Boolean, default=True)
+ self.arg_parser.add_argument("--meshPatch", type=inkex.Boolean, default=True)
self.arg_parser.add_argument("--metadata", type=inkex.Boolean, default=True)
self.arg_parser.add_argument("--script", type=inkex.Boolean, default=True)
self.arg_parser.add_argument("--stop", type=inkex.Boolean, default=True)
@@ -69,11 +69,11 @@ class MigrateGroups(inkex.Effect):
#namespace.append("{http://www.w3.org/2000/svg}svg") if self.options.svg else ""
namespace.append("{http://www.w3.org/2000/svg}text") if self.options.text else ""
namespace.append("{http://www.w3.org/2000/svg}tspan") if self.options.tspan else ""
- namespace.append("{http://www.w3.org/2000/svg}lineargradient") if self.options.lineargradient else ""
- namespace.append("{http://www.w3.org/2000/svg}radialgradient") if self.options.radialgradient else ""
- namespace.append("{http://www.w3.org/2000/svg}meshgradient") if self.options.meshgradient else ""
- namespace.append("{http://www.w3.org/2000/svg}meshrow") if self.options.meshrow else ""
- namespace.append("{http://www.w3.org/2000/svg}meshpatch") if self.options.meshpatch else ""
+ namespace.append("{http://www.w3.org/2000/svg}linearGradient") if self.options.linearGradient else ""
+ namespace.append("{http://www.w3.org/2000/svg}radialGradient") if self.options.radialGradient else ""
+ namespace.append("{http://www.w3.org/2000/svg}meshGradient") if self.options.meshGradient else ""
+ namespace.append("{http://www.w3.org/2000/svg}meshRow") if self.options.meshRow else ""
+ namespace.append("{http://www.w3.org/2000/svg}meshPatch") if self.options.meshPatch else ""
namespace.append("{http://www.w3.org/2000/svg}script") if self.options.script else ""
namespace.append("{http://www.w3.org/2000/svg}metadata") if self.options.metadata else ""
namespace.append("{http://www.w3.org/2000/svg}stop") if self.options.stop else ""
@@ -82,6 +82,8 @@ class MigrateGroups(inkex.Effect):
namespace.append("{http://www.w3.org/2000/svg}flowRegion") if self.options.flowRegion else ""
namespace.append("{http://www.w3.org/2000/svg}flowPara") if self.options.flowPara else ""
+ #inkex.utils.debug(namespace)
+
#check if we have selected elements or if we should parse the whole document instead
selected = [] #list of elements to parse
if len(self.svg.selected) == 0:
@@ -89,19 +91,21 @@ class MigrateGroups(inkex.Effect):
if element != self.document.getroot():
selected.append(element)
else:
- selected = self.svg.selected
+ selected = self.svg.get_selected()
- def parseNodes(self, element):
-
+ #check the element for it's type and put it into the the according list (either re-group or delete)
+ def parseElement(self, element):
if self.options.allitems:
if element not in self.allElements:
if element.tag != inkex.addNS('g','svg') and element.tag != inkex.addNS('svg','svg') and element.tag != inkex.addNS('namedview','sodipodi'):
self.allElements.append(element)
else:
+ #inkex.utils.debug(element.tag)
if element.tag in namespace:
if element not in self.allElements:
self.allElements.append(element)
else:
+ #inkex.utils.debug(element.tag)
if element.tag != inkex.addNS('g','svg') and element.tag != inkex.addNS('svg','svg') and element.tag != inkex.addNS('namedview','sodipodi'):
if element not in self.allNonMigrates:
self.allNonMigrates.append(element)
@@ -112,18 +116,17 @@ class MigrateGroups(inkex.Effect):
groups = element.getchildren()
if groups is not None:
for group in groups:
- parseNodes(self, group)
+ parseElement(self, group)
if group not in self.allGroups:
self.allGroups.append(group)
#get all elements from the selection. Remove all groups from the selection and form a new single group of it. We also handle svg:svg because it behaves like a group container too
for element in selected:
- parseNodes(self, element)
+ parseElement(self, element)
+ #copy all element into the new group
if len(self.allElements) > 0:
- #copy all element into the new group
newGroup = self.document.getroot().add(inkex.Group()) #make a new group at root level
-
for oldElement in self.allElements:
#oldElementId = oldElement.get('id')
newElement = oldElement.copy()
@@ -133,23 +136,30 @@ class MigrateGroups(inkex.Effect):
if oldElement.getparent() is not None:
oldElement.getparent().remove(oldElement)
- if self.options.droponly == False:
- #now remove all the obsolete groups
- if len(self.allGroups) > 0:
- for group in self.allGroups:
- #if group.getparent() is not None:
- group.getparent().remove(group)
-
- #remove the selected, now empty group (if it's the case) - this applies not if there is no user selection at all so some dangling group(s) might be left over
- if len(self.svg.selected) > 0 and len(self.allElements) > 0:
- if self.svg.selected[0].tag == inkex.addNS('g','svg') or self.svg.selected[0].tag == inkex.addNS('svg','svg'):
- if self.svg.selected[0].getparent() is not None:
- self.svg.selected[0].getparent().remove(self.svg.selected[0])
-
+ #show a list with items to delete
if self.options.showdroplist:
self.msg(str(len(self.allNonMigrates)) + " elements were removed during nodes while migration:")
for i in self.allNonMigrates:
if i.get('id') is not None:
- self.msg(i.tag.replace("{http://www.w3.org/2000/svg}","svg:") + " id:" + i.get('id'))
-
-MigrateGroups().run()
\ No newline at end of file
+ self.msg(i.tag.replace("{http://www.w3.org/2000/svg}","svg:") + " id:" + i.get('id'))
+
+ # #now remove the stuff with nonMigrates list. this has to be done before we drop the groups where they are located
+ # if len(self.allNonMigrates) > 0:
+ # for nonMigrate in self.allNonMigrates:
+ # if nonMigrate.getparent() is not None:
+ # nonMigrate.getparent().remove(nonMigrate)
+
+ #now remove all the obsolete groups
+ if self.options.droponly == False:
+ if len(self.allGroups) > 0:
+ for group in self.allGroups:
+ if group.getparent() is not None:
+ group.getparent().remove(group)
+
+ #remove the selected, now empty group (if it's the case) - this applies not if there is no user selection at all so some dangling group(s) might be left over
+ if len(self.svg.selected) > 0 and len(self.allElements) > 0:
+ if self.svg.get_first_selected().tag == inkex.addNS('g','svg') or self.svg.get_first_selected().tag == inkex.addNS('svg','svg'):
+ if self.svg.get_first_selected().getparent() is not None:
+ self.svg.get_first_selected().getparent().remove(self.svg.get_first_selected())
+
+MigrateGroups().run()