<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.inkscape.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Aussie</id>
	<title>Inkscape Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.inkscape.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Aussie"/>
	<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/Special:Contributions/Aussie"/>
	<updated>2026-05-01T11:30:14Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.36.1</generator>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=FindMatch&amp;diff=40794</id>
		<title>FindMatch</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=FindMatch&amp;diff=40794"/>
		<updated>2008-12-17T21:14:23Z</updated>

		<summary type="html">&lt;p&gt;Aussie: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Find Match tries to match the last path selected against all the path in the document.&lt;br /&gt;
&lt;br /&gt;
The algorithm first checks that the number of node points are the same. Then checks that the node commands match. If the commands match it will then do a correlation against the point positions. This allows the match to catch even those paths that have been scaled, rotated or flipped. The correlation threshold allows the match to be tuned. A 1.0 will match only those paths that haven't been transformed. There is also a check box to match on color or not. &lt;br /&gt;
&lt;br /&gt;
Please leave comments and suggestions.&lt;br /&gt;
&lt;br /&gt;
The Find Match inx file&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;inkscape-extension&amp;gt;&lt;br /&gt;
  &amp;lt;_name&amp;gt;Find Match&amp;lt;/_name&amp;gt;&lt;br /&gt;
  &amp;lt;id&amp;gt;org.find_match&amp;lt;/id&amp;gt;&lt;br /&gt;
  &amp;lt;dependency type=&amp;quot;executable&amp;quot; location=&amp;quot;extensions&amp;quot;&amp;gt;findmatch.py&amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency type=&amp;quot;executable&amp;quot; location=&amp;quot;extensions&amp;quot;&amp;gt;inkex.py&amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;param name=&amp;quot;foundLayer&amp;quot; type=&amp;quot;string&amp;quot; _gui-text=&amp;quot;Name of layer to put found objects on?&amp;quot;&amp;gt;Found&amp;lt;/param&amp;gt;&lt;br /&gt;
  &amp;lt;param name=&amp;quot;threshold&amp;quot; type=&amp;quot;float&amp;quot; min=&amp;quot;0.0&amp;quot; max=&amp;quot;1.0&amp;quot; _gui-text=&amp;quot;Correlation Threshold&amp;quot;&amp;gt;0.8&amp;lt;/param&amp;gt;&lt;br /&gt;
  &amp;lt;param name=&amp;quot;matchcolor&amp;quot;    type=&amp;quot;boolean&amp;quot; _gui-text=&amp;quot;Colors should match&amp;quot;&amp;gt;true&amp;lt;/param&amp;gt;&lt;br /&gt;
  &amp;lt;effect&amp;gt;&lt;br /&gt;
    &amp;lt;object-type&amp;gt;all&amp;lt;/object-type&amp;gt;&lt;br /&gt;
    &amp;lt;effects-menu&amp;gt;&lt;br /&gt;
       &amp;lt;submenu _name=&amp;quot;Examples&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/effects-menu&amp;gt;&lt;br /&gt;
  &amp;lt;/effect&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    &amp;lt;command reldir=&amp;quot;extensions&amp;quot; interpreter=&amp;quot;python&amp;quot;&amp;gt;findmatch.py&amp;lt;/command&amp;gt;&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/inkscape-extension&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
The python file for Find Match&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
This program is free software; you can redistribute it and/or modify&lt;br /&gt;
it under the terms of the GNU General Public License as published by&lt;br /&gt;
the Free Software Foundation; either version 2 of the License, or&lt;br /&gt;
(at your option) any later version.&lt;br /&gt;
&lt;br /&gt;
This program is distributed in the hope that it will be useful,&lt;br /&gt;
but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
GNU General Public License for more details.&lt;br /&gt;
&lt;br /&gt;
You should have received a copy of the GNU General Public License&lt;br /&gt;
along with this program; if not, write to the Free Software&lt;br /&gt;
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA&lt;br /&gt;
'''&lt;br /&gt;
import sys&lt;br /&gt;
sys.path.append('/usr/share/inkscape/extensions')&lt;br /&gt;
&lt;br /&gt;
# We will use the inkex module with the predefined Effect base class.&lt;br /&gt;
import inkex&lt;br /&gt;
from simplestyle import *&lt;br /&gt;
from simplepath import *&lt;br /&gt;
from math import sqrt&lt;br /&gt;
&lt;br /&gt;
color_props_fill=('fill:','stop-color:','flood-color:','lighting-color:')&lt;br /&gt;
color_props_stroke=('stroke:',)&lt;br /&gt;
color_props = color_props_fill + color_props_stroke&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def correlation(xList,yList):&lt;br /&gt;
    #print yList&lt;br /&gt;
    n = len(xList)&lt;br /&gt;
    sumX = 0&lt;br /&gt;
    sumXX = 0&lt;br /&gt;
    sumY = 0&lt;br /&gt;
    sumYY = 0&lt;br /&gt;
    sumXY = 0&lt;br /&gt;
    for i in range(0,n):&lt;br /&gt;
    	X = xList[i]&lt;br /&gt;
        sumX += X&lt;br /&gt;
        sumXX += X*X&lt;br /&gt;
        Y = yList[i]&lt;br /&gt;
        sumY += Y&lt;br /&gt;
        sumYY += Y*Y&lt;br /&gt;
        sumXY += X*Y&lt;br /&gt;
    corrnum = (n * sumXY)-(sumX * sumY)&lt;br /&gt;
    corrden = sqrt( (n * sumXX) - (sumX * sumX) ) * sqrt( (n * sumYY) - (sumY * sumY) )&lt;br /&gt;
    corr = corrnum/corrden&lt;br /&gt;
    return corr&lt;br /&gt;
&lt;br /&gt;
def pathMatch(rPath,cPath):&lt;br /&gt;
    n = len(rPath)&lt;br /&gt;
    for i in range(0,n):&lt;br /&gt;
        rNode = rPath[i]&lt;br /&gt;
        cNode = cPath[i]&lt;br /&gt;
        [rCmd,rPoints] = rNode&lt;br /&gt;
        [cCmd,cPoints] = cNode&lt;br /&gt;
        if rCmd != cCmd:&lt;br /&gt;
            #print &amp;quot;not match&amp;quot;&lt;br /&gt;
            return 0&lt;br /&gt;
    #print &amp;quot;Command Match&amp;quot;&lt;br /&gt;
    return 1&lt;br /&gt;
    &lt;br /&gt;
def pathPullPoints(rPath,cPath):&lt;br /&gt;
    n = len(rPath)&lt;br /&gt;
    rPointList = []&lt;br /&gt;
    cPointList = []&lt;br /&gt;
    for i in range(0,n):&lt;br /&gt;
        rNode = rPath[i]&lt;br /&gt;
        cNode = cPath[i]&lt;br /&gt;
        [rCmd,rPoints] = rNode&lt;br /&gt;
        [cCmd,cPoints] = cNode&lt;br /&gt;
        rPointList.extend(rPoints)&lt;br /&gt;
        cPointList.extend(cPoints)&lt;br /&gt;
    return [rPointList,cPointList]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def getLayer(svg, layerName):&lt;br /&gt;
    for g in svg.xpath('//svg:g', namespaces=inkex.NSS):&lt;br /&gt;
        if (g.get(inkex.addNS('groupmode', 'inkscape')) == 'layer'&lt;br /&gt;
            and (g.get(inkex.addNS('label', 'inkscape'))&lt;br /&gt;
            == layerName)):&lt;br /&gt;
            return g&lt;br /&gt;
    # Create a new layer.&lt;br /&gt;
    newLayer = inkex.etree.SubElement(svg, 'g')&lt;br /&gt;
    newLayer.set(inkex.addNS('label', 'inkscape'), layerName)&lt;br /&gt;
    newLayer.set(inkex.addNS('groupmode', 'inkscape'), 'layer')&lt;br /&gt;
    return newLayer&lt;br /&gt;
&lt;br /&gt;
def compareColors(refNode, compNode):&lt;br /&gt;
    pass&lt;br /&gt;
&lt;br /&gt;
def getColor(node):&lt;br /&gt;
    col = {}&lt;br /&gt;
    if node.attrib.has_key('style'):&lt;br /&gt;
        style=node.get('style') # fixme: this will break for presentation attributes!&lt;br /&gt;
        if style!='':&lt;br /&gt;
            #inkex.debug('old style:'+style)&lt;br /&gt;
            styles=style.split(';')&lt;br /&gt;
            for i in range(len(styles)):&lt;br /&gt;
                for c in range(len(color_props)):&lt;br /&gt;
                    if styles[i].startswith(color_props[c]):&lt;br /&gt;
                        #print &amp;quot;col num %d&amp;quot; % c&lt;br /&gt;
                        #print styles[i][len(color_props[c]):]&lt;br /&gt;
                        col[c] =  styles[i][len(color_props[c]):]&lt;br /&gt;
    return col&lt;br /&gt;
    &lt;br /&gt;
def colorMatch(rNode,cNode):&lt;br /&gt;
    rCol = getColor(rNode)&lt;br /&gt;
    #print rCol&lt;br /&gt;
    cCol = getColor(cNode)&lt;br /&gt;
    #print cCol&lt;br /&gt;
    if (rCol == cCol):&lt;br /&gt;
        return 1&lt;br /&gt;
    return 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class FindMatch(inkex.Effect):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Inkscape effect extension.&lt;br /&gt;
    Searches for paths that match and places them on the named layer.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        Constructor.&lt;br /&gt;
        Defines the &amp;quot;--what&amp;quot; option of a script.&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        # Call the base class constructor.&lt;br /&gt;
        inkex.Effect.__init__(self)&lt;br /&gt;
          &lt;br /&gt;
        self.OptionParser.add_option('-f', '--foundLayer', action = 'store',&lt;br /&gt;
          type = 'string', dest = 'foundLayer', default = 'Found',&lt;br /&gt;
          help = 'Name of layer to put found objects on?')&lt;br /&gt;
&lt;br /&gt;
        self.OptionParser.add_option(&amp;quot;-t&amp;quot;, &amp;quot;--threshold&amp;quot;,&lt;br /&gt;
                        action=&amp;quot;store&amp;quot;, type=&amp;quot;float&amp;quot;, &lt;br /&gt;
                        dest=&amp;quot;threshold&amp;quot;, default = 0.8,&lt;br /&gt;
                        help=&amp;quot;threshold for correlation match&amp;quot;)&lt;br /&gt;
        self.OptionParser.add_option(&amp;quot;--matchcolor&amp;quot;,&lt;br /&gt;
                        action=&amp;quot;store&amp;quot;, type=&amp;quot;inkbool&amp;quot;, &lt;br /&gt;
                        dest=&amp;quot;matchcolor&amp;quot;, default=True,&lt;br /&gt;
                        help=&amp;quot;If True, colors will be matched&amp;quot;) &lt;br /&gt;
                        &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    def effect(self):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        Effect behaviour.&lt;br /&gt;
        Search for all paths that match the selected path&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        foundLayer = self.options.foundLayer&lt;br /&gt;
        matchcolor = self.options.matchcolor&lt;br /&gt;
&lt;br /&gt;
        # Get access to main SVG document element &lt;br /&gt;
        svg = self.document.getroot()&lt;br /&gt;
        &lt;br /&gt;
        # get the layer where the found paths will be moved to&lt;br /&gt;
        layer = getLayer(svg, foundLayer)&lt;br /&gt;
        &lt;br /&gt;
        # get a list of all path nodes&lt;br /&gt;
        pathNodes = self.document.xpath('//svg:path',namespaces=inkex.NSS)&lt;br /&gt;
&lt;br /&gt;
        # setup stderr so that we can print to it for debugging        &lt;br /&gt;
        saveout = sys.stdout&lt;br /&gt;
       &lt;br /&gt;
        sys.stdout = sys.stderr&lt;br /&gt;
        &lt;br /&gt;
        rPathLen = 0&lt;br /&gt;
        rPathList = []&lt;br /&gt;
        rPathNode = None&lt;br /&gt;
        &lt;br /&gt;
        if len(self.selected) == 0:&lt;br /&gt;
            print &amp;quot;Nothing Selected&amp;quot;&lt;br /&gt;
            sys.stdout = saveout&lt;br /&gt;
            return&lt;br /&gt;
        &lt;br /&gt;
        for id, node in self.selected.iteritems():&lt;br /&gt;
            #print dir(node)&lt;br /&gt;
            if node.tag == inkex.addNS('path','svg'):&lt;br /&gt;
                #print node.attrib['d']&lt;br /&gt;
                rPathList = parsePath(node.attrib['d'])&lt;br /&gt;
                rPathLen = len(rPathList)&lt;br /&gt;
                rPathNode = node&lt;br /&gt;
                #print rPathLen&lt;br /&gt;
                #print rPathList&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
        for cPathNode in pathNodes:&lt;br /&gt;
            cPathList = parsePath(cPathNode.attrib['d'])&lt;br /&gt;
            cPathLen = len(cPathList)&lt;br /&gt;
            #print cPathLen&lt;br /&gt;
            #print cPathList&lt;br /&gt;
            if rPathLen == cPathLen:&lt;br /&gt;
                #print &amp;quot; Found %d in %s&amp;quot; % (rPathLen,cPathNode)&lt;br /&gt;
                &lt;br /&gt;
                #print matchcolor&lt;br /&gt;
                colorMatchFlag = (colorMatch(rPathNode,cPathNode) == 1) or not matchcolor&lt;br /&gt;
                pathMatchFlag = pathMatch(rPathList,cPathList)==1&lt;br /&gt;
                &lt;br /&gt;
                if pathMatchFlag and colorMatchFlag:&lt;br /&gt;
                    [rList,cList] = pathPullPoints(rPathList,cPathList)&lt;br /&gt;
                    corVal = correlation(rList,cList)&lt;br /&gt;
                    #print &amp;quot;The correlation was %g&amp;quot; % corVal&lt;br /&gt;
                    if (corVal &amp;gt; 0.80):&lt;br /&gt;
                        layer.append(cPathNode)&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        #print &lt;br /&gt;
        #print 'This message will be logged instead of displayed'&lt;br /&gt;
        sys.stdout = saveout &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Create effect instance and apply it.&lt;br /&gt;
effect = FindMatch()&lt;br /&gt;
effect.affect()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aussie</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=FindMatch&amp;diff=40784</id>
		<title>FindMatch</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=FindMatch&amp;diff=40784"/>
		<updated>2008-12-17T21:14:02Z</updated>

		<summary type="html">&lt;p&gt;Aussie: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Find Match tries to match the last path selected against all the path in the document.&lt;br /&gt;
&lt;br /&gt;
The algorithm first checks that the number of mode points are the same. Then checks that the node commands match. If the commands match it will then do a correlation against the point positions. This allows the match to catch even those paths that have been scaled, rotated or flipped. The correlation threshold allows the match to be tuned. A 1.0 will match only those paths that haven't been transformed. There is also a check box to match on color or not. &lt;br /&gt;
&lt;br /&gt;
Please leave comments and suggestions.&lt;br /&gt;
&lt;br /&gt;
The Find Match inx file&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;inkscape-extension&amp;gt;&lt;br /&gt;
  &amp;lt;_name&amp;gt;Find Match&amp;lt;/_name&amp;gt;&lt;br /&gt;
  &amp;lt;id&amp;gt;org.find_match&amp;lt;/id&amp;gt;&lt;br /&gt;
  &amp;lt;dependency type=&amp;quot;executable&amp;quot; location=&amp;quot;extensions&amp;quot;&amp;gt;findmatch.py&amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency type=&amp;quot;executable&amp;quot; location=&amp;quot;extensions&amp;quot;&amp;gt;inkex.py&amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;param name=&amp;quot;foundLayer&amp;quot; type=&amp;quot;string&amp;quot; _gui-text=&amp;quot;Name of layer to put found objects on?&amp;quot;&amp;gt;Found&amp;lt;/param&amp;gt;&lt;br /&gt;
  &amp;lt;param name=&amp;quot;threshold&amp;quot; type=&amp;quot;float&amp;quot; min=&amp;quot;0.0&amp;quot; max=&amp;quot;1.0&amp;quot; _gui-text=&amp;quot;Correlation Threshold&amp;quot;&amp;gt;0.8&amp;lt;/param&amp;gt;&lt;br /&gt;
  &amp;lt;param name=&amp;quot;matchcolor&amp;quot;    type=&amp;quot;boolean&amp;quot; _gui-text=&amp;quot;Colors should match&amp;quot;&amp;gt;true&amp;lt;/param&amp;gt;&lt;br /&gt;
  &amp;lt;effect&amp;gt;&lt;br /&gt;
    &amp;lt;object-type&amp;gt;all&amp;lt;/object-type&amp;gt;&lt;br /&gt;
    &amp;lt;effects-menu&amp;gt;&lt;br /&gt;
       &amp;lt;submenu _name=&amp;quot;Examples&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/effects-menu&amp;gt;&lt;br /&gt;
  &amp;lt;/effect&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    &amp;lt;command reldir=&amp;quot;extensions&amp;quot; interpreter=&amp;quot;python&amp;quot;&amp;gt;findmatch.py&amp;lt;/command&amp;gt;&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/inkscape-extension&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
The python file for Find Match&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
This program is free software; you can redistribute it and/or modify&lt;br /&gt;
it under the terms of the GNU General Public License as published by&lt;br /&gt;
the Free Software Foundation; either version 2 of the License, or&lt;br /&gt;
(at your option) any later version.&lt;br /&gt;
&lt;br /&gt;
This program is distributed in the hope that it will be useful,&lt;br /&gt;
but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
GNU General Public License for more details.&lt;br /&gt;
&lt;br /&gt;
You should have received a copy of the GNU General Public License&lt;br /&gt;
along with this program; if not, write to the Free Software&lt;br /&gt;
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA&lt;br /&gt;
'''&lt;br /&gt;
import sys&lt;br /&gt;
sys.path.append('/usr/share/inkscape/extensions')&lt;br /&gt;
&lt;br /&gt;
# We will use the inkex module with the predefined Effect base class.&lt;br /&gt;
import inkex&lt;br /&gt;
from simplestyle import *&lt;br /&gt;
from simplepath import *&lt;br /&gt;
from math import sqrt&lt;br /&gt;
&lt;br /&gt;
color_props_fill=('fill:','stop-color:','flood-color:','lighting-color:')&lt;br /&gt;
color_props_stroke=('stroke:',)&lt;br /&gt;
color_props = color_props_fill + color_props_stroke&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def correlation(xList,yList):&lt;br /&gt;
    #print yList&lt;br /&gt;
    n = len(xList)&lt;br /&gt;
    sumX = 0&lt;br /&gt;
    sumXX = 0&lt;br /&gt;
    sumY = 0&lt;br /&gt;
    sumYY = 0&lt;br /&gt;
    sumXY = 0&lt;br /&gt;
    for i in range(0,n):&lt;br /&gt;
    	X = xList[i]&lt;br /&gt;
        sumX += X&lt;br /&gt;
        sumXX += X*X&lt;br /&gt;
        Y = yList[i]&lt;br /&gt;
        sumY += Y&lt;br /&gt;
        sumYY += Y*Y&lt;br /&gt;
        sumXY += X*Y&lt;br /&gt;
    corrnum = (n * sumXY)-(sumX * sumY)&lt;br /&gt;
    corrden = sqrt( (n * sumXX) - (sumX * sumX) ) * sqrt( (n * sumYY) - (sumY * sumY) )&lt;br /&gt;
    corr = corrnum/corrden&lt;br /&gt;
    return corr&lt;br /&gt;
&lt;br /&gt;
def pathMatch(rPath,cPath):&lt;br /&gt;
    n = len(rPath)&lt;br /&gt;
    for i in range(0,n):&lt;br /&gt;
        rNode = rPath[i]&lt;br /&gt;
        cNode = cPath[i]&lt;br /&gt;
        [rCmd,rPoints] = rNode&lt;br /&gt;
        [cCmd,cPoints] = cNode&lt;br /&gt;
        if rCmd != cCmd:&lt;br /&gt;
            #print &amp;quot;not match&amp;quot;&lt;br /&gt;
            return 0&lt;br /&gt;
    #print &amp;quot;Command Match&amp;quot;&lt;br /&gt;
    return 1&lt;br /&gt;
    &lt;br /&gt;
def pathPullPoints(rPath,cPath):&lt;br /&gt;
    n = len(rPath)&lt;br /&gt;
    rPointList = []&lt;br /&gt;
    cPointList = []&lt;br /&gt;
    for i in range(0,n):&lt;br /&gt;
        rNode = rPath[i]&lt;br /&gt;
        cNode = cPath[i]&lt;br /&gt;
        [rCmd,rPoints] = rNode&lt;br /&gt;
        [cCmd,cPoints] = cNode&lt;br /&gt;
        rPointList.extend(rPoints)&lt;br /&gt;
        cPointList.extend(cPoints)&lt;br /&gt;
    return [rPointList,cPointList]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def getLayer(svg, layerName):&lt;br /&gt;
    for g in svg.xpath('//svg:g', namespaces=inkex.NSS):&lt;br /&gt;
        if (g.get(inkex.addNS('groupmode', 'inkscape')) == 'layer'&lt;br /&gt;
            and (g.get(inkex.addNS('label', 'inkscape'))&lt;br /&gt;
            == layerName)):&lt;br /&gt;
            return g&lt;br /&gt;
    # Create a new layer.&lt;br /&gt;
    newLayer = inkex.etree.SubElement(svg, 'g')&lt;br /&gt;
    newLayer.set(inkex.addNS('label', 'inkscape'), layerName)&lt;br /&gt;
    newLayer.set(inkex.addNS('groupmode', 'inkscape'), 'layer')&lt;br /&gt;
    return newLayer&lt;br /&gt;
&lt;br /&gt;
def compareColors(refNode, compNode):&lt;br /&gt;
    pass&lt;br /&gt;
&lt;br /&gt;
def getColor(node):&lt;br /&gt;
    col = {}&lt;br /&gt;
    if node.attrib.has_key('style'):&lt;br /&gt;
        style=node.get('style') # fixme: this will break for presentation attributes!&lt;br /&gt;
        if style!='':&lt;br /&gt;
            #inkex.debug('old style:'+style)&lt;br /&gt;
            styles=style.split(';')&lt;br /&gt;
            for i in range(len(styles)):&lt;br /&gt;
                for c in range(len(color_props)):&lt;br /&gt;
                    if styles[i].startswith(color_props[c]):&lt;br /&gt;
                        #print &amp;quot;col num %d&amp;quot; % c&lt;br /&gt;
                        #print styles[i][len(color_props[c]):]&lt;br /&gt;
                        col[c] =  styles[i][len(color_props[c]):]&lt;br /&gt;
    return col&lt;br /&gt;
    &lt;br /&gt;
def colorMatch(rNode,cNode):&lt;br /&gt;
    rCol = getColor(rNode)&lt;br /&gt;
    #print rCol&lt;br /&gt;
    cCol = getColor(cNode)&lt;br /&gt;
    #print cCol&lt;br /&gt;
    if (rCol == cCol):&lt;br /&gt;
        return 1&lt;br /&gt;
    return 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class FindMatch(inkex.Effect):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Inkscape effect extension.&lt;br /&gt;
    Searches for paths that match and places them on the named layer.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        Constructor.&lt;br /&gt;
        Defines the &amp;quot;--what&amp;quot; option of a script.&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        # Call the base class constructor.&lt;br /&gt;
        inkex.Effect.__init__(self)&lt;br /&gt;
          &lt;br /&gt;
        self.OptionParser.add_option('-f', '--foundLayer', action = 'store',&lt;br /&gt;
          type = 'string', dest = 'foundLayer', default = 'Found',&lt;br /&gt;
          help = 'Name of layer to put found objects on?')&lt;br /&gt;
&lt;br /&gt;
        self.OptionParser.add_option(&amp;quot;-t&amp;quot;, &amp;quot;--threshold&amp;quot;,&lt;br /&gt;
                        action=&amp;quot;store&amp;quot;, type=&amp;quot;float&amp;quot;, &lt;br /&gt;
                        dest=&amp;quot;threshold&amp;quot;, default = 0.8,&lt;br /&gt;
                        help=&amp;quot;threshold for correlation match&amp;quot;)&lt;br /&gt;
        self.OptionParser.add_option(&amp;quot;--matchcolor&amp;quot;,&lt;br /&gt;
                        action=&amp;quot;store&amp;quot;, type=&amp;quot;inkbool&amp;quot;, &lt;br /&gt;
                        dest=&amp;quot;matchcolor&amp;quot;, default=True,&lt;br /&gt;
                        help=&amp;quot;If True, colors will be matched&amp;quot;) &lt;br /&gt;
                        &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    def effect(self):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        Effect behaviour.&lt;br /&gt;
        Search for all paths that match the selected path&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        foundLayer = self.options.foundLayer&lt;br /&gt;
        matchcolor = self.options.matchcolor&lt;br /&gt;
&lt;br /&gt;
        # Get access to main SVG document element &lt;br /&gt;
        svg = self.document.getroot()&lt;br /&gt;
        &lt;br /&gt;
        # get the layer where the found paths will be moved to&lt;br /&gt;
        layer = getLayer(svg, foundLayer)&lt;br /&gt;
        &lt;br /&gt;
        # get a list of all path nodes&lt;br /&gt;
        pathNodes = self.document.xpath('//svg:path',namespaces=inkex.NSS)&lt;br /&gt;
&lt;br /&gt;
        # setup stderr so that we can print to it for debugging        &lt;br /&gt;
        saveout = sys.stdout&lt;br /&gt;
       &lt;br /&gt;
        sys.stdout = sys.stderr&lt;br /&gt;
        &lt;br /&gt;
        rPathLen = 0&lt;br /&gt;
        rPathList = []&lt;br /&gt;
        rPathNode = None&lt;br /&gt;
        &lt;br /&gt;
        if len(self.selected) == 0:&lt;br /&gt;
            print &amp;quot;Nothing Selected&amp;quot;&lt;br /&gt;
            sys.stdout = saveout&lt;br /&gt;
            return&lt;br /&gt;
        &lt;br /&gt;
        for id, node in self.selected.iteritems():&lt;br /&gt;
            #print dir(node)&lt;br /&gt;
            if node.tag == inkex.addNS('path','svg'):&lt;br /&gt;
                #print node.attrib['d']&lt;br /&gt;
                rPathList = parsePath(node.attrib['d'])&lt;br /&gt;
                rPathLen = len(rPathList)&lt;br /&gt;
                rPathNode = node&lt;br /&gt;
                #print rPathLen&lt;br /&gt;
                #print rPathList&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
        for cPathNode in pathNodes:&lt;br /&gt;
            cPathList = parsePath(cPathNode.attrib['d'])&lt;br /&gt;
            cPathLen = len(cPathList)&lt;br /&gt;
            #print cPathLen&lt;br /&gt;
            #print cPathList&lt;br /&gt;
            if rPathLen == cPathLen:&lt;br /&gt;
                #print &amp;quot; Found %d in %s&amp;quot; % (rPathLen,cPathNode)&lt;br /&gt;
                &lt;br /&gt;
                #print matchcolor&lt;br /&gt;
                colorMatchFlag = (colorMatch(rPathNode,cPathNode) == 1) or not matchcolor&lt;br /&gt;
                pathMatchFlag = pathMatch(rPathList,cPathList)==1&lt;br /&gt;
                &lt;br /&gt;
                if pathMatchFlag and colorMatchFlag:&lt;br /&gt;
                    [rList,cList] = pathPullPoints(rPathList,cPathList)&lt;br /&gt;
                    corVal = correlation(rList,cList)&lt;br /&gt;
                    #print &amp;quot;The correlation was %g&amp;quot; % corVal&lt;br /&gt;
                    if (corVal &amp;gt; 0.80):&lt;br /&gt;
                        layer.append(cPathNode)&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        #print &lt;br /&gt;
        #print 'This message will be logged instead of displayed'&lt;br /&gt;
        sys.stdout = saveout &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Create effect instance and apply it.&lt;br /&gt;
effect = FindMatch()&lt;br /&gt;
effect.affect()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aussie</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=FindMatch&amp;diff=40774</id>
		<title>FindMatch</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=FindMatch&amp;diff=40774"/>
		<updated>2008-12-17T21:07:23Z</updated>

		<summary type="html">&lt;p&gt;Aussie: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Find Match inx file&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;inkscape-extension&amp;gt;&lt;br /&gt;
  &amp;lt;_name&amp;gt;Find Match&amp;lt;/_name&amp;gt;&lt;br /&gt;
  &amp;lt;id&amp;gt;org.find_match&amp;lt;/id&amp;gt;&lt;br /&gt;
  &amp;lt;dependency type=&amp;quot;executable&amp;quot; location=&amp;quot;extensions&amp;quot;&amp;gt;findmatch.py&amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency type=&amp;quot;executable&amp;quot; location=&amp;quot;extensions&amp;quot;&amp;gt;inkex.py&amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;param name=&amp;quot;foundLayer&amp;quot; type=&amp;quot;string&amp;quot; _gui-text=&amp;quot;Name of layer to put found objects on?&amp;quot;&amp;gt;Found&amp;lt;/param&amp;gt;&lt;br /&gt;
  &amp;lt;param name=&amp;quot;threshold&amp;quot; type=&amp;quot;float&amp;quot; min=&amp;quot;0.0&amp;quot; max=&amp;quot;1.0&amp;quot; _gui-text=&amp;quot;Correlation Threshold&amp;quot;&amp;gt;0.8&amp;lt;/param&amp;gt;&lt;br /&gt;
  &amp;lt;param name=&amp;quot;matchcolor&amp;quot;    type=&amp;quot;boolean&amp;quot; _gui-text=&amp;quot;Colors should match&amp;quot;&amp;gt;true&amp;lt;/param&amp;gt;&lt;br /&gt;
  &amp;lt;effect&amp;gt;&lt;br /&gt;
    &amp;lt;object-type&amp;gt;all&amp;lt;/object-type&amp;gt;&lt;br /&gt;
    &amp;lt;effects-menu&amp;gt;&lt;br /&gt;
       &amp;lt;submenu _name=&amp;quot;Examples&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/effects-menu&amp;gt;&lt;br /&gt;
  &amp;lt;/effect&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    &amp;lt;command reldir=&amp;quot;extensions&amp;quot; interpreter=&amp;quot;python&amp;quot;&amp;gt;findmatch.py&amp;lt;/command&amp;gt;&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/inkscape-extension&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
The python file for Find Match&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
This program is free software; you can redistribute it and/or modify&lt;br /&gt;
it under the terms of the GNU General Public License as published by&lt;br /&gt;
the Free Software Foundation; either version 2 of the License, or&lt;br /&gt;
(at your option) any later version.&lt;br /&gt;
&lt;br /&gt;
This program is distributed in the hope that it will be useful,&lt;br /&gt;
but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
GNU General Public License for more details.&lt;br /&gt;
&lt;br /&gt;
You should have received a copy of the GNU General Public License&lt;br /&gt;
along with this program; if not, write to the Free Software&lt;br /&gt;
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA&lt;br /&gt;
'''&lt;br /&gt;
import sys&lt;br /&gt;
sys.path.append('/usr/share/inkscape/extensions')&lt;br /&gt;
&lt;br /&gt;
# We will use the inkex module with the predefined Effect base class.&lt;br /&gt;
import inkex&lt;br /&gt;
from simplestyle import *&lt;br /&gt;
from simplepath import *&lt;br /&gt;
from math import sqrt&lt;br /&gt;
&lt;br /&gt;
color_props_fill=('fill:','stop-color:','flood-color:','lighting-color:')&lt;br /&gt;
color_props_stroke=('stroke:',)&lt;br /&gt;
color_props = color_props_fill + color_props_stroke&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def correlation(xList,yList):&lt;br /&gt;
    #print yList&lt;br /&gt;
    n = len(xList)&lt;br /&gt;
    sumX = 0&lt;br /&gt;
    sumXX = 0&lt;br /&gt;
    sumY = 0&lt;br /&gt;
    sumYY = 0&lt;br /&gt;
    sumXY = 0&lt;br /&gt;
    for i in range(0,n):&lt;br /&gt;
    	X = xList[i]&lt;br /&gt;
        sumX += X&lt;br /&gt;
        sumXX += X*X&lt;br /&gt;
        Y = yList[i]&lt;br /&gt;
        sumY += Y&lt;br /&gt;
        sumYY += Y*Y&lt;br /&gt;
        sumXY += X*Y&lt;br /&gt;
    corrnum = (n * sumXY)-(sumX * sumY)&lt;br /&gt;
    corrden = sqrt( (n * sumXX) - (sumX * sumX) ) * sqrt( (n * sumYY) - (sumY * sumY) )&lt;br /&gt;
    corr = corrnum/corrden&lt;br /&gt;
    return corr&lt;br /&gt;
&lt;br /&gt;
def pathMatch(rPath,cPath):&lt;br /&gt;
    n = len(rPath)&lt;br /&gt;
    for i in range(0,n):&lt;br /&gt;
        rNode = rPath[i]&lt;br /&gt;
        cNode = cPath[i]&lt;br /&gt;
        [rCmd,rPoints] = rNode&lt;br /&gt;
        [cCmd,cPoints] = cNode&lt;br /&gt;
        if rCmd != cCmd:&lt;br /&gt;
            #print &amp;quot;not match&amp;quot;&lt;br /&gt;
            return 0&lt;br /&gt;
    #print &amp;quot;Command Match&amp;quot;&lt;br /&gt;
    return 1&lt;br /&gt;
    &lt;br /&gt;
def pathPullPoints(rPath,cPath):&lt;br /&gt;
    n = len(rPath)&lt;br /&gt;
    rPointList = []&lt;br /&gt;
    cPointList = []&lt;br /&gt;
    for i in range(0,n):&lt;br /&gt;
        rNode = rPath[i]&lt;br /&gt;
        cNode = cPath[i]&lt;br /&gt;
        [rCmd,rPoints] = rNode&lt;br /&gt;
        [cCmd,cPoints] = cNode&lt;br /&gt;
        rPointList.extend(rPoints)&lt;br /&gt;
        cPointList.extend(cPoints)&lt;br /&gt;
    return [rPointList,cPointList]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def getLayer(svg, layerName):&lt;br /&gt;
    for g in svg.xpath('//svg:g', namespaces=inkex.NSS):&lt;br /&gt;
        if (g.get(inkex.addNS('groupmode', 'inkscape')) == 'layer'&lt;br /&gt;
            and (g.get(inkex.addNS('label', 'inkscape'))&lt;br /&gt;
            == layerName)):&lt;br /&gt;
            return g&lt;br /&gt;
    # Create a new layer.&lt;br /&gt;
    newLayer = inkex.etree.SubElement(svg, 'g')&lt;br /&gt;
    newLayer.set(inkex.addNS('label', 'inkscape'), layerName)&lt;br /&gt;
    newLayer.set(inkex.addNS('groupmode', 'inkscape'), 'layer')&lt;br /&gt;
    return newLayer&lt;br /&gt;
&lt;br /&gt;
def compareColors(refNode, compNode):&lt;br /&gt;
    pass&lt;br /&gt;
&lt;br /&gt;
def getColor(node):&lt;br /&gt;
    col = {}&lt;br /&gt;
    if node.attrib.has_key('style'):&lt;br /&gt;
        style=node.get('style') # fixme: this will break for presentation attributes!&lt;br /&gt;
        if style!='':&lt;br /&gt;
            #inkex.debug('old style:'+style)&lt;br /&gt;
            styles=style.split(';')&lt;br /&gt;
            for i in range(len(styles)):&lt;br /&gt;
                for c in range(len(color_props)):&lt;br /&gt;
                    if styles[i].startswith(color_props[c]):&lt;br /&gt;
                        #print &amp;quot;col num %d&amp;quot; % c&lt;br /&gt;
                        #print styles[i][len(color_props[c]):]&lt;br /&gt;
                        col[c] =  styles[i][len(color_props[c]):]&lt;br /&gt;
    return col&lt;br /&gt;
    &lt;br /&gt;
def colorMatch(rNode,cNode):&lt;br /&gt;
    rCol = getColor(rNode)&lt;br /&gt;
    #print rCol&lt;br /&gt;
    cCol = getColor(cNode)&lt;br /&gt;
    #print cCol&lt;br /&gt;
    if (rCol == cCol):&lt;br /&gt;
        return 1&lt;br /&gt;
    return 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class FindMatch(inkex.Effect):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Inkscape effect extension.&lt;br /&gt;
    Searches for paths that match and places them on the named layer.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        Constructor.&lt;br /&gt;
        Defines the &amp;quot;--what&amp;quot; option of a script.&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        # Call the base class constructor.&lt;br /&gt;
        inkex.Effect.__init__(self)&lt;br /&gt;
          &lt;br /&gt;
        self.OptionParser.add_option('-f', '--foundLayer', action = 'store',&lt;br /&gt;
          type = 'string', dest = 'foundLayer', default = 'Found',&lt;br /&gt;
          help = 'Name of layer to put found objects on?')&lt;br /&gt;
&lt;br /&gt;
        self.OptionParser.add_option(&amp;quot;-t&amp;quot;, &amp;quot;--threshold&amp;quot;,&lt;br /&gt;
                        action=&amp;quot;store&amp;quot;, type=&amp;quot;float&amp;quot;, &lt;br /&gt;
                        dest=&amp;quot;threshold&amp;quot;, default = 0.8,&lt;br /&gt;
                        help=&amp;quot;threshold for correlation match&amp;quot;)&lt;br /&gt;
        self.OptionParser.add_option(&amp;quot;--matchcolor&amp;quot;,&lt;br /&gt;
                        action=&amp;quot;store&amp;quot;, type=&amp;quot;inkbool&amp;quot;, &lt;br /&gt;
                        dest=&amp;quot;matchcolor&amp;quot;, default=True,&lt;br /&gt;
                        help=&amp;quot;If True, colors will be matched&amp;quot;) &lt;br /&gt;
                        &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    def effect(self):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        Effect behaviour.&lt;br /&gt;
        Search for all paths that match the selected path&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        foundLayer = self.options.foundLayer&lt;br /&gt;
        matchcolor = self.options.matchcolor&lt;br /&gt;
&lt;br /&gt;
        # Get access to main SVG document element &lt;br /&gt;
        svg = self.document.getroot()&lt;br /&gt;
        &lt;br /&gt;
        # get the layer where the found paths will be moved to&lt;br /&gt;
        layer = getLayer(svg, foundLayer)&lt;br /&gt;
        &lt;br /&gt;
        # get a list of all path nodes&lt;br /&gt;
        pathNodes = self.document.xpath('//svg:path',namespaces=inkex.NSS)&lt;br /&gt;
&lt;br /&gt;
        # setup stderr so that we can print to it for debugging        &lt;br /&gt;
        saveout = sys.stdout&lt;br /&gt;
       &lt;br /&gt;
        sys.stdout = sys.stderr&lt;br /&gt;
        &lt;br /&gt;
        rPathLen = 0&lt;br /&gt;
        rPathList = []&lt;br /&gt;
        rPathNode = None&lt;br /&gt;
        &lt;br /&gt;
        if len(self.selected) == 0:&lt;br /&gt;
            print &amp;quot;Nothing Selected&amp;quot;&lt;br /&gt;
            sys.stdout = saveout&lt;br /&gt;
            return&lt;br /&gt;
        &lt;br /&gt;
        for id, node in self.selected.iteritems():&lt;br /&gt;
            #print dir(node)&lt;br /&gt;
            if node.tag == inkex.addNS('path','svg'):&lt;br /&gt;
                #print node.attrib['d']&lt;br /&gt;
                rPathList = parsePath(node.attrib['d'])&lt;br /&gt;
                rPathLen = len(rPathList)&lt;br /&gt;
                rPathNode = node&lt;br /&gt;
                #print rPathLen&lt;br /&gt;
                #print rPathList&lt;br /&gt;
&lt;br /&gt;
        &lt;br /&gt;
        for cPathNode in pathNodes:&lt;br /&gt;
            cPathList = parsePath(cPathNode.attrib['d'])&lt;br /&gt;
            cPathLen = len(cPathList)&lt;br /&gt;
            #print cPathLen&lt;br /&gt;
            #print cPathList&lt;br /&gt;
            if rPathLen == cPathLen:&lt;br /&gt;
                #print &amp;quot; Found %d in %s&amp;quot; % (rPathLen,cPathNode)&lt;br /&gt;
                &lt;br /&gt;
                #print matchcolor&lt;br /&gt;
                colorMatchFlag = (colorMatch(rPathNode,cPathNode) == 1) or not matchcolor&lt;br /&gt;
                pathMatchFlag = pathMatch(rPathList,cPathList)==1&lt;br /&gt;
                &lt;br /&gt;
                if pathMatchFlag and colorMatchFlag:&lt;br /&gt;
                    [rList,cList] = pathPullPoints(rPathList,cPathList)&lt;br /&gt;
                    corVal = correlation(rList,cList)&lt;br /&gt;
                    #print &amp;quot;The correlation was %g&amp;quot; % corVal&lt;br /&gt;
                    if (corVal &amp;gt; 0.80):&lt;br /&gt;
                        layer.append(cPathNode)&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        #print &lt;br /&gt;
        #print 'This message will be logged instead of displayed'&lt;br /&gt;
        sys.stdout = saveout &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Create effect instance and apply it.&lt;br /&gt;
effect = FindMatch()&lt;br /&gt;
effect.affect()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aussie</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=FindMatch&amp;diff=40764</id>
		<title>FindMatch</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=FindMatch&amp;diff=40764"/>
		<updated>2008-12-17T21:05:57Z</updated>

		<summary type="html">&lt;p&gt;Aussie: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Find Match inx file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;inkscape-extension&amp;gt;&lt;br /&gt;
  &amp;lt;_name&amp;gt;Find Match&amp;lt;/_name&amp;gt;&lt;br /&gt;
  &amp;lt;id&amp;gt;org.find_match&amp;lt;/id&amp;gt;&lt;br /&gt;
  &amp;lt;dependency type=&amp;quot;executable&amp;quot; location=&amp;quot;extensions&amp;quot;&amp;gt;findmatch.py&amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency type=&amp;quot;executable&amp;quot; location=&amp;quot;extensions&amp;quot;&amp;gt;inkex.py&amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;param name=&amp;quot;foundLayer&amp;quot; type=&amp;quot;string&amp;quot; _gui-text=&amp;quot;Name of layer to put found objects on?&amp;quot;&amp;gt;Found&amp;lt;/param&amp;gt;&lt;br /&gt;
  &amp;lt;param name=&amp;quot;threshold&amp;quot; type=&amp;quot;float&amp;quot; min=&amp;quot;0.0&amp;quot; max=&amp;quot;1.0&amp;quot; _gui-text=&amp;quot;Correlation Threshold&amp;quot;&amp;gt;0.8&amp;lt;/param&amp;gt;&lt;br /&gt;
  &amp;lt;param name=&amp;quot;matchcolor&amp;quot;    type=&amp;quot;boolean&amp;quot; _gui-text=&amp;quot;Colors should match&amp;quot;&amp;gt;true&amp;lt;/param&amp;gt;&lt;br /&gt;
  &amp;lt;effect&amp;gt;&lt;br /&gt;
    &amp;lt;object-type&amp;gt;all&amp;lt;/object-type&amp;gt;&lt;br /&gt;
    &amp;lt;effects-menu&amp;gt;&lt;br /&gt;
       &amp;lt;submenu _name=&amp;quot;Examples&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/effects-menu&amp;gt;&lt;br /&gt;
  &amp;lt;/effect&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    &amp;lt;command reldir=&amp;quot;extensions&amp;quot; interpreter=&amp;quot;python&amp;quot;&amp;gt;findmatch.py&amp;lt;/command&amp;gt;&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/inkscape-extension&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Aussie</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=FindMatch&amp;diff=40754</id>
		<title>FindMatch</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=FindMatch&amp;diff=40754"/>
		<updated>2008-12-17T21:04:48Z</updated>

		<summary type="html">&lt;p&gt;Aussie: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Find Match inx file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;inkscape-extension&amp;gt;&lt;br /&gt;
  &amp;lt;_name&amp;gt;Find Match&amp;lt;/_name&amp;gt;&lt;br /&gt;
  &amp;lt;id&amp;gt;org.find_match&amp;lt;/id&amp;gt;&lt;br /&gt;
  &amp;lt;dependency type=&amp;quot;executable&amp;quot; location=&amp;quot;extensions&amp;quot;&amp;gt;findmatch.py&amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency type=&amp;quot;executable&amp;quot; location=&amp;quot;extensions&amp;quot;&amp;gt;inkex.py&amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;param name=&amp;quot;foundLayer&amp;quot; type=&amp;quot;string&amp;quot; _gui-text=&amp;quot;Name of layer to put found objects on?&amp;quot;&amp;gt;Found&amp;lt;/param&amp;gt;&lt;br /&gt;
  &amp;lt;param name=&amp;quot;threshold&amp;quot; type=&amp;quot;float&amp;quot; min=&amp;quot;0.0&amp;quot; max=&amp;quot;1.0&amp;quot; _gui-text=&amp;quot;Correlation Threshold&amp;quot;&amp;gt;0.8&amp;lt;/param&amp;gt;&lt;br /&gt;
  &amp;lt;param name=&amp;quot;matchcolor&amp;quot;    type=&amp;quot;boolean&amp;quot; _gui-text=&amp;quot;Colors should match&amp;quot;&amp;gt;true&amp;lt;/param&amp;gt;&lt;br /&gt;
  &amp;lt;effect&amp;gt;&lt;br /&gt;
    &amp;lt;object-type&amp;gt;all&amp;lt;/object-type&amp;gt;&lt;br /&gt;
    &amp;lt;effects-menu&amp;gt;&lt;br /&gt;
       &amp;lt;submenu _name=&amp;quot;Examples&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/effects-menu&amp;gt;&lt;br /&gt;
  &amp;lt;/effect&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    &amp;lt;command reldir=&amp;quot;extensions&amp;quot; interpreter=&amp;quot;python&amp;quot;&amp;gt;findmatch.py&amp;lt;/command&amp;gt;&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/inkscape-extension&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Aussie</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=FindMatch&amp;diff=40744</id>
		<title>FindMatch</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=FindMatch&amp;diff=40744"/>
		<updated>2008-12-17T21:03:17Z</updated>

		<summary type="html">&lt;p&gt;Aussie: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Find Match inx file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;inkscape-extension&amp;gt;&lt;br /&gt;
  &amp;lt;_name&amp;gt;Find Match&amp;lt;/_name&amp;gt;&lt;br /&gt;
  &amp;lt;id&amp;gt;org.find_match&amp;lt;/id&amp;gt;&lt;br /&gt;
  &amp;lt;dependency type=&amp;quot;executable&amp;quot; location=&amp;quot;extensions&amp;quot;&amp;gt;findmatch.py&amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency type=&amp;quot;executable&amp;quot; location=&amp;quot;extensions&amp;quot;&amp;gt;inkex.py&amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;param name=&amp;quot;foundLayer&amp;quot; type=&amp;quot;string&amp;quot; _gui-text=&amp;quot;Name of layer to put found objects on?&amp;quot;&amp;gt;Found&amp;lt;/param&amp;gt;&lt;br /&gt;
  &amp;lt;param name=&amp;quot;threshold&amp;quot; type=&amp;quot;float&amp;quot; min=&amp;quot;0.0&amp;quot; max=&amp;quot;1.0&amp;quot; _gui-text=&amp;quot;Correlation Threshold&amp;quot;&amp;gt;0.8&amp;lt;/param&amp;gt;&lt;br /&gt;
  &amp;lt;param name=&amp;quot;matchcolor&amp;quot;    type=&amp;quot;boolean&amp;quot; _gui-text=&amp;quot;Colors should match&amp;quot;&amp;gt;true&amp;lt;/param&amp;gt;&lt;br /&gt;
  &amp;lt;effect&amp;gt;&lt;br /&gt;
    &amp;lt;object-type&amp;gt;all&amp;lt;/object-type&amp;gt;&lt;br /&gt;
    &amp;lt;effects-menu&amp;gt;&lt;br /&gt;
       &amp;lt;submenu _name=&amp;quot;Examples&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/effects-menu&amp;gt;&lt;br /&gt;
  &amp;lt;/effect&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    &amp;lt;command reldir=&amp;quot;extensions&amp;quot; interpreter=&amp;quot;python&amp;quot;&amp;gt;findmatch.py&amp;lt;/command&amp;gt;&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/inkscape-extension&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Aussie</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=FindMatch&amp;diff=40734</id>
		<title>FindMatch</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=FindMatch&amp;diff=40734"/>
		<updated>2008-12-17T21:02:33Z</updated>

		<summary type="html">&lt;p&gt;Aussie: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Find Match inx file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;source &amp;gt;&lt;br /&gt;
&amp;lt;inkscape-extension&amp;gt;&lt;br /&gt;
  &amp;lt;_name&amp;gt;Find Match&amp;lt;/_name&amp;gt;&lt;br /&gt;
  &amp;lt;id&amp;gt;org.find_match&amp;lt;/id&amp;gt;&lt;br /&gt;
  &amp;lt;dependency type=&amp;quot;executable&amp;quot; location=&amp;quot;extensions&amp;quot;&amp;gt;findmatch.py&amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency type=&amp;quot;executable&amp;quot; location=&amp;quot;extensions&amp;quot;&amp;gt;inkex.py&amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;param name=&amp;quot;foundLayer&amp;quot; type=&amp;quot;string&amp;quot; _gui-text=&amp;quot;Name of layer to put found objects on?&amp;quot;&amp;gt;Found&amp;lt;/param&amp;gt;&lt;br /&gt;
  &amp;lt;param name=&amp;quot;threshold&amp;quot; type=&amp;quot;float&amp;quot; min=&amp;quot;0.0&amp;quot; max=&amp;quot;1.0&amp;quot; _gui-text=&amp;quot;Correlation Threshold&amp;quot;&amp;gt;0.8&amp;lt;/param&amp;gt;&lt;br /&gt;
  &amp;lt;param name=&amp;quot;matchcolor&amp;quot;    type=&amp;quot;boolean&amp;quot; _gui-text=&amp;quot;Colors should match&amp;quot;&amp;gt;true&amp;lt;/param&amp;gt;&lt;br /&gt;
  &amp;lt;effect&amp;gt;&lt;br /&gt;
    &amp;lt;object-type&amp;gt;all&amp;lt;/object-type&amp;gt;&lt;br /&gt;
    &amp;lt;effects-menu&amp;gt;&lt;br /&gt;
       &amp;lt;submenu _name=&amp;quot;Examples&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/effects-menu&amp;gt;&lt;br /&gt;
  &amp;lt;/effect&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    &amp;lt;command reldir=&amp;quot;extensions&amp;quot; interpreter=&amp;quot;python&amp;quot;&amp;gt;findmatch.py&amp;lt;/command&amp;gt;&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/inkscape-extension&amp;gt;&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Aussie</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=FindMatch&amp;diff=40724</id>
		<title>FindMatch</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=FindMatch&amp;diff=40724"/>
		<updated>2008-12-17T21:00:39Z</updated>

		<summary type="html">&lt;p&gt;Aussie: FindMatch Extension&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Find Match inx file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;inkscape-extension&amp;gt;&lt;br /&gt;
  &amp;lt;_name&amp;gt;Find Match&amp;lt;/_name&amp;gt;&lt;br /&gt;
  &amp;lt;id&amp;gt;org.find_match&amp;lt;/id&amp;gt;&lt;br /&gt;
  &amp;lt;dependency type=&amp;quot;executable&amp;quot; location=&amp;quot;extensions&amp;quot;&amp;gt;findmatch.py&amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;dependency type=&amp;quot;executable&amp;quot; location=&amp;quot;extensions&amp;quot;&amp;gt;inkex.py&amp;lt;/dependency&amp;gt;&lt;br /&gt;
  &amp;lt;param name=&amp;quot;foundLayer&amp;quot; type=&amp;quot;string&amp;quot; _gui-text=&amp;quot;Name of layer to put found objects on?&amp;quot;&amp;gt;Found&amp;lt;/param&amp;gt;&lt;br /&gt;
  &amp;lt;param name=&amp;quot;threshold&amp;quot; type=&amp;quot;float&amp;quot; min=&amp;quot;0.0&amp;quot; max=&amp;quot;1.0&amp;quot; _gui-text=&amp;quot;Correlation Threshold&amp;quot;&amp;gt;0.8&amp;lt;/param&amp;gt;&lt;br /&gt;
  &amp;lt;param name=&amp;quot;matchcolor&amp;quot;    type=&amp;quot;boolean&amp;quot; _gui-text=&amp;quot;Colors should match&amp;quot;&amp;gt;true&amp;lt;/param&amp;gt;&lt;br /&gt;
  &amp;lt;effect&amp;gt;&lt;br /&gt;
    &amp;lt;object-type&amp;gt;all&amp;lt;/object-type&amp;gt;&lt;br /&gt;
    &amp;lt;effects-menu&amp;gt;&lt;br /&gt;
       &amp;lt;submenu _name=&amp;quot;Examples&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/effects-menu&amp;gt;&lt;br /&gt;
  &amp;lt;/effect&amp;gt;&lt;br /&gt;
  &amp;lt;script&amp;gt;&lt;br /&gt;
    &amp;lt;command reldir=&amp;quot;extensions&amp;quot; interpreter=&amp;quot;python&amp;quot;&amp;gt;findmatch.py&amp;lt;/command&amp;gt;&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/inkscape-extension&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;/div&gt;</summary>
		<author><name>Aussie</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Extension_repository&amp;diff=40714</id>
		<title>Extension repository</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Extension_repository&amp;diff=40714"/>
		<updated>2008-12-17T20:58:17Z</updated>

		<summary type="html">&lt;p&gt;Aussie: /* Extensions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;It would be very useful to have a central Internet repository for Inkscape extensions, similarly as Firefox has. This way, Inkscape could update installed extensions from the web site, with no need for the user to know if an extension is updated.&lt;br /&gt;
&lt;br /&gt;
== Extensions ==&lt;br /&gt;
&lt;br /&gt;
'''What extensions are there? We can start listing them here:'''&lt;br /&gt;
* [http://www.ekips.org/comp/inkscape/ Inkscape Effects] - Aaron Spikes set of extensions is now included in Inkscape.&lt;br /&gt;
* [[ExtrudeEffect]] - extrude polygons to &amp;quot;3d&amp;quot;, also make &amp;quot;string art&amp;quot;&lt;br /&gt;
* [http://www.colibre.com.br/bin/view/Aurium/InkscapeCalendarShellScript InkscapeCalendarShellScript] - Create Calendars sucks or is impracticable if you do not have something that automatizes the process of to put the days organized in blocks of months to you. To format manually is easy, but this extension can help you on this too [Bash script, works for win32 with cygwin].&lt;br /&gt;
* [http://www.colibre.com.br/bin/view/Aurium/InkscapeAreaCuter InkscapeAreaCutter] - For Webdesigners, layout for sites, slice area into .png images. util! (pt_BR)&lt;br /&gt;
* [http://julvitard.free.fr/eqtexsvg/ EQTeXSVG] - EQTeXSVG is an extension for Inkscape used to convert an inline LATEX equation into SVG path using Python.&lt;br /&gt;
* [http://www.kono.cis.iwate-u.ac.jp/~arakit/inkscape/inklatex.html InkLaTeX] Insert LaTeX text or equations into Inkscape.&lt;br /&gt;
* [http://www.iki.fi/pav/software/textext/ TexText] Embed re-editable LaTeX objects in SVG drawings.&lt;br /&gt;
* [http://math.univ-lille1.fr/~barraud/Inkscape/pathdeform/ PathDeform] - Here is an Inkscape extension whose purpose is to bend a path according to another one. Note: it was added to Inkscape 0.45 as &amp;quot;Pattern along Path&amp;quot;.&lt;br /&gt;
* [http://www.inkbar.lineaire.net/ InkBar] - This is an Inkscape extension whose purpose is to draw EAN13 bar code.&lt;br /&gt;
* [http://technoargia.free.fr/swftools/ SWF output] - A little extension to save as Swf from Inkscape.&lt;br /&gt;
* [http://www.colivre.coop.br/Aurium/Puff Puff] - Fluffs elements! :-D&lt;br /&gt;
* [http://www.colivre.coop.br/Aurium/InkSudoku Sudoku Generator] - Generates Sudoku square with the solution ''(in a small square if you want)''.&lt;br /&gt;
* [[CalligraphedOutlineFill]] - helps to fill in the inside area of shapes drawn with the Calligraphy tool&lt;br /&gt;
* [http://edlab.die.unipd.it/Site4.html SlotStar] - helps to draw the star of slot of a winding of an electrical machine&lt;br /&gt;
* [http://richard.henwood.googlepages.com/inkscapelatexextension inkscapeLatexExtension] - Extract text in an inkscape drawing to a latex picture environment.&lt;br /&gt;
* [http://saws.googlecode.com s.a.w.s] - export the svg Inkscape file in valid xhtml / css files.&lt;br /&gt;
* [http://www.colivre.coop.br/Aurium/InkscapeGenerator Generator] - replace text and data to automatic generate files done for usage (like PDF, PS, JPG, etc...), based in a SVG template and a data file.&lt;br /&gt;
* [http://code.google.com/p/inkscape2tikz/ TikZ exporter] - Export SVG paths as TikZ/PGF code for use with LaTeX.  &lt;br /&gt;
* [[FindMatch]] - Looks for paths that match the selected path and places all matches on the same layer.&lt;br /&gt;
&lt;br /&gt;
'''For Programmers:'''&lt;br /&gt;
* [http://www.colivre.coop.br/bin/view/Aurium/RubyInk RubyInk] - Inkscape extension with Ruby&lt;br /&gt;
* [http://www.colivre.coop.br/bin/view/Aurium/InkBash Ink-Bash] - &amp;lt;nowiki&amp;gt;ShellScript&amp;lt;/nowiki&amp;gt; Forever!&lt;br /&gt;
* [http://www.colivre.coop.br/bin/view/Aurium/InkMoz InkMoz] - the Bridge from Inkscape to Mozilla (Inkscape extension with Javascript and more)&lt;br /&gt;
&lt;br /&gt;
== The Repository Specification ==&lt;br /&gt;
&lt;br /&gt;
A website where programmers can publish their extensions, users can search by that, and an update program can access this updates.&lt;br /&gt;
&lt;br /&gt;
=== The Website ===&lt;br /&gt;
&lt;br /&gt;
Must Have:&lt;br /&gt;
* '''User Registration''': to allow upload, votes and comments&lt;br /&gt;
* '''Extension Validation''': when published, it is public, but the user must be notified that was not validated (the code must be viewed by an validator user). The software updater do not update non-validated versions.&lt;br /&gt;
** '''Validation Feedback''': the validator user must write why the extension was not validated.&lt;br /&gt;
** '''Extension Deletion''': the validator user can delete an extension or version when he found a malicious code. The upload user must be marked as a malicious user and the account must be blocked.&lt;br /&gt;
* '''Extension Search''': with filter, by any available data.&lt;br /&gt;
* '''User Votes and Comments for Extensions''': The user can vote and/or comment an extension version.&lt;br /&gt;
* '''Extension Bug-Traker''': today, third part extensions are in simple web-pages. The site may have a Bug-Traker to help all little scripts.&lt;br /&gt;
* '''User Extensions Requests''': a lot of users have ideas. Here is a good place for programers see and make that alive.&lt;br /&gt;
* '''Host a cool page for the extension''': allow introduction text, documenbtation, screenshots, examples, and '''i18n'''!&lt;br /&gt;
* '''Help the l10n of this extensions''': with a web interface, like pootle and provide the l10n file for the updater program.&lt;br /&gt;
* '''Provide Version Control''': A SVN account will be cool, but web uploads (by web-forms) can be transparently SVN commits.&lt;br /&gt;
&lt;br /&gt;
=== The Extension Meta-Data ===&lt;br /&gt;
&lt;br /&gt;
''The data in INX file and more some, like the O.S. and Inkscape version compatibility...''&lt;br /&gt;
&lt;br /&gt;
The INX file will define the meta-data settable by that. If some extension uses multiples INX files to have more than one option in the menu, all INX files must be read to set the meta-data. The meta-data will be cached in a database to help the search. The DB only need the meta-data of the last validated version and the last non-validated (if that is newer).&lt;br /&gt;
&lt;br /&gt;
=== The Update Program ===&lt;br /&gt;
&lt;br /&gt;
* '''Search for New Extensions''': when the user request&lt;br /&gt;
* '''Update Extensions''': search for updates and install that&lt;br /&gt;
* '''Help the Code Validation''': for advanced users. Show the extension code and the diff if is that an update.&lt;br /&gt;
* '''Help the User Bug-Reporting''': that is not working! The user must say now! ''(When the Update Program be part of the Inkscape, the error window can have a button to submit a bug-report)''&lt;br /&gt;
* '''Must test the extension dependencies''': the user must know what is needed to install before try to use.&lt;br /&gt;
&lt;br /&gt;
== Name Proposal ==&lt;br /&gt;
&lt;br /&gt;
Propose a name for the Inkscape Extension Repository:&lt;br /&gt;
&lt;br /&gt;
* '''The Factory'''&lt;br /&gt;
* '''Extension Factory'''&lt;br /&gt;
* '''INX Factory'''&lt;br /&gt;
&lt;br /&gt;
''Why Factory? Because it is not only a repository. ;-)''&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer Documentation]]&lt;br /&gt;
[[Category:Extensions]]&lt;/div&gt;</summary>
		<author><name>Aussie</name></author>
	</entry>
	<entry>
		<id>https://wiki.inkscape.org/wiki/index.php?title=Extension_repository&amp;diff=40704</id>
		<title>Extension repository</title>
		<link rel="alternate" type="text/html" href="https://wiki.inkscape.org/wiki/index.php?title=Extension_repository&amp;diff=40704"/>
		<updated>2008-12-17T20:57:27Z</updated>

		<summary type="html">&lt;p&gt;Aussie: /* Extensions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;It would be very useful to have a central Internet repository for Inkscape extensions, similarly as Firefox has. This way, Inkscape could update installed extensions from the web site, with no need for the user to know if an extension is updated.&lt;br /&gt;
&lt;br /&gt;
== Extensions ==&lt;br /&gt;
&lt;br /&gt;
'''What extensions are there? We can start listing them here:'''&lt;br /&gt;
* [http://www.ekips.org/comp/inkscape/ Inkscape Effects] - Aaron Spikes set of extensions is now included in Inkscape.&lt;br /&gt;
* [[ExtrudeEffect]] - extrude polygons to &amp;quot;3d&amp;quot;, also make &amp;quot;string art&amp;quot;&lt;br /&gt;
* [http://www.colibre.com.br/bin/view/Aurium/InkscapeCalendarShellScript InkscapeCalendarShellScript] - Create Calendars sucks or is impracticable if you do not have something that automatizes the process of to put the days organized in blocks of months to you. To format manually is easy, but this extension can help you on this too [Bash script, works for win32 with cygwin].&lt;br /&gt;
* [http://www.colibre.com.br/bin/view/Aurium/InkscapeAreaCuter InkscapeAreaCutter] - For Webdesigners, layout for sites, slice area into .png images. util! (pt_BR)&lt;br /&gt;
* [http://julvitard.free.fr/eqtexsvg/ EQTeXSVG] - EQTeXSVG is an extension for Inkscape used to convert an inline LATEX equation into SVG path using Python.&lt;br /&gt;
* [http://www.kono.cis.iwate-u.ac.jp/~arakit/inkscape/inklatex.html InkLaTeX] Insert LaTeX text or equations into Inkscape.&lt;br /&gt;
* [http://www.iki.fi/pav/software/textext/ TexText] Embed re-editable LaTeX objects in SVG drawings.&lt;br /&gt;
* [http://math.univ-lille1.fr/~barraud/Inkscape/pathdeform/ PathDeform] - Here is an Inkscape extension whose purpose is to bend a path according to another one. Note: it was added to Inkscape 0.45 as &amp;quot;Pattern along Path&amp;quot;.&lt;br /&gt;
* [http://www.inkbar.lineaire.net/ InkBar] - This is an Inkscape extension whose purpose is to draw EAN13 bar code.&lt;br /&gt;
* [http://technoargia.free.fr/swftools/ SWF output] - A little extension to save as Swf from Inkscape.&lt;br /&gt;
* [http://www.colivre.coop.br/Aurium/Puff Puff] - Fluffs elements! :-D&lt;br /&gt;
* [http://www.colivre.coop.br/Aurium/InkSudoku Sudoku Generator] - Generates Sudoku square with the solution ''(in a small square if you want)''.&lt;br /&gt;
* [[CalligraphedOutlineFill]] - helps to fill in the inside area of shapes drawn with the Calligraphy tool&lt;br /&gt;
* [http://edlab.die.unipd.it/Site4.html SlotStar] - helps to draw the star of slot of a winding of an electrical machine&lt;br /&gt;
* [http://richard.henwood.googlepages.com/inkscapelatexextension inkscapeLatexExtension] - Extract text in an inkscape drawing to a latex picture environment.&lt;br /&gt;
* [http://saws.googlecode.com s.a.w.s] - export the svg Inkscape file in valid xhtml / css files.&lt;br /&gt;
* [http://www.colivre.coop.br/Aurium/InkscapeGenerator Generator] - replace text and data to automatic generate files done for usage (like PDF, PS, JPG, etc...), based in a SVG template and a data file.&lt;br /&gt;
* [http://code.google.com/p/inkscape2tikz/ TikZ exporter] - Export SVG paths as TikZ/PGF code for use with LaTeX.  &lt;br /&gt;
* FindMatch - Looks for paths that match the selected path and places all matches on the same layer.&lt;br /&gt;
&lt;br /&gt;
'''For Programmers:'''&lt;br /&gt;
* [http://www.colivre.coop.br/bin/view/Aurium/RubyInk RubyInk] - Inkscape extension with Ruby&lt;br /&gt;
* [http://www.colivre.coop.br/bin/view/Aurium/InkBash Ink-Bash] - &amp;lt;nowiki&amp;gt;ShellScript&amp;lt;/nowiki&amp;gt; Forever!&lt;br /&gt;
* [http://www.colivre.coop.br/bin/view/Aurium/InkMoz InkMoz] - the Bridge from Inkscape to Mozilla (Inkscape extension with Javascript and more)&lt;br /&gt;
&lt;br /&gt;
== The Repository Specification ==&lt;br /&gt;
&lt;br /&gt;
A website where programmers can publish their extensions, users can search by that, and an update program can access this updates.&lt;br /&gt;
&lt;br /&gt;
=== The Website ===&lt;br /&gt;
&lt;br /&gt;
Must Have:&lt;br /&gt;
* '''User Registration''': to allow upload, votes and comments&lt;br /&gt;
* '''Extension Validation''': when published, it is public, but the user must be notified that was not validated (the code must be viewed by an validator user). The software updater do not update non-validated versions.&lt;br /&gt;
** '''Validation Feedback''': the validator user must write why the extension was not validated.&lt;br /&gt;
** '''Extension Deletion''': the validator user can delete an extension or version when he found a malicious code. The upload user must be marked as a malicious user and the account must be blocked.&lt;br /&gt;
* '''Extension Search''': with filter, by any available data.&lt;br /&gt;
* '''User Votes and Comments for Extensions''': The user can vote and/or comment an extension version.&lt;br /&gt;
* '''Extension Bug-Traker''': today, third part extensions are in simple web-pages. The site may have a Bug-Traker to help all little scripts.&lt;br /&gt;
* '''User Extensions Requests''': a lot of users have ideas. Here is a good place for programers see and make that alive.&lt;br /&gt;
* '''Host a cool page for the extension''': allow introduction text, documenbtation, screenshots, examples, and '''i18n'''!&lt;br /&gt;
* '''Help the l10n of this extensions''': with a web interface, like pootle and provide the l10n file for the updater program.&lt;br /&gt;
* '''Provide Version Control''': A SVN account will be cool, but web uploads (by web-forms) can be transparently SVN commits.&lt;br /&gt;
&lt;br /&gt;
=== The Extension Meta-Data ===&lt;br /&gt;
&lt;br /&gt;
''The data in INX file and more some, like the O.S. and Inkscape version compatibility...''&lt;br /&gt;
&lt;br /&gt;
The INX file will define the meta-data settable by that. If some extension uses multiples INX files to have more than one option in the menu, all INX files must be read to set the meta-data. The meta-data will be cached in a database to help the search. The DB only need the meta-data of the last validated version and the last non-validated (if that is newer).&lt;br /&gt;
&lt;br /&gt;
=== The Update Program ===&lt;br /&gt;
&lt;br /&gt;
* '''Search for New Extensions''': when the user request&lt;br /&gt;
* '''Update Extensions''': search for updates and install that&lt;br /&gt;
* '''Help the Code Validation''': for advanced users. Show the extension code and the diff if is that an update.&lt;br /&gt;
* '''Help the User Bug-Reporting''': that is not working! The user must say now! ''(When the Update Program be part of the Inkscape, the error window can have a button to submit a bug-report)''&lt;br /&gt;
* '''Must test the extension dependencies''': the user must know what is needed to install before try to use.&lt;br /&gt;
&lt;br /&gt;
== Name Proposal ==&lt;br /&gt;
&lt;br /&gt;
Propose a name for the Inkscape Extension Repository:&lt;br /&gt;
&lt;br /&gt;
* '''The Factory'''&lt;br /&gt;
* '''Extension Factory'''&lt;br /&gt;
* '''INX Factory'''&lt;br /&gt;
&lt;br /&gt;
''Why Factory? Because it is not only a repository. ;-)''&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer Documentation]]&lt;br /&gt;
[[Category:Extensions]]&lt;/div&gt;</summary>
		<author><name>Aussie</name></author>
	</entry>
</feed>