diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/jlreq/jlreq-helpers.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/jlreq/jlreq-helpers.sty | 75 |
1 files changed, 44 insertions, 31 deletions
diff --git a/Master/texmf-dist/tex/latex/jlreq/jlreq-helpers.sty b/Master/texmf-dist/tex/latex/jlreq/jlreq-helpers.sty index 9532669172a..9bf28042489 100644 --- a/Master/texmf-dist/tex/latex/jlreq/jlreq-helpers.sty +++ b/Master/texmf-dist/tex/latex/jlreq/jlreq-helpers.sty @@ -162,14 +162,14 @@ % もしカンマがない場合は\ifjlreq@resultがfalseになる. \newcommand*{\jlreq@helper@dividebycomma}[1]{\jlreq@helper@dividebycomma@#1,\jlreq@endmark} \def\jlreq@helper@dividebycomma@#1,#2\jlreq@endmark{% - \jlreq@remove@spaceandbracket{#1}{\jlreq@resulta}% - \jlreq@remove@spaceandbracket{#2}{\jlreq@resultb}% + \jlreq@helper@trim{#1}{\jlreq@resulta}% + \jlreq@helper@trim{#2}{\jlreq@resultb}% \ifx\jlreq@resultb\@empty\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi{% \jlreq@resultfalse }{% \jlreq@resulttrue \expandafter\def\expandafter\jlreq@resultb\expandafter{\jlreq@helper@removelastcomma#2\jlreq@endmark}% - \expandafter\jlreq@remove@spaceandbracket\expandafter{\jlreq@resultb}{\jlreq@resultb}% + \expandafter\jlreq@helper@trim\expandafter{\jlreq@resultb}{\jlreq@resultb}% }% } \def\jlreq@helper@removelastcomma#1,\jlreq@endmark{#1} @@ -245,6 +245,7 @@ % キー指定しないkeyval(独自実装) % \jlreq@parsekeyval@nokey{<action>}{<parse対象>} % action内では#1=key, #2=val +% <parse対象>は一回だけ展開される. \newcommand{\jlreq@parsekeyval@nokey}[2]{% \begingroup \def\jlreq@do{}% @@ -265,11 +266,10 @@ \long\def\jlreq@parsekeyval@nokey@iii#1#2{% \jlreq@remove@spaceandbracket{#1}{\jlreq@tempa}% \jlreq@remove@spaceandbracket{#2}{\jlreq@tempb}% - \ifx\jlreq@tempa\@empty\expandafter\@gobble\else\expandafter\@firstofone\fi - {% - \edef\@tempa{\noexpand\jlreq@parsekeyval@nokey@iv{\expandonce{\jlreq@tempb}}{\expandonce{\jlreq@tempa}}}% - \@tempa - }% + \ifx\jlreq@tempb\@empty\else + \edef\@tempa{\noexpand\jlreq@parsekeyval@nokey@iv{\expandonce{\jlreq@tempb}}{\expandonce{\jlreq@tempa}}}% + \@tempa + \fi \jlreq@parsekeyval@nokey@i } \long\def\jlreq@parsekeyval@nokey@iv#1#2{% @@ -280,29 +280,36 @@ % #1の先頭のスペースを削除し,#2に入れる.ただし#1={ X}の時は" X"が入る. \def\jlreq@do#1{% #1 = " "として後で実行 - \long\def\jlreq@remove@spaceandbracket##1##2{% - \begingroup - \def\jlreq@tempa{}% - \futurelet\jlreq@nextchar\jlreq@remove@spaceandbracket@i##1\jlreq@uniqtoken#1\jlreq@uniqtoken\jlreq@endmark - \edef\jlreq@do{\noexpand\edef\noexpand##2{\noexpand\unexpanded{\expandonce{\jlreq@tempa}}}}% - \expandafter\endgroup - \jlreq@do + \long\def\jlreq@helper@trim##1##2{\edef##2{\jlreq@helper@trim@i{##1}}} + \long\def\jlreq@helper@trim@i##1{% + \jlreq@iffirsttoken{##1}{#1}% + % 先頭スペースの除去.{}を外さないために\jlreq@uniqtokenを前後にいったん挟む. + {\jlreq@helper@trim@ii##1\jlreq@uniqtoken\jlreq@endmark}% + % 後方スペースの除去.先頭に\jlreq@uniqtokenを加えて{}が外れるのを防ぐ. + {\jlreq@helper@trim@iii\jlreq@uniqtoken##1\jlreq@uniqtoken#1\jlreq@uniqtoken\jlreq@endmark}% } - \def\jlreq@remove@spaceandbracket@i{% - \ifx#1\jlreq@nextchar\expandafter\jlreq@remove@spaceandbracket@ii\else\expandafter\jlreq@remove@spaceandbracket@iii\fi - }% - \def\jlreq@remove@spaceandbracket@ii#1{\futurelet\jlreq@nextchar\jlreq@remove@spaceandbracket@i}% - \long\def\jlreq@remove@spaceandbracket@iii##1#1\jlreq@uniqtoken##2\jlreq@endmark{% - \jlreq@ifempty{##2}{% - \expandafter\jlreq@remove@spaceandbracket@iv\expandafter{\jlreq@removelastuniqtoken##1}% - }{% - \jlreq@remove@spaceandbracket@iv{##1}% - }% + \long\def\jlreq@helper@trim@ii#1##1\jlreq@endmark{% + \expandafter\expandafter\expandafter\jlreq@helper@trim@i\jlreq@helper@trim@vi\jlreq@uniqtoken##1\jlreq@endmark + } + \long\def\jlreq@helper@trim@iii##1#1\jlreq@uniqtoken##2\jlreq@endmark{% + \jlreq@ifempty{##2}% + {\expandafter\jlreq@helper@trim@iv\jlreq@helper@trim@v##1\jlreq@endmark}% + {\jlreq@helper@trim@iii##1\jlreq@uniqtoken#1\jlreq@uniqtoken\jlreq@endmark}% }% + \long\def\jlreq@helper@trim@iv##1{\expandafter\unexpanded\expandafter{\@gobble ##1}} + \long\def\jlreq@helper@trim@v##1\jlreq@uniqtoken\jlreq@endmark{{##1}} + \long\def\jlreq@helper@trim@vi##1\jlreq@uniqtoken\jlreq@endmark{\expandafter{\@gobble ##1}} } \jlreq@do{ } -\long\def\jlreq@removelastuniqtoken#1\jlreq@uniqtoken{#1} -\long\def\jlreq@remove@spaceandbracket@iv#1{\edef\jlreq@tempa{\unexpanded{#1}}} + +\long\def\jlreq@remove@spaceandbracket#1#2{% + \begingroup + \jlreq@helper@trim{#1}{\jlreq@tempa}% + \edef\jlreq@do{\unexpanded{\jlreq@remove@spaceandbracket@{#2}}\expandonce{\jlreq@tempa}\noexpand\jlreq@endmark}% + \expandafter\endgroup + \jlreq@do +} +\long\def\jlreq@remove@spaceandbracket@#1#2\jlreq@endmark{\edef#1{\unexpanded{#2}}} % \jlreq@switch{str}{ % {str}{abcd} @@ -507,11 +514,17 @@ \def\jlreq@for@noexpand#1:={\@for#1:=\@empty} -\def\jlreq@swap#1#2{% - \let\jlreq@swaptoken=#1% +\def\jlreq@helper@swap#1#2{% + \let\jlreq@helper@swaptoken=#1% \let#1=#2% - \let#2=\jlreq@swaptoken - \let\jlreq@swaptoken=\@undefined + \let#2=\jlreq@helper@swaptoken + \let\jlreq@helper@swaptoken=\@undefined +} +\def\jlreq@helper@swap@register#1#2{% + \edef\jlreq@helper@swaptoken{\the#1}% + #1=#2% + #2=\jlreq@helper@swaptoken\relax + \let\jlreq@helper@swaptoken=\@undefined } \endinput |