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

Répondre à