Re: Statistiques

Jean-Marc Lasgouttes <[email protected]>
Newsgroups gmane.editors.lyx.french
Message-ID <[email protected]>
Bonjour,

Le 10/10/2014 16:58, Stéphane Mourey a écrit :
> 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>

Je dirais "words|signs|signs-space" comme possibilité d'arguments. Il 
vaut mieux être bref.

La ligne Params: est sensée expliquer à quoi chaque argument sert.

>       * \li Origin: brokenclock, Oct 10 2014
>       * \endvar
>       */
>     { LFUN_SERVER_GET_STATISTICS, "server-get-statistics", ReadOnly |
>     Argument, System },

On peut supposer, comme dans la commande wc, que sans argument on 
renvoie les 3 valeurs séparées par un espace. Dans ce cas, le Argument 
n'est pas nécessaire.

[je saute plein de choses sans problème]

> Et si la commande est activée dans dans Buffer::getStatus, alors elle
> est sans doute traitée dans Buffer::dispatch ?

Oui exactement.

> 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;

Déjà, tu peux enlever les "this.", on n'utilise pas cette forme dans le 
code LyX.

D'autre part, dans la classe Buffer, on n'a pas de curseur (c'est un 
buffer qui n'est pas nécessairement en train d'être édité). Par exemple, 
quand on fait un export depuis la ligne de commande, il n'y a pas de 
curseur.

Tu as raison qu'il serait utile d'avoir un curseur, ce qui veut dire 
qu'il faudrait déplacer le code dans Text3.cpp (== un morceau de texte 
en train d'être édité). Dans ce cas, tu fais comme les autres exemples 
de serveur.

> 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.

Oui, c'est bien.

> 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).

Comme tu as un curseur, tu peux reprendre le code de LFUN_STATISTICS 
pour calculer from et to.

> 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.

Oui, tu as tous les morceaux, et n'hésite pas lancer la compilation, 
cela peut faire faire des découvertes :)

Bon week end,
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.