summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/oberdiek/kvoptions.sty
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2007-10-25 00:14:21 +0000
committerKarl Berry <karl@freefriends.org>2007-10-25 00:14:21 +0000
commit3a17bfd79ba2527e8947328a85d40bb12a75cedb (patch)
tree14d6a30c876712ca634fc72acdb683873ff7a0a6 /Master/texmf-dist/tex/latex/oberdiek/kvoptions.sty
parent7d6ef8fd8f6ae3043dd7aa5c350ac30e8ee509ec (diff)
oberdiek update, kvoptions3.0 askinclude2.0 ... (24oct07)
git-svn-id: svn://tug.org/texlive/trunk@5275 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/oberdiek/kvoptions.sty')
-rw-r--r--Master/texmf-dist/tex/latex/oberdiek/kvoptions.sty465
1 files changed, 31 insertions, 434 deletions
diff --git a/Master/texmf-dist/tex/latex/oberdiek/kvoptions.sty b/Master/texmf-dist/tex/latex/oberdiek/kvoptions.sty
index 1a222383f32..329903bff66 100644
--- a/Master/texmf-dist/tex/latex/oberdiek/kvoptions.sty
+++ b/Master/texmf-dist/tex/latex/oberdiek/kvoptions.sty
@@ -26,7 +26,8 @@
%% This work consists of the main source file kvoptions.dtx
%% and the derived files
%% kvoptions.sty, kvoptions.pdf, kvoptions.ins, kvoptions.drv,
-%% example-mycolorsetup.sty, kvoptions-test1.tex.
+%% kvoptions-patch.sty, example-mycolorsetup.sty,
+%% kvoptions-test1.tex, kvoptions-test2.tex.
%%
%% No we don't need the option 'color'.
%% With color support option 'emphcolor' will dynamically
@@ -83,7 +84,7 @@
\fi
\expandafter\x\csname ver@kvoptions.sty\endcsname
\ProvidesPackage{kvoptions}%
- [2007/10/02 v2.8 Connects package keyval with LaTeX options (HO)]
+ [2007/10/18 v3.0 Keyval support for LaTeX options (HO)]
\expandafter\edef\csname KVO@AtEnd\endcsname{%
\catcode64 \the\catcode64\relax
}
@@ -103,6 +104,7 @@
\TMP@EnsureCode{41}{12}% )
\TMP@EnsureCode{42}{12}% *
\TMP@EnsureCode{44}{12}% ,
+\TMP@EnsureCode{45}{12}% -
\TMP@EnsureCode{46}{12}% .
\TMP@EnsureCode{47}{12}% /
\TMP@EnsureCode{58}{12}% :
@@ -134,7 +136,11 @@
\def\@currext{}%
}{}
\DeclareOption{debugshow}{\catcode\@ne=9 }
-\DeclareOption{patch}{\catcode\tw@=9 }
+\DeclareOption{patch}{%
+ \AtEndOfPackage{%
+ \RequirePackage{kvoptions-patch}[2007/10/18]%
+ }%
+}
\ProcessOptions\relax
\define@key{KVO}{family}{%
\expandafter\edef\csname KVO@family@%
@@ -506,17 +512,26 @@
\@ifundefined{KV@#1@\expandafter\KVO@getkey
\KVO@CurrentOption=\@nil}{%
}{%
- \edef\KVO@temp{%
-^^B \etex@unexpanded\expandafter{%
+ \ifx\KVO@Patch Y%
+ \edef\KVO@temp{%
+ \etex@unexpanded\expandafter{%
+ \KVO@temp
+ }%
+ ,%
+ \etex@unexpanded\expandafter{%
+ \KVO@CurrentOption
+ }%
+ ,%
+ }%
+ \@onelevel@sanitize\KVO@CurrentOption
+ \else
+ \edef\KVO@temp{%
\KVO@temp
-^^B }%
- ,%
-^^B \etex@unexpanded\expandafter{%
+ ,%
\KVO@CurrentOption
-^^B }%
- ,%
- }%
-^^B \@onelevel@sanitize\KVO@CurrentOption
+ ,%
+ }%
+ \fi
\@expandtwoargs\@removeelement\KVO@CurrentOption
\@unusedoptionlist\@unusedoptionlist
}%
@@ -538,7 +553,9 @@
\@ifundefined{%
KV@#1@\expandafter\KVO@getkey\CurrentOption=\@nil
}{%
-^^B \@onelevel@sanitize\CurrentOption
+ \ifx\KVO@Patch Y%
+ \@onelevel@sanitize\CurrentOption
+ \fi
\ifx\@unusedoptionlist\@empty
\global\let\@unusedoptionlist\CurrentOption
\else
@@ -621,428 +638,8 @@
\def\ProcessKeyvalOptions{%
\@ifstar{}\@gobble
}%
- \catcode\tw@=14 %
-\fi
-^^B\@gobbletwo
-\KVO@AtEnd\endinput
-\PackageInfo{kvoptions}{Patching LaTeX's option system}
-\begingroup\expandafter\expandafter\expandafter\endgroup
-\expandafter\ifx\csname eTeXversion\endcsname\relax
- \PackageWarningNoLine{kvoptions}{%
- Option `patch' ignored, because e-TeX is missing%
- }%
- \expandafter\endinput
-\fi
-\RequirePackage{etexcmds}
-\ifetex@unexpanded
-\else
- \PackageError{kvoptions}{%
- Could not find eTeX's \string\unexpanded.\MessageBreak
- Try adding \string\RequirePackage\string{etexcmds\string} %
- before \string\documentclass%
- }\@ehd
- \expandafter\endinput
-\fi
-\@ifpackageloaded{xkvltxp}{%
- \PackageWarningNoLine{kvoptions}{%
- Option `patch' cannot be used together with\MessageBreak
- package `xkvltxp' that is already loaded.\MessageBreak
- Therefore option `patch' will be ignored%
- }%
- \endinput
-}{}
-\def\@if@ptions#1#2#3{%
- \begingroup
- \KVO@normalize\KVO@temp{#3}%
- \edef\x{\endgroup
- \noexpand\@if@pti@ns{%
- \detokenize\expandafter\expandafter\expandafter{%
- \csname opt@#2.#1\endcsname
- }%
- }{%
- \detokenize\expandafter{\KVO@temp}%
- }%
- }%
- \x
-}
-\def\@pass@ptions#1#2#3{%
- \KVO@normalize\KVO@temp{#2}%
- \@ifundefined{opt@#3.#1}{%
- \expandafter\gdef\csname opt@#3.#1%
- \expandafter\endcsname\expandafter{%
- \KVO@temp
- }%
- }{%
- \expandafter\gdef\csname opt@#3.#1%
- \expandafter\expandafter\expandafter\endcsname
- \expandafter\expandafter\expandafter{%
- \csname opt@#3.#1\expandafter\endcsname\expandafter,\KVO@temp
- }%
- }%
-}
-\def\ProcessOptions{%
- \let\ds@\@empty
- \@ifundefined{opt@\@currname.\@currext}{%
- \let\@curroptions\@empty
- }{%
- \expandafter\expandafter\expandafter\def
- \expandafter\expandafter\expandafter\@curroptions
- \expandafter\expandafter\expandafter{%
- \csname opt@\@currname.\@currext\endcsname
- }%
- }%
- \@ifstar\KVO@xprocess@ptions\KVO@process@ptions
-}
-\def\KVO@process@ptions{%
- \@for\CurrentOption:=\@declaredoptions\do{%
- \ifx\CurrentOption\@empty
- \else
- \begingroup
- \ifx\@currext\@clsextension
- \toks@{}%
- \else
- \toks@\expandafter{\@classoptionslist,}%
- \fi
- \toks\tw@\expandafter{\@curroptions}%
- \edef\x{\endgroup
- \noexpand\in@{,\CurrentOption,}{,\the\toks@\the\toks\tw@,}%
- }%
- \x
- \ifin@
- \KVO@use@ption
- \expandafter\let\csname ds@\CurrentOption\endcsname\@empty
- \fi
- \fi
- }%
- \KVO@process@pti@ns
-}
-\def\KVO@xprocess@ptions{%
- \ifx\@currext\@clsextension
- \else
- \@for\CurrentOption:=\@classoptionslist\do{%
- \ifx\CurrentOption\@empty
- \else
- \KVO@in@\CurrentOption\@declaredoptions
- \ifin@
- \KVO@use@ption
- \expandafter\let\csname ds@\CurrentOption\endcsname\@empty
- \fi
- \fi
- }%
- \fi
- \KVO@process@pti@ns
-}
-\def\KVO@in@#1#2{%
- \in@false
- \begingroup
- \@for\x:=#2\do{%
- \ifx\x#1\relax
- \in@true
- \fi
- }%
- \edef\x{\endgroup
- \ifin@
- \noexpand\in@true
- \fi
- }%
- \x
-}
-\def\KVO@process@pti@ns{%
- \@for\CurrentOption:=\@curroptions\do{%
- \@ifundefined{ds@\KVO@SanitizedCurrentOption}{%
- \KVO@use@ption
- \default@ds
- }%
- \KVO@use@ption
- }%
- \@for\CurrentOption:=\@declaredoptions\do{%
- \expandafter\let\csname ds@\CurrentOption\endcsname\relax
- }%
- \let\CurrentOption\@empty
- \let\@fileswith@pti@ns\@@fileswith@pti@ns
- \AtEndOfPackage{\let\@unprocessedoptions\relax}%
-}
-\def\KVO@use@ption{%
- \begingroup
- \edef\x{\endgroup
- \noexpand\@removeelement{%
- \detokenize\expandafter{\CurrentOption}%
- }{%
- \detokenize\expandafter{\@unusedoptionlist}%
- }%
- }%
- \x\@unusedoptionlist
- \csname ds@\KVO@SanitizedCurrentOption\endcsname
-}
-\def\OptionNotUsed{%
- \ifx\@currext\@clsextension
- \xdef\@unusedoptionlist{%
- \ifx\@unusedoptionlist\@empty
- \else
- \detokenize\expandafter{\@unusedoptionlist,}%
- \fi
- \detokenize\expandafter{\CurrentOption}%
- }%
- \fi
-}
-\def\CurrentOption@SaveLevel{0}
-\def\ExecuteOptions{%
- \expandafter\KVO@ExecuteOptions
- \csname CurrentOption@\CurrentOption@SaveLevel\endcsname
-}
-\def\KVO@ExecuteOptions#1#2{%
- \let#1\CurrentOption
- \edef\CurrentOption@SaveLevel{%
- \the\numexpr\CurrentOption@SaveLevel+1%
- }%
- \@for\CurrentOption:=#2\do{%
- \csname ds@\CurrentOption\endcsname
- }%
- \edef\CurrentOption@SaveLevel{%
- \the\numexpr\CurrentOption@SaveLevel-1%
- }%
- \let\CurrentOption#1%
-}
-\def\KVO@fileswith@pti@ns#1[#2]#3[#4]{%
- \ifx#1\@clsextension
- \ifx\@classoptionslist\relax
- \KVO@normalize\KVO@temp{#2}%
- \expandafter\gdef\expandafter\@classoptionslist\expandafter{%
- \KVO@temp
- }%
- \def\reserved@a{%
- \KVO@onefilewithoptions{#3}[{#2}][{#4}]#1%
- \@documentclasshook
- }%
- \else
- \def\reserved@a{%
- \KVO@onefilewithoptions{#3}[{#2}][{#4}]#1%
- }%
- \fi
- \else
- \begingroup
- \let\KVO@temp\relax
- \let\KVO@onefilewithoptions\relax
- \let\@pkgextension\relax
- \def\reserved@b##1,{%
- \ifx\@nil##1\relax
- \else
- \ifx\relax##1\relax
- \else
- \KVO@onefilewithoptions{##1}[{\KVO@temp}][{#4}]%
- \@pkgextension
- \fi
- \expandafter\reserved@b
- \fi
- }%
- \edef\reserved@a{\zap@space#3 \@empty}%
- \edef\reserved@a{\expandafter\reserved@b\reserved@a,\@nil,}%
- \toks@{#2}%
- \def\KVO@temp{\the\toks@}%
- \edef\reserved@a{\endgroup \reserved@a}%
- \fi
- \reserved@a
-}
-\def\KVO@onefilewithoptions#1[#2][#3]#4{%
- \@pushfilename
- \xdef\@currname{#1}%
- \global\let\@currext#4%
- \expandafter\let\csname\@currname.\@currext-h@@k\endcsname\@empty
- \let\CurrentOption\@empty
- \@reset@ptions
- \makeatletter
- \def\reserved@a{%
- \@ifl@aded\@currext{#1}{%
- \@if@ptions\@currext{#1}{#2}{%
- }{%
- \begingroup
- \@ifundefined{opt@#1.\@currext}{%
- \def\x{}%
- }{%
- \edef\x{%
- \expandafter\expandafter\expandafter\strip@prefix
- \expandafter\meaning\csname opt@#1.\@currext\endcsname
- }%
- }%
- \def\y{#2}%
- \edef\y{\expandafter\strip@prefix\meaning\y}%
- \@latex@error{Option clash for \@cls@pkg\space #1}{%
- The package #1 has already been loaded %
- with options:\MessageBreak
- \space\space[\x]\MessageBreak
- There has now been an attempt to load it %
- with options\MessageBreak
- \space\space[\y]\MessageBreak
- Adding the global options:\MessageBreak
- \space\space
- \x,\y\MessageBreak
- to your \noexpand\documentclass declaration may fix this.%
- \MessageBreak
- Try typing \space <return> \space to proceed.%
- }%
- \endgroup
- }%
- }{%
- \@pass@ptions\@currext{#2}{#1}%
- \global\expandafter
- \let\csname ver@\@currname.\@currext\endcsname\@empty
- \InputIfFileExists
- {\@currname.\@currext}%
- {}%
- {\@missingfileerror\@currname\@currext}%
- \let\@unprocessedoptions\@@unprocessedoptions
- \csname\@currname.\@currext-h@@k\endcsname
- \expandafter\let\csname\@currname.\@currext-h@@k\endcsname
- \@undefined
- \@unprocessedoptions
- }%
- \@ifl@ter\@currext{#1}{#3}{%
- }{%
- \@latex@warning@no@line{%
- You have requested,\on@line, %
- version\MessageBreak
- #3' of \@cls@pkg\space #1,\MessageBreak
- but only version\MessageBreak
- `\csname ver@#1.\@currext\endcsname'\MessageBreak
- is available%
- }%
- }%
- \ifx\@currext\@clsextension\let\LoadClass\@twoloadclasserror\fi
- \@popfilename
- \@reset@ptions
- }%
- \reserved@a
-}
-\def\@unknownoptionerror{%
- \@latex@error{%
- Unknown option `\KVO@SanitizedCurrentOption' %
- for \@cls@pkg\space`\@currname'%
- }{%
- The option `\KVO@SanitizedCurrentOption' was not declared in %
- \@cls@pkg\space`\@currname', perhaps you\MessageBreak
- misspelled its name. %
- Try typing \space <return> %
- \space to proceed.%
- }%
-}
-\def\@@unprocessedoptions{%
- \ifx\@currext\@pkgextension
- \@ifundefined{opt@\@currname.\@currext}{%
- \let\@curroptions\@empty
- }{%
- \expandafter\let\expandafter\@curroptions
- \csname opt@\@currname.\@currext\endcsname
- }%
- \@for\CurrentOption:=\@curroptions\do{%
- \ifx\CurrentOption\@empty\else\@unknownoptionerror\fi
- }%
- \fi
-}
-\def\KVO@SanitizedCurrentOption{%
- \expandafter\strip@prefix\meaning\CurrentOption
-}
-\def\KVO@normalize#1#2{%
- \let\KVO@result\@empty
- \KVO@splitcomma#2,\@nil
- \let#1\KVO@result
-}
-\def\KVO@splitcomma#1,#2\@nil{%
- \KVO@ifempty{#1}{}{%
- \KVO@checkkv#1=\@nil
- }%
- \KVO@ifempty{#2}{}{\KVO@splitcomma#2\@nil}%
-}
-\def\KVO@ifempty#1{%
- \expandafter\ifx\expandafter\\\detokenize{#1}\\%
- \expandafter\@firstoftwo
- \else
- \expandafter\@secondoftwo
- \fi
-}
-\def\KVO@checkkv#1=#2\@nil{%
- \KVO@ifempty{#2}{%
- % option without value
- \edef\KVO@x{\zap@space#1 \@empty}%
- \ifx\KVO@x\@empty
- % ignore empty option
- \else
- % append to list
- \edef\KVO@result{%
- \etex@unexpanded\expandafter{\KVO@result},\KVO@x
- }%
- \fi
- }{%
- % #1: "key", #2: "value="
- % add key part
- \edef\KVO@result{%
- \etex@unexpanded\expandafter{\KVO@result},%
- \zap@space#1 \@empty
- }%
- \futurelet\@let@token\KVO@checkfirsttok#2 \@nil| = \@nil|\KVO@nil
- }%
-}
-\def\KVO@checkfirsttok{%
- \ifx\@let@token\bgroup
- % no space at start
- \expandafter\KVO@removelastspace\expandafter=%
- % "<value><spaceopt>= \@nil"
- \else
- \expandafter\KVO@checkfirstA
- \fi
-}
-\def\KVO@checkfirstA#1 #2\@nil{%
- \KVO@ifempty{#2}{%
- \KVO@removelastspace=#1 \@nil
- }{%
- \KVO@ifempty{#1}{%
- \KVO@removelastspace=#2\@nil
- }{%
- \KVO@removelastspace=#1 #2\@nil
- }%
- }%
-}
-\def\KVO@removelastspace#1 = \@nil|#2\KVO@nil{%
- \KVO@ifempty{#2}{%
- \edef\KVO@result{%
- \etex@unexpanded\expandafter{\KVO@result}%
- \etex@unexpanded\expandafter{\KVO@removegarbage#1\KVO@nil}%
- }%
- }{%
- \edef\KVO@result{%
- \etex@unexpanded\expandafter{\KVO@result}%
- \etex@unexpanded{#1}%
- }%
- }%
-}
-\def\KVO@removegarbage#1= \@nil#2\KVO@nil{#1}%
-\def\KVO@removeelement#1#2{%
- \begingroup
- \toks@={}%
- \@for\x:=#2\do{%
- \ifx\x\@empty
- \else
- \ifx\x#1\relax
- \else
- \edef\t{\the\toks@}%
- \ifx\t\@empty
- \else
- \toks@\expandafter{\the\toks@,}%
- \fi
- \toks@\expandafter{\the\expandafter\toks@\x}%
- \fi
- \fi
- }%
- \edef\x{\endgroup
- \def\noexpand#2{\the\toks@}%
- }%
- \x
-}
-\let\@@fileswith@pti@ns\KVO@fileswith@pti@ns
-\ifx\@fileswith@pti@ns\@badrequireerror
-\else
- \let\@fileswith@pti@ns\KVO@fileswith@pti@ns
\fi
-KVO@AtEnd
+\KVO@AtEnd
\endinput
%%
%% End of file `kvoptions.sty'.