[Issue][Python]Erreur dans le fichier d'exemple capitalise.py

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1489
Inscription : 18 janv. 2008 09:02
Localisation : Val de Marne

[Issue][Python]Erreur dans le fichier d'exemple capitalise.py

Message par jeanmi2403 »

Bonjour,
Je viens de détecter (et peut-être de corriger) une vieille erreur qui traîne (depuis bien longtemps ?) dans le fichier d'exemple capitalise.py dans Open Office (4.1.16) et qui subsiste dans Libreoffice (26.2).
En effet la macro plante si on a une sélection multiple. J'avoue que je ne comprenais pas bien pourquoi.
Un jour de canicule j'ai décidé de ne pas sortir le vélo.....
On trouve dans le code :

Code : Tout sélectionner

xModel = XSCRIPTCONTEXT.getDocument()  # NOQA
    xSelectionSupplier = xModel.getCurrentController()
    xIndexAccess = xSelectionSupplier.getSelection()
    count = xIndexAccess.getCount()
En farfouillant avec Xray dans le xIndexAccess en question, j'ai observé une chose surprenante,
avec aucun mot sélectionné ou un seul , count est égal à 1, mais avec deux mots sélectionnés, count est égal à 3 !
Et avec N sélections count vaut N+1.............bien entendu.
Avec 0 ou un mot la sélection s'obtient par xIndexAccess.getByIndex(0) (un seul élément)
Autrement par xIndexAccess.getByIndex(i) avec 0 < i < count, le premier élément étant vide (mystère ?)
On trouve ensuite :

Code : Tout sélectionner

if count >= 1:  # ie we have a selection
        i = 0
    while i < count:
        xTextRange = xIndexAccess.getByIndex(i)
        theString = xTextRange.getString()
        if len(theString)==0 # c'est ici qu'il y a ambiguité
Qui fonctionne bien avec une sélection ou aucune, mais pas avec une sélection multiple, car on ne sait pas pour quelle raison la chaîne est vide : Premier élément d'une liste ou bien aucune sélection ?
En effet à la suite de ces instructions, s'il n'y a pas de sélection, la macro sélectionne le mot sous le curseur et lui applique la capitalisation.
En cas de sélection multiple, l'extension du mot au curseur perturbe le reste de la macro.
Il suffit donc de remplacer la ligne ambiguë par :

Code : Tout sélectionner

if len(theString)==0 and count == 1: # pas de sélection
Et l'extension sur le mot courant ne se fera que s'il n'y a aucune sélection.
Je ne sais pas trop à qui transmettre cette correction qui traîne depuis des années, et ne donne pas une bonne image de la programmation Python.
Je dépose aussi sur le forum anglophone.
Bon été à tous,
PS : en cadeau, un document pour tester la macro.
Exemple-Capitalise.odt
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par jeanmi2403 le 12 août 2026 09:40, modifié 1 fois.
Jean-Michel
LibO 26.2 et AoO 4.1.16 sur Windows 11 & Ubuntu 22.04
LibO 26.8 sur OpenSuse & Linux MX
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26222
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Python]Erreur dans le fichier d'exemple capitalise.py

Message par Dude »

Salut,

Il n'y a aucun développeur qui passe sur les forums.
Il te faut proposer ton correctif sur le dépôt Github du code source d'OpenOffice :
https://github.com/apache/openoffice/bl ... italise.py
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1489
Inscription : 18 janv. 2008 09:02
Localisation : Val de Marne

Re: [Python]Erreur dans le fichier d'exemple capitalise.py

Message par jeanmi2403 »

Bonjour,
Dude a écrit : 12 août 2026 09:38 Il te faut proposer ton correctif sur le dépôt Github du code source d'OpenOffice :
https://github.com/apache/openoffice/bl ... italise.py
C'est fait : https://github.com/apache/openoffice/pull/494
A plus
Jean-Michel
LibO 26.2 et AoO 4.1.16 sur Windows 11 & Ubuntu 22.04
LibO 26.8 sur OpenSuse & Linux MX
cwolan
Membre hOOnoraire
Membre hOOnoraire
Messages : 179
Inscription : 14 févr. 2021 22:15

Re: [Python]Erreur dans le fichier d'exemple capitalise.py

Message par cwolan »

Bonjour,
jeanmi2403 a écrit : 11 août 2026 20:35 Je viens de détecter (et peut-être de corriger) une vieille erreur qui traîne (depuis bien longtemps ?) [...]
En fait, depuis bien longtemps.

1.
Le fichier capitalise.py est present dans OpenOffice.org 2.0

2.
Le commentaire dans ce fichier se lit comme suit :

Code : Tout sélectionner

#see section 7.5.1 of developers' guide
751_TextView.png

L'erreur dans OpenOffice.org 2.0
RuntimeException_OOo20.gif
jeanmi2403 a écrit : 12 août 2026 16:30 C'est fait : https://github.com/apache/openoffice/pull/494
Merci.


Voir aussi Issue 82861 - Python: Capitalize macro
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
OpenOffice 1.1.5 – 4.1.16
LibreOffice 3.3.0.4 – 26.2
Windows 7,10,11 64-bit
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1489
Inscription : 18 janv. 2008 09:02
Localisation : Val de Marne

Re: [Python]Erreur dans le fichier d'exemple capitalise.py

Message par jeanmi2403 »

Bonsoir,
Finalement, la correction que je propose avait déjà fait l'objet d'une publication en 2007, avec des discussions jusqu'en 2013 ! mais jamais mise en place.. Ce n'est pas d'une importance capitale, mais tout de même.
Ce qui m'intrigue, c'est que la structure de la liste de sélections est bizarre, et que c'est ça qui provoquait l'erreur
Et donc c'est le comportement ( et la logique de conception) de xIndexAccess que j'ai du mal à comprendre.

Rappel :
Pas de sélection : un élément indice 0 (vide)
un objet sélectionné : un élément indice 0 (contient la sélection)
N objets : N+1 éléments, le premier (indice 0) vide

Ce comportement étrange (à mon sens) est visible dans le petit exercice qui suit.
TestSelectionsPython.odt
Bonne canicule..
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Jean-Michel
LibO 26.2 et AoO 4.1.16 sur Windows 11 & Ubuntu 22.04
LibO 26.8 sur OpenSuse & Linux MX