Files
crossrefenum/test/main-test.tex
2025-08-06 08:38:39 +02:00

533 lines
13 KiB
TeX
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

\long\def\iflatex#1{%
\expandafter\ifx\csname usepackage\endcsname\relax\else #1\fi
}
\long\def\ifcontext#1{%
\expandafter\ifx\csname contextformat\endcsname\relax\else #1\fi
}
\iflatex{\documentclass{article}}
\input ../tex/crossrefenum
\crfnmOriginalCatcodeAt=\catcode`\@
\catcode`\@=11
\input config-formats
\input format-specific-defs
\catcode`\@=\crfnmOriginalCatcodeAt
\input config-crossrefenum
%\tracingmacros=1
%\tracingcommands=2
%\tracingoutput=2
\showboxbreadth=100
\showboxdepth=50
\def\withvisiblespace{\tt}
\catcode`\@=11
\ifcontext{
\def\crfnm@line{Line}
\def\crfnm@pageline{Pageline}
\crfnm@newListFrom[\crfnm@simpleRefTypes][\crfnm@line] -> \crfnm@simpleRefTypes
\crfnm@newListFrom[\crfnm@doubleRefTypes][\crfnm@pageline] -> \crfnm@doubleRefTypes
\let\crfnm@PagelinePrimary\crfnm@page
\let\crfnm@PagelineSecondary\crfnm@line
\def\crfnm@LineRef#1{\in[lr:b:#1]}
\def\crfnm@getLineNumber#1{\directlua{get_raw_ref_number('lr:b:#1', 'linenumber')}}
\def\crfnmLine{l. }
\def\crfnmLines{ll.}
\def\crfnmLineBeforeLastInSecond{, }
\def\crfnmPagelineSubtypesSep{}
\def\crfnmPagelinePrintFirstPrefix{once}
\def\crfnmLineFormatInSecond#1{\crfnmSuperscript{#1}}
\def\crfnmLinePrintPrefixInSecond{no}
}
\catcode`\@=\crfnmOriginalCatcodeAt
\parindent=0pt
\long\def\crfnmtestenum#1#2#3#4#5{%
\def\crfnmtestdesc{#1}
\def\crfnmempty{}
\ifx\crfnmtestdesc\crfnmempty\else
\vskip2.5\bigskipamount
\vbox{%
\lineskiplimit=10000pt\lineskip=1ex
\parskip=2ex
{\it #1}
\everypar={\leftskip=1em}
\raggedright Enumeration: \allowbreak{\tt\detokenize{#2}}
Reference type: {\tt #3}
Expected: {\withvisiblespace [#5]}
Result: \hbox to 1.3em{}{\withvisiblespace [\crossrefenum[#3][#4]{#2}]}
}%
\fi
}
\long\def\crfnmheader#1{\vskip3\bigskipamount{\crfnmsc #1}\par\nobreak}
\def\crfnmverbatim#1{{\tt\detokenize{#1}}}
\iflatex{
\begin{document}
\begin{english}
}
\ifcontext{
\starttext
\language[en]
}
\vfill
\crfnmheader{All references point to different pages}
\crfnmtestenum{Nothing}
{}
{page}
{withprefix}
{}
\crfnmtestenum{One single page}
{{matthaeus-14}}
{page}
{withprefix}
{p. 2}
\crfnmtestenum{One single page without prefix}
{{matthaeus-18}}
{page}
{noprefix}
{2}
\crfnmtestenum{Two single pages}
{{matthaeus-14}{matthaeus-025}}
{page}
{withprefix}
{pp. 2 and 4}
\crfnmtestenum{Two single pages without prefix}
{{matthaeus-19}{matthaeus-0210}}
{page}
{noprefix}
{2 and 4}
\crfnmtestenum{More than two single pages}
{{matthaeus-14}{matthaeus-026}{matthaeus-0223}}
{page}
{withprefix}
{pp. 2, 4 and 6}
\crfnmtestenum{One single page again}
{{matthaeus-027}}
{page}
{withprefix}
{p. 4}
\crfnmtestenum{One range}
{{matthaeus-14 to matthaeus-23}}
{page}
{withprefix}
{pp. 2-3}
\crfnmheader{Some references point to the same page}
\crfnmtestenum{One range that returns a single page}
{{matthaeus-027 to matthaeus-029}}
{page}
{withprefix}
{p. 4}
\crfnmtestenum{Two identical pages}
{{matthaeus-026}{matthaeus-028}}
{page}
{withprefix}
{p. 4}
\crfnmtestenum{A range followed by a reference on its end page}
{{matthaeus-2 to matthaeus-15}{matthaeus-16}}
{page}
{withprefix}
{pp. 1-2}
\crfnmtestenum{Two ranges with a common boundary}
{{matthaeus-5 to matthaeus-21}{matthaeus-25 to matthaeus-0214}}
{page}
{withprefix}
{pp. 1-5}
\crfnmtestenum{Two ranges with a common boundary, the second one having boths ends on a single page}
{{matthaeus-5 to matthaeus-21}{matthaeus-25 to matthaeus-022}}
{page}
{withprefix}
{pp. 1-3}
\crfnmtestenum{A range followed by a reference to its end page and a reference to another page}
{{matthaeus-2 to matthaeus-15}{matthaeus-16}{matthaeus-0216}}
{page}
{withprefix}
{pp. 1-2 and 5}
\crfnmtestenum{A range followed by two references to its end page}
{{matthaeus-2 to matthaeus-15}{matthaeus-16}{matthaeus-18}}
{page}
{withprefix}
{pp. 1-2}
\crfnmtestenum{A range preceded by a reference to its begin page}
{{matthaeus-1}{matthaeus-2 to matthaeus-15}}
{page}
{withprefix}
{pp. 1-2}
\crfnmheader{Some references point to successive pages}
\crfnmtestenum{Successive pages forming a range}
{{matthaeus-2}{matthaeus-15}{matthaeus-22}{matthaeus-025}}
{page}
{withprefix}
{pp. 1-4}
\crfnmtestenum{A range followed by a page that extends it}
{{matthaeus-2 to matthaeus-15}{matthaeus-22}}
{page}
{withprefix}
{pp. 1-3}
\crfnmtestenum{A range preceded by a page that extends it}
{{matthaeus-1}{matthaeus-14 to matthaeus-0210}}
{page}
{withprefix}
{pp. 1-4}
\crfnmtestenum{A range extended by another range}
{{matthaeus-2 to matthaeus-15}{matthaeus-22 to matthaeus-025}}
{page}
{withprefix}
{pp. 1-4}
\crfnmheader{References to notes}
\crfnmtestenum{One note}
{{note-Aminadab-undecim}}
{note}
{withprefix}
{n. 1}
\crfnmtestenum{Two notes}
{{note-autem-non}{note-generatio-Persarum}}
{note}
{withprefix}
{nn. 2 and 4}
\crfnmtestenum{Two consecutive notes}
{{note-autem-non}{note-generationes-quis}}
{note}
{withprefix}
{nn. 2 and 3}
\crfnmtestenum{Three consecutive notes}
{{note-congregans-conteram}{note-Israhel-mittam}{note-regem-Theman}}
{note}
{withprefix}
{nn. 1, 2 and 3}
\crfnmheader{References to notes with page number}
\crfnmtestenum{One note with page number}
{{note-Babylonis-Libani}}
{pagenote}
{withprefix}
{p. 2, n. 1}
\def\crfnmPagenoteOrder{inverted}
\crfnmtestenum{Same thing, but with \crfnmverbatim{\crfnmPagenoteOrder} set to {\tt inverted}}
{{note-quaerat-clamate}}
{pagenote}
{withprefix}
{n. 3, p. 5}
\def\crfnmPagenoteOrder{normal}
\crfnmtestenum{Four notes on different pages}
{{note-Aminadab-undecim}{note-generationes-quis}{note-regem-Theman}}
{pagenote}
{withprefix}
{p. 1, n. 1, p. 2, n. 3 and p. 4, n. 3}
\def\crfnmPagenotePrintFirstPrefix{once}
\crfnmtestenum{Same thing, but with \crfnmverbatim{\crfnmPagenotePrintFirstPrefix} set to {\tt once}}
{{note-Aminadab-undecim}{note-generationes-quis}{note-regem-Theman}}
{pagenote}
{withprefix}
{pp. 1, n. 1, 2, n. 3 and 4, n. 3}
\def\crfnmPagenotePrintFirstPrefix{always}
\crfnmtestenum{Several notes on the same page}
{{note-et-et}{note-puerum-et}{note-habitavit-quae}}
{pagenote}
{withprefix}
{p. 6, nn. 1, 3 and 4}
\crfnmtestenum{Same thing, but followed by an isolated reference on another page}
{{note-somnis-hic}{note-cum-haec}{note-quaerat-clamate}}
{pagenote}
{withprefix}
{p. 3, nn. 1 and 2 and p. 5, n. 3}
\def\crfnmPagenoteOrder{inverted}
\crfnmtestenum{Same thing, but with \crfnmverbatim{\crfnmPagenoteOrder} set to {\tt inverted}}
{{note-somnis-hic}{note-cum-haec}{note-quaerat-clamate}{note-obitum-mittite}}
{pagenote}
{withprefix}
{nn. 1 and 2, p. 3 and nn. 3 and 4, p. 5}
\def\crfnmPagenoteOrder{normal}
\iflatex{
\crfnmheader{Reledmac}
\crfnmtestenum{Simple reference to a line}
{{vulgate-12}}
{edline}
{withprefix}
{l. 8}
\crfnmtestenum{Simple reference to page and line}
{{vulgate-14}}
{edpageline}
{withprefix}
{p. 8\crfnmSuperscript{12}}
\crfnmtestenum{Several lines on different pages}
{{vulgate-15}{vulgate-24}{vulgate-215}}
{edpageline}
{withprefix}
{pp. 8\crfnmSuperscript{13}, 9\crfnmSuperscript{15} and 11\crfnmSuperscript{13}}
\crfnmtestenum{A range of lines on a single page}
{{vulgate-22 to vulgate-23}}
{edpageline}
{withprefix}
{p. 9\crfnmSuperscript{9-11}}
\crfnmtestenum{A range of lines on two different pages}
{{vulgate-24 to vulgate-212}}
{edpageline}
{withprefix}
{pp. 9\crfnmSuperscript{15}-11\crfnmSuperscript{6}}
\def\crfnmEdpagelineGroupSubtypes{yes}
\crfnmtestenum{A range of lines on two different pages
with \crfnmverbatim{\crfnmEdpagelineGroupSubtypes} set to {\tt yes}}
{{vulgate-11 to vulgate-215}}
{edpageline}
{withprefix}
{pp. 8-11\crfnmSuperscript{4-13}}
\def\crfnmEdpagelineGroupSubtypes{no}
\crfnmtestenum{Two ranges of lines on the same page that should be merged}
{{vulgate-211 to vulgate-212}{vulgate-213 to vulgate-217}}
{edpageline}
{withprefix}
{p. 11\crfnmSuperscript{4-19}}
\crfnmtestenum{Two ranges of lines on the same page that should not be merged}
{{vulgate-219 to vulgate-221}{vulgate-224 to vulgate-227}}
{edpageline}
{withprefix}
{p. 12\crfnmSuperscript{1-6, 12-19}}
\crfnmtestenum{Two ranges of lines spanning across pages that should be merged}
{{vulgate-214 to vulgate-223}{vulgate-224 to vulgate-233}}
{edpageline}
{withprefix}
{pp. 11\crfnmSuperscript{10}-13\crfnmSuperscript{15}}
\crfnmtestenum{Two ranges of lines on consecutive pages,
the beginning of the second being at the same line number as the end of the first + 1.
They should not be merged, since the document is lineated per page.}
{{vulgate-2 to vulgate-6}{vulgate-14 to vulgate-18}}
{edpageline}
{withprefix}
{pp. 7\crfnmSuperscript{3-11} and 8\crfnmSuperscript{12-20}}
\def\crfnmEdlineNumberingContinuousAcrossDocument{yes}
\crfnmtestenum{Same as the above, but with
\crfnmverbatim{\crfnmEdlineNumberingContinuousAcrossDocument} set to {\tt yes}.
We make {\em crossrefenum} believe that the first range ends at the end of a page
and the second begins at the first line of the following page.}
{{vulgate-2 to vulgate-6}{vulgate-14 to vulgate-18}}
{edpageline}
{withprefix}
{pp. 7\crfnmSuperscript{3}-8\crfnmSuperscript{20}}
\def\crfnmEdlineNumberingContinuousAcrossDocument{no}
\crfnmtestenum{A range of lines whose page boundaries are identical to those of the preceding and following references}
{{vulgate-3}{vulgate-7 to vulgate-20}{vulgate-25}}
{edpageline}
{withprefix}
{pp. 7\crfnmSuperscript{5}, 7\crfnmSuperscript{13}-9\crfnmSuperscript{5} and 9\crfnmSuperscript{17}}
}
\ifcontext{
\crfnmheader{References to lines}
{See the tests on reledmac in the file produced by LaTeX for a more extensive coverage.}\vskip\baselineskip
\crfnmtestenum{Simple reference to a line}
{{soph-2}}
{line}
{withprefix}
{l. 3}
\crfnmtestenum{Simple reference to page and line}
{{soph-5}}
{pageline}
{withprefix}
{p. 7\crfnmSuperscript{9}}
\crfnmtestenum{Several lines on different pages}
{{soph-7}{soph-13}{soph-012}}
{pageline}
{withprefix}
{pp. 7\crfnmSuperscript{12}, 8\crfnmSuperscript{5} and 10\crfnmSuperscript{3}}
\crfnmtestenum{A range of lines on a single page}
{{soph-04 to soph-06}}
{pageline}
{withprefix}
{p. 9\crfnmSuperscript{5-9}}
\crfnmtestenum{A range of lines on two different pages}
{{soph-14 to soph-014}}
{pageline}
{withprefix}
{pp. 8\crfnmSuperscript{8}-10\crfnmSuperscript{6}}
\crfnmtestenum{}
{}
{}
{}
{}
\crfnmtestenum{}
{}
{}
{}
{}
}
\vfill\penalty-10000
\crfnmheader{With a comma-delimited list of references instead of a list of groups}
\crfnmtestenum{One single page without an inner group}
{matthaeus-14}
{page}
{withprefix}
{p. 2}
\crfnmtestenum{Three references without spaces}
{matthaeus-14,matthaeus-025,matthaeus-0223}
{page}
{withprefix}
{pp. 2, 4 and 6}
\crfnmtestenum{Three references with spaces}
{matthaeus-14, matthaeus-025, matthaeus-0223}
{page}
{withprefix}
{pp. 2, 4 and 6}
\crfnmtestenum{With a double type}
{note-Aminadab-undecim, note-generationes-quis, note-regem-Theman}
{pagenote}
{withprefix}
{p. 1, n. 1, p. 2, n. 3 and p. 4, n. 3}
\crfnmheader{Key-value configuration interface}
Heavily modified setup for {\tt page}, {\tt note} and {\tt pagenote} with \crfnmverbatim{\crfnmsetup}
\crfnmsetup[page]{
sg = {page },
pl = {pages },
delimiter = {; },
before last reference = { AND },
range separator = { to },
collapsable? = yes
}
\crfnmsetup[note]{
sg = {note },
pl = {notes },
print prefix when second subtype? = no,
delimiter when second subtype = +,
before last reference when second subtype = { And },
formatting when second subtype = \textit % single-arg macro
}
\crfnmsetup[pagenote]{
delimiter = {; },
before last reference = { AND },
range separator = { to },
subtypes separator = { in },
print prefix of first subtype = once,
group subtypes? = no,
continuous numbering? = no
}
\crfnmtestenum{Simple type}
{matthaeus-14, matthaeus-025, matthaeus-0223}
{page}
{withprefix}
{pages 2; 4 AND 6}
\crfnmtestenum{Simple type with a range}
{{matthaeus-2 to matthaeus-15}{matthaeus-16}}
{page}
{withprefix}
{pages 1 to 2}
\crfnmtestenum{Double type}
{note-Aminadab-undecim, note-generationes-quis, note-congregans-conteram, note-Israhel-mittam, note-regem-Theman}
{pagenote}
{withprefix}
{pages 1 in \textit{1}; 2 in \textit{3} AND \textit{4} in \textit{1+2 And 3}}
\crfnmsetup[page]{
collapsable? = no
}
\crfnmtestenum{Pages are not collapsable anymore!}
{{matthaeus-2}{matthaeus-15}{matthaeus-22}{matthaeus-025}}
{page}
{withprefix}
{pages 1; 2; 3 AND 4}
\iflatex{\end{english}}
\ifcontext{
\language[latin]
\setupinterlinespace[big]
}
\vfill\penalty-10000
\crfnmresetpage
\input data-common
\iflatex{\input data-reledmac}
\input data-lines
\ifcontext{\let\crfnmtheend\stoptext}
\iflatex{\def\crfnmtheend{\end{document}}}
\crfnmtheend