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()
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é
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électionJe 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.


