%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++% % 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'.