Bonjour,
Dans un code Python, je retrouve deux expressions régulières que je n’arrive pas à expliquer dans le détail.
Je sais ce que fait ce bout de code mais je ne parviens pas à comprendre la signification de chaque élément des deux expressions régulières.
Ce code est une extension pour Inkscape.
[code]
Cette extension ferme le chemin en ajoutant un ‘z’ avant chaque ‘m’
s’il n’est pas le premier ‘m’ et s’il n’est déjà pas précédé d’un ‘z’.
import inkex, re, simplepath
class CloseCurves(inkex.Effect):
def init(self):
inkex.Effect.init(self)
def effect(self):
for id, node in self.selected.iteritems():
if node.tag == inkex.addNS(‘path’,‘svg’):
d = node.get(‘d’)
d = simplepath.formatPath( simplepath.parsePath(d) )
d = re.sub(r’(?i)(m[^mz]+)’,r’\1 Z ‘,d) <===== a
d = re.sub(r’(?i)\sz\sz\s*’,r’ Z ',d) <===== b
node.set(‘d’, d)
e = CloseCurves()
e.affect()[/code]
Dans Inkscape, un tracé ouvert est un code XML comme ceci :
m 462.85714,823.79075 128.57143,-111.42857 -2.85714,134.28572 -120,108.57143 c 0,0 -65.71429,-17.14286 -17.14286,-97.14286
Le même tracé qui a été fermé est un code XML comme ceci :
m 591.42857,712.36218 -2.85714,134.28572 -120,108.57143 c 0,0 -65.71429,-17.14286 -11.42857,-114.28572 z
Ce tracé d’exemple comporte 3 premiers segments de droite successifs et une courbe de Bézier pour former un seul tracé ouvert.
La fermeture s’effectue avec le point de départ du premier segment de droite et le dernier point de la courbe de Bézier.
La petite différence entre les coordonnées des premier et dernier point provient du fait que Inkscape a déterminé la position du point “de fermeture” au milieu de la distance qui séparait les deux points terminaux du tracé de départ.
On s’aperçoit rapidement qu’une lettre ‘z’ a été ajoutée en fin de définition XML du tracé quand je ferme le tracé initial.
Les deux expressions sont indiquées dans le code par <=====.
Qui peut m’aider à les comprendre ?
Merci.