dimanche 19 octobre 2008

Extensions pour OOo : Cmath & FrenchSpacing

Un premier message sur EducOOo... je n'ai pas prévu de me présenter, mais si cela intéresse quelqu'un, il peut consulter cette page.
StarXpert propose, ici, une extension qui permet d'ajouter automatiquement (lors de la frappe, à la volée) une espace insécable avant les signes de ponctuation double (« : », « ; », « ! », « ? »). Cette extension écrite par Alain Nowak à partir du code proposé par Luc-Olivier Rousseau, s'installe plus facilement que la macro initiale (l'extension gère l'activation automatique du KeyHandler).

Sur le forum de la communauté francophone, au sein de la discussion « Espaces insécables avant ponctuation », Hagar de l'Est propose des modifications [starxpert_insecable_v1.1.oxt] qui permettent notamment de reconnaitre plus de chaînes particulières (https://, ftp://, file://, svn://) et d'autoriser le fonctionnement de la macro, même s'il y a moins de 4 caractères dans le paragraphe (exemple : "Ah !")

Cependant l'utilisation de ces extensions avec CmathOOo de Christophe Deval ne semble pas possible...
Rappelons que CmathOOo permet à l'utilisateur de taper une expression mathématique telle qu’on le ferait sur une calculatrice par exemple "x=(y+5)/(3*y)" ; CmathOOo la met en forme tout seul, en respectant les priorités, les parenthèses, les règles typographiques, etc.. Même pour des formules compliquées, cela permet de se passer de l’éditeur d’équation, trop lent pour une utilisation intensive. [D'après « Présentation de CmathOOo »]
Malheureusement, si vous installez les 2 extensions, dès que vous aurez utilisé CmathOOo dans un document, vous vous rendrez compte que l'ajout automatique des espaces insécables est inopérant.

Pourquoi ?
Car Christophe a ajouté Option Explicit au début de ses sources. Cette instruction indique que chaque variable du code doit être explicitement déclarée avec l'instruction Dim. [D'après l'aide de OOo]
Et de son côté, au sein de la fonction 'doFrenchSpacing' dans le module 'insecable', certaines variables 'sBefore', 'charBefore', 'sReplace' n'ont pas été déclarées.

Et alors ? Pourquoi cela ne provoque-t-il pas une erreur ?
Au sein de la fonction 'doFrenchSpacing' une gestion locale des erreurs a été ajoutée à l'aide la ligne 'on local error goto Fin_doFrenchSpacing'. En cas d'erreur, aucun message n'est affiché et ce, pour ne pas perturber l'utilisateur final de l'extension. En fait, en cas d'erreur (ce qui se produit systématiquement si vous utilisez CmathOOo), un saut a lieu vers l'étiquette 'Fin_doFrenchSpacing' et rien n'est modifié à l'écran, la fonction 'doFrenchSpacing' suspend son traitement.

Comment réparer cela ?
Il nous faut déclarer toutes les variables oubliées. Ainsi, après la ligne 'Dim oCursor as Object'' on ajoutera les 3 lignes 'Dim sBefore as String', 'Dim sReplace as String' et 'Dim charBefore as String'
Attention : vous ne pourrez pas éditer le code si l'extension a été installée pour tous les utilisateurs.

Et ça marche ?
Selon mes tests, oui ! Mais j'attends vos retours !

Cet article est très technique et risque d'être inutilisable par l'utilisateur final s'il n'est pas prêt à jouer un minimum à l'apprenti sorcier.
Mais on peut espérer que cette remarque soit prise en compte dans une prochaine version de l'extension.

1 commentaire:

Synanceia (Pierre POISSON) a dit…

Bonjour à tous,

Pour info, starXpert propose depuis le 24/11 une nouvelle version de l'extension French Spacing qui ne nécessite pas de modification du code.