diff options
Diffstat (limited to 'macros/latex/contrib/skeyval/tex/skeyval-view.sty')
-rw-r--r-- | macros/latex/contrib/skeyval/tex/skeyval-view.sty | 425 |
1 files changed, 425 insertions, 0 deletions
diff --git a/macros/latex/contrib/skeyval/tex/skeyval-view.sty b/macros/latex/contrib/skeyval/tex/skeyval-view.sty new file mode 100644 index 0000000000..a09335b6b0 --- /dev/null +++ b/macros/latex/contrib/skeyval/tex/skeyval-view.sty @@ -0,0 +1,425 @@ +%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++% +% This is file 'skeyval-view.sty', version 1.3, 2013/05/15. % +% % +% This package and accompanying files may be distributed and/or % +% modified under the conditions of the LaTeX Project Public License, % +% either version 1.3 of this license or any later version. The latest % +% version of this license is in http://www.latex-project.org/lppl.txt % +% and version 1.3 or later is part of all distributions of LaTeX % +% version 2005/12/01 or later. % +% % +% The LPPL maintenance status of this software is 'author-maintained'. % +% % +% This software is provided 'as it is', without warranty of any kind, % +% either expressed or implied, including, but not limited to, the % +% implied warranties of merchantability and fitness for a particular % +% purpose. % +% % +% The following files constitute the skeyval bundle and must be % +% distributed as a whole: % +% % +% README, skeyval.sty, skeyval-core.tex, skeyval-for.tex, % +% skeyval-view.sty, skeyval-ltxpatch.sty, skeyval-ltxcmds.tex, % +% skeyval-pstkey.sty, skeyval-pstkey.tex, skeyval-testclass.cls, % +% skeyval-testpkg.sty, skeyval-pokayoke1, skeyval-pokayoke2, % +% skeyval-view-pokayoke1. % +% % +% Copyright (c) 2010-2013 Ahmed Musa (amusa22@gmail.com). % +%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++% + +\begingroup +\catcode035 06 % # +\catcode064 11 % @ +\catcode123 01 % { +\catcode125 02 % } +\catcode044 12 % , +\def\skv@prova{\endgroup + \def\do##1,{% + \ifx\do##1\else + \catcode##1\string=\the\catcode##1\relax + \expandafter\do + \fi + }% + \edef\skv@view@restorecodes{\do35,64,123,125,61,59,13,\do,}% +} +\skv@prova + +\edef\skv@view@restorecodes{% + \unexpanded\expandafter{\skv@view@restorecodes}% + \endlinechar\the\endlinechar\relax +} +\endlinechar13 % +\catcode035 06 % # +\catcode064 11 % @ +\catcode123 01 % { +\catcode125 02 % } +\catcode061 12 % = +\catcode044 12 % , +\def\do#1=#2,{% + \ifx\do#1\else + \edef\skv@view@restorecodes{% + \unexpanded\expandafter{\skv@view@restorecodes}% + \catcode#1=\the\catcode#1\relax + }% + \catcode#1=#2\relax + \expandafter\do + \fi +} +\do 032=10,033=12,036=03,038=04,040=12,041=12,042=12,043=12,% + 059=12,045=12,047=12,058=12,063=12,091=12,093=12,126=13,\do=,% + +\NeedsTeXFormat{LaTeX2e}[2011/06/27] +\ProvidesPackage{skeyval-view} + [2013/05/15 v1.3 Viewer utility for skeyval package (AM)] +\@ifpackageloaded{skeyval}{}{\RequirePackage{skeyval}} +\directkeys*{% + .path=SKVV/skvview, + .holder prefix=skvv@, + .initialize keys after define=false, + .every unknown option={ + \PackageWarning{skeyval-view}{Unknown option '\CurrentOption' ignored}% + }, + .new options={ + % LaTeX's options processor will zap the option names. So these keys + % can't have spaces between their parts. + .ord/{xcolor-options,load-xcolor-with}// + \edef\skvv@xcoloroptions{\unexpanded{#1}} + \skvstripouterbraces{1}\skvv@xcoloroptions, + .bool/tabulate/true + }, + .execute options={ + tabulate=true,xcolor-options=false,load-xcolor-with=false + }, + .copy class options and process options +} +\skvnewregisters\toks{\skvv@toksa} +\AtEndOfPackage{% + \let\ifskvv@tempsw\ifskvv@tabulate + \skvv@tabulatefalse + \skvdisablekeys[SKVV]{skvview}{xcolor-options,load-xcolor-with}% + \let\ifskvv@tabulate\ifskvv@tempsw +} + +\@ifpackageloaded{longtable}{}{\RequirePackage{longtable}} +\@ifpackageloaded{xcolor}{}{\RequirePackage[\skvv@xcoloroptions]{xcolor}} +\skvnewbools[skvv@]{colii,coliii,coliv,colv} +\newwrite\skvv@out +\skvnewnumbers[skvv@]{depth,nra} + +\directkeys*{ + .path=SKVV/skvview, + .holder prefix=skvv@, + .initialize keys after define=false, + .define keys={ + .ord/{file,wcolsep,weol}/\@nil/ + \skvcsedef{skvv@\skvcurrentkey}{\unexpanded{#1}} + \skvaftercsname{\skvstripouterbraces{1}}{skvv@\skvcurrentkey} + \skvaftercsname\skvdespacecontent{skvv@\skvcurrentkey} + , + .ord/{prefix,family,type,default,columns}/\@nil/ + \skvcsedef{skvv@\skvcurrentkey}{\unexpanded{#1}} + \skvaftercsname{\skvstripouterbraces{1}}{skvv@\skvcurrentkey} + \skvaftercsname\skvcsvnormalize{skvv@\skvcurrentkey} + , + .bool/{view,vlabels,wlabels}/true, + .ord/length of default/20/\def\skvv@lengthofdefa{#1}, + .cmd/color/black, + }, + .set keys={ + prefix,family,type,default,file,columns,wcolsep=&,weol=\\, + view,vlabels=false,wlabels=false,color,length of default + }, + .links={ + show/view, + key type/type, + {prefixes,only those with prefix,only those with prefixes}/prefix, + {families,only those in family,only those in families}/family, + {defaults,only those with default,only those with defaults}/default, + view output/view, + write to file/file, + {view labels,show labels}/vlabels, + {view wlabels,show wlabels}/wlabels, + wend of line/weol, + wcolumn separation/wcolsep, + word length of default/length of default + }, + .style={ + only those without default/default=[none], + }, +} + +% Use \setupviewkeys to change viewing specifications without actually +% displaying (or writing to file) the key list: +% +\skvrobustdef*\setupviewkeys{\skvsetkeys[SKVV]{skvview}} + +\let\skvv@db\@empty +\skvrobustdef*\skvv@dotabulate#1#2#3{% + \ifskvv@tabulate + \begingroup + \edef\skv@tempa{\detokenize{#3}}% + \skv@getshortformofcontent\skvv@lengthofdefa\skv@tempa\skv@ival + \skvxaddtolist{,}\skvv@db{% + #1=\ifx\skvcurrentprefix\@empty\else + \skvcurrentprefix\fi=\skvcurrentfamily=#2=\skv@ival + }% + \skvaftergroupdef\skvv@db\endgroup + \fi +} +\protected\def\skv@ordkey@a#1#2[#3]#4{% + \skvifstrcmpTF{#3}{^skv^}{% + \skvv@dotabulate{#2}{ordinary}{[none]}% + }{% + \skv@definedefault{#2}{#3}% + \skvv@dotabulate{#2}{ordinary}{#3}% + }% + % Pointers on key #2 have been stripped in \skv@ordkey. + % The pointer '.hp' may be used to set a holder prefix for the key. + \skvxifinTF{\detokenize{.hp}}{\detokenize{#4}}{% + \def\skv@prova##1.hp##2##3\skv@ord@nil{% + \let\skv@gobble@or@iden\@iden + \edef\skv@hp{\unexpanded{##2}}% + \edef\skv@callback{\unexpanded{##1##3}}% + }% + \skv@prova#4\skv@ord@nil + }{% + \let\skv@gobble@or@iden\@gobble + \edef\skv@callback{\unexpanded{#4}}% + }% + \csname skvcs#1def\endcsname{\skv@header#2.@cbk}{% + % This can be called in #3 access the value of ordinary key. + % No prefix is used here, to reduce macro name: + \skv@gobble@or@iden{\skvcslet{\skv@hp#2}\noexpand\skvcurrentvalue}% + \skvexpandonce\skv@callback + }% +} +\protected\def\skv@cmdkey#1#2[#3]#4{% + \skv@strippointersfromkey{#2}% + \skvifdefboolTF{skv@st}{% + \skv@definedefault\skvcurrentkey{#3}% + \skvv@dotabulate\skvcurrentkey{command}{#3}% + }{% + \skvv@dotabulate\skvcurrentkey{command}{[none]}% + }% + % This is to allow the key name to be expanded before possibly zapping + % spaces in key name: + \edef\skv@prova{#1\skvcurrentkey}% + \edef\skv@prova{\expandafter\skv@zapornot\expandafter + {\expandafter\skv@zapsw\expandafter}\expandafter{\skv@prova}}% + \skvcsedef{\skv@header\skvcurrentkey.@cbk}{% + \skvcslet{\skv@prova}\noexpand\skvcurrentvalue + \unexpanded{#4}% + }% +} +\protected\def\skv@choicekey@g{% + \skvcommaparse*\skv@currlist\skv@prova{% + \skvexpbracenext\skv@strippointersfromkey\skv@prova + \ifx\skv@default\skv@rej + \skvv@dotabulate\skvcurrentkey{choice}{[none]}% + \else + \skvexpanded{% + \noexpand\skvv@dotabulate + {\skvxonce\skvcurrentkey}{choice}{\skvxonce\skv@default}% + \noexpand\skv@definedefault + {\skvxonce\skvcurrentkey}{\skvxonce\skv@default}% + }% + \fi + \skvcsedef{\skv@header\skvcurrentkey.@cbk}{% + \skvcslet{\skv@hp\skvcurrentkey}\noexpand\skvcurrentvalue + \the\skv@temptoks + }% + }% +} +\protected\def\skv@boolkey@c#1#2#3#4{% + \if\skv@typetogkey + \skvdeftog{\skv@zapornot{\skv@zapsw}{#2}}% + \else + \skvcsnewif{\skv@zapornot{\skv@zapsw}{#2}}% + \fi + \skvifdefboolTF{skv@st}{% + \skv@definedefault{#1}{#3}% + \skvv@dotabulate{#1}{\if\skv@typetogkey toggle\else bool\fi}{#3}% + }{% + \skvv@dotabulate{#1}{\if\skv@typetogkey toggle\else bool\fi}{[none]}% + }% + \edef\skv@tempa##1##2{% + \noexpand\skv@sttrue + \ifskv@pl\noexpand\skv@pltrue\else\noexpand\skv@plfalse\fi + \skv@checkchoice[\noexpand\skv@value]{##1}{true,false}##2% + }% + \skv@temptoks\expandafter{\skv@tempa{##1}{#4}}% + \skvcsedef{\skv@header#1.@cbk}{\the\skv@temptoks}% +} +% #2=styles, #3=default, #4=callback +\protected\def\skv@appendslots@a#1#2[#3]#4{% + \skvcommaparse{#1}\skv@prova{% + \skvexpbracenext\skv@strippointersfromkey\skv@prova + \skvexpanded{% + \skvifstrcmpTF{#3}{^skv^}{% + % When using \skvaddslots, signal keys will otherwise be added + % in the database twice (while treating prepended and appended + % slots). + \ifskv@addslots@appending\else + \skvv@dotabulate{\skvcurrentkey}{slot/style}{[none]}% + \fi + }{% + \skv@definedefault{\skvcurrentkey}{\unexpanded{#3}}% + \ifskv@addslots@appending\else + \skvv@dotabulate{\skvcurrentkey}{slot/style}{\unexpanded{#3}}% + \fi + }% + \skv@appendslots@b{\skvcurrentkey}\unexpanded{{#2}{#4}}% + }% + }% +} + +\skvbuildmacrostack\skvv@state{% + \do\skvv@prefix\do\skvv@family\do\skvv@type\do\skvv@default + \do\skvv@file\do\skvv@columns\do\skvv@wcolsep\do\skvv@weol + \do\skvv@color\do\ifskvv@view\do\ifskvv@vlabels\do\ifskvv@wlabels +}{2} + +\skvnewdef*\skvv@@view{% + \ifskvv@tabulate + 0\ifskvv@view 0\else 1\fi + \else + 01% + \fi +} +\skvrobustdef*\skvv@skvview#1{% + \skvsetkeys[SKVV]{skvview}{#1}% + \ifx\skvv@default\@nnil\else\@onelevel@sanitize\skvv@default\fi + \ifx\skvv@columns\@nnil + \skvsetnumber\skvv@nra5\relax + \skvv@coliitrue\skvv@coliiitrue\skvv@colivtrue\skvv@colvtrue + \else + \skvsetnumber\skvv@nra\@ne + \skvxifinTF{,prefix,}{,\skvv@columns,}{% + \skvadvanceno\skvv@nra\@ne\skvv@coliitrue + }{% + \skvv@coliifalse + }% + \skvxifinTF{,family,}{,\skvv@columns,}{% + \skvadvanceno\skvv@nra\@ne\skvv@coliiitrue + }{% + \skvv@coliiifalse + }% + \skvxifinTF{,type,}{,\skvv@columns,}{% + \skvadvanceno\skvv@nra\@ne\skvv@colivtrue + }{% + \skvxifinTF{,key type,}{,\skvv@columns,}{% + \skvadvanceno\skvv@nra\@ne\skvv@colivtrue + }{% + \skvv@colivfalse + }% + }% + \skvxifinTF{,default,}{,\skvv@columns,}{% + \skvadvanceno\skvv@nra\@ne\skvv@colvtrue + }{% + \skvv@colvfalse + }% + \fi + \if\skvv@@view + \protected@edef\skv@prova{% + \noexpand\begin{longtable}[l]{*\skvv@nra l}% + \\\noexpand\hline + \normalfont Key + \ifskvv@colii&\normalfont Prefix\fi + \ifskvv@coliii&\normalfont Family\fi + \ifskvv@coliv&\normalfont Type\fi + \ifskvv@colv&\normalfont Default\fi + \\\noexpand\hline + \noexpand\endfirsthead\noexpand\multicolumn{\skvv@nra}{l}{% + \normalfont\emph{Continued from previous page}}% + \\\noexpand\hline + \normalfont Key + \ifskvv@colii&\normalfont Prefix\fi + \ifskvv@coliii&\normalfont Family\fi + \ifskvv@coliv&\normalfont Type\fi + \ifskvv@colv&\normalfont Default\fi + \\\noexpand\hline\noexpand + \endhead\noexpand\hline + \noexpand\multicolumn{\skvv@nra}{r}{% + \normalfont\emph{Continued on next page}}% + \\\noexpand\endfoot\noexpand\hline + \noexpand\endlastfoot + }% + \skvv@toksa\expandafter{\skv@prova}% + \fi + \ifx\skvv@file\@nnil\else + \immediate\openout\skvv@out\skvv@file + \fi + \skvcommaloop*\skvv@db\skv@prova{% + \skv@swatrue + \expandafter\skvv@skvview@a\skv@prova\skv@nil + }% + \if\skvv@@view + \skvaddtotoks\skvv@toksa{\end{longtable}}% + \begingroup + \color{\skvv@color}% + \ttfamily\the\skvv@toksa + \endgroup + \fi + \ifx\skvv@file\@nnil\else\immediate\closeout\skvv@out\fi +} +\skvnewdef*\skvv@skvview@a#1=#2=#3=#4=#5\skv@nil{% + \skvv@ifin{#2}\skvv@prefix + \skvv@ifin{#3}\skvv@family + \skvv@ifin{#4}\skvv@type + \skvv@ifin{#5}\skvv@default + \ifskv@swa + \if\skvv@@view + \edef\skv@prova{% + #1\ifskvv@colii\fi\ifskvv@coliii\fi + \ifskvv@coliv\fi\ifskvv@colv\fi + \ifskvv@vlabels\noexpand\label{#2/#3/#1}\fi + }% + \skvoaddtotoks\skvv@toksa{\skv@prova\\}% + \fi + \ifx\skvv@file\@nnil\else + \immediate\write\skvv@out{% + #1\ifskvv@colii\skvv@wcolsep#2\fi + \ifskvv@coliii\skvv@wcolsep#3\fi + \ifskvv@coliv\skvv@wcolsep#4\fi + \ifskvv@colv\skvv@wcolsep#5\fi + \ifskvv@wlabels\string\label{#2/#3/#1}\fi + \skvexpandonce\skvv@weol + }% + \fi + \fi +} +\skvrobustdef*\skvv@ifin#1#2{% + \ifx#2\@nnil\else + \skvxifinTF{,\detokenize{#1},}{,\skvoxdetok{#2},}{}\skv@swafalse + \fi +} +\directkeys*{ + .path=SKVV/skvvshow, + .holder prefix=skvvs@, + .initialize keys after define, + .new keys={ + .ord/{.show,.show table}// + \skvifdefboolTF{skvindef}{}{ + \edef\skvvs@show{\unexpanded{#1}} + \skvstripouterbraces{2}\skvvs@show + \ifx\skvvs@show\@empty\else\skvafterfi + \skvpushstate\skvv@state\skvv@depth + \skvexpbracenext\skvv@skvview\skvvs@show + \skvpopstate\skvv@state\skvv@depth + \fi + }, + .ord/.exec code/\@nil/ + \edef\skvvs@execcode{\unexpanded{#1}} + \ifx\skvvs@execcode\@nnil\else + \expandafter\skvvs@execcode + \fi + }, +} + +\skvrobustdef*\skvviewkeys{\skvsetkeys[SKVV]{skvvshow}} +\skvnewlet\skvshowkeys\skvviewkeys + +\skv@view@restorecodes +\endinput + +%% End of file 'skeyval-view.sty'. |