summaryrefslogtreecommitdiff
path: root/macros/generic/listofitems/test/listofitems-test-tex.tex
blob: f2cfb0ac6e47c7be21a7527b9181003155762357 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
% !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