Re: Statistiques

2014-10-06 Par sujet Jean-Marc Lasgouttes

Le 06/10/2014 14:54, Stéphane Mourey a écrit :

Voilà, j'ai commencé à jeter un coup d'oeil aux sources, et bien que
tout cela soit encore bien hermétique pour moi, j'ai réussi à glane
quelques éléments judicieux à l'aide de quelques greps bien utilisés.


Très bonne résolution, allons-y ensemble.


Voici :

  * ce qui m'intéresse se joue dans quatre fichiers "seulement" :
LyXAction.cpp, FuncCode.h, BufferView.cpp, et Buffer.cpp (y
aura-t-il lieu d'intervenir sur Buffer.h et BufferView.h ?). Il
semblerait qu'il n'y ait pas de modifications nécessaires dans
Buffer.cpp bien que l'essentiel de l'action s'y déroule.


LyXAction et FuncCode servent à déclarer les fonctions. Le code qui 
permet d'exécuter les fonctions se trouve dans d'autres fichiers. En 
particulier:
 * BufferView pour les fonction globales à un buffer, mais qui ont 
besoin d'une interface graphique


 * Buffer pour les fonctions globales à un buffer et n'ont pas 
d'interface graphique. C'est ce fichier là que nous voulons ici.


Il n'est donc pas nécessaire de toucher à BufferView.*.


  * 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'aurai donc besoin d'y rajouter une ligne de code du style

{ LFUN_STATISTICS_NOVIEW, "statistics-noview", ReadOnly, /Buffer /}


Exact, par contre, je propose comme nom LFUN_SERVER_GET_STATISTICS (voir 
plus bas)



en ajoutant les commentaires de documentation qui vont bien

  * FuncCode.h semble lister les fonctions LyX en utilisant leur nom
interne, il faudrait que j'y ajoute une ligne :

LFUN_STATISTICS_NOVIEW, // brokenclock 20141006


Oui (au nom près)



  * dans BufferView.cpp, il faudrait que j'ajoute
LFUN_STATISTICS_NOVIEW dans la liste des cas de la ligne 1068 à 1089,


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.



  * dans le même, il faut que je m'inspire du bloc "case
LFUN_STATISTICS" commençant à la ligne 1656 pour créer un autre bloc
"case LFUN_STATISTICS_NOVIEW",


Oui, c'est cela.


  * le sens du bloc existant est essentiellement d'appeler le code
réellement fonctionnel (qui se trouve dans Buffer.cpp), puis de
mettre en forme le résultat et de l'afficher.


Si on veut utiliser le serveur, il suffira de renvoyer la valeur comme 
résultat de la fonction.



  * dans le bloc à produire, à la limite, que je me contenter de
récupérer les mêmes informations, mais au lieu de le mettre en forme
pour un affichage, j'envoie celui qui m'intéresse vers ~/.lyxpipe.out


Exact, sauf que c'est LyX qui va s'occuper de faire le boulot.


Et maintenant, les questions qui vont avec tout ça :

  * j'ai bon ?


PPas mal pour un débutant :)


  * comment je reçois les paramètres reçus par lyxserver dans
BufferView.cpp (dans le bloc "case LFUN_STATISTICS_NOVIEW) ?


Cela va y aller tout seul. Quand une fonction arrive, elle est envoyée 
dans l'ordre à un tas de récepteur possible, jusqu'à ce qu'un d'eux dise 
qu'il peut s'en occuper.



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


Ici, la commande magique sera
   result.setMessage(le résultat à renvoyer);
Le résultat de la fonction sera automatiquement renvoyé au bon endroit.

Il faut encore décider le format du résultat en question en regardant 
comment sont faites les autres fonctions de serveur.


Bon courage.
JMarc


Re: Statistiques

2014-10-06 Par sujet Stéphane Mourey

Le 03/10/2014 16:26, Jean-Marc Lasgouttes a écrit :

Le 03/10/2014 15:03, Stéphane Mourey a écrit :

J'étais en train de jeter un oeil dans la doc "Options avancées",
histoire de voir si je voyais quelque chose qui pourrait ressembler à ce
que pourrai imaginer être ce que tu appelles un "InsetInfo" dans un de
tes messages précédents. Et j'arrive au chapitre 5 "Le Serveur Lyx". Et
tout à coup, je me suis demandé s'il ne serait pas plus simple de faire
une macro LaTeX qui passe par le shell pour interroger le serveur LyX en
utilisant la fonciton LFUN_STATISTICS (trouvés dans l'aide "Fonctions
LyX"), plutôt que de faire une modification en C++.


Oui, on pourrait tout à fait créer une telle fonction, qui ne crée pas 
le dialogue. On pourrait aussi imaginer passer un paramètre à la 
fonction (comme "statistics words") pour demander de juste retourner 
le nombre de mots. Ça normalement ce n'est pas très difficile.


JMarc


Bonjour,

Voilà, j'ai commencé à jeter un coup d'oeil aux sources, et bien que 
tout cela soit encore bien hermétique pour moi, j'ai réussi à glane 
quelques éléments jusdicieux à l'aide de quelques greps bien utilisés. 
Voici :


 * ce qui m'intéresse se joue dans quatre fichiers "seulement" :
   LyXAction.cpp, FuncCode.h, BufferView.cpp, et Buffer.cpp (y
   aura-t-il lieu d'intervenir sur Buffer.h et BufferView.h ?). Il
   semblerait qu'il n'y ait pas de modifications nécessaires dans
   Buffer.cpp bien que l'essentiel de l'action s'y déroule.
 * 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)
 * j'aurai donc besoin d'y rajouter une ligne de code du style

   { LFUN_STATISTICS_NOVIEW, "statistics-noview", ReadOnly, /Buffer /}

   en ajoutant les commentaires de documentation qui vont bien

 * FuncCode.h semble lister les fonctions LyX en utilisant leur nom
   interne, il faudrait que j'y ajoute une ligne :

   LFUN_STATISTICS_NOVIEW, // brokenclock 20141006

 * dans BufferView.cpp, il faudrait que j'ajouter
   LFUN_STATISTICS_NOVIEW dans la liste des cas de la ligne 1068 à 1089,
 * dans le même, il faut que je m'inspire du bloc "case
   LFUN_STATISTICS" commençant à la ligne 1656 pour créer un autre bloc
   "case LFUN_STATISTICS_NOVIEW",
 * le sens du bloc existant est essentiellement d'appeler le code
   réellement fonctionnel (qui se trouve dans Buffer.cpp), puis de
   mettre en forme le résultat et de l'afficher.
 * dans le bloc à produire, à la limite, que je me contenter de
   récupérer les mêmes informations, mais au lieu de le mettre en forme
   pour un affichage, j'envoie celui qui m'intéresse vers ~/.lyxpipe.out
 * cela fait, je pourrai lancer des commandes du style :

   echo "LYXCMD:bro:statistics-noview:words" >~/.lyxpipe.in //
   nombre de mots
   echo "LYXCMD:bro:statistics-noview:signs-with-spaces"
>~/.lyxpipe.in // nombre de signes (espaces inclus)
   echo "LYXCMD:bro:statistics-noview:signs-without-spaces"
>~/.lyxpipe.in // nombre de mots (espaces exclus)

 * et je pourrai alors lire le résultat dans  ~/.lyxpipe.out.

Et maintenant, les questions qui vont avec tout ça :

 * j'ai bon ?
 * comment je reçois les paramètres reçus par lyxserver dans
   BufferView.cpp (dans le bloc "case LFUN_STATISTICS_NOVIEW) ?
 * comment je fais pour écrire proprement dans ~/.lyxpipe.out ?

Merci pour votre aide.

Cordialement,

Stéphane Mourey
--
Blog: Impossible Exil <http://impossible-exil.info>