summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/dataref
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2013-12-18 22:01:05 +0000
committerKarl Berry <karl@freefriends.org>2013-12-18 22:01:05 +0000
commit51dd85fd0039ad102b4c0551cefc94c2dc7b46c0 (patch)
treeaeffaffe79c01bdc75716dc1027215e5f00e8614 /Master/texmf-dist/tex/latex/dataref
parentf1810cf69dfd54374426664fa922a3ddd7813df2 (diff)
dataref (18dec13)
git-svn-id: svn://tug.org/texlive/trunk@32438 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/dataref')
-rw-r--r--Master/texmf-dist/tex/latex/dataref/dataref.sty348
1 files changed, 348 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/dataref/dataref.sty b/Master/texmf-dist/tex/latex/dataref/dataref.sty
new file mode 100644
index 00000000000..d35434d5189
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/dataref/dataref.sty
@@ -0,0 +1,348 @@
+%%
+%% This is file `dataref.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% dataref.dtx (with options: `package')
+%% dataref.dtx
+%% Copyright 2013 Christian Dietrich
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) 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.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Christian Dietrich
+%%
+%% This work consists of the files dataref.dtx and dataref.ins
+%% and the derived file dataref.sty.
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesPackage{dref}
+ [2013/12/06 v0.1 dref]
+\ifx\drefloaded\undefined
+ \let\drefloaded=\relax
+\else
+ \expandafter\endinput
+\fi
+\ifx\PackageError\undefined
+ \def\dref@error#1{\immediate\write-1{Package dref: Error! #1.}}%
+\else
+ \def\dref@error#1{\PackageError{dref}{#1}{}}%
+\fi
+\RequirePackage{pgf}
+\RequirePackage{kvoptions}
+\RequirePackage{xparse}
+\RequirePackage{etoolbox}
+\RequirePackage{etextools}
+\SetupKeyvalOptions{
+ family=dref,
+ prefix=dref@
+}
+\DeclareStringOption[/data]{datapath}
+\DeclareStringOption[1]{defaultvalue}
+\DeclareStringOption[none]{annotate}
+\DeclareBoolOption{usagereport}
+\DeclareBoolOption{ignoremissing}
+\DeclareBoolOption{noassert}
+\ProcessKeyvalOptions*
+\newcommand{\dref@set}[2]{%
+ \pgfkeys@temptoks{#2}%
+ \expandafter\xdef\csname pgfk@\dref@datapath#1\endcsname{\the\pgfkeys@temptoks}%
+}
+\def\drefset#1#2{\dref@set{#1}{#2}}
+
+\long\def\dref@expandable#1{%
+ \pgfkeysifdefined{\dref@datapath#1}{%
+ \pgfkeysvalueof{\dref@datapath#1}%
+ }{%
+ \dref@defaultvalue%
+ }%
+}
+\long\def\dref@unexpandable#1{%
+ \def\drefcurrentkey{\dref@datapath#1}%
+ \pgfkeysifdefined{\drefcurrentkey}{%
+ \immediate\write\@auxout{\noexpand\dref@found{\drefcurrentkey}{\thepage}}%
+ }{%
+ \immediate\write\@auxout{\noexpand\dref@notfound{\drefcurrentkey}{\thepage}}%
+ \ifdref@ignoremissing%
+ \typeout{Dref warning: undefined key `\drefcurrentkey'}%
+ \dref@mkannotate{UNDEFINED: \drefcurrentkey}%
+ \else%
+ \dref@error{Dref error: undefined key `\drefcurrentkey'}%
+ \fi%
+ }%
+ \immediate\write\@auxout{\noexpand\dref@referenced{\drefcurrentkey}{\thepage}}%
+}
+\DeclareDocumentCommand{\dref}{o m}{%
+ \dref@unexpandable{#2}%
+ \IfNoValueTF {#1}{%
+ \gdef\dref@dref@output{\dref@expandable{#2}}%
+ }{%
+ \gdef\dref@dref@output{%
+ \pgfmathparse{\dref@expandable{#2}}%
+ \dref@format[#1]{\pgfmathresult}%
+ }%
+ }%
+ \dref@dref@output%
+ \dref@mkannotate{#2}%
+}
+\def\drefvalueof#1{%
+ \dref@expandable{#1}%
+}
+\def\drefref#1{%
+ \dref@unexpandable{#1}%
+}
+\newcommand{\dref@help@match}[2]{%
+ \ifstrmatch{#1}{#2}%
+}
+\newcommand{\dref@help}[2][]{%
+ \pgfkeysifdefined{#2/help}{%
+ \pgfkeysvalueof{#2/help}%
+ }{#1}%
+}
+\csdef{dref@helps}{}
+\newcommand{\drefsethelp}[2]{
+ \csdef{dref@help@#1}{#2}%
+ \listcsadd{dref@helps}{#1}%
+}
+\newcommand{\drefhelp}[1]{
+ \renewcommand{\do}[1]{%
+ \dref@help@match{##1}{#1}{%
+ \csuse{dref@help@##1}%
+ \listbreak}{}%
+ }%
+ \ifcsvoid{dref@helps}{}{%
+ \dolistcsloop{dref@helps}%
+ }%
+}
+\long\def\dref@notfound#1#2{
+ \ifdref@usagereport%
+ \dref@usagereport@notfound{#1}{#2}%
+ \else\relax\fi%
+}
+\long\def\dref@found#1#2{
+ \ifdref@usagereport%
+ \dref@usagereport@found{#1}{#2}%
+ \else\relax\fi%
+}
+\long\def\dref@referenced#1#2{
+ \ifdref@usagereport%
+ \dref@usagereport@referenced{#1}{#2}%
+ \else\relax\fi%
+}
+\def\dref@let#1{%
+ \def\@tmp##1=##2;{\pgfmathdeclarefunction*{##1}{0}{\pgfmathparse{##2}}}%
+ \renewcommand*{\do}[1]{\@tmp##1;}%
+ \docsvlist{#1}%
+}
+\def\dreflet#1{%
+ \dref@let{#1}%
+}
+\DeclareDocumentCommand{\dref@calc}{o m}{%
+ \IfNoValueTF {#1}{}{%
+ \dref@let{#1}%
+ }%
+ \pgfmathparse{#2}%
+}
+\def\drefresult{0.0}
+\DeclareDocumentCommand{\drefcalc}{s O{} m O{}}{%
+ \begingroup%
+ \dref@calc[#2]{#3}%
+ \xdef\drefresult{\pgfmathresult}%
+ \IfBooleanTF {#1} {}% Wit star do not print anything
+ {%
+ \dref@format[#4]{\pgfmathresult}%
+ \dref@mkannotate{#3}%
+ }%
+ \endgroup%
+}
+\newcommand{\dref@format}[2][]{%
+ \pgfmathprintnumber[#1]{#2}%
+}
+\DeclareDocumentCommand{\drefformat}{O{} m}{%
+ \dref@format[#1]{#2}%
+}
+
+\gdef\dref@data@math@prefix{}
+\pgfmathdeclarefunction{data}{1}{%
+ \begingroup%
+ \dref@unexpandable{\dref@data@math@prefix#1}%
+ \pgfmathparse{\dref@expandable{\dref@data@math@prefix#1}}%
+ \pgfmath@smuggleone\pgfmathresult%
+ \endgroup%
+}
+\DeclareDocumentCommand{\drefprojection}{m m m}{%
+ \begingroup%
+ \def\dref@data@math@prefix{#1}%
+ \def\rename##1##2{\dref@unexpandable{#1/##1}\drefset{#2/##2}{\dref@expandable{#1/##1}}}%
+ \def\id##1{\rename{##1}{##1}}%
+ \def\calc##1##2{%
+ \begingroup%
+ \dref@calc{##1}%
+ \xdef\dref@project@result{\pgfmathresult}
+ \endgroup%
+ \drefset{#2/##2}{\dref@project@result}%
+ }%
+ #3%
+ \endgroup%
+}
+
+
+\newtoks\dref@toks
+
+\newcommand{\dref@makerow}[2]{%
+ {\global\dref@toks={}%
+ \@tempcnta=\z@%
+ \def\inner##1##2{#2}%
+ \renewcommand*{\do}[1]{%
+ \advance\@tempcnta\@ne%
+ \csdef{@cell\number\@tempcnta}{\inner{##1}{\number\@tempcntb}}%
+ }%
+ \expandafter\def\expandafter\arglist\expandafter{#1}%
+ \expandafter\docsvlist\expandafter{\arglist}%
+ \@tempcntb=\z@
+ {\loop\ifnum\@tempcntb<\@tempcnta
+ \advance\@tempcntb\@ne
+ \edef\next{%
+ \ifnum\@tempcntb=\@ne\else&\fi
+ \csuse{@cell\number\@tempcntb}}%
+ \global\dref@toks=\expandafter{\the\expandafter\dref@toks\next}%
+ \repeat}%
+ }%
+ \the\dref@toks}
+\DeclareDocumentCommand{\drefrow}{s m m}{%
+ \IfBooleanTF {#1} {%
+ \dref@makerow{#2}{#3}%
+ }{% Wit star do not print anything
+ \dref@makerow{#2}{\dref[]{#3}}%
+ }%
+}
+
+\expandafter\ifstrequal\expandafter{\dref@annotate}{pdfcomment}{
+ \RequirePackage{pdfcomment}
+}
+
+\newcommand{\dref@mkannotate}[1]{%
+ \expandafter\ifstrequal\expandafter{\dref@annotate}{none}%
+ {\relax}%
+ {\expandafter\ifstrequal\expandafter{\dref@annotate}{footnote}%
+ {\footnote{#1}}%
+ {\expandafter\ifstrequal\expandafter{\dref@annotate}{pdfcomment}%
+ {\pdfcomment[opacity=0.4,voffset=2ex]{#1}}%
+ {\dref@error{Value for annotate not supported: '\dref@annotate'}%
+ }}}}%
+
+\newcommand{\drefannotate}[1]{%
+ \renewcommand{\dref@annotate}{#1}%
+}
+
+%% Usagereport
+\ifdref@usagereport
+ \RequirePackage{longtable}
+ \RequirePackage{booktabs}
+\fi
+\newcommand{\dref@usagereport@notfound}[2]{}
+\newcommand{\dref@usagereport@found}[2]{}
+
+\csdef{pgfdat@usagereport@keys}{}
+\csdef{pgfdat@usagereport@matchedkeys}{}
+
+\newcommand{\dref@usagereport@referenced}[2]{
+ \ifinlistcs{#2}{dref@usagereport@referenced@#1}{}{
+ \listcsgadd{dref@usagereport@referenced@#1}{#2}
+ }
+ \ifinlistcs{#1}{dref@usagereport@keys}{}{
+ \listcsgadd{dref@usagereport@keys}{#1}
+ }
+}
+\expandafter\def\expandafter\dref@usagereport@strippath@\dref@datapath#1\blanktest{#1}
+
+\newcommand{\dref@usagereport@strippath}[1]{%
+ \expandafter\ifstrmatch\expandafter{\expandafter^\dref@datapath.*$}{#1}%
+ {\dref@usagereport@strippath@#1\blanktest}%
+ {#1}%
+}
+\newcommand{\dref@usagereport@formatreferencelist}[1]{%
+ \begingroup%
+ \def\sep{}%
+ \renewcommand{\do}[1]{\sep\ifdef{\hyperlink}{\hyperlink{page.##1}{##1}}{##1}\def\sep{, }}%
+ \dolistcsloop{dref@usagereport@referenced@#1}%
+ \endgroup%
+}
+\newcommand{\dref@usagereport@keyheader}[1]{%
+ \textbf{\ifdef{\hypertarget}%
+ {\hypertarget{#1}{\dref@usagereport@strippath{#1}}}%
+ {\dref@usagereport@strippath{#1}}}%
+ & \dref@usagereport@formatreferencelist{#1}%
+ & \pgfkeysifdefined{#1}{\pgfkeysvalueof{#1}}{\textbf{\red{undefined}}} \\%
+}
+\newcommand{\dref@usagereport@forhelp}[1]{%
+ \begingroup%
+ \noindent\csuse{dref@help@#1}
+ \renewcommand{\do}[1]{%
+ \dref@help@match{#1}{##1}{%
+ \dref@usagereport@keyheader{##1}%
+ \ifinlistcs{##1}{dref@usagereport@matchedkeys}{}{%
+ \listcsgadd{dref@usagereport@matchedkeys}{##1}%
+ }%
+ }{}%
+ }%
+ \begin{longtable}{lll}\toprule%
+ & Page(s) & Value \\ \midrule
+ \dolistcsloop{dref@usagereport@keys}%
+ \end{longtable}%
+ \endgroup%
+}
+\newcommand{\dref@usagereport@withouthelp}{%
+ \renewcommand{\do}[1]{%
+ \ifinlistcs{##1}{dref@usagereport@matchedkeys}{}{%
+ \dref@usagereport@keyheader{##1}%
+ }%
+ }%
+ \begin{longtable}{lll}\toprule%
+ Keys without Help & Page(s) & Value \\\midrule
+ \endhead
+ \dolistcsloop{dref@usagereport@keys}%
+ \end{longtable}%
+}
+\newcommand{\drefusagereport}{%
+ \ifdref@usagereport%
+ \ifcsvoid{dref@usagereport@keys}{\typeout{EMPTY}}{%
+ \begingroup%
+ \setlength{\LTleft}{2em}%
+ \setlength{\LTright}{0pt}%
+ \renewcommand{\do}[1]{%
+ \ifinlistcs{##1}{dref@usagereport@matchedkeys}{}{%
+ \dref@usagereport@forhelp{##1}%
+ }%
+ }%
+ \dolistcsloop{dref@helps} % For all help text
+ \setlength{\LTleft}{0em}%
+ \dref@usagereport@withouthelp\relax
+ \endgroup%
+ }% csempty @keys
+ \fi%
+}
+\newcommand{\drefassert}[1]{%
+ \begingroup%
+ \pgfmathsetmacro{\result}{(#1) ? 1 : 0}
+ \expandafter\ifstrequal\expandafter{\result}{1.0}{%
+ \typeout{Assertion holds: #1}%
+ }{%
+ \ifdref@noassert%
+ \typeout{Assertion failed: #1}%
+ \else%
+ \dref@error{Assertion failed: #1}%
+ \fi%
+ }%
+ \endgroup%
+}
+\endinput
+%%
+%% End of file `dataref.sty'.