diff options
| author | Martin Owens <doctormo@gmail.com> | 2018-09-09 08:28:15 +0000 |
|---|---|---|
| committer | Martin Owens <doctormo@gmail.com> | 2018-09-09 08:28:15 +0000 |
| commit | 36c73a704b281e616d779b1eac5430d7527a9338 (patch) | |
| tree | 189c5defb29728d428f44e17903bde11b89540a1 /share/extensions/split.py | |
| parent | Update selection-chemistry.cpp (diff) | |
| download | inkscape-36c73a704b281e616d779b1eac5430d7527a9338.tar.gz inkscape-36c73a704b281e616d779b1eac5430d7527a9338.zip | |
Move extensions to git inkscape-extensions repository
Diffstat (limited to 'share/extensions/split.py')
| -rwxr-xr-x | share/extensions/split.py | 218 |
1 files changed, 0 insertions, 218 deletions
diff --git a/share/extensions/split.py b/share/extensions/split.py deleted file mode 100755 index 4e83b3d33..000000000 --- a/share/extensions/split.py +++ /dev/null @@ -1,218 +0,0 @@ -#!/usr/bin/env python -''' -Copyright (C) 2009 Karlisson Bezerra, contato@nerdson.com - -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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -''' - -import inkex - -class Split(inkex.Effect): - def __init__(self): - inkex.Effect.__init__(self) - self.OptionParser.add_option("-s", "--splittype", - action="store", type="string", - dest="split_type", default="word", - help="type of split") - self.OptionParser.add_option("-p", "--preserve", - action="store", type="inkbool", - dest="preserve", default="True", - help="Preserve original") - self.OptionParser.add_option("--tab", - action="store", type="string", - dest="tab", - help="The selected UI-tab when OK was pressed") - - def split_lines(self, node): - """Returns a list of lines""" - - lines = [] - count = 1 - - for n in node: - if not (n.tag == inkex.addNS("flowPara", "svg") or n.tag == inkex.addNS("tspan", "svg")): - if n.tag == inkex.addNS("textPath", "svg"): - inkex.debug("This type of text element isn't supported. First remove text from path.") - break - else: - continue - - text = inkex.etree.Element(inkex.addNS("text", "svg"), node.attrib) - - #handling flowed text nodes - if node.tag == inkex.addNS("flowRoot", "svg"): - try: - from simplestyle import parseStyle - fontsize = parseStyle(node.get("style"))["font-size"] - except: - fontsize = "12px" - fs = self.unittouu(fontsize) - - #selects the flowRegion's child (svg:rect) to get @X and @Y - id = node.get("id") - flowref = self.xpathSingle('/svg:svg//*[@id="%s"]/svg:flowRegion[1]' % id)[0] - - if flowref.tag == inkex.addNS("rect", "svg"): - text.set("x", flowref.get("x")) - text.set("y", str(float(flowref.get("y")) + fs * count)) - count += 1 - else: - inkex.debug("This type of text element isn't supported. First unflow text.") - break - - #now let's convert flowPara into tspan - tspan = inkex.etree.Element(inkex.addNS("tspan", "svg")) - tspan.set(inkex.addNS("role","sodipodi"), "line") - tspan.text = n.text - text.append(tspan) - - else: - from copy import copy - x = n.get("x") or node.get("x") - y = n.get("y") or node.get("y") - - text.set("x", x) - text.set("y", y) - text.append(copy(n)) - - lines.append(text) - - return lines - - - def split_words(self, node): - """Returns a list of words""" - - words = [] - - #Function to recursively extract text - def plain_str(elem): - words = [] - if elem.text: - words.append(elem.text) - for n in elem: - words.extend(plain_str(n)) - if n.tail: - words.append(n.tail) - return words - - #if text has more than one line, iterates through elements - lines = self.split_lines(node) - if not lines: - return words - - for line in lines: - #gets the position of text node - x = float(line.get("x")) - y = line.get("y") - - #gets the font size. if element doesn't have a style attribute, it assumes font-size = 12px - try: - from simplestyle import parseStyle - fontsize = parseStyle(line.get("style"))["font-size"] - except: - fontsize = "12px" - fs = self.unittouu(fontsize) - - #extract and returns a list of words - words_list = "".join(plain_str(line)).split() - prev_len = 0 - - #creates new text nodes for each string in words_list - for word in words_list: - tspan = inkex.etree.Element(inkex.addNS("tspan", "svg")) - tspan.text = word - - text = inkex.etree.Element(inkex.addNS("text", "svg"), line.attrib) - tspan.set(inkex.addNS("role","sodipodi"), "line") - - #positioning new text elements - x = x + prev_len * fs - prev_len = len(word) - text.set("x", str(x)) - text.set("y", str(y)) - - text.append(tspan) - words.append(text) - - return words - - - def split_letters(self, node): - """Returns a list of letters""" - - letters = [] - - words = self.split_words(node) - if not words: - return letters - - for word in words: - - x = float(word.get("x")) - y = word.get("y") - - #gets the font size. If element doesn't have a style attribute, it assumes font-size = 12px - try: - import simplestyle - fontsize = simplestyle.parseStyle(word.get("style"))["font-size"] - except: - fontsize = "12px" - fs = self.unittouu(fontsize) - - #for each letter in element string - for letter in word[0].text: - tspan = inkex.etree.Element(inkex.addNS("tspan", "svg")) - tspan.text = letter - - text = inkex.etree.Element(inkex.addNS("text", "svg"), node.attrib) - text.set("x", str(x)) - text.set("y", str(y)) - x += fs - - text.append(tspan) - letters.append(text) - return letters - - - def effect(self): - """Applies the effect""" - - split_type = self.options.split_type - preserve = self.options.preserve - - #checks if the selected elements are text nodes - for id, node in self.selected.iteritems(): - if not (node.tag == inkex.addNS("text", "svg") or node.tag == inkex.addNS("flowRoot", "svg")): - inkex.debug("Please select only text elements.") - break - else: - if split_type == "line": - nodes = self.split_lines(node) - elif split_type == "word": - nodes = self.split_words(node) - elif split_type == "letter": - nodes = self.split_letters(node) - - for n in nodes: - node.getparent().append(n) - - #preserve original element - if not preserve and nodes: - parent = node.getparent() - parent.remove(node) - -b = Split() -b.affect() |
