Bizarreries GIMP, Notepad et/ou Python [Résolu]

Pour tous ceux qui veulent aller plus plus dans les aspects techniques de Gimp.

Modérateur : Ze Techos

Répondre
glr53
Chef de meute
Messages : 35
Inscription : sam. mai 28, 2011 3:01 pm

Bizarreries GIMP, Notepad et/ou Python [Résolu]

Message par glr53 » lun. juin 27, 2011 7:35 am

Bonjour,
J'ai voulu un peu décortiquer la fonction register pour mieux l'utiliser. Ça commence mal quand j'édite
C:\GIMP\gimp_2_6_11-2\lib\gimp\2.0\python\gimpfu.py
avec Notepad, voilà ce que je vois à l'écran pour les quelques premières lignes :
Image
Si je copie/colle ci-dessous ces quelques lignes, voilà ce que j'ai (observez l'indentation dans cette sous-fonction letterCheck)

Code : Tout sélectionner

def register(proc_name, blurb, help, author, copyright, date, label,
             imagetypes, params, results, function,
             menu=None, domain=None, on_query=None, on_run=None):
    '''This is called to register a new plug-in.'''

    # First perform some sanity checks on the data
    def letterCheck(str):
        allowed = _string.letters + _string.digits + '_' + '-'
        for ch in str:
            if not ch in allowed:
		return 0
        else:
            return 1

    if not letterCheck(proc_name):
        raise error, "procedure name contains illegal characters"
Cette première sous-fonction (letterCheck) fonctionne comme prévu, mais je ne comprend pas tout :
  • Pourquoi cette instruction return 0 semble alignée sur def letterCheck lorsqu'elle est présentée par Notepad. NB : en regardant de plus près, les indentations sont faites avec des espaces sauf sur cette instruction return 0 qui semble avoir 2 tabulations
  • Comment Python peut-il accepter ce else: au même niveau que for ?
  • J'aurais fait plus simplement

    Code : Tout sélectionner

        def letterCheck(str):
            allowed = _string.letters + _string.digits + '_' + '-'
            for ch in str:
                if not ch in allowed:
                    return 0
            return 1
    

Je me posais des questions sur register, je ressors avec des questions sur Notepad, Python et GIMP.
Qu'en pensez-vous ?
Dernière modification par glr53 le mer. juin 29, 2011 6:23 pm, modifié 1 fois.
Gérard
Windows 10 GIMP 2.8.22

samj
Pro de la Gimp-Attitude
Messages : 711
Inscription : sam. oct. 29, 2005 4:16 pm

Re: Bizarreries GIMP, Notepad et/ou Python

Message par samj » lun. juin 27, 2011 12:43 pm

Bonjour,

Ce sujet n'est pas en rapport avec Gimp mais concerne l'utilisation de Notepad, je suppose Notepad++

Si c'est bien l'utilisation de Notepad++ qui est concernée :
- Afficher les lignes verticales d'indentation par Affichage > Symboles spéciaux > Afficher le guide d'indentation (c'est un conseil, pas une obligation).
- Utiliser uniquement la touche de tabulation pour l'indentation et non la barre d'espacement (c'est une obligation). C'est le non respect de cette règle qui est peut-être à l'origine du défaut.


Edit :
Il est aussi possible, en cas de problème, d'afficher tous les caractères par Affichage > Symboles spéciaux > Afficher tous les caractères.

glr53
Chef de meute
Messages : 35
Inscription : sam. mai 28, 2011 3:01 pm

Re: Bizarreries GIMP, Notepad et/ou Python

Message par glr53 » lun. juin 27, 2011 7:55 pm

Merci samj d'avoir répondu.
Ce sujet est bien en rapport avec GIMP.
Le code que je cite n'est pas le mien, c'est celui que j'ai trouvé dans
C:\GIMP\gimp_2_6_11-2\lib\gimp\2.0\python\gimpfu.py
après l'installation.
Je le présente ici, parce que je voulais comprendre ce qu'il y avait derrière.
Oublions l'indentation un peu fantaisiste de cette instruction return 0
Mais que penser de ce else: ??
A quoi se rapporte-t-il ??
Gérard
Windows 10 GIMP 2.8.22

samj
Pro de la Gimp-Attitude
Messages : 711
Inscription : sam. oct. 29, 2005 4:16 pm

Re: Bizarreries GIMP, Notepad et/ou Python

Message par samj » lun. juin 27, 2011 9:24 pm

Bonjour,
glr53 a écrit :Merci samj d'avoir répondu.
Oublions l'indentation un peu fantaisiste de cette instruction return 0
Mais que penser de ce else: ??
A quoi se rapporte-t-il ??
Si vous utilisez notepad ++ il faut visualiser tous les caractères pour comprendre. L'indentation est faite systématiquement avec des espaces saut avant return 0 où c'est 2 tabulations.
Pour le else il y une forte chance qu'il se rapporte à if not
Il faut raisonner en "bloc de code" d'après ce didacticiel :
Citation : Les instructions if sont un type de bloc de code. Si l'expression if est évaluée à vrai, le bloc de code indenté est exécuté, sinon on saute au bloc else.
http://diveintopython.adrahon.org/getti ... denting.if

glr53
Chef de meute
Messages : 35
Inscription : sam. mai 28, 2011 3:01 pm

Re: Bizarreries GIMP, Notepad et/ou Python

Message par glr53 » mar. juin 28, 2011 6:27 am

Le bloc else ne se rapporte pas au if qui précède et heureusement, car sinon on ne testerait que le premier caractère de str. C'est pour ça que je trouve ce code très étrange.
Mais je vais exposer ce problème sur un forum Python et je vous tiendrai au courant.
Cordialement
Gérard
Windows 10 GIMP 2.8.22

glr53
Chef de meute
Messages : 35
Inscription : sam. mai 28, 2011 3:01 pm

Re: Bizarreries GIMP, Notepad et/ou Python

Message par glr53 » mar. juin 28, 2011 7:25 am

Re bonjour,
Avant de préparer mon message pour le forum Python, j'ai révisé les éléments officiels du langage Python. On y trouve :
for element in sequence:
suite
[else:
suite]
Se poursuit sur tous les éléments de la séquence, assignant chaque élément
à « element ». Utilisez la fonction prédéfinie « range » pour poursuivre un
certain nombre de fois. Le « else: suite » est exécuté à la fin sauf si la
boucle se termine avec un “break”.
Donc le else se rapporte bien au bloc for et c'est ça qui m'avait échappé. L'autre problème concerne effectivement plus Notepad++ qui est un peu perturbé si on mélange des indentations à base de tabulation avec des indentations à base d'espaces.
Merci de ta collaboration.
Gérard
Windows 10 GIMP 2.8.22

samj
Pro de la Gimp-Attitude
Messages : 711
Inscription : sam. oct. 29, 2005 4:16 pm

Re: Bizarreries GIMP, Notepad et/ou Python

Message par samj » mar. juin 28, 2011 11:15 am

Bonjour,

Notepad++ n'est pas perturbé!
Le fichier source a peut-être été revu pas des programmeurs n'utilisant pas le même éditeur.
Pour bien comprendre la structure d'un fichier, y compris d'un fichier texte, il faut afficher les caractères "cachés".

Notepad++ est certainement un des meilleurs éditeurs. On peut y définir les indentations.

Visiblement l'éditeur d'origine du fichier source (venant sûrement de Linux avec des LF pour simuler un retour chariot CR et une avance ligne LF) faisait des indentations avec des espaces (c'est aussi possible de faire cela avec Notepad++).

glr53
Chef de meute
Messages : 35
Inscription : sam. mai 28, 2011 3:01 pm

Re: Bizarreries GIMP, Notepad et/ou Python

Message par glr53 » mer. juin 29, 2011 6:19 pm

Bonjour,
Le problème est que chaque tabulation en début de ligne est considérée par Python comme équivalente à 8 espaces.
First, tabs are replaced (from left to right) by one to eight spaces such that the total number of characters up to and including the replacement is a multiple of eight (this is intended to be the same rule as used by Unix).
Mais si dans Notepad++ vous avez en "Paramétrage, Préférences" et dans l'onglet "Menu langage tabulation" et la partie Tabulations pour Python quelque chose comme Taille = 2 et "Insérer des espaces" (comme c'est mon cas) ou bien même "Valeur par défaut", alors les caractères de tabulation occupent chacun 2 caractères (au lieu des 8 caractères que Python considère).
Notepad++ le sait puisqu'il en tient compte lorsqu'on veut masquer un bloc logique, mais en visualisation ou impression, les instructions commençant par tabulation apparaissent décalés à gauche. C'est ça qui me perturbait. Mais bon, maintenant je le sais.
Cordialement
Gérard
Windows 10 GIMP 2.8.22

Répondre