Re: Statistiques

Stéphane Mourey <[email protected]>
Newsgroups gmane.editors.lyx.french
Message-ID <[email protected]>
Re-bonjour,

Voilà, j'ai eu un peu de temps aujourd'hui pour me pencher à nouveau à 
la question.

Jean-Marc (merci!), j'explique tout ce que j'ai fait en réagissant à tes 
réponses ci-dessous :
>>   * je ne comprend pas bien le fonctionnement de LyXAction.cpp, mais
>>     j'ai l'impression qu'il sert à faire le lien entre la commande reçue
>>     par le serveur (statistics) et le nom de la fonction en interne
>>     (LFUN_STATISTICS)
> Exact, et il y a en plus une série de drapeaux indiquant quand cette 
> fonction peut être utilisée.
J'ai donc ajouté les lignes suivantes au fichier LyXAction.cpp :

    /*!
      * \var lyx::FuncCode lyx::LFUN_SERVER_GET_STATISTICS
      * \li Action: Count the statistics (number of words and characters)
                    in the document.
      * \li Notion: Note that this function gives the number of
    words/chars written,
                   not the number of characters which will be typeset.
      * \li Syntax: server-get-statistics
    <words|signs-spaces-inluded|signs-spaces-excluded>
      * \li Params: <words|signs-spaces-inluded|signs-spaces-excluded>
      * \li Origin: brokenclock, Oct 10 2014
      * \endvar
      */
    { LFUN_SERVER_GET_STATISTICS, "server-get-statistics", ReadOnly |
    Argument, System },


Je me suis inspiré des autres fonctions pour choisir les drapeaux, mais 
j'avoue que c'est un peu piffométrique... Peux-tu confirmer ou corriger 
Jean-Marc ? Les commentaires sont corrects ? On voit que j'attends un 
paramètre à choisir parmi trois chaînes de caractères.
>>         LFUN_STATISTICS_NOVIEW, // brokenclock 20141006
> Oui (au nom près)
J'ai mis :
         LFUN_SERVER_GET_STATISTICS,     // brokenclock 20141010
juste avant la ligne LFUN_LASTACTION.
> Dans Buffer.cpp, plutôt. Il faut en effet ajouter un case dans 
> Buffer::getStatus. C'est là qu'on dit si la fonction est activée ou 
> pas. Ici, elle est toujours activée.
Du coup dans Buffer::getStatus, j'ai ajouté :

         case LFUN_SERVER_GET_STATISTICS:
             break;

pour activer la fonction.
Et si la commande est activée dans dans Buffer::getStatus, alors elle 
est sans doute traitée dans Buffer::dispatch ?
J'ai donc ajouté dans Buffer::dispatch le cas :

         case LFUN_SERVER_GET_STATISTICS:
             this.updateStatistics(from, to);
             switch (cmd.getArg(0)) {
                 case "words":
                     cur.message(this.wordCount());
                     break;
                 case "signs-without-spaces":
                     cur.message(this.charCount(false));
                     break;
                 case "signs-with-spaces":
                     cur.message(this.charCount(true));
                     break;
                 default:
                     return false;
             }
             break;

>>   * comment je fais pour écrire proprement dans ~/.lyxpipe.out ?
> Le mieux est de regarder le fonctions LFUN_SERVER_GET_xxx (d'où le 
> changement de nom ci-dessus).
C'est ce que j'ai fait, je n'ai trouvé que LFUN_SERVER_GET_XY et 
LFUN_SERVER_GET_LAYOUT dans Text3.cpp.
> Ici, la commande magique sera
>    result.setMessage(le résultat à renvoyer);
Les deux fonctions que j'ai trouvées utilisent cur.message(), que j'ai 
donc utilisé dans mon code, sans savoir si cela vaut quelque chose.

Un autre problème qui me saute aux yeux tient aux arguments à envoyer à 
Buffer::updateStatistics : je ne sais pas comment lui indiquer d'où 
commencer son compte, ni où finir (par défaut, du début à la fin du 
document... je ne pense pas qu'on puisse gérer d'autres possibilités en 
passant par le serveur).

Voilà où j'en suis. À mon avis, il ne manque pas grand chose pour que ça 
marche, mais ce n'est pas encore la peine que je lance la compilation.
-- 
Blog: Impossible Exil <http://impossible-exil.info>
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.