summaryrefslogtreecommitdiff
path: root/support/pdbf-toolkit/pdbf.sty
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/pdbf-toolkit/pdbf.sty
Initial commit
Diffstat (limited to 'support/pdbf-toolkit/pdbf.sty')
-rw-r--r--support/pdbf-toolkit/pdbf.sty408
1 files changed, 408 insertions, 0 deletions
diff --git a/support/pdbf-toolkit/pdbf.sty b/support/pdbf-toolkit/pdbf.sty
new file mode 100644
index 0000000000..dd5a5b3e76
--- /dev/null
+++ b/support/pdbf-toolkit/pdbf.sty
@@ -0,0 +1,408 @@
+\def\filedate{2015/02/23}
+\def\fileversion{1.0}
+\NeedsTeXFormat{LaTeX2e}
+\AtEndOfPackage{\ProvidesPackage{pdbf}
+ [\filedate\space\space\space\space\fileversion\space\space\space\space(Patrick Bender)]}
+\RequirePackage{zref-savepos}
+\RequirePackage{zref-abspage}
+\RequirePackage{zref-user}
+\RequirePackage{xcolor}
+\RequirePackage{graphicx}
+\RequirePackage{xstring}
+\RequirePackage{xparse}
+\RequirePackage{array}
+
+\newcounter{visual}
+\newcounter{overlay}
+\stepcounter{visual}
+\stepcounter{overlay}
+
+\newwrite\pdbf@tempfile
+\immediate\openout\pdbf@tempfile=pdbf-config.json
+\immediate\write\pdbf@tempfile{[}
+
+\AtBeginDocument{
+ \newlength{\emptylen}
+ \settowidth{\emptylen}{}
+
+ \ifdim\emptylen=\paperwidth
+ \errmessage{^^J ^^J Error: paperwidth value missing! Did you forgot to specify the papersize via the geometry package? ^^J}%
+ \fi
+
+ \ifdim\emptylen=\paperheight
+ \errmessage{^^J ^^J Error: paperheight value missing! Did you forgot to specify the papersize via the geometry package? ^^J}%
+ \fi
+
+ \newwrite\pdbf@temp
+ \immediate\openout\pdbf@temp=pdbf-dim.json
+ \immediate\write\pdbf@temp{\@charlb "width": "\number\paperwidth",}
+ \immediate\write\pdbf@temp{"height": "\number\paperheight" \@charrb}
+ \immediate\closeout\pdbf@temp
+}
+
+\AtEndDocument{
+ \immediate\write\pdbf@tempfile{]}
+ \immediate\closeout\pdbf@tempfile
+}
+
+\zref@addprops{savepos}{abspage}
+
+\DeclareRobustCommand\pdbf@save[1]{%
+ \zsavepos{#1}%
+}
+
+%DataText
+\define@key{pdbf}{color}{\def\pdbfDynamicTextColor{#1}}
+\def\pdbfDynamicTextColor{blue}
+\define@key{pdbf}{linkTo}{\def\pdbf@linkTo{#1}}
+\def\pdbf@linkTo{}
+\define@key{pdbf}{linkSelector}{\def\pdbf@linkSelector{#1}}
+\def\pdbf@linkSelector{}
+\define@key{pdbf}{linkLabel}{\def\pdbf@linkLabel{#1}}
+\def\pdbf@linkLabel{}
+
+%DataTable
+\define@key{pdbf}{verticalLines}{\def\pdbf@verticalLines{#1}}
+\def\pdbf@verticalLines{a}
+\define@key{pdbf}{horizontalLinesHeader}{\def\pdbf@horizontalLinesHeader{#1}}
+\def\pdbf@horizontalLinesHeader{a}
+\define@key{pdbf}{horizontalLinesBody}{\def\pdbf@horizontalLinesBody{#1}}
+\def\pdbf@horizontalLinesBody{a}
+
+%Common
+\define@key{pdbf}{name}{\def\pdbf@name{#1}}
+\def\pdbf@name{}
+\define@key{pdbf}{width}{\def\pdbf@width{#1}}
+\define@key{pdbf}{height}{\def\pdbf@height{#1}}
+\def\pdbf@xunitname{}
+\define@key{pdbf}{xunit}{\StrSubstitute{\detokenize{#1}}{"}{\@backslashchar"}[\pdbf@xunitname]}
+\def\pdbf@yunitname{}
+\define@key{pdbf}{yunit}{\StrSubstitute{\detokenize{#1}}{"}{\@backslashchar"}[\pdbf@yunitname]}
+\def\pdbf@options{{}}
+\define@key{pdbf}{options}{\StrSubstitute{\detokenize{#1}}{"}{\@backslashchar"}[\pdbf@opt]\def\pdbf@options{{\pdbf@opt}}}
+\def\pdbfQuality{1.0}
+\define@key{pdbf}{quality}{\def\pdbfQuality{#1}}
+\def\pdbf@chartType{Line}
+\define@key{pdbf}{chartType}{\StrSubstitute{\detokenize{#1}}{"}{\@backslashchar"}[\pdbf@chartType]}
+\define@key{pdbf}{customImage}{\def\pdbf@customImage{#1}}
+
+%LineChart und BarChart
+\def\pdbfLogscale{false}
+\define@key{pdbf}{logscale}[true]{\def\pdbfLogscale{#1}}
+\def\pdbfLegendpos{topright}
+\define@key{pdbf}{legendpos}{\def\pdbfLegendpos{#1}}
+\def\pdbf@includeZero{false}
+\define@key{pdbf}{includeZero}{\def\pdbf@includeZero{#1}}
+\def\pdbf@drawPoints{false}
+\define@key{pdbf}{drawPoints}{\def\pdbf@drawPoints{#1}}
+\def\pdbf@fillGraph{false}
+\define@key{pdbf}{fillGraph}{\def\pdbf@fillGraph{#1}}
+\def\pdbf@showRangeSelector{false}
+\define@key{pdbf}{showRangeSelector}{\def\pdbf@showRangeSelector{#1}}
+
+%BarChart
+\def\pdbf@overlap{-1}
+\define@key{pdbf}{overlap}[2]{\def\pdbf@overlap{#1}}
+
+%Pivot
+\def\pdbf@rows{[]}
+\define@key{pdbf}{rows}{\StrSubstitute{\detokenize{#1}}{"}{\@backslashchar"}[\pdbf@rows]}
+\def\pdbf@cols{[]}
+\define@key{pdbf}{cols}{\StrSubstitute{\detokenize{#1}}{"}{\@backslashchar"}[\pdbf@cols]}
+\def\pdbf@aggregation{Minimum}
+\define@key{pdbf}{aggregation}{\StrSubstitute{\detokenize{#1}}{"}{\@backslashchar"}[\pdbf@aggregation]}
+\def\pdbf@aggregationattribute{}
+\define@key{pdbf}{aggregationattribute}{\StrSubstitute{\detokenize{#1}}{"}{\@backslashchar"}[\pdbf@aggregationattribute]}
+\def\pdbf@aggregationBig{}
+\define@key{pdbf}{aggregationBig}{\StrSubstitute{\detokenize{#1}}{"}{\@backslashchar"}[\pdbf@aggregationBig]}
+\def\pdbf@aggregationattributeBig{}
+\define@key{pdbf}{aggregationattributeBig}{\StrSubstitute{\detokenize{#1}}{"}{\@backslashchar"}[\pdbf@aggregationattributeBig]}
+
+%Multiplot
+\def\pdbf@xCount{0}
+\define@key{pdbf}{xCount}{\StrSubstitute{\detokenize{#1}}{"}{\@backslashchar"}[\pdbf@xCount]}
+\def\pdbf@yCount{0}
+\define@key{pdbf}{yCount}{\StrSubstitute{\detokenize{#1}}{"}{\@backslashchar"}[\pdbf@yCount]}
+\def\pdbf@leftArr{auto}
+\define@key{pdbf}{leftArr}{\StrSubstitute{\detokenize{#1}}{"}{\@backslashchar"}[\pdbf@leftArr]}
+\def\pdbf@rightArr{auto}
+\define@key{pdbf}{rightArr}{\StrSubstitute{\detokenize{#1}}{"}{\@backslashchar"}[\pdbf@rightArr]}
+\def\pdbf@topArr{auto}
+\define@key{pdbf}{topArr}{\StrSubstitute{\detokenize{#1}}{"}{\@backslashchar"}[\pdbf@topArr]}
+\def\pdbf@bottomArr{auto}
+\define@key{pdbf}{bottomArr}{\StrSubstitute{\detokenize{#1}}{"}{\@backslashchar"}[\pdbf@bottomArr]}
+\def\pdbf@xValues{}
+\define@key{pdbf}{xValues}{\StrSubstitute{\detokenize{#1}}{"}{\@backslashchar"}[\pdbf@xValues]}
+\def\pdbf@yValues{}
+\define@key{pdbf}{yValues}{\StrSubstitute{\detokenize{#1}}{"}{\@backslashchar"}[\pdbf@yValues]}
+\def\pdbf@yFirst{false}
+\define@key{pdbf}{yFirst}[true]{\def\pdbf@yFirst{#1}}
+\def\pdbf@forceXequal{false}
+\define@key{pdbf}{forceXequal}[true]{\def\pdbf@forceXequal{#1}}
+\def\pdbf@forceYequal{false}
+\define@key{pdbf}{forceYequal}[true]{\def\pdbf@forceYequal{#1}}
+
+%CSV
+\define@key{pdbfCSV}{headers}{\StrSubstitute{\detokenize{#1}}{"}{\@backslashchar"}[\pdbf@headers]}
+\def\pdbf@headers{[]}
+\define@key{pdbfCSV}{quote}{\StrSubstitute{\detokenize{#1}}{"}{\@backslashchar"}[\pdbf@quote]}
+\def\pdbf@quote{\@backslashchar"}
+\define@key{pdbfCSV}{seperator}{\StrSubstitute{\detokenize{#1}}{"}{\@backslashchar"}[\pdbf@seperator]}
+\def\pdbf@seperator{,}
+
+%Chart, Pivot table, Multiplot Chart
+\NewDocumentCommand\pdbf@chart{o m m m}{%
+ \edef\pdbf@fontsave{\f@size}%
+ \setkeys{pdbf}{#1}%
+ \ifdefined \pdbf@width \else%
+ \errmessage{^^J ^^J Error: width value missing! ^^J}%
+ \fi%
+ \ifdefined \pdbf@height \else%
+ \errmessage{^^J ^^J Error: height value missing! ^^J}%
+ \fi%
+ \StrSubstitute{#2}{"}{\@backslashchar"}[\pdbf@query]%
+ \StrSubstitute{#3}{"}{\@backslashchar"}[\pdbf@queryB]%
+ \edef\pdbf@tmpOverlay{Overlay\arabic{visual}}%
+ {\fontsize{5pt}{1sp}\selectfont%
+ \setlength\tabcolsep{1sp}%
+ % Place Image
+ \begin{tabular}{ccc}%
+ \pdbf@save{Overlay\arabic{visual}1}&&\\%
+ \ifdefined\pdbf@customImage%
+ &\includegraphics[width=\pdbf@width, height=\pdbf@height]{\pdbf@customImage}&\\%
+ \else%
+ \IfFileExists{./Overlay\arabic{visual}.pdf}{%
+ &\includegraphics[width=\pdbf@width, height=\pdbf@height, page=1]{./Overlay\arabic{visual}.pdf}&\\%
+ }{%
+ &\includegraphics[width=\pdbf@width, height=\pdbf@height, page=1]{./dummy.pdf}&\\%
+ }%
+ \fi%
+ &&\zsavepos{Overlay\arabic{visual}2}\\%
+ \end{tabular}%
+ % Write part of pdbf-config.json
+ \ifnum \value{overlay} > 1%
+ \immediate\write\pdbf@tempfile{,\@charlb}%
+ \else%
+ \immediate\write\pdbf@tempfile{\@charlb}%
+ \fi%
+ \immediate\write\pdbf@tempfile{\space\space\space\space"name": "Overlay\arabic{visual}",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space"type": \@charlb}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space"C": "pdbf.json.#4",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space"I": \@charlb}%
+ \ifdefined\pdbf@customImage%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"customImage": "\pdbf@customImage",}%
+ \fi%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"name": "\pdbf@name",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"linkTo": "\pdbf@linkTo",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"linkSelector": "\pdbf@linkSelector",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"linkLabel": "\pdbf@linkLabel",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"verticalLines": "\pdbf@verticalLines",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"horizontalLinesHeader": "\pdbf@horizontalLinesHeader",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"horizontalLinesBody": "\pdbf@horizontalLinesBody",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"logScale": \pdbfLogscale,}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"xUnitName": "\pdbf@xunitname",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"yUnitName": "\pdbf@yunitname",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"query": "\pdbf@query",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"queryB": "\pdbf@queryB",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"options": "\pdbf@options",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"quality": \pdbfQuality,}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"overlap": \pdbf@overlap,}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"legendpos": "\pdbfLegendpos",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"includeZero": \pdbf@includeZero,}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"drawPoints": \pdbf@drawPoints,}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"fillGraph": \pdbf@fillGraph,}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"showRangeSelector": \pdbf@showRangeSelector,}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"aggregation": "\pdbf@aggregation",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"aggregationattribute": "\pdbf@aggregationattribute",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"aggregationBig": "\pdbf@aggregationBig",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"aggregationattributeBig": "\pdbf@aggregationattributeBig",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"xCount": \pdbf@xCount,}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"yCount": \pdbf@yCount,}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"leftArr": "\pdbf@leftArr",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"rightArr": "\pdbf@rightArr",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"topArr": "\pdbf@topArr",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"bottomArr": "\pdbf@bottomArr",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"xValues": "\pdbf@xValues",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"yValues": "\pdbf@yValues",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"yFirst": \pdbf@yFirst,}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"forceXequal": \pdbf@forceXequal,}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"forceYequal": \pdbf@forceYequal,}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"cols": "\pdbf@cols",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"rows": "\pdbf@rows",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"chartType": "\pdbf@chartType",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"x1": \zposx{Overlay\arabic{visual}1},}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"x2": \zposx{Overlay\arabic{visual}2},}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"y1": \zposy{Overlay\arabic{visual}1},}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"y2": \zposy{Overlay\arabic{visual}2},}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"fontsize": \pdbf@fontsave,}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"page": \zref@extract{Overlay\arabic{visual}1}{abspage}}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\@charrb}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\@charrb}%
+ \immediate\write\pdbf@tempfile{\@charrb}%
+ \stepcounter{visual}%
+ \stepcounter{overlay}%
+ }%
+ \put(-10000,0){abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789pdbf!\textasciitilde\textbraceleft\textbraceright\textbackslash\textasciicircum\textsection\textdollar\%\&/()=?\#+\textbar\textunderscore[].,;:\pdbf@tmpOverlay-}~%
+ \relax
+}
+
+\NewDocumentCommand\chart{O{} o m}{%
+{\pdbf@chart[#1]{#3}{\IfValueTF{#2}{#2}{#3}}{Chart}}%
+}
+
+\NewDocumentCommand\pivotTable{O{} o m}{%
+{\pdbf@chart[#1]{#3}{\IfValueTF{#2}{#2}{#3}}{Pivot}}%
+}
+
+\NewDocumentCommand\multiplotChart{O{} o m}{%
+{\pdbf@chart[#1]{#3}{\IfValueTF{#2}{#2}{#3}}{MultiplotChart}}%
+}
+
+%Datatext, Datatable, SQL, etc.
+\NewDocumentCommand\pdbf@sqlmult{m m m m}{%
+\setkeys{pdbf}{#4}%
+\edef\pdbf@fontsave{\f@size}%
+\edef\pdbf@fontskipsave{\the\baselineskip}%
+\edef\pdbf@tabcolsep{\the\tabcolsep}%
+{\fontsize{5pt}{1sp}\selectfont%
+ \setlength\tabcolsep{1sp}%
+ \begin{tabular}[t]{ccc}%
+ \pdbf@save{Overlay\arabic{visual}1}&{\color{\pdbfDynamicTextColor}\fontsize{\pdbf@fontsave}{\pdbf@fontskipsave}\setlength\tabcolsep{\pdbf@tabcolsep}\selectfont#1}&\\%
+ &&\zsavepos{Overlay\arabic{visual}2}\\%
+ \end{tabular}%
+ % Write part of pdbf-config.json
+ \StrSubstitute{#2}{"}{\@backslashchar"}[\pdbf@query]%
+ \StrSubstitute{#2}{"}{\@backslashchar"}[\pdbf@queryB]%
+ \ifnum \value{overlay} > 1%
+ \immediate\write\pdbf@tempfile{,\@charlb}%
+ \else%
+ \immediate\write\pdbf@tempfile{\@charlb}%
+ \fi%
+ \immediate\write\pdbf@tempfile{\space\space\space\space"name": "Overlay\arabic{visual}",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space"type": \@charlb}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space"C": "#3",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space"I": \@charlb}%
+ \ifdefined\pdbf@customImage%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"customImage": "\pdbf@customImage",}%
+ \fi%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"name": "\pdbf@name",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"linkTo": "\pdbf@linkTo",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"linkSelector": "\pdbf@linkSelector",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"linkLabel": "\pdbf@linkLabel",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"verticalLines": "\pdbf@verticalLines",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"horizontalLinesHeader": "\pdbf@horizontalLinesHeader",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"horizontalLinesBody": "\pdbf@horizontalLinesBody",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"logScale": \pdbfLogscale,}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"xUnitName": "\pdbf@xunitname",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"yUnitName": "\pdbf@yunitname",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"query": "\pdbf@query",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"queryB": "\pdbf@queryB",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"options": "\pdbf@options",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"quality": \pdbfQuality,}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"overlap": \pdbf@overlap,}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"legendpos": "\pdbfLegendpos",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"includeZero": \pdbf@includeZero,}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"drawPoints": \pdbf@drawPoints,}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"fillGraph": \pdbf@fillGraph,}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"showRangeSelector": \pdbf@showRangeSelector,}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"aggregation": "\pdbf@aggregation",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"aggregationattribute": "\pdbf@aggregationattribute",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"aggregationBig": "\pdbf@aggregationBig",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"aggregationattributeBig": "\pdbf@aggregationattributeBig",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"xCount": \pdbf@xCount,}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"yCount": \pdbf@yCount,}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"leftArr": "\pdbf@leftArr",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"rightArr": "\pdbf@rightArr",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"topArr": "\pdbf@topArr",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"bottomArr": "\pdbf@bottomArr",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"xValues": "\pdbf@xValues",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"yValues": "\pdbf@yValues",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"yFirst": \pdbf@yFirst,}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"forceXequal": \pdbf@forceXequal,}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"forceYequal": \pdbf@forceYequal,}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"cols": "\pdbf@cols",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"rows": "\pdbf@rows",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"chartType": "\pdbf@chartType",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"x1": \zposx{Overlay\arabic{visual}1},}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"x2": \zposx{Overlay\arabic{visual}2},}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"y1": \zposy{Overlay\arabic{visual}1},}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"y2": \zposy{Overlay\arabic{visual}2},}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"fontsize": \pdbf@fontsave,}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"page": \zref@extract{Overlay\arabic{visual}1}{abspage}}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\@charrb}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\@charrb}%
+ \immediate\write\pdbf@tempfile{\@charrb}%
+ \stepcounter{visual}%
+ \stepcounter{overlay}%
+}%
+}
+
+\NewDocumentCommand\sql{O{} o m}{%
+\StrSubstitute{#3}{_}{$\string_$}[\pdbf@tmpstore]
+{\pdbf@sqlmult{\IfValueTF{#2}{#2}{\pdbf@tmpstore}}{#3}{pdbf.json.Text}{#1}}%
+}
+
+\def\pdbf@csxdefaux#1{%
+ \protected@write\@mainaux{}{%
+ \string\expandafter\string\gdef
+ \string\csname\space pdbf@Overlay\arabic{visual}\string\endcsname{\expandafter\detokenize\expandafter\expandafter\expandafter{#1}}%
+ }%
+}
+
+\NewDocumentCommand\dataText{O{} m}{%
+{\expandafter\ifx\csname pdbf@Overlay\arabic{visual}\endcsname\relax\pdbf@csxdefaux{dummy}\else\pdbf@csxdefaux{\csname pdbf@Overlay\arabic{visual}\endcsname}\fi%
+\pdbf@sqlmult{\csname pdbf@Overlay\arabic{visual}\endcsname}{#2}{pdbf.json.DataText}{#1}}%
+}
+
+\NewDocumentCommand\dataTable{O{} m}{%
+{\expandafter\ifx\csname pdbf@Overlay\arabic{visual}\endcsname\relax\pdbf@csxdefaux{dummy}\else\pdbf@csxdefaux{\csname pdbf@Overlay\arabic{visual}\endcsname}\fi%
+\pdbf@sqlmult{\csname pdbf@Overlay\arabic{visual}\endcsname}{#2}{pdbf.json.DataTable}{#1}}%
+}
+
+%Database
+\NewDocumentCommand\pdbf@db{O{} m m m m m}{%
+ \setkeys{pdbfCSV}{#1}%
+ \StrSubstitute{#2}{"}{\@backslashchar"}[\pdbf@valueA]%
+ \StrSubstitute{#3}{"}{\@backslashchar"}[\pdbf@valueB]%
+ \StrSubstitute{#4}{"}{\@backslashchar"}[\pdbf@valueC]%
+ \StrSubstitute{#5}{"}{\@backslashchar"}[\pdbf@valueD]%
+ \ifnum \value{overlay} > 1%
+ \immediate\write\pdbf@tempfile{,\@charlb}%
+ \else%
+ \immediate\write\pdbf@tempfile{\@charlb}%
+ \fi%
+ \immediate\write\pdbf@tempfile{\space\space\space\space"name": "Database",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space"type": \@charlb}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space"C": "pdbf.json.Database",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space"I": \@charlb}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"type": #6,}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"value1": "\pdbf@valueA",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"value2": "\pdbf@valueB",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"value3": "\pdbf@valueC",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"value4": "\pdbf@valueD",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"headers": \pdbf@headers,}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"quote": "\pdbf@quote",}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\space\space\space\space"seperator": "\pdbf@seperator"}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\space\space\space\space\@charrb}%
+ \immediate\write\pdbf@tempfile{\space\space\space\space\@charrb}%
+ \immediate\write\pdbf@tempfile{\@charrb}%
+ \stepcounter{overlay}%
+}
+
+\NewDocumentCommand\dbSQLText{m}{%
+ \pdbf@db{#1}{}{}{}{1}
+}
+
+\NewDocumentCommand\dbSQLFile{m}{%
+ \pdbf@db{#1}{}{}{}{2}
+}
+
+\NewDocumentCommand\dbSQLJDBC{m m m m}{%
+ \pdbf@db{#1}{#2}{#3}{#4}{3}
+}
+
+\NewDocumentCommand\dbCSVFile{O{} m m}{%
+ \pdbf@db[#1]{#2}{#3}{}{}{4}
+}
+
+\endinput