From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/contrib/tokenizer/tokenizer.sty | 127 +++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 macros/latex/contrib/tokenizer/tokenizer.sty (limited to 'macros/latex/contrib/tokenizer/tokenizer.sty') diff --git a/macros/latex/contrib/tokenizer/tokenizer.sty b/macros/latex/contrib/tokenizer/tokenizer.sty new file mode 100644 index 0000000000..b4fcb6e39e --- /dev/null +++ b/macros/latex/contrib/tokenizer/tokenizer.sty @@ -0,0 +1,127 @@ +% Copyright 2003 Sascha Herpers +% +% This file can be redistributed and/or modified under the terms +% of the LaTeX Project Public License Distributed from CTAN +% archives in directory macros/latex/base/lppl.txt; either +% version 1 of the License, or any later version. +% +% +% 2003-05-22 +% Sascha Herpers +% herpers@wiso.uni-koeln.de +% +%------------------------------------------------------------------------------ +% History +% (mm/dd/yy) change +% ----------------------------------------------------------------------------- +% 05/26/03 + added new options trim and notrim +% If 'trim' is set, each first token is stripped from leading and +% trailing spaces. 'notrim' is the default and leaves the token as +% is. +% + added new public command \TrimSpaces{} +%------------------------------------------------------------------------------ + \ProvidesPackage{tokenizer}[2003/05/26] + \RequirePackage{ifthen} + +% +% local variables +%------------------------------------------------------------------------------ +\def\SH@true{true} % used with trim/notrim +\def\SH@false{false} % used with trim/notrim + +% +% Options +%------------------------------------------------------------------------------ +\DeclareOption{trim}{\edef\SH@trimtokens{\SH@true}} % trim tokens +\DeclareOption{notrim}{\edef\SH@trimtokens{\SH@false}} % do not trim tokens +\ProcessOptions + +% +% \SH@GetTokens, +% Saves and in two commands. The names of the commands +% are derived from the value of \SH@FirstArgName and \SH@SecondArgName. +%------------------------------------------------------------------------------ +\def\SH@GetTokens#1,#2\@empty{% + \def\SH@token{#1} + \ifx\SH@trimtokens\SH@true % strip spaces if requested + \TrimSpaces\SH@token + \fi + \SH@DefineCommand{\SH@FirstArgName}{\SH@token} + \SH@DefineCommand{\SH@SecondArgName}{#2} +} + +% +% \SH@CheckTokenSep, +% Checks the arguments for the existence of a token separator. +% This Command must be called with a trailing comma! +% If a comma was found \SH@TokenValid is set to true, false otherwise. +% Example 1: ,, +% This is split into and , and because the second token is +% not empty \SH@TokenValid is set to true. +% Example 2: , +% This is split into and an empty second token and thus evaluates +% to false. +% Remark: If you omit the trailing comma when calling \SH@CheckTokenSep +% example 2 will fail to compile. +%------------------------------------------------------------------------------ +\def\SH@CheckTokenSep#1,#2\@empty{% + \def\SH@CTSArgTwo{#2}% + \ifx\SH@CTSArgTwo\@empty + \edef\SH@TokenValid{\SH@false} + \else + \edef\SH@TokenValid{\SH@true} + \fi +} + +% +% \GetTokens{}{}{} +% Splits into two tokens at the first encounter of a comma. +% The first token is saved in a newly created command with the name passed +% as and the second token likewise. +%------------------------------------------------------------------------------ +\newcommand\GetTokens[3]% + {% + % save the names of the commands to receive the separated tokens + \def\SH@FirstArgName{#1}% + \def\SH@SecondArgName{#2}% + % check for the token separator + \expandafter\SH@CheckTokenSep#3,\@empty% + \ifx\SH@TokenValid\SH@true + % separator found, split the source string + \expandafter\SH@GetTokens#3\@empty% + \else + % there was no separator, return the complete source string as + % first token + \def\SH@token{#3} + \ifx\SH@trimtokens\SH@true % strip spaces if requested + \expandafter\TrimSpaces\SH@token + \fi + \SH@DefineCommand{\SH@FirstArgName}{\SH@token} + \SH@DefineCommand{\SH@SecondArgName}{} + \fi + } + +% +% \DefineCommand{}{} +% Creates a new command \ with the value passed as second parameter. +%------------------------------------------------------------------------------ +\def\SH@DefineCommand#1#2{% + \expandafter\def\csname #1\endcsname{#2}% +} + +% +% \TrimSpaces{} +% This command removes leading and trailing spaces from . I found +% the original code on the web. The original author was Michael Downes, who +% provided the code as an answer to 'around the bend' question #15. +%------------------------------------------------------------------------------ +\catcode`\Q=3 +\def\TrimSpaces#1{% + \begingroup + \aftergroup\toks\aftergroup0\aftergroup{% + \expandafter\trimb\expandafter\noexpand#1Q Q}% + \global\edef#1{\the\toks0}% +} +\def\trimb#1 Q{\trimc#1Q} +\def\trimc#1Q#2{\afterassignment\endgroup \vfuzz\the\vfuzz#1} +\catcode`\Q=11 -- cgit v1.2.3