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>

Répondre à