1
2
3
4
5
6
7
8
9
10
11
12
13
14\writestatus{loading}{ConTeXt Spacing Macros Lines}
15
16\unprotect
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\installcorenamespace{lines}
50
51\installcommandhandler \??lines {lines} \??lines
52
53\setuplines
54 [\c!option=,
55 \c!command=,
56 \c!before=\blank,
57 \c!after=\blank,
58 \c!inbetween=\blank,
59 \c!indenting=\v!no,
60 \c!space=\v!default]
61
62\appendtoks
63 \setuevalue{\e!start\currentlines}{\spac_lines_start[\currentlines]}
64 \letvalue {\e!stop \currentlines }\spac_lines_stop
65\to \everydefinelines
66
67\unexpanded\def\spac_lines_start[#1]
68 {\bgroup
69 \edef\currentlines{#1}
70 \obeylines
71 \dosingleempty\spac_lines_start_indeed}
72
73\let\p_lines_option\empty
74
75\let\spac_lines_break \relax
76\let\spac_after_first_obeyed_line\relax
77\let\spac_lines_indent \relax
78
79
80
81
82
83
84
85
86
87
88
89
90\newcount\c_spac_lines_indent_cnt
91\newcount\c_spac_lines_indent_max
92\newdimen\d_spac_lines_indent
93
94\def\spac_lines_indent_indeed
95 {\ifnum\c_spac_lines_indent_cnt=\c_spac_lines_indent_max
96 \c_spac_lines_indent_cnt\plusone
97 \else
98 \advance\c_spac_lines_indent_cnt\plusone
99 \fi
100 \getfromcommacommand[\m_spac_lines_indentlist][\c_spac_lines_indent_cnt]
101 \ifx\commalistelement\wildcardsymbol
102 \hskip\d_spac_lines_indent
103 \else
104 \scratchdimen\dimexpr\commalistelement\relax
105 \hskip\ifdim\scratchdimen=\zeropoint
106 \zeropoint
107 \else
108 \scratchdimen
109 \d_spac_lines_indent\scratchdimen
110 \fi
111 \fi
112 \relax}
113
114\def\spac_lines_start_indeed[#1]
115 {\iffirstargument
116 \setupcurrentlines[#1]
117 \fi
118 \edef\p_lines_option{\linesparameter\c!option}
119 \ifx\p_lines_option\v!packed
120 \let\spac_lines_break\nobreak
121 \else
122 \let\spac_lines_break\relax
123 \fi
124 \linesparameter\c!before
125 \push_macro_checkindentation
126 \whitespace
127 \dostarttaggedchained\t!lines\currentlines\??lines
128 \begingroup
129 \uselinesstyleandcolor\c!style\c!color
130 \useindentingparameter\linesparameter
131 \usealignparameter\linesparameter
132 \typesettinglinestrue
133 \setupwhitespace[\v!none]
134
135
136 \edef\m_spac_lines_indentlist{\linesparameter\c!indentlist}
137 \getcommacommandsize[\m_spac_lines_indentlist]
138 \c_spac_lines_indent_max\commalistsize
139 \c_spac_lines_indent_cnt\zerocount
140 \ifnum\c_spac_lines_indent_max>\plusone
141 \let\spac_lines_indent\spac_lines_indent_indeed
142 \d_spac_lines_indent\d_spac_indentation_par
143 \else
144 \let\spac_lines_indent\relax
145 \fi
146
147 \ignorespaces
148 \glet\spac_after_first_obeyed_line\spac_lines_after_first_obeyed_line_a
149 \enforced\let\obeyedline\spac_lines_obeyed_line
150 \activatespacehandler{\linesparameter\c!space}
151 \dostarttagged\t!line\empty
152 \ignorepars}
153
154
155
156
157\def\spac_lines_after_first_obeyed_line_a
158 {\linesparameter\c!command
159 \spac_lines_indent
160 \linesparameter\c!left
161 \glet\spac_after_first_obeyed_line\spac_lines_after_first_obeyed_line_b}
162
163\def\spac_lines_after_first_obeyed_line_b
164 {\spac_lines_break
165 \linesparameter\c!command
166 \spac_lines_indent
167 \linesparameter\c!left}
168
169\def\spac_lines_obeyed_line
170 {\ifdone\linesparameter\c!right\fi
171 \dostoptagged
172 \par
173 \dostarttagged\t!line\empty
174 \futurelet\nexttoken\spac_lines_between}
175
176\unexpanded\def\spac_lines_stop
177 {\dostoptagged
178 \endgroup
179 \dostoptagged
180 \pop_macro_checkindentation
181 \linesparameter\c!after
182 \egroup}
183
184\def\spac_lines_between
185 {\ifx\nexttoken\spac_lines_stop
186 \donefalse
187 \else
188 \doifelsemeaning\nexttoken\obeyedline
189 {\donefalse\linesparameter\c!inbetween}
190 {\donetrue\spac_after_first_obeyed_line}
191 \fi}
192
193\definelines[\v!lines]
194
195\unexpanded\def\emptylines
196 {\dosingleempty\spac_lines_empty}
197
198
199
200
201
202\def\spac_lines_empty[#1]
203 {\endgraf
204 \begingroup
205
206 \ifhmode
207 \crlf
208 \fi
209 \dorecurse{\iffirstargument#1\else3\fi}{\strut\crlf}
210 \endgroup}
211
212\ifdefined\startlines \else
213 \expandafter\let\expandafter\startlines\csname\e!start\v!lines\endcsname
214 \expandafter\let\expandafter\stoplines \csname\e!stop \v!lines\endcsname
215\fi
216
217\protect \endinput
218 |