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>