% !TeX TS-program = luatex % Ceci est le fichier de test (pdf)(Xe)(lua)tex de l'entension listofitems % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Mise en garde : lorsqu'il est compilé, ce fichier DOIT générer des erreurs aux % % endroits où figure "ERREUR" dans le code source. % % Ces erreurs sont émises par l'extension listofitems lorsqu'un % % argument ou un index est erroné et qu'une solution est % % prévue. % % Le fichier pdf DOIT être généré. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \hsize = \dimexpr 21cm - 2in \relax \vsize = \dimexpr 29.7cm - 2in \relax \input listofitems.tex \newcount\sectioncnt \def\section#1{\advance \sectioncnt1 \bigbreak{\loisectionfont \the\sectioncnt\quad #1\par}\smallbreak} \def\expo#1{\penalty10000 \raise0.66667ex \hbox{\loiexpofont#1}} \font\loititlefont=ecbx2000 % titre \font\loisectionfont=ecbx1200 % section \font\loiexpofont=ecrm1000 at 8pt % exposant \font\loitextfont=ecrm1000 % texte \font\loitextfontbf=ecbx1000 % gras \catcode`\;=13 \def;{\unskip\penalty10000 \ \string;}% caractères actifs de ponctuation française \catcode`\:=13 \def:{\unskip\penalty10000 \ \string:} %%%%% DÉBUT DU DOCUMENT \loitextfont \parindent=0pt \centerline{\loititlefont Fichier de test (luatex)} \par\vskip1.5cm \section{Séparateur vide} Separateur vide :\setsepchar{}% ERREUR : le séparateur "," est pris par défaut \readlist\castordu{a aa, b , c cc } \showitems\castordu \section{Liste vide} Liste vide :\setsepchar{*} \readlist\listevide{}% ERREUR Showitems = \showitems\listevide\par% ne donne rien, pas d'erreur 3\expo{e} élément = \listevide[3]\par% ne donne rien, pas d'erreur Longueur = \listevidelen% affiche 0 \section{Cas standard} \setsepchar{+} Lecture par défaut,\readlist\maliste{123+ 456 + ++\par+{+}+* *} showitems = \showitems*\maliste Lecture sans élément vide,\ignoreemptyitems \readlist\maliste{123+ 456 + ++\par+{+}+* *} showitems = \showitems*\maliste Lecture sans élément vide ni espace extrêmes,\ignoreemptyitems \readlist*\maliste{123+ 456 + ++\par+{+}+* *} showitems = \showitems*\maliste Longueur = \malistelen\par liste entière = \maliste[]\par 2\expo{e} élément = \maliste[2]\par -1\expo{e} élément = \maliste[-1]\par -2\expo{e} élément = \maliste[-2]\par -7\expo{e} élément = \maliste[-7]\par% ERREUR, doit afficher la liste entière 7\expo{e} élément = \maliste[7]% ERREUR, doit afficher la liste entière \section{Séparateur = \char`\\par} \def\laliste{a b c \par def\par\par xyz} \reademptyitems \setsepchar{\par} Lecture par défaut, \readlist\maliste\laliste showitems = \showitems\maliste Lecture sans élément vide, \ignoreemptyitems \readlist\maliste\laliste showitems = \showitems\maliste \section{Séparateur = caractère actif} \begingroup \catcode`\!=13 \def!{|} \setsepchar{!} \readlist\foo{!1 ! 2 !! 3!} Showitems = \showitems\foo\par liste entière = \foo[]\par 2\expo{e} élément = \foo[2]\par -1\expo{er} élément = \foo[-1]\par -5\expo{e} élément = \foo[-5]\par% ERREUR, doit afficher la liste entière \endgroup \section{Séparateurs = +\quad -\quad *\quad /} \setsepchar[.]{+||-||*||/} \def\expression{3 + 2*7 - 4*9/5 - 1} \readlist*\nombres\expression Showitems = \showitems\nombres\par liste entière = \nombres[]\par Longueur = \nombreslen\par 2\expo{e} élément = \nombres[2]\par -1\expo{e} élément = \nombres[-1]\par -5\expo{e} élément = \nombres[-5] \section{Séparateurs = \char`\&{} et \char`\\\char `\\} \setsepchar{\\/&} \readlist\foo{1 & 2 & 3\\ a & b& \\ x & & z} Showitems[] = \showitems*\foo\par Showitems[2] = \showitems*\foo[2]\par Showitems[2,1] = \showitems*\foo[2,1]\par% ERREUR : trop grande profondeur Foreachitem = \foreachitem\myitem\in\foo[3]{\myitemcnt = "\myitem"\qquad}\par élément [-2,-3] = "\foo[-2,-3]"\par \section{Séparateurs = \char`\^\char`\^M actif et ponctuations} \begingroup \obeylines \ignoreemptyitems \setsepchar{^^M/ ||,||'||-||:||;||.}% \readlist\poeme{C'est un trou de verdure où chante une rivière, Accrochant follement aux herbes des haillons D'argent ; où le soleil, de la montagne fière, Luit : c'est un petit val qui mousse de rayons.}% « Le dormeur du val », Arthur Rimbaud \begingroup% dans ce groupe \def\showitemsmacro#1{% aller à la ligne (\par) après chaque élément \begingroup\fboxsep=0.25pt \fboxrule=0.5pt \fbox{\strut#1}\endgroup\par } Showitems[] = \showitems\poeme \endgroup% revenir à la macro \showitemsmacro par défaut \medbreak Nombre de vers = \poemelen{} ou \listlen\poeme[] Mots du 1er vers = \showitems\poeme[1] Mots du dernier vers = \showitems\poeme[-1] 4\expo{e} mot du premier vers = "\poeme[1,4]" 5\expo{e} mot du 3e vers = "\poeme[3,5]" \medbreak {\loitextfontbf Rimes} : \foreachitem\vers\in\poeme{vers n\expo{\unkern o}\verscnt{} : \poeme[\verscnt,-1]\par} \endgroup \bye