diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/mkiv/spac-lin.mkiv')
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkiv/spac-lin.mkiv | 61 |
1 files changed, 56 insertions, 5 deletions
diff --git a/Master/texmf-dist/tex/context/base/mkiv/spac-lin.mkiv b/Master/texmf-dist/tex/context/base/mkiv/spac-lin.mkiv index d862f6d8109..aaa73d19490 100644 --- a/Master/texmf-dist/tex/context/base/mkiv/spac-lin.mkiv +++ b/Master/texmf-dist/tex/context/base/mkiv/spac-lin.mkiv @@ -74,6 +74,42 @@ \let\spac_lines_break \relax \let\spac_after_first_obeyed_line\relax +\let\spac_lines_indent \relax + +%D See \type {indentation-005.tex}: +%D +%D \starttyping +%D \setuplines[indentlist={0pt,10pt,15pt,20pt}] +%D +%D \setupindenting[yes,1em] +%D \setuplines[indentlist={0pt,*,*}] +%D +%D \setuplines[indentlist={0pt,1em,*}] +%D \starttyping + +\newcount\c_spac_lines_indent_cnt +\newcount\c_spac_lines_indent_max +\newdimen\d_spac_lines_indent + +\def\spac_lines_indent_indeed + {\ifnum\c_spac_lines_indent_cnt=\c_spac_lines_indent_max + \c_spac_lines_indent_cnt\plusone + \else + \advance\c_spac_lines_indent_cnt\plusone + \fi + \getfromcommacommand[\m_spac_lines_indentlist][\c_spac_lines_indent_cnt]% + \ifx\commalistelement\wildcardsymbol + \hskip\d_spac_lines_indent + \else + \scratchdimen\dimexpr\commalistelement\relax + \hskip\ifdim\scratchdimen=\zeropoint + \zeropoint + \else + \scratchdimen + \d_spac_lines_indent\scratchdimen + \fi + \fi + \relax} \def\spac_lines_start_indeed[#1]% new: optional second argument (WS) {\iffirstargument @@ -96,23 +132,38 @@ \typesettinglinestrue \setupwhitespace[\v!none]% todo use fast variant %\obeylines % move upwards to keep spaces in the first line due to optional argument + % + \edef\m_spac_lines_indentlist{\linesparameter\c!indentlist}% + \getcommacommandsize[\m_spac_lines_indentlist]% + \c_spac_lines_indent_max\commalistsize + \c_spac_lines_indent_cnt\zerocount + \ifnum\c_spac_lines_indent_max>\plusone + \let\spac_lines_indent\spac_lines_indent_indeed + \d_spac_lines_indent\d_spac_indentation_par + \else + \let\spac_lines_indent\relax + \fi + % \ignorespaces \glet\spac_after_first_obeyed_line\spac_lines_after_first_obeyed_line_a - \let\obeyedline\spac_lines_obeyed_line + \enforced\let\obeyedline\spac_lines_obeyed_line \activatespacehandler{\linesparameter\c!space}% \dostarttagged\t!line\empty - \GotoPar} % this will become a nice lowercased helper + \ignorepars} + % we could have states instead and handle option in there \def\spac_lines_after_first_obeyed_line_a % tzt two pass, like itemize {\linesparameter\c!command + \spac_lines_indent \linesparameter\c!left \glet\spac_after_first_obeyed_line\spac_lines_after_first_obeyed_line_b} \def\spac_lines_after_first_obeyed_line_b {\spac_lines_break \linesparameter\c!command + \spac_lines_indent \linesparameter\c!left} \def\spac_lines_obeyed_line @@ -120,7 +171,7 @@ \dostoptagged % can be a dummy one as we don't look ahead \par \dostarttagged\t!line\empty - \futurelet\next\spac_lines_between} + \futurelet\nexttoken\spac_lines_between} \unexpanded\def\spac_lines_stop {\dostoptagged @@ -131,10 +182,10 @@ \egroup} \def\spac_lines_between - {\ifx\next\spac_lines_stop + {\ifx\nexttoken\spac_lines_stop \donefalse \else - \doifelsemeaning\next\obeyedline % brrr + \doifelsemeaning\nexttoken\obeyedline % brrr {\donefalse\linesparameter\c!inbetween} {\donetrue\spac_after_first_obeyed_line}% \fi} |