summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/luatex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2022-12-22 21:14:07 +0000
committerKarl Berry <karl@freefriends.org>2022-12-22 21:14:07 +0000
commita929c43f3617889832fc4d9f7e343db740a3cb1f (patch)
tree97d3db551ce67f860b0e3791b90302a4f2edf85f /Master/texmf-dist/tex/luatex
parent283c13bc8af415603f39687dcfd37fafca3c0506 (diff)
tsvtemplate (22dec22)
git-svn-id: svn://tug.org/texlive/trunk@65333 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/luatex')
-rw-r--r--Master/texmf-dist/tex/luatex/tsvtemplate/tsvtemplate.sty3
-rw-r--r--Master/texmf-dist/tex/luatex/tsvtemplate/tsvtemplate.tex27
2 files changed, 30 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/luatex/tsvtemplate/tsvtemplate.sty b/Master/texmf-dist/tex/luatex/tsvtemplate/tsvtemplate.sty
new file mode 100644
index 00000000000..dc0102faacf
--- /dev/null
+++ b/Master/texmf-dist/tex/luatex/tsvtemplate/tsvtemplate.sty
@@ -0,0 +1,3 @@
+% An environment for \LaTeX.
+\ProvidesPackage{tsvtemplate} \RequirePackage{environ} \input tsvtemplate
+\NewEnviron{tsv template}[2][]{\applytemplate\^^I{#1}{\BODY}{#2}}
diff --git a/Master/texmf-dist/tex/luatex/tsvtemplate/tsvtemplate.tex b/Master/texmf-dist/tex/luatex/tsvtemplate/tsvtemplate.tex
new file mode 100644
index 00000000000..3e17dd3921b
--- /dev/null
+++ b/Master/texmf-dist/tex/luatex/tsvtemplate/tsvtemplate.tex
@@ -0,0 +1,27 @@
+% Do not read this file twice.
+\ifdefined\tsvloaded\expandafter\endinput\fi
+\chardef\tsvloaded\catcode`\& \catcode`\&=11
+
+% Implement a tsv reader.
+\long\def\applytemplate#1#2#3#4{\begingroup\openin\&r#4
+ \def\&w##1##2{\errmessage{#4: ##1 fields at line \the\&o\space
+ (##2 discarded)}}\catcode`#112 \errorcontextlines0 \ifx\&z#2\&z
+ {\catcode`\ 9 \global\read\&r to\&f}\else {\catcode`\,13
+ \&e\edef\scantextokens{,}{\Uchar`#1}\global\&d{&f}{#2}}\fi
+ \&e\&b\Uchar`#1{#3}}
+\long\def\&d#1#2{\&e\edef\csname#1\endcsname{\scantextokens{#2}}}
+\let\&e\expandafter\newcount\&o\newcount\&p\def\&q{\par}\newread\&r\def\&z{\&z}
+\def\&s#1{\&w{Not enough}{line}} \def\&t#1\&z#2{\&w{Too many}{fields}}
+\def\&a#1{\advance#11 } \long\def\&b#1#2{\&o0 \&p0
+ \def\&x##1#1{\ifx\&z##1\&z\let\&x\relax\else\&a\&p\&d{&\the\&p}{##1}\fi\&x}%
+ \&e\&x\&f#1#1\chardef\&m\&p \long\def\&x##1#1{\&a\&p \ifx\&z##1\&e\&s\else
+ \&d{\csname &\the\&p\endcsname}{##1}\ifnum\&p=\&m\&e\&y\fi\fi\&x}%
+ \long\def\&y\fi\&x##1#1{\fi{#2}\ifx\&z##1\relax\else\&e\&t\fi}\&p0
+ \def\&n{\read\&r to\&l \ifx\&q\&l\closein\&r\let\&n\relax
+ \else\&a\&o{\&e\&x\&l#1\&z#1}\fi\&n}\&n\endgroup}
+
+% A shorthand for Plain \TeX.
+\def\tsvtemplate{\futurelet\&px\&pa}
+\def\&pc{\&pb[]}\def\&pb[#1]{\applytemplate\^^I{#1}}
+\def\&pa{\ifx\&px[\&e\&pb\else\&e\&pc\fi}
+\catcode`\&=\tsvloaded