%% %% This is file `asciilist.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% asciilist.dtx (with options: `package') %% %% Copyright (C) 2014-2018 by Richard Grewe %% %% This file may be distributed and/or modified under the conditions of %% the LaTeX Project Public License, either version 1.2 of this license %% or (at your option) any later version. The latest version of this %% license is in: %% %% http://www.latex-project.org/lppl.txt %% %% and version 1.2 or later is part of all distributions of LaTeX version %% 1999/12/01 or later. %% \NeedsTeXFormat{LaTeX2e}[1999/12/01] \ProvidesPackage{asciilist} [2018/11/01 v2.2b Package for quickly creating nested lists] \RequirePackage{etoolbox} \RequirePackage{trimspaces} \newenvironment{AsciiList}[2][]{% \bgroup \ifstrempty{#1}% {\let\asclst@listenv=\asclst@defaultenvs}% {\def\asclst@listenv{#1}}% \gdef\asclst@itemchars{}% \ifstrequal{#2}{auto}% {\asclst@autocharstrue}% {\asclst@autocharsfalse\forcsvlist{\listadd\asclst@itemchars}{#2}}% \asclst@nlsetup\asclst@newline \def\input##1{% \everyeof{\noexpand}% \expandafter\asclst@newline\@@input##1\relax}% \global\asclst@curlevel=0\relax% \let\UP=\asclst@levelsup% \let\UPTO=\asclst@levelsupto% \asclst@ifnextnewline{}{\asclst@newline}% }{% \asclst@changelistlevel{\asclst@curlevel}{0}% \asclst@restorenewline% \egroup} \newcommand\AsciiListFromFile[3][]{% \AsciiList[#1]{#2}% \input{#3}% \endAsciiList} \newcommand\AsciiListFromFiles[3][]{% \AsciiList[#1]{#2}% \forcsvlist{\input}{#3}% \endAsciiList} {\catcode`\^^M=\active% \gdef\asclst@checknext#1#2{% \ifstrequal{#1}{#2}{\asclst@newlevel=\@tempcntb}{}}% \gdef\asclst@newline#1{% \asclst@newlevel=0\@tempcntb=0\relax% \forlistloop{\advance\@tempcntb by 1\asclst@checknext{#1}}% {\asclst@itemchars}% \ifnum\asclst@newlevel=0\ifasclst@autochars% \ifinlist{#1}{\asclst@autocharlist}{% \listgadd\asclst@itemchars{#1}% \asclst@newlevel=\@tempcntb% \advance\asclst@newlevel by 1\relax% }{}% \fi\fi% \ifnum\asclst@newlevel>0\relax% \def\asclst@@do{% \asclst@changelistlevel{\asclst@curlevel}{\asclst@newlevel}% \ifhmode\unskip\space\fi\asclst@@item}% \else% \def\asclst@@tmpone{#1}\def\asclst@@test{^^M}% \ifx\asclst@@test\asclst@@tmpone% \def\asclst@@do{\par #1}% \else\def\asclst@@do{\space #1}\fi% \fi\asclst@@do}% \gdef\asclst@ifnextnewline{\@ifnextchar^^M} } \newcount\asclst@curlevel \newcount\asclst@newlevel \newcommand\asclst@changelistlevel[2]{% \def\asclst@@envchanger{}% \ifnum#2<#1\relax \def\asclst@@last{}% \@tempcnta=0\relax \@tempcntb=#2 \advance\@tempcntb by 1\relax \def\do##1{\advance\@tempcnta by1\relax \ifnum\@tempcnta<\@tempcntb\else \ifnum\@tempcnta>#1\else \preto\asclst@@envchanger{\asclst@end ##1<>\@undefined}\fi\fi \def\asclst@@last{##1}}% \expandafter\docsvlist\expandafter{\asclst@listenv}% \advance\@tempcnta by1\ifnum\@tempcnta<\@tempcntb \@tempcnta=\@tempcntb\fi \loop \ifnum\@tempcnta>#1\else \advance\@tempcnta by 1% \epreto\asclst@@envchanger{\noexpand \asclst@end\expandonce\asclst@@last<>\noexpand\@undefined}% \repeat% \else\ifnum#2>#1\relax% \def\asclst@@last{}% \@tempcnta=0\relax \@tempcntb=#1\relax\advance\@tempcntb by 1\relax \def\do##1{\advance\@tempcnta by1\relax \ifnum\@tempcnta<\@tempcntb\else \ifnum\@tempcnta>#2\else \appto\asclst@@envchanger{\asclst@begin ##1<>\@undefined}\fi\fi \def\asclst@@last{##1}}% \expandafter\docsvlist\expandafter{\asclst@listenv}% \advance\@tempcnta by1\ifnum\@tempcnta<\@tempcntb \@tempcnta=\@tempcntb\fi \loop \ifnum\@tempcnta>#2\else \advance\@tempcnta by 1% \eappto\asclst@@envchanger{% \noexpand\asclst@begin \expandonce\asclst@@last<>\noexpand\@undefined}% \repeat% \fi\fi% \global\asclst@curlevel=#2% \asclst@@envchanger} \newcommand*\asclst@levelsup[1][1]{% \asclst@newlevel=\asclst@curlevel \advance\asclst@newlevel by-#1\relax \asclst@changelistlevel{\asclst@curlevel}{\asclst@newlevel}} \newcommand*\asclst@levelsupto[1]{% \ifnum\asclst@curlevel<#1\relax \PackageError{asciilist}{Cannot change level downwards!}{}% \else \asclst@changelistlevel{\asclst@curlevel}{#1}% \fi} \newenvironment{AsciiDocList}[1][]{% \bgroup \def\asclst@curnestlvl{}% \asclst@nlsetup\asclst@docnewline% \def\input##1{% \expandafter\asclst@docnewline\@@input##1\relax}% \def\asclst@levelchrs{}% \def\do##1{\asclst@parsechmapentry##1\@undefined}% \ifstrempty{#1}% {\expandafter\docsvlist\expandafter{\asclst@docdefaultenvs}}% {\docsvlist{#1}}% \let\UPTO=\asclst@changedoclistlevel% \asclst@ifnextnewline{}{\asclst@docnewline}% }{% \asclst@changedoclistlevel{}% \asclst@restorenewline% \egroup} \newcommand\AsciiDocListFromFile[2][]{% \AsciiDocList[#1]% \input{#2}% \endAsciiDocList} \newcommand\AsciiDocListFromFiles[2][]{% \AsciiDocList[#1]% \forcsvlist{\input}{#2}% \endAsciiDocList} {\catcode`\^^M=\active% \gdef\asclst@docnewline{% \everyeof{\noexpand}% \asclst@docnewline@i{}}% \gdef\asclst@docnewline@i#1#2{% \ifinlist{#2}{\asclst@levelchrs}% {\asclst@docnewline@i{#1#2}}% {\asclst@docnewline@ii{#1}{#2}}}% \gdef\asclst@docnewline@ii#1#2{% \ifstrempty{#1}{% \def\asclst@@tmpone{#2}\def\asclst@@test{^^M}% \ifx\asclst@@test\asclst@@tmpone% \def\asclst@@do{\par #2}% \else% \def\asclst@@do{\space #2}\fi% \asclst@@do% }{% \asclst@changedoclistlevel{#1}% \ifhmode\unskip\space\fi\asclst@@item #2% }}% } \def\asclst@parsechmapentry#1=#2\@undefined{% \listadd\asclst@levelchrs{#1}% \csdef{asclst@levelchr@#1}{#2}} \newcommand\asclst@changedoclistlevel[1]{% \def\asclst@@envchanger{}% \expandafter\asclst@changedoclistlevel@i\asclst@curnestlvl{}{}\@undefined #1{}{}\@undefined \asclst@@envchanger \gdef\asclst@curnestlvl{#1}} \def\asclst@changedoclistlevel@i#1#2\@undefined#3#4\@undefined{% \ifstrempty{#1#3}{}{% \ifstrequal{#1}{#3}% {\asclst@changedoclistlevel@i#2{}\@undefined#4{}\@undefined}% {\asclst@changedoclistlevel@ii#1#2{}\@undefined#3#4{}\@undefined}% }} \def\asclst@changedoclistlevel@ii#1#2\@undefined#3#4\@undefined{% \ifstrempty{#1#3}{}{% \ifstrempty{#1}{}{% \epreto\asclst@@envchanger{% \noexpand\asclst@end \csuse{asclst@levelchr@#1}<>\noexpand\@undefined}}% \ifstrempty{#3}{}{% \eappto\asclst@@envchanger{% \noexpand\asclst@begin \csuse{asclst@levelchr@#3}<>\noexpand\@undefined}}% \asclst@changedoclistlevel@ii#2{}\@undefined#4{}\@undefined}} \long\def\asclst@begin#1<#2>#3\@undefined{% \ifinlist{#1}{\asclst@registeredenvs}% {\bgroup \ifstrempty{#2}% {\@nameuse{asclst@env@#1@begin}}% {\@nameuse{asclst@env@#1@begin}[#2]}% \edef\asclst@@item{\csexpandonce{asclst@env@#1@item}}}% {% \ifstrempty{#2}% {\begin{#1}}% {\begin{#1}[#2]}% \def\asclst@@item{\item}}} \long\def\asclst@end#1<#2>#3\@undefined{% \ifinlist{#1}{\asclst@registeredenvs}% {\@nameuse{asclst@env@#1@end}\egroup}% {\end{#1}}} {\catcode`\^^M=\active% \gdef\asclst@nlsetup#1{% \let\asclst@orignewline=^^M% \catcode`\^^M\active% \let^^M=#1}% \gdef\asclst@restorenewline{\let^^M=\asclst@orignewline}% } \newif\ifasclst@autochars \newcommand*\AsciiListSetAutochars[1]{% \def\asclst@autocharlist{}% \forcsvlist{\listadd\asclst@autocharlist}{#1}} \AsciiListSetAutochars{-,*,+} \newcommand*\AsciiListSetEnvironments[1]{% \def\asclst@defaultenvs{#1}} \AsciiListSetEnvironments{itemize} \newcommand*\AsciiDocListSetEnvironments[1]{% \def\asclst@docdefaultenvs{#1}} \AsciiDocListSetEnvironments{*=itemize,+=enumerate,;=Description} \newcommand*\NewAsciiListEnv[3][]{% \newenvironment{#3}% {\begin{AsciiList}[#1]{#2}}% {\end{AsciiList}}% \csdef{#3FromFile}##1{\AsciiListFromFile[#1]{#2}{##1}}% \csdef{#3FromFiles}##1{\AsciiListFromFiles[#1]{#2}{##1}}% } \newcommand*\NewAsciiDocListEnv[2][\asclst@docdefaultenvs]{% \newenvironment{#2}% {\begin{AsciiDocList}[#1]}% {\end{AsciiDocList}}% \csdef{#2FromFile}##1{\AsciiDocListFromFile[#1]{##1}}% \csdef{#2FromFiles}##1{\AsciiDocListFromFiles[#1]{##1}}% } \def\asclst@registeredenvs{} \newcommand*\AsciiListRegisterEnv[4]{% \listadd\asclst@registeredenvs{#1}% \csdef{asclst@env@#1@begin}{#2}% \csdef{asclst@env@#1@end}{#3}% \csdef{asclst@env@#1@item}{#4}} \newcommand*\AsciiListRegisterDescEnv[1]{% \AsciiListRegisterEnv{#1}{\csuse{#1}}{\csuse{end#1}}% {\AsciiListEndOArg{\item}}} {\catcode`\^^M=\active% \gdef\AsciiListEndArg#1#2^^M{% \begingroup% \def\asclst@@result{#2}\trim@pre@space@in{\asclst@@result}% \edef\asclst@@result{% \endgroup\unexpanded{#1}{\expandonce{\asclst@@result}}}% \asclst@@result }% \gdef\AsciiListEndOArg#1#2^^M{% \begingroup% \def\asclst@@result{#2}\trim@pre@space@in{\asclst@@result}% \edef\asclst@@result{% \endgroup\unexpanded{#1}[{\expandonce{\asclst@@result}}]}% \asclst@@result }% } \AsciiListRegisterEnv{chapter}{}{}{\AsciiListEndArg{\chapter}} \AsciiListRegisterEnv{section}{}{}{\AsciiListEndArg{\section}} \AsciiListRegisterEnv{subsection}{}{}{\AsciiListEndArg{\subsection}} \AsciiListRegisterEnv{subsubsection}{}{}% {\AsciiListEndArg{\subsubsection}} \AsciiListRegisterEnv{section*}{}{}{\AsciiListEndArg{\section*}} \AsciiListRegisterEnv{subsection*}{}{}{\AsciiListEndArg{\subsection*}} \AsciiListRegisterEnv{subsubsection*}{}{}% {\AsciiListEndArg{\subsubsection*}} \AsciiListRegisterEnv{paragraph}{}{}{\AsciiListEndArg{\paragraph}} \AsciiListRegisterEnv{Heading}{\asclst@Heading}{\endasclst@Heading}% {\AsciiListEndArg{\csuse{\asclst@@sec}}} \AsciiListRegisterEnv{Heading*}{\asclst@Heading}{\endasclst@Heading}% {\AsciiListEndArg{\csuse{\asclst@@sec}*}} \newenvironment{asclst@Heading}[1][section]% {\bgroup\ifdefmacro{\asclst@@sec}% {\edef\asclst@@sec{\csuse{asclst@Sec@\asclst@@sec}}}% {\def\asclst@@sec{#1}}}% {\egroup} \newcommand\asclst@Sec@part{chapter} \newcommand\asclst@Sec@chapter{section} \newcommand\asclst@Sec@section{subsection} \newcommand\asclst@Sec@subsection{subsubsection} \newcommand\asclst@Sec@subsubsection{paragraph} \newcommand\asclst@Sec@paragraph{subparagraph} \AsciiListRegisterDescEnv{description} \AsciiListRegisterDescEnv{compactdesc} \AsciiListRegisterEnv{Description}{\description}{\enddescription}% {\AsciiListEndOArg{\asclst@BreakingDescItem}} \AsciiListRegisterEnv{CompactDesc}{\compactdesc}{\endcompactdesc}% {\AsciiListEndOArg{\asclst@BreakingDescItem}} \newcommand\asclst@BreakingDescItem[1][]{\item[{#1}]\leavevmode} \endinput %% %% End of file `asciilist.sty'.