Re: Statistiques

Jean-Marc Lasgouttes <[email protected]>
Newsgroups gmane.editors.lyx.french
Message-ID <[email protected]>
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
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.