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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.