Coucou Mathieu,
Je pense avoir résolu le problème.
Je te propose une version rectifiée de la fonction refreshCode dans le
fichier en pièce jointe.
Pour le reste, il va bien faloir que je reprenne le développement de
cette extension pour publier des versions officielles dignes de ce nom.
Bien entendu, sous le contrôle et la supervision du très expérimenté Abdel.
A plus !
Yannick Daniel Youalé
La programmation est une religion. Aimez-la, ou quittez-la.
www.visuweb.net
Le 30/06/2016 à 09:02, Mathieu Barbe a écrit :
Re,
je continue mes essais,
j'ai donc réglé l'indentation sur un seul espace afin de continuer à
travailler avec forPython.
Mais in ne me laisse pas faire plus d'un espace en dévut de ligne.
Par exemple, je fais un if,
je passe en niveau un en dessous.
Je fais de nouveau un if.
En dessous je passe donc en niveau 2.
J'entends bien niveau deux.
Mais quand je reviens sur ma ligne, je me retrouve avec un seul
espace, et donc un seul niveau.
C'est peut-être le système qui insère automatiquement les espace avant
et après le signe égale qui met la zone.
++ Math
Le 30/06/2016 08:56, Mathieu Barbe a écrit :
Bonjour mes amis,
je commence à tester forPython car j'ai un projet sous le coude.
J'ai donc un problème avec l'indentation.
Scénario:
* Mon fichier 6pad++.ini est configuré pour avoir 4 espaces à chaque
niveau d'indentation.
* J'ouvre un fichier
* je fais tab, j’entends niveau 1.
* puis je tape une lettre, ici a;
* Avec la flèche gauche je peux observer les quatre espaces inséré
avant la lettre a.
* Je change de ligne avec les flèches et quand je reviens sur la
ligne, il n'y a plus qu'un seul espace devant la lettre a.
Avec une installation neuve, pas ce problème, et il apparait à
l'utilisation de forPython.
Je constate aussi une modification du fichier .ini étrange, qui m'a
forcé à réinstaller 6pad++.
Mais pas plus d'info sur ce point. Un fois ce bug étranglé, je
pourrais vérifier.
Avez-vous une idée.
++ Math
def refreshCode(s):
# ajuste le code
lstPt = []
lstString = []
# recencement des chaînes string
# string avec triples quotes en appostrophes
lstPt.append("'{3,5}[\w\W]+?'{3,5}")
# string avec triples quotes en guillemets
lstPt.append("\"{3, 5} [ \\w \\W] + ? \"{3,5}")
# string avec appostrophes
lstPt.append("r'.*?'")
lstPt.append(r"'.*?((?<!\\\\\\\\\\)|(?<!\\\\\\)|(?<!\\))'")
# string avec guillemets
lstPt.append('r".*?"')
lstPt.append(r'".*?((?<!\\\\\\\\\\)|(?<!\\\\\\)|(?<!\\))"')
# commentaire uniligne
lstPt.append("\\#[^\\r\\n]*")
# concaténation
pt = "(" + "|".join(lstPt) + ")"
# recherche
lstString = finditer2list(pt, s, 0)
# remplacement des strings et commentaires par des génériques
i = 0
iStart = 0
iEnd = 0
d = 0
f = 0
s2 = s
s = ""
tag = "mmtag_yyd"
for e in lstString:
i = i + 1
d, f = e.span(0)
iEnd = d - 1
s = s + s2[iStart: iEnd + 1] + tag + str(i) + "_"
iStart = f
# end for
# ajout de la dernière portion
try: s = s + s2[f:]
except: pass
# séparation des opérateurs des autres caractères par des espaces
pt = r"[ ]*(\+=|-=|\*=|/=|<=|>=|==|!=|\|=|=|\||\+|-|\*|/|<|>|%)[ ]*"
s = re.sub(pt, " \\1 ", s)
# les englobeurs ouvrants doivent être
# séparés des autres caractères par un espace à gauche
pt = r"([^ \t])([\(\[\{]+)[ ]*"
s = re.sub(pt, "\\1 \\2", s)
# ceux desquels On doit retirer les espaces avant
pt = r"([_]*[a-zA-Z][a-zA-Z_\d]*)[ ]+([\(\[\{]+)"
s = re.sub(pt, "\\1\\2", s)
# les englobeurs fermants
pt = r"[ ]*([\)\]\}:]+)"
s = re.sub(pt, "\\1", s)
# ceux qui doivent avoir un espace avant, mais pas après
pt = r"[ ]*([\\]+)[ ]*"
s = re.sub(pt, " \\1", s)
# ceux qui doivent avoir un espace après, mais pas avant
pt = r"[ ]*([,])[ ]*"
s = re.sub(pt, "\\1 ", s)
# les espaces trop grands
# mais qui ne sont pas en début de ligne
pt = r"([^\r\n])[ ]{2,}"
s = re.sub(pt, "\\1 ", s)
# élimination des espaces et tabulations en fin de ligne
pt = r"([^ \t]+)[ \t]+$"
s = re.sub(pt, "\\1", s, 0, re.M)
# élimination des espaces entre les englobants fermants et ouvrants
pt = "(\\)|\\]|\\}|\\.)[ \\t]+(\\(|\\[|\\{)"
s = re.sub(pt, "\\1\\2", s)
# restauration des string à partir des génériques
i = 0
for e in lstString:
i = i + 1
s = s.replace(tag + str(i) + "_", e.group(0), 1)
# end for
return s
# end def