Re: Statistiques
Jean-Marc Lasgouttes <[email protected]>
| Newsgroups | gmane.editors.lyx.french |
|---|---|
| Message-ID | <[email protected]> |
Le 13/10/2014 15:25, Stéphane Mourey a écrit :
> Bonjour,
>
> Merci à tous pour votre aide, vos compliments, votre soutien !
> J'ai essayé de prendre toutes vos remarques en considération, et voici
> ce que cela donne.
On va voir ça :) (pour commencer, n'oublie pas de garder les messages
sur la liste, c'est mieux).
>> La bonne forme est:
>> Buffer & buffer = cur.buffer();
> Erreur lors de la compilation :
>
> Text3.cpp:2396:32: error: invalid initialization of non-const
> reference of type ‘lyx::Buffer&’ from an rvalue of type ‘lyx::Buffer*’
> Buffer & buffer = cur.buffer();
C'est de ma faute, le résultat est en effet un pointeur. C'est très bien
comme tu l'as fait.
> Voilà ce que
> donne mon code et là, il se compile bien, ce qui est déjà une petite
> victoire:
>
> case LFUN_SERVER_GET_STATISTICS:
> {
> DocIterator from, to;
> if (cur.selection()) {
> from = cur.selectionBegin();
> to = cur.selectionEnd();
> } else {
> from = doc_iterator_begin(cur.buffer());
> to = doc_iterator_end(cur.buffer());
> }
>
> cur.buffer()->updateStatistics(from, to);
> string arg0 = cmd.getArg(0);
Style: chaque niveau d'indentation doit être une tabulation.
Style: quand on définit une variable qui ne sera pas modifiée ensuite,
on ajoute "const" :
string const arg0 = cmd.getArg(0);
> if (arg0 == "words") {
> cur.message(convert<docstring>(cur.buffer()->wordCount()));
> } else if (arg0 == "chars") {
> cur.message(convert<docstring>(cur.buffer()->charCount(false)));
> } else if (arg0 == "chars-space") {
> cur.message(convert<docstring>(cur.buffer()->charCount(true)));
> } else {
> cur.message(convert<docstring>(cur.buffer()->wordCount()) + " " +
> convert<docstring>(cur.buffer()->charCount(false)) + " " +
> convert<docstring>(cur.buffer()->charCount(true)));
> }
> }
> break;
Si tu ne veux pas avoir plein de cur.message, tu peux définir une variable
string result;
et faire un
cur.message(result);
à la fin. Par contre, c'est dur d'éviter les convert à répétition.
> Reste plus qu'à tester pour de vrai. J'enlève le paquet LyX fournit par
> Ubuntu, je fais "make install", je lance LyX en ligne de commande et
> tout a l'air de bien se passer.
Ceci n'est pas nécessaire. LyX peut toujours être lancé depuis le
répertoire de compilation en faisant src/lyx. Il trouvera
automatiquement les fichiers nécessaires.
> J'ouvre un document, no problemo.
> Logiquement, je passe au test de ma fonction. Et là, je coince. Dans une
> nouvelle console, histoire de voire ce que LyX afficherait sur la ligne
> de commande où je l'ai lancé (il n'affichera rien de plus) :
>
> echo "LYXCMD:bro:server-get-statistics:" >~/.lyxpipe.in
> cat ~/.lyxpipe.out
>
> Et là, j'ai été quelque peu surpris par le fonctionnement des fichiers
> ~/.lyxpipe.in et ~/.lyxpipe.out, à tel point que j'ai d'abord cru que
> rien ne marchait.
>
> Car si je lance "cat ~/.lyxpipe.out", il ne se passe rien, il ne me rend
> pas la main, du moins jusqu'à ce que j'ai envoyé quelque chose sur
> ~/.lyxpipe.in... du coup j'en arrive à quelques acrobaties intéressantes :
Oui, je ne sais pas trop comment les pipes (tuyaux) marchent. Ce que je
conseille est d'utiliser lyxclient (src/client/lyxclient), qui fait les
trucs compliqués à ta place.
> Qu'en pensez-vous ? Des améliorations à apporter ? Cela vaut-il la peine
> de soumettre la contribution ? Si oui, comment s'y prendre ?
Ça a l'air très bien, et oui, ce serait une addition intéressante. Pour
faire cela il faut faire un patch. Est-ce que tu travailles depuis git
ou depuis le tar.gz de LyX ? Selon les cas, la méthode varie.
J'imagine que tu as travaillé depuis la version stable 2.1.x ? Il faudra
qu'on commence par appliquer à la version développement 2.2, la version
stable vient après. Normalement, il n'y aura pas besoin de trop adapter
le code.
JMarc