FPM, Chanson de Roland (1869) F. Michel, aspects techniques

De Wicri Chanson de Roland

Outils d'aide à la mise en ligne

Un programme lex est utilisé pour transformer le fichier xml en brouillon de lignes wiki.

Fichier testFPM_41.xml
<?xml version="1.0" encoding="UTF-8"?>
<text nbWords="410">
	<word left="111" top="149" height="41" width="61" rate="90" language="" endline="false">183.)</word>
	<word left="448" top="142" height="32" width="55" rate="100" language="French" endline="false">DE</word>
	<word left="529" top="142" height="32" width="187" rate="100" language="French" endline="false">ROLAND.</word>
	<word left="54" top="223" height="37" width="26" rate="100" language="French" endline="false">Si</word>
	<word left="94" top="223" height="37" width="137" rate="100" language="French" endline="false">receverat</word>
	<word left="243" top="223" height="37" width="24" rate="100" language="French" endline="false">la</word>
	<word left="279" top="223" height="37" width="92" rate="100" language="French" endline="false">nostre</word>
...
	<word left="935" top="1962" height="30" width="213" rate="97" language="French" endline="false">celavousmande,</word>
</text>
Résultat souhaité

La page FPM, Chanson de Roland (1869) F. Michel, page 7 contient un texte wiki dont un extrait du contenu est :

{{FPM, CR, début texte}}
{{FPM, CR, vers  |Si receverat la nostre lei plus salve* ;}}
{{FPM, CR, aster |propice au salut.}}
{{FPM, CR, vers  |Chrestiens ert, de mei tendrat ses marches*, }}
{{FPM, CR, aster |Sera, de moi tiendra ses frontières.}}
Programme lex
(testFPM.lex)
%START JUMP
%START WORD
%START PRINT
%START NUM
 int top, top1, flag;
%%
<JUMP>.          ;
<JUMP>\n         ;
<JUMP>"<word"    BEGIN WORD;
<WORD>">"[A-Z][a-z]  {if (flag==1) printf("{{FPM, CR, vers  |"); printf("%s", yytext+1); BEGIN PRINT;}
<WORD>">*"           {if (flag==1) printf("{{FPM, CR, aster  |"); else printf("%s", yytext+1); BEGIN PRINT;}
<WORD>">"        BEGIN PRINT;
<WORD>.          ;
<WORD>"top="     BEGIN NUM;
<NUM>[0-9]+      {top=atoi(yytext); 
                  if(top1!=top)
                     {top1=top; printf("}}\n"); flag=1;} 
                  else {printf (" "); flag=0;}
                  BEGIN WORD;}  
<NUM>.           ;
<PRINT>"</"      BEGIN JUMP;
<PRINT>.         ECHO;
%%
main()
{
  top1=0;
  BEGIN JUMP;
   yylex();
}

Mise en oeuvre :

lex testFPM.lex
gcc lex.yy.c -ll -o testFPM
./testFPM < testFPM_41.xml

Résultat :

}}
183.)}}
DE ROLAND.}}
{{FPM, CR, vers  |Si receverat la nostre lei plus salve* ;}}