\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