summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/gmutils/gmcommand.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex/gmutils/gmcommand.sty')
-rw-r--r--Master/texmf-dist/tex/latex/gmutils/gmcommand.sty217
1 files changed, 155 insertions, 62 deletions
diff --git a/Master/texmf-dist/tex/latex/gmutils/gmcommand.sty b/Master/texmf-dist/tex/latex/gmutils/gmcommand.sty
index 574667d67bf..f83fc8a2c17 100644
--- a/Master/texmf-dist/tex/latex/gmutils/gmcommand.sty
+++ b/Master/texmf-dist/tex/latex/gmutils/gmcommand.sty
@@ -2,7 +2,7 @@
%% \iffalse ^^A we skip the debug setting
\IfFileExists{\string~/bin/gen_and_xela}{\errorcontextlines=1000 }{}
%% \fi
-%% ^^A $Id: TheUltimateMaster.gmd,v 0.297 2011/02/02 18:13:11 natror Exp natror $
+%% ^^A $Id: TheUltimateMaster.gmd,v 0.352 2011/10/12 15:19:42 natror Exp natror $
%% This is file “gmcommand.sty” generated with the DocStrip utility.
%%
%%
@@ -13,7 +13,7 @@
%%
%% Copyright ©
%% by Grzegorz ‘Natror’ Murzynowski
-%% natror (at) o2 (dot) pl
+%% natror (at) gmail (dot) com
%%
%% This program is subject to the LaTeX Project Public License.
%% See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html
@@ -23,20 +23,20 @@
%%
%%
%%
-%% For the documentation please refer to the file(s)
+%% For documentation please refer to the file(s)
%% gmutils.{gmd,pdf}.
%%
%%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{gmcommand}
- [2010/10/24 v0.993 definition of powerful \string \DeclareCommand \string &al. (GM)]
+ [2011/10/12 v0.996 definition of \string \DeclareCommand \string &al. based on the ancient xparse (pre-expl3) (GM)]
%%
%%
%% ^^A\typeout{\unexpanded{#4}}%%
-\RequirePackage{gmbase} % we require the tricky low-level macros.
+\RequirePackage{gmbase} % we require the low-level macros.
\unless\ifcsname ifgmu@quiet\endcsname
\Name\newif {ifgmu@quiet}% % it has to be at least (at highest) in
@@ -44,7 +44,6 @@
% % \pk{gmutils.sty} (a bug fix)}
\fi
- %
\unless\ifdefined\@temptokenb
\newtoks\@temptokenb
@@ -142,9 +141,11 @@
{\@dc@arguments{#2}#1\the\@dc@arguments}%
}
+\newtoks \@dc@ParsedSpecs
+
\def\@dc@ResetParseAuxilia{%
%
- \emptify\@dc@ParsedSpecs{}%
+ \@dc@ParsedSpecs={}%
%
\c@dc@catchernum\z@ % the count of catchers
\c@dc@argnum\z@ % the count of arguments (inner arity) (it may be
@@ -198,15 +199,15 @@
\def\@dc@argtypes{%
=\gobblespace \loop \lostwax \SameAs \Scope
- AaBbCcDdGgKkMmOo% ^^U Ôô
- QqSs*TtŤťUuǓǔWw%
+ AaBbCcDdGgKkMmOo%
+ QqSs*TtUuWw%
\drs
}
-\def\@dc@drses{\drs}
+\def\@dc@drses{\drs} % decimal respecting space
\@ifXeTeX
-{\addtomacro\@dc@argtypes{ďĎ}%
+{\addtomacro\@dc@argtypes{ďĎŤťǓǔÔô}%
\addtomacro\@dc@drses{ďĎ}%
}
{}
@@ -241,6 +242,7 @@
{\@dc@addtoparsed@BareSpace }
{}%
%
+ %
\gmu@ifsw {@dc@long@}%
{\@dc@addtospecs@bare{>P}}
{}%
@@ -399,6 +401,11 @@
\@dc@DeclareDefault Q {\NoValue}
+\@ifXeTeX {%
+ \@dc@DeclareDefault Ô{\NoValue}%
+}
+{}
+
\@dc@DeclareDefault U {\NoValue}
\long\def\@dc@maybe@expandafter #1{%
@@ -418,9 +425,9 @@
\long\def\@dc@addtospecs #1{%
\@dc@maybe@expandafter {#1}%
- {\@xa \addtomacro \@xa\@dc@ParsedSpecs\@xa{\@xa{#1}}%
+ {\@xa \addtotoks \@xa\@dc@ParsedSpecs\@xa{\@xa{#1}}%
}%
- {\addtomacro\@dc@ParsedSpecs{{#1}}}%
+ {\addtotoks\@dc@ParsedSpecs{{#1}}}%
}
\long\def\dc@addtoParsed@ #1{%
@@ -429,7 +436,7 @@
}
\long\def\@dc@addtospecs@bare #1{%
- \addtomacro\@dc@ParsedSpecs{#1}%
+ \addtotoks\@dc@ParsedSpecs{#1}%
}
\long\def\@dc@addtotoks@bare #1{%
@@ -465,11 +472,13 @@
\Restore@Macro\@dc@addargum}%
}
+\StoreMacro@nocat\gmu@passbraced
+
\pdef\@dc@BareSpaceArg{%
- \let \@dc@Loop@CareOfSpace \@dc@Loop@CareOfSpace@NoBraces
+ \let \gmu@passbraced \gmu@passbracedNotSp
\def\@dc@addargum {%
\Restore@Macro\@dc@addargum
- \Restore@Macro\@dc@Loop@CareOfSpace
+ \Restore@Macro\gmu@passbraced
\@dc@addargum
}%
}
@@ -537,6 +546,7 @@
{\BareSpace}
{\@dc@BareSpace@true}
%
+ %
\gmu@EatCases
{\IgnInfo{gmcommand}{while parsing arg specifiers}{#1}}%
\gmu@ESAC
@@ -638,7 +648,7 @@
\@dc@AliasPLower T
\long\def\ArgumentCatcher@Ť #1#2#3% as in |›…@T|
-{%
+{% one-token catcher that respects space.
\ArgumentCatcher@Loop
{StrX}{\any}{#1}{\any}{}{1}{#2}{% empty eacher
}{#3}%
@@ -694,7 +704,7 @@
% perform matching. \rrthis
%
\gmu@ifempty{#5}%
- {\gmu@if {strings} {\any #4}%
+ {\gmu@if {strings} {\none #4}%
{\@dc@Loop@addallfalse\@dc@Loop@drainalltrue}%
{\@dc@Loop@addalltrue\@dc@Loop@drainallfalse}%
}% of if |#5| empty
@@ -872,6 +882,27 @@
\@dc@AliasPLower Q
+\@ifXeTeX {%
+ \long\def\ArgumentCatcher@Ô
+ #1% list
+ #2% default (|\NoValue| by default, as in previous versions).
+ {%
+ \@dc@BareSpaceArg
+ \ArgumentCatcher@Loop
+ {str}%
+ \any
+ { #1}% note the space before |#1|—settheory sum of |#1| and drainers.
+ \any
+ { }% we ignore spaces—it's a legacy setting, maybe we'll optionise
+ % it in the future
+ \m@ne % we allow any number of tokens
+ {#2}% default, by default |\NoValue|, as defined in line \ref{Q-arg deft.}
+ {}% empty eacher
+ }%
+
+ \@dc@AliasPLower Ô
+
+}{}% of if \XeTeX
\def\ArgumentCatcher@D{% decimal argument (useful for dates e.g.)
\ArgumentCatcher@Q
@@ -890,7 +921,7 @@
{StrX}%
\any
{-+0123456789}%
- \none
+ \any
{}%
\m@ne
{#1}%
@@ -1067,7 +1098,7 @@
{\ArgumentCatcher@G{#2}{##1}}%
\Name\lpdef{ArgumentCatcher@P\strip@bslash{#1}}%
##1% default value
- {\ArgumentCatcher@G{#2}{##1}}%
+ {\ArgumentCatcher@PG{#2}{##1}}% »P« was missing. Fixed 2011/03/22, 16.14.
%
\gmu@if {cat}{a\@nx#1}%
{\@dc@LowerAliases #1}{}%
@@ -1139,13 +1170,11 @@
\@dc@AliasCatcher {PScope} \Scope
-\def\NoValue{-NoValue-}
-
-\long\def\IfNoValueTF#1{% % \chgs{2008/12/1 v0.98 the \pk{xparse} tests for
+\long\def\gmuIfNoValueTF#1{% % \chgs{2008/12/1 v0.98 the \pk{xparse} tests for
% the presence of value redefined and much simplified (43 \CS'es
- % less). Moreover, they are now fully expandable: \cmd\IfNoValueTF,
- % \cmd\IfNoValueT, \cmd\IfNoValueF, \cmd\IfValueTF, \cmd\IfValueT,
- % \cmd\IfValueF}
+ % less). Moreover, they are now fully expandable: \cmd\gmuIfNoValueTF,
+ % \cmd\gmuIfNoValueT, \cmd\gmuIfNoValueF, \cmd\gmuIfValueTF, \cmd\gmuIfValueT,
+ % \cmd\gmuIfValueF}
%
% \chgs{2010/05/27 v0.993 bug fix: order of \cmd\NoValue and
% \cs{@firstofmany} reversed after a catastrophal |{11}{11}| argument}
@@ -1153,17 +1182,17 @@
\else\afterfi\@secondoftwo
\fi}
-\long\def\IfNoValueT#1#2{\IfNoValueTF{#1}{#2}\@empty}
+\long\def\gmuIfNoValueT#1#2{\gmuIfNoValueTF{#1}{#2}\@empty}
-\long\def\IfNoValueF#1#2{\IfNoValueTF{#1}\@empty{#2}}
+\long\def\gmuIfNoValueF#1#2{\gmuIfNoValueTF{#1}\@empty{#2}}
-\long\def\IfValueTF#1#2#3{\IfNoValueTF{#1}{#3}{#2}}
+\long\def\gmuIfValueTF#1#2#3{\gmuIfNoValueTF{#1}{#3}{#2}}
-\long\def\PutIfValue#1{\IfValueT{#1}{#1}}
+\long\def\gmuPutIfValue#1{\gmuIfValueT{#1}{#1}}
-\let\IfValueT\IfNoValueF
+\let\gmuIfValueT\gmuIfNoValueF
-\let\IfValueF\IfNoValueT
+\let\gmuIfValueF\gmuIfNoValueT
\long\pdef\IfLong#1{%\
% \begin{enumargs}
@@ -1324,7 +1353,7 @@
\@dc@buckstopshere % it's the sentinel of parsing. Since the test
%
\@xa \Name \@xa \addtomacro \@xa \@dc@specsname
- \@xa {\@xa{\@dc@ParsedSpecs}}%
+ \@xa {\@xa{\the\@dc@ParsedSpecs}}%
%
\@xa\Name\@xa\addtomacro\@xa\@dc@specsname
\@xa{\@xa{\the \c@dc@argnum}}%
@@ -1360,7 +1389,7 @@
}
\def\@dc@DCprefixQlist{\global\protected\outer\long
- \relax % for the very tricky case when |\@dc@global| may be
+ \relax % for the somewhat perverse case when |\@dc@global| may be
!lL.qQiIwW\sphack\envhack}
\long\def\ShowCommand #1{%
@@ -1428,7 +1457,7 @@
{\unexpanded{#1}}%
{%
\@nx\@dc@addargum{{%
- \IfValueTF{#2}{%
+ \gmuIfValueTF{#2}{%
\gmu@if{@dc@xadefault@ii@}{}%
{\@xau{#2}}%
{\unexpanded{#2}}%
@@ -1441,6 +1470,16 @@
\@dc@global@ % set properly before |\@dc@ParseNextSpecifier #3⁄<buck>|.
\if P\@dc@long@letter\relax\long\fi
\gmu@tempa
+ %
+ \@dc@addtospecs {#1}%
+ %
+ \gmuIfValueTF{#2}{%
+ \gmu@if{@dc@xadefault@ii@}{}%
+ {\@xa\@dc@addtospecs\@xa{#2}}%
+ {\@dc@addtospecs{#2}}%
+ }
+ {\@xa\@dc@addtospecs\@xa{\@dc@K@defaultrepl}}%
+ %
% Now we clean up and continue construction of arguments parser. \nostanza
\@dc@ParseNextSpecifier
}% of |\@dc@define@K|
@@ -1454,8 +1493,8 @@
%
#2 >Pm % list of tokens to match for/against iteration
%
- >i T{\drain \drop \Drain \Drop}
- #3 T{\any \none }{\none} % the “sign” of matching for draining
+ >i T{\drain \drop \Drain \Drop \lost \Lost}
+ #3 T{\any \none }{\any} % the “sign” of matching for draining
%
#4 b{} % list of drainers, empty by default
%
@@ -1510,7 +1549,7 @@
\DeclareCommand\grab@LostWax {
>iT{\lost \Lost}
- #1 b{\lostwax@NoValue}
+ #1 b{\lostwax@NoVal}
>iT {\count \ubound}
#2 D{1}
>iT{\endlost \EndLost}
@@ -1519,7 +1558,7 @@
%
\def\@dc@LostWaxA{>iw}%
%
- \gmu@ifdetokens {\lostwax@NoValue}{#1}
+ \gmu@ifdetokens {\lostwax@NoVal}{#1}
{%
% if no particular value of the “lost wax” is provided, we assume
% the same as the “until” delimiter(s).
@@ -1712,7 +1751,7 @@
}{%
\def\gmu@DeclareEnvironment@resa{\envhack}% we add the information we define an
% environment.
- \IfValueT{#2}%
+ \gmuIfValueT{#2}%
{\addtomacro\gmu@DeclareEnvironment@resa{#2}}% we pass all the ‘prefixes’ to
% \incs{Decl\+are\+Comm\+and}
% \stanza
@@ -1814,7 +1853,7 @@
% to the redefinition of
% \cs{verb} in \pk{xlxtra} 2008/07/29}
\@ifXeTeX{%
- \IfValueT{#1}{\PassOptionsToPackage{#1}{fontspec}}%
+ \gmuIfValueT{#1}{\PassOptionsToPackage{#1}{fontspec}}%
\@ifpackageloaded{gmverb}%
{%
\Store@Macro\verb
@@ -1860,6 +1899,10 @@
{\spaceskip=\glueexpr\dimexpr#2*#1\relax plus\dimexpr #3*#1\relax
minus\dimexpr#4*#1\relax\relax}
+\pdef\unsetspaceskip{%
+ \spaceskip=\z@skip
+}
+
\def\makestarlow{%
\begingroup\lccode`\~=`\*\lowercase{%% \Define**
\endgroup\def~{\gmu@lowstar}}% 2009/10/19 |\let| changed to
@@ -1887,9 +1930,9 @@
#2 B{2\baselineskip}% (2) optional (formerly mandatory) long version of
% required room on a page
>is
- #3 B{} % (3) what if the room is enough
+ #3 >PB{} % (3) what if the room is enough
>is
- #4 B{\newpage} % (4) what if there's to little room on a page
+ #4 >PB{\newpage} % (4) what if there's to little room on a page
}{%
% \chgs{2009/03/18 v0.98 made \eTeX-ish}
% \chgs{2009/05/25 v0.98 made ifthenelse-like with ‘then’ and ‘else’
@@ -1903,7 +1946,7 @@
\gmu@pageremain
<%
\dimexpr
- (\IfValueTF{#1}{#1\baselineskip}{#2})*1%
+ (\gmuIfValueTF{#1}{#1\baselineskip}{#2})*1%
\endexpr
%
% \CH{2010/06/28 v0.993 I added |(›…)*1| to assure that |\relax|
@@ -1913,14 +1956,25 @@
\fi
*%
\ifdim \gmu@pageremain >-1sp
- 1\else 0%
+ 1% if the room left on current page is nonnegative,
+ % then we indeed are on current page so “enough” and
+ % “not enough” does make sense: Enough is enough.
+ \else 0% otherwise we are on next page (or further) and assume
+ % there is enough room for our purpose.
\fi
- >\z@
- }% of condition
- {\typeout{@@@@@ not enough page \on@line}%
- #4%
- }%
- {#3}%
+ *%
+ \ifdim \pagegoal <\maxdimen
+ 1 % if there are some boxes on current page, so checking room
+ % does make sense.
+ \else 0% otherwise (no boxes on current page) assume there's
+ % enough room
+ \fi
+ >\z@
+ }% of condition
+ {\typeout{@@@@@ not enough page \on@line}%
+ #4%
+ }%
+ {#3}%
}
\long\def\gmu@LC@LetInners
@@ -2032,7 +2086,7 @@
#2% a decimal number
{\edef\gmu@SC@grouplevel{%
\the\numexpr
- \IfValueTF{#1}%
+ \gmuIfValueTF{#1}%
{\currentgrouplevel#1#2+1}{#2}%
}% of the grouplevel-carrying macro
}
@@ -2219,7 +2273,7 @@
#2 b % enlargement (dim(expr)) for baselineskip (if absent, |#1| is used)
}{\edef\gmu@tempa{%
\@nx\fontsize{\the\dimexpr\f@size pt+#1}%
- {\the\dimexpr 1\baselineskip+ \IfValueTF{#2}{#2}{#1}}%
+ {\the\dimexpr 1\baselineskip+ \gmuIfValueTF{#2}{#2}{#1}}%
}\gmu@tempa\selectfont
}
@@ -2229,7 +2283,7 @@
\gobblespace
}{\edef\gmu@tempa{%
\@nx\fontsize{\the\dimexpr #1\dimexpr\f@size pt\relax}%
- {\the\dimexpr \IfValueTF{#2}{#2}{#1}\baselineskip}%
+ {\the\dimexpr \gmuIfValueTF{#2}{#2}{#1}\baselineskip}%
}\gmu@tempa\selectfont
}
@@ -2239,12 +2293,16 @@
\DeclareCommand\bihyphen{
O{*} % token that'll make the discretionary hyphen |\-| allow other break-points
}{%
- \DeclareCommand\gmu@discretionaryhyphen{T{#1}ca}{%
- \IfValueT{##2}{%
+ \DeclareCommand\gmu@discretionaryhyphen{%
+ T{#1}%
+ G{&&}%
+ a
+ }{%
+ \gmuIfValueT{##2}{%
\gmu@ifempty{##2}{}{%
\def\gmu@bihyphen@char{##2}}%
}%
- \IfValueT{##3}{%
+ \gmuIfValueT{##3}{%
\gmu@ifempty{##3}{}{%
\def\gmu@bihyphen@corr{##3}}%
}%
@@ -2253,9 +2311,9 @@
% hyphenation of the word's before- and
% after-parts or forbid it (if absent, then we take
% |\discretionary|).
- \IfValueTF{##1}\discre\discretionary
+ \gmuIfValueTF{##1}\discre\discretionary
{% before break
- \IfValueTF{##2}
+ \gmuIfValueTF{##2}
{%
\gmu@ifempty{##2}{\gmu@bihyphen@char}{##2}%
}%
@@ -2265,7 +2323,7 @@
\fi}%
}% end of before break
{%after break
- \IfValueT{##3}{%
+ \gmuIfValueT{##3}{%
\gmu@ifempty{##3}{\gmu@bihyphen@corr}{##3}%
}%
}%
@@ -2293,9 +2351,9 @@
}{% not in \XeTeX\ we use legacy |D| arg.\ specifiers:
\DeclareCommand\gmshowlists {
>iT{\depth}
- Ď{1}%
+ D{1}%
>iT{\breadth}
- Ď{10000000}
+ D{10000000}
}%
}
{\tracingonline=\@ne
@@ -2333,6 +2391,41 @@
\DeclareCommand \IgnorePars {m Q{\par}} {#1}
+\DeclareCommand\putpenalty {=}
+{%
+ \gmu@iflastglue
+ {\@tempskipa=\lastskip
+ \mode@skip -\@tempskipa
+ \penalty \@tempcnta
+ \mode@skip \@tempskipa
+ }%
+ {\gmu@iflastkern
+ {\@temdima=\lastkern
+ \kern-\@temdima
+ \penalty \@tempcnta
+ \kern \@temdima
+ }
+ {%
+ \penalty\@tempcnta
+ }%
+ }%
+}
+
+\newskip \gmu@TrashSkip
+
+\pdef \mode@skip {%
+ \ifvmode \vskip
+ \else
+ \ifhmode \hskip
+ \else
+ \ifmmode \mskip
+ \else
+ \gmu@TrashSkip
+ \fi
+ \fi
+ \fi
+}
+
\endinput
%%