%%
%% This is file `interfaces-pgfkeys.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% interfaces.dtx  (with options: `pgfkeys')
%% 
%% This is a generated file.
%% 
%% interfaces : 2010/10/20 v1.0 - interfaces : interfaces with keys for other packages (FC)
%% 
%% 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
%% 
%% This work consists of the main source file interfaces.dtx
%% and the derived files
%%     interfaces.sty, interfaces.pdf, interfaces.ins,
%%     interfaces-base.sty,
%%     interfaces-LaTeX.sty,
%%     interfaces-tikz.sty,
%%     interfaces-titlesec.sty,
%%     interfaces-hyperref.sty,
%%     interfaces-bookmark.sty,
%%     interfaces-hypbmsec.sty,interfaces-hypbmsec.code.tex,
%%     interfaces-fancyhdr.sty,
%%     interfaces-marks.sty,
%%     interfaces-tocloft.sty,
%%     interfaces-makecell.sty,
%%     interfaces-enumitem.sty,
%%     interfaces-truncate.sty,
%%     interfaces-appendix.sty,
%%     interfaces-embedfile.sty,
%%     interfaces-environ.sty,
%%     interfaces-umrand.sty,
%%     interfaces-scrlfile.sty,
%%     interfaces-pgfkeys.sty,
%%     interfaces-etoolbox.sty,
%%     interfaces-fancyvrb.sty
%% 
%% interfaces: interfaces with keys for other packages (FC)
%% Copyright (C) 2010 by Florent Chervet <florent.chervet@free.fr>
%% 
\ProvidesPackage{interfaces-pgfkeys}
   [2010/10/22 v1.1 pgfkeys handlers definitions (FC)]
\RequirePackage{interfaces-base}
\AtEndOfPackage{%
   \let\itf@pgfkeys@unpack\pgfkeys@unpack
   \let\itf@pgfkeys@case@three\pgfkeys@case@three
   \let\itf@pgfkeys@exp@call\pgfkeys@exp@call
   \let\itf@pgfkeysaddvalue\pgfkeysaddvalue
}% AtEndOfPackage
\def\itf@pgfkeys{%
   \global\let\pgfkeys@unpack\itf@pgfkeys@unpack
   \global\let\pgfkeys@case@three\itf@pgfkeys@case@three
   \global\let\pgfkeys@exp@call\itf@pgfkeys@exp@call
   \global\let\pgfkeysaddvalue\itf@pgfkeysaddvalue
}% \itf@pgfkeys
\AtBeginDocument{%
   \itf@pgfkeys
   \let\itf@pgfkeys\relax
}% AtBeginDocument
\providecommand*\pgfkeysmeaning[1]{%
   \pgfkeysifdefined{#1}
      {\expandafter\meaning\csname pgfk@#1\endcsname}
      {\meaning\@undefined}%
}%
\def\pgfkeysvalueof@unexpanded#1{%
   \unexpanded\expandafter\expandafter\expandafter{%
                        \csname pgfk@#1\endcsname}%
}% \pgfkeysvalueof@unexpanded
\newrobustcmd*\pgfkeysEsetvalue[2]{%
   \expandafter\edef\csname pgfk@#1\endcsname{#2}%
}% \pgfkeysEsetvalue
\renewrobustcmd*\pgfkeysaddvalue[3]{% \cspreappto{pgfk@#1}{#2}{#3} (bug in pgfkeys.code.tex)
   \edef\pgfkeys@global@temp{%
      \unexpanded{#2}%
      \ifcsname pgfk@#1\endcsname
         \unexpanded\expandafter\expandafter\expandafter{%
                           \csname pgfk@#1\endcsname}%
      \fi
      \unexpanded{#3}}%
   \pgfkeyslet{#1}\pgfkeys@global@temp
}% \pgfkeysaddvalue
\newrobustcmd*\pgfkeysEaddvalue[3]{% \csepreappto{pgfk@#1}{#2}{#3}
   \edef\pgfkeys@global@temp{%
      #2%
      \ifcsname pgfk@#1\endcsname
         \unexpanded\expandafter\expandafter\expandafter{%
            \csname pgfk@#1\endcsname}%
      \fi
      #3}%
   \pgfkeyslet{#1}\pgfkeys@global@temp
}% \pgfkeysaddvalue
%% missed a pair of braces around the argument in pgfkeys.code.tex ( code could break if it contains = or , )
\def\pgfkeys@exp@call#1{\pgfkeysalso{\pgfkeyscurrentpath={#1}}}
%% The value is now checked by \itf@pgfkeys@default@blank@required:
\def\pgfkeys@unpack#1=#2=#3\pgfkeys@stop{%
  \pgfkeys@spdef\pgfkeyscurrentkey{#1}%
  \edef\pgfkeyscurrentkey{\pgfkeyscurrentkey}%
  \ifx\pgfkeyscurrentkey\pgfkeys@empty
    % Skip
  \else%
    \pgfkeys@add@path@as@needed
    \pgfkeys@spdef\pgfkeyscurrentvalue{#2}%
    \itf@pgfkeys@default@blank@required % <FC>
                     \pgfkeyscurrentkey % <FC>
                      \pgfkeys@case@one % <FC>
  \fi
}% \pgfkeys@unpack
\def\itf@pgfkeys@default@blank@required#1#2{%
   \ifx\pgfkeyscurrentvalue\pgfkeysnovalue@text% Hmm... no value
      \pgfkeysifdefined{#1/.@def}%
         {\pgfkeysgetvalue{#1/.@def}\pgfkeyscurrentvalue}
         {}% no default, so leave it
   \fi
   \ifx\pgfkeyscurrentvalue\@empty
      \pgfkeysifdefined{#1/.@blank}
         {\pgfkeysgetvalue{#1/.@blank}\pgfkeyscurrentvalue}
         {}% no /.blank specified
   \ifx\pgfkeyscurrentvalue\pgfkeysnovalue@text% in case /.blank -> \pgfkeysnovalue
      \pgfkeysifdefined{#1/.@def}%
         {\pgfkeysgetvalue{#1/.@def}\pgfkeyscurrentvalue}
         {}% no default, so leave it
   \fi\fi
   \ifx\pgfkeyscurrentvalue\pgfkeysvaluerequired
      \pgfkeysvalueof{/errors/value required/.@cmd}\pgfkeyscurrentkey
                                                   \pgfkeyscurrentvalue
                                                   \pgfeov
   \else
      #2%
   \fi
}% \itf@pgfkeys@default@blank@required
%% To handle the cases of: /handler/.default= /handler/.blank= /handler/.value required,
%% it is necessary to redefine \pgfkeys@case@three
\renewcommand*\pgfkeys@case@three{%
   \pgfkeys@split@path
   \pgfkeysifdefined{/handlers/\pgfkeyscurrentname/.@cmd}
      {%
      \itf@pgfkeys@default@blank@required{/handlers/\pgfkeyscurrentname}%
         {\pgfkeysgetvalue{/handlers/\pgfkeyscurrentname/.@cmd}\pgfkeys@code
          \expandafter\pgfkeys@code\pgfkeyscurrentvalue\pgfeov}%
      }
     \pgfkeys@unknown % no handler, thus the key is unknown
}% \pgfkeys@case@three
\pgfkeys{%
   /handlers/.alias/.code=\itf@pgfkeys@ifaliasexists{#1}{%
      \pgfkeysedef\pgfkeyscurrentpath{\noexpand\pgfkeysalso{\pgfkeysdefaultpath#1={##1}}}},%
      /handlers/.alias/.value required,%
   /handlers/.blank/.code=\pgfkeyssetvalue{\pgfkeyscurrentpath/.@blank}{#1},%
      /handlers/.blank/.default=\pgfkeysnovalue,%
}% /.alias   and  /.blank
\def\itf@pgfkeys@ifaliasexists#1#2{%
   \pgfkeysifdefined{\pgfkeysdefaultpath#1/.@cmd}{#2}
      {\pgfkeysifdefined{\pgfkeysdefaultpath#1}
         {#2}
         {\itf@pgfkeys@aliaserror{#1}}}%
}% \itf@pgfkeys@ifaliasexists
\def\itf@pgfkeys@aliaserror#1{%
   \PackageError{interfaces-pgfkeys}
      {You want the key \pgfkeyscurrentpath\space
      \MessageBreak to be an alias for \pgfkeysdefaultpath#1
      \MessageBreak but the key \pgfkeysdefaultpath#1
      \MessageBreak is not defined!}\@eha\@gobble
}% \itf@pgfkeys@aliaserror
\pgfkeys{
   /handlers/.alias*/.code=\itf@pgfkeys@ifaliasexists{#1}{%
      \pgfkeysedef\pgfkeyscurrentpath{\noexpand\pgfkeysalso{\pgfkeysdefaultpath#1={##1}}}%
      \@tfor\x:=+-*\do{%
         \pgfkeysifdefined{\pgfkeysdefaultpath#1\x/.@cmd}
            {\pgfkeysedef{\pgfkeyscurrentpath\x}{%
               \noexpand\pgfkeysalso{\pgfkeysdefaultpath#1\x={##1}}}}
            {}%
      }},%
   /handlers/.alias*/.value required,%
}% /.alias*
\pgfkeys{%
   /handlers/.is private/.code=\pgfkeysdef\pgfkeyscurrentpath{%
      \PackageError{#1}{Key \pgfkeyscurrentkey\space is private
      \MessageBreak and should not be modified}\@ehd},%
   /handlers/.is private to class/.code=\pgfkeysdef\pgfkeyscurrentpath{%
      \ClassError{#1}{Key \pgfkeyscurrentkey\space is private
      \MessageBreak and should not be modified}\@ehd}%
}% /.is private
\def\itf@pgfkeys@choice[#1]#2#3{%
   \pgfkeys{\pgfkeyscurrentpath/.cd,%
      .is choice,%
      #2/.code={#3},%
      .default/.expanded=\@firstoftwo#1}%
}% \itf@pgfkeys@choice
\pgfkeys{%
   /handlers/.true/.code=\itf@pgfkeys@choice[{true}{false}]{true}{#1},%
   /handlers/.false/.code=\itf@pgfkeys@choice[{true}{false}]{false}{#1},%
   /handlers/.on/.code=\itf@pgfkeys@choice[{on}{off}]{on}{#1},%
   /handlers/.off/.code=\itf@pgfkeys@choice[{on}{off}]{off}{#1},%
}% /.true /.false
\pgfkeys{%
   /handlers/.store in cs/.code=\pgfkeysdef\pgfkeyscurrentpath{\csdef{#1}{##1}},%
   /handlers/.estore in cs/.code=\pgfkeysdef\pgfkeyscurrentpath{\csedef{#1}{##1}},%
}% /.store in cs
%% /.store as code handlers
\pgfkeys{%
   /handlers/.store as code/.code={%
      \pgfkeysedef\pgfkeyscurrentpath{%
         \noexpand\pgfkeyslet{\pgfkeyscurrentpath}\noexpand\pgfkeyscurrentvalue}%
      \pgfkeyslet\pgfkeyscurrentpath\@empty
      \pgfkeyslet{\pgfkeyscurrentpath/.@def}\@empty
      \@tfor\x:=#1\do{%
         \pgfkeysedef{\pgfkeyscurrentpath\x}{%
            \noexpand\pgfkeysalso{\pgfkeyscurrentpath/.expanded={%
               \noexpand\pgfkeysvalueof@unexpanded{\pgfkeyscurrentpath}%
               \noexpand\unexpanded{##1}}}}%
      \pgfkeyslet{\pgfkeyscurrentpath\x/.@def}\@empty
      }},%
   /handlers/.store as code/.default=*+,%
}% /.store as code
\pgfkeys{%
   /handlers/.estore as code/.code={%
      \pgfkeysedef\pgfkeyscurrentpath{%
         \noexpand\pgfkeysEsetvalue{\pgfkeyscurrentpath}{##1}}%
      \pgfkeyslet\pgfkeyscurrentpath\@empty
      \@tfor\x:=#1\do{%
         \pgfkeysedef{\pgfkeyscurrentpath\x}{%
            \noexpand\pgfkeysalso{\pgfkeyscurrentpath/.expanded={%
               \noexpand\pgfkeysvalueof@unexpanded{\pgfkeyscurrentpath}%
               \noexpand\unexpanded{##1}}}}%
      }},%
   /handlers/.estore as code/.default=*+,%
}% /.estore as code
\pgfkeys{%
   /handlers/.store as code in cs/.code={%
      \pgfkeysdef\pgfkeyscurrentpath{%
         \ifx\pgfkeyscurrentvalue\pgfkeysnovalue@text
         \else\csdef{#1}{##1}\fi}%
      \@tfor\x:=*+\do{%
         \pgfkeysedef{\pgfkeyscurrentpath\x}{%
            \noexpand\pgfkeysalso{\pgfkeyscurrentpath/.expanded={%
               \noexpand\ifcsname#1\endcsname
                  \noexpand\expandafter\noexpand\expandonce
                     \noexpand\csname#1\endcsname
               \noexpand\fi
               \noexpand\unexpanded{##1}}}}%
         \pgfkeyslet{\pgfkeyscurrentpath\x/.@def}\@empty
      }},%
   /handlers/.store as code in cs/.value required,%
}% /.store as code in cs
\pgfkeys{%
   /handlers/.estore as code in cs/.code={%
      \pgfkeysdef\pgfkeyscurrentpath{%
         \ifx\pgfkeyscurrentvalue\pgfkeysnovalue@text
         \else\csedef{#1}{##1}\fi}%
      \@tfor\x:=*+\do{%
         \pgfkeysedef{\pgfkeyscurrentpath\x}{%
            \noexpand\pgfkeysalso{\pgfkeyscurrentpath/.expanded={%
               \noexpand\ifcsname#1\endcsname
                  \noexpand\expandafter\noexpand\expandonce
                        \noexpand\csname#1\endcsname
               \noexpand\fi
               \noexpand\unexpanded{##1}}}}%
      }},%  default if \pgfkeysnovalue which expands to \@empty
   /handlers/.estore as code in cs/.value required,%
}% /.estore as code in cs
\protected\def\itf@pgfk@color#1#2\@nil{%
   \ifx\@let@token\color
      \def\pgfkeyscurrentvalue{#2}%
   \else\ifx\@let@token\normalcolor
      \def\pgfkeyscurrentvalue{default}%
   \else\ifx\@let@token\pgfkeysnovalue
      \def\pgfkeyscurrentvalue{default}%
   \fi\fi\fi
}% \itf@pgfk@color
\pgfkeys{%
   /handlers/.store as color/.code=%
      \pgfkeysedef\pgfkeyscurrentpath{%
         \futurelet\noexpand\@let@token\itf@pgfk@color
                        ##1\noexpand\pgfkeysnovalue\noexpand\@nil
         \noexpand\pgfkeyslet{\pgfkeyscurrentpath}\noexpand\pgfkeyscurrentvalue}%
}% /.store as color
\pgfkeys{%
   /handlers/.store as color in cs/.code=%
      \pgfkeysedef\pgfkeyscurrentpath{%
         \futurelet\noexpand\@let@token\itf@pgfk@color
                        ##1\noexpand\pgfkeysnovalue\noexpand\@nil
         \cslet{#1}\pgfkeyscurrentvalue}%
}% /.store as color in cs
\protected\def\itf@pgfk@colorcmd#1\@nil{%
   \ifcat @\noexpand\@let@token
      \def\pgfkeyscurrentvalue{\color{#1}}%
   \else\ifcat 0\noexpand\@let@token
      \def\pgfkeyscurrentvalue{\color{#1}}%
   \else\ifx\@let@token\@nil
      \let\pgfkeyscurrentvalue\normalcolor
   \fi\fi\fi
}% \itf@pgfk@colorcmd
\pgfkeys{%
   /handlers/.store as color command/.code=%
      \pgfkeysedef\pgfkeyscurrentpath{%
         \futurelet\noexpand\@let@token\itf@pgfk@colorcmd
                        ##1\noexpand\@nil
         \noexpand\pgfkeyslet{\pgfkeyscurrentpath}\noexpand\pgfkeyscurrentvalue}%
      \pgfkeyssetvalue{\pgfkeyscurrentpath/.@def}\normalcolor
}% /.store as color command
\pgfkeys{%
   /handlers/.store as color command in cs/.code=%
      \pgfkeysedef\pgfkeyscurrentpath{%
         \futurelet\noexpand\@let@token\itf@pgfk@colorcmd
                        ##1\noexpand\@nil
         \cslet{#1}\noexpand\pgfkeyscurrentvalue}%
      \pgfkeyssetvalue{\pgfkeyscurrentpath/.@def}\normalcolor
}% /.store as color command in cs
\pgfkeys{%
   /handlers/.store as number/.code={%
      \pgfkeysedef\pgfkeyscurrentpath{%
         \normalcolor\pgfkeyssetvalue{\pgfkeyscurrentpath}{\numexpr##1\relax}}%
      \pgfkeyslet\pgfkeyscurrentpath\z@
      \pgfkeyslet{\pgfkeyscurrentpath/.@def}\z@
      \pgfkeyslet{\pgfkeyscurrentpath/.@blank}\z@
      \@tfor\x:=#1\do{%
         \pgfkeysedef{\pgfkeyscurrentpath\x}{%
            \noexpand\pgfkeysalso{\pgfkeyscurrentpath/.expanded=%
               \noexpand\pgfkeysvalueof@unexpanded{\pgfkeyscurrentpath}%
               \x
               \numexpr\unexpanded{##1}\relax}}%
         \pgfkeysEsetvalue{\pgfkeyscurrentpath\x/.@def}{\if*\x\@ne\else\z@\fi}%
         \pgfkeysEsetvalue{\pgfkeyscurrentpath\x/.@blank}{\if*\x\@ne\else\z@\fi}%
      }},%
   /handlers/.store as number/.default=+-*,%
}% /.store as number
\pgfkeys{%
   /handlers/.estore as number/.code={%
      \pgfkeysedef\pgfkeyscurrentpath{%
         \noexpand\pgfkeyssetvalue{\pgfkeyscurrentpath}{\number\numexpr##1\relax}}%
      \pgfkeyslet\pgfkeyscurrentpath\z@
      \pgfkeyslet{\pgfkeyscurrentpath/.@def}\z@
      \pgfkeyslet{\pgfkeyscurrentpath/.@blank}\z@
      \@tfor\x:=#1\do{%
         \pgfkeysedef{\pgfkeyscurrentpath\x}{%
            \noexpand\pgfkeysalso{\pgfkeyscurrentpath=%
               \noexpand\pgfkeysvalueof{\pgfkeyscurrentpath}%
               \x
               \numexpr##1\relax}}%
      }},%
   /handlers/.estore as number/.default=+-*,%
}% /.estore as number
\pgfkeys{%
   /handlers/.store as number in cs/.code={%
      \pgfkeysdef\pgfkeyscurrentpath{%
         \ifx\pgfkeyscurrentvalue\pgfkeysnovalue@text
         \else\csdef{#1}{\numexpr##1\relax}\fi}%
      \pgfkeyslet{\pgfkeyscurrentpath/.@blank}\z@
      \@tfor\x:=+-*\do{%
         \pgfkeysedef{\pgfkeyscurrentpath\x}{%
            \letcs\noexpand\pgfkeys@temp{%
               \noexpand\ifcsname#1\endcsname
                  #1\noexpand\else z@\noexpand\fi}%
         \edef\noexpand\pgfkeys@temp{%
            \noexpand\pgfkeysalso{\pgfkeyscurrentpath={%
               \noexpand\expandonce\noexpand\pgfkeys@temp
               \x
               \numexpr\noexpand\unexpanded{##1}\relax}}%
         }\noexpand\pgfkeys@temp}%
      \pgfkeysEsetvalue{\pgfkeyscurrentpath\x/.@def}{\if*\x\@ne\else\z@\fi}%
      \pgfkeysEsetvalue{\pgfkeyscurrentpath\x/.@blank}{\if*\x\@ne\else\z@\fi}%
   }},%
   /handlers/.store as number in cs/.value required,%
}% /.store as number in cs
\pgfkeys{%
   /handlers/.estore as number in cs/.code={%
      \pgfkeysdef\pgfkeyscurrentpath{%
         \ifx\pgfkeyscurrentvalue\pgfkeysnovalue@text
         \else\csedef{#1}{\number\numexpr##1\relax}\fi}%
   \pgfkeyslet{\pgfkeyscurrentpath/.@blank}\z@
   \@tfor\x:=+-*\do{%
      \pgfkeysedef{\pgfkeyscurrentpath\x}{%
         \noexpand\pgfkeysalso{\pgfkeyscurrentpath=%
            \noexpand\csname\noexpand\ifcsname#1\endcsname
               #1\noexpand\else z@\noexpand\fi\endcsname
            \x
            \numexpr##1\relax}}%
      \pgfkeysEsetvalue{\pgfkeyscurrentpath\x/.@def}{\if*\x\@ne\else\z@\fi}%
      \pgfkeysEsetvalue{\pgfkeyscurrentpath\x/.@blank}{\if*\x\@ne\else\z@\fi}%
   }},%
   /handlers/.estore as number in cs/.value required,%
}% /.estore as number in cs
\pgfkeys{%
   /handlers/.defcounter/.code=\pgfkeysdef\pgfkeyscurrentpath{\defcounter{#1}{##1}}%
}% /.defcounter
\pgfkeys{%
   /handlers/.store as glue/.code={%
      \pgfkeysedef\pgfkeyscurrentpath{%
         \noexpand\pgfkeyssetvalue{\pgfkeyscurrentpath}{\glueexpr##1\relax}}%
      \pgfkeyslet\pgfkeyscurrentpath\z@skip
      \pgfkeyslet{\pgfkeyscurrentpath/.@def}\z@skip
      \pgfkeyslet{\pgfkeyscurrentpath/.@blank}\z@skip
      \@tfor\x:=#1\do{%
         \pgfkeysedef{\pgfkeyscurrentpath\x}{%
            \noexpand\pgfkeysalso{\pgfkeyscurrentpath/.expanded=%
               \noexpand\pgfkeysvalueof@unexpanded{\pgfkeyscurrentpath}%
               \x
               \if*\x\noexpand\itf@units@scale##1!
               \else\glueexpr\noexpand\unexpanded{##1}\relax\fi}}%
      \pgfkeysEsetvalue{\pgfkeyscurrentpath\x/.@def}{\if*\x\@ne\else\z@skip\fi}%
      \pgfkeysEsetvalue{\pgfkeyscurrentpath\x/.@blank}{\if*\x\@ne\else\z@skip\fi}%
      }},%
   /handlers/.store as glue/.default=+-*,%
}% /.store as glue
\pgfkeys{%
   /handlers/.estore as glue/.code={%
      \pgfkeysedef{\pgfkeyscurrentpath}{%
         \noexpand\pgfkeysEsetvalue{\pgfkeyscurrentpath}{%
                     \noexpand\the\glueexpr##1\relax}}%
      \pgfkeyslet\pgfkeyscurrentpath\z@skip
      \pgfkeyslet{\pgfkeyscurrentpath/.@def}\z@skip
      \pgfkeyslet{\pgfkeyscurrentpath/.@blank}\z@skip
      \@tfor\x:=#1\do{%
         \pgfkeysedef{\pgfkeyscurrentpath\x}{%
            \noexpand\pgfkeysalso{\pgfkeyscurrentpath=%
               \noexpand\pgfkeysvalueof{\pgfkeyscurrentpath}\x
               \if*\x \noexpand\itf@units@scale##1!
               \else\glueexpr##1\relax\fi}}%
      \pgfkeysEsetvalue{\pgfkeyscurrentpath\x/.@def}{\if*\x\@ne\else\z@skip\fi}%
      \pgfkeysEsetvalue{\pgfkeyscurrentpath\x/.@blank}{\if*\x\@ne\else\z@skip\fi}%
      }},%
   /handlers/.estore as glue/.default=+-*,%
}% /.estore as glue
\pgfkeys{%
   /handlers/.store as dimen/.code={%
      \pgfkeysedef\pgfkeyscurrentpath{%
         \noexpand\pgfkeyssetvalue{\pgfkeyscurrentpath}{\dimexpr##1\relax}}%
      \pgfkeyslet\pgfkeyscurrentpath\z@
      \pgfkeyslet{\pgfkeyscurrentpath/.@def}\z@
      \pgfkeyslet{\pgfkeyscurrentpath/.@blank}\z@
      \@tfor\x:=#1\do{%
         \pgfkeysedef{\pgfkeyscurrentpath\x}{%
            \noexpand\pgfkeysalso{\pgfkeyscurrentpath/.expanded={%
               \noexpand\pgfkeysvalueof@unexpanded{\pgfkeyscurrentpath}%
               \x
               \if*\x \noexpand\itf@units@scale##1!
               \else\dimexpr\noexpand\unexpanded{##1}\relax\fi}}}%
      \pgfkeysEsetvalue{\pgfkeyscurrentpath\x/.@def}{\if*\x\@ne\else\z@\fi}%
      \pgfkeysEsetvalue{\pgfkeyscurrentpath\x/.@blank}{\if*\x\@ne\else\z@\fi}%
      }},%
   /handlers/.store as dimen/.default=+-*,%
}% /.store as dimen
\pgfkeys{%
   /handlers/.estore as dimen/.code={%
      \pgfkeysedef\pgfkeyscurrentpath{%
         \noexpand\pgfkeysEsetvalue{\pgfkeyscurrentpath}{%
                  \noexpand\the\dimexpr##1\relax}}%
      \pgfkeyslet\pgfkeyscurrentpath\z@
      \pgfkeyslet{\pgfkeyscurrentpath/.@def}\z@
      \pgfkeyslet{\pgfkeyscurrentpath/.@blank}\z@
      \@tfor\x:=#1\do{%
         \pgfkeysedef{\pgfkeyscurrentpath\x}{%
            \noexpand\pgfkeysalso{\pgfkeyscurrentpath=%
               \noexpand\pgfkeysvalueof{\pgfkeyscurrentpath}\x
               \if*\x   \noexpand\itf@units@scale##1!
               \else    \dimexpr##1\relax\fi}}%
      \pgfkeysEsetvalue{\pgfkeyscurrentpath\x/.@def}{\if*\x\@ne\else\z@\fi}%
      \pgfkeysEsetvalue{\pgfkeyscurrentpath\x/.@blank}{\if*\x\@ne\else\z@\fi}%
      }},%
   /handlers/.estore as dimen/.default=+-*,%
}% /.estore as dimen
\pgfkeys{%
   /handlers/.store as glue in cs/.code={%
      \pgfkeysdef\pgfkeyscurrentpath{%
         \ifx\pgfkeyscurrentvalue\pgfkeysnovalue@text
         \else\csdef{#1}{\glueexpr##1\relax}\fi}%
      \pgfkeyslet{\pgfkeyscurrentpath/.@blank}\z@skip
      \@tfor\x:=+-*\do{%
         \pgfkeysedef{\pgfkeyscurrentpath\x}{%
            \letcs\noexpand\pgfkeys@temp{%
               \noexpand\ifcsname#1\endcsname
                  #1\noexpand\else z@skip\noexpand\fi}%
            \edef\noexpand\pgfkeys@temp{%
               \noexpand\pgfkeysalso{\pgfkeyscurrentpath={%
                  \noexpand\expandonce\noexpand\pgfkeys@temp
                  \x
                  \if*\x\noexpand\itf@units@scale##1!
                  \else\glueexpr\noexpand\unexpanded{##1}\relax\fi}}%
            }\noexpand\pgfkeys@temp}%
      \pgfkeysEsetvalue{\pgfkeyscurrentpath\x/.@def}{\if*\x\@ne\else\z@skip\fi}%
      \pgfkeysEsetvalue{\pgfkeyscurrentpath\x/.@blank}{\if*\x\@ne\else\z@skip\fi}%
   }},%
   /handlers/.store as glue in cs/.value required,%
}% /.store as glue in cs
\pgfkeys{%
   /handlers/.estore as glue in cs/.code={%
      \pgfkeysdef\pgfkeyscurrentpath{%
         \ifx\pgfkeyscurrentvalue\pgfkeysnovalue@text
         \else\csedef{#1}{\the\glueexpr##1\relax}\fi}%
      \pgfkeyslet{\pgfkeyscurrentpath/.@blank}\z@skip
      \@tfor\x:=+-*\do{%
         \pgfkeysedef{\pgfkeyscurrentpath\x}{%
            \noexpand\pgfkeysalso{\pgfkeyscurrentpath=%
               \noexpand\csname\noexpand\ifcsname#1\endcsname
                  #1\noexpand\else z@skip\noexpand\fi\endcsname
               \x
               \if*\x\noexpand\itf@units@scale##1!
               \else\glueexpr##1\relax\fi}}%
      \pgfkeysEsetvalue{\pgfkeyscurrentpath\x/.@def}{\if*\x\@ne\else\z@skip\fi}%
      \pgfkeysEsetvalue{\pgfkeyscurrentpath\x/.@blank}{\if*\x\@ne\else\z@skip\fi}%
   }},%
   /handlers/.etore as glue in cs/.value required,%
}% /.estore as glue in cs
\pgfkeys{%
   /handlers/.store in skip cs/.code={%
      \pgfkeysdef\pgfkeyscurrentpath{%
         \ifx\pgfkeyscurrentvalue\pgfkeysnovalue@text
         \else\csname#1\endcsname\glueexpr##1\relax\fi}%
      \pgfkeyslet{/\pgfkeyscurrentpath/.@blank}\z@skip
      \@tfor\x:=+-*\do{%
         \pgfkeysedef{\pgfkeyscurrentpath\x}{%
            \noexpand\pgfkeysalso{\pgfkeyscurrentpath=%
               \csname#1\endcsname  % should have been defined as a skip (not expandable)
               \x
               \if*\x\noexpand\itf@units@scale##1!
               \else\glueexpr##1\relax\fi}}%
      \pgfkeysEsetvalue{\pgfkeyscurrentpath\x/.@def}{\if*\x\@ne\else\z@skip\fi}%
      \pgfkeysEsetvalue{\pgfkeyscurrentpath\x/.@blank}{\if*\x\@ne\else\z@skip\fi}%
   }},%
   /handlers/.store in skip cs/.value required,%
}% /.store in skip cs
\pgfkeys{%
   /handlers/.store as dimen in cs/.code={%
      \pgfkeysdef\pgfkeyscurrentpath{%
         \ifx\pgfkeyscurrentvalue\pgfkeysnovalue@text
         \else\csdef{#1}{\dimexpr##1\relax}\fi}%
      \pgfkeyslet{\pgfkeyscurrentpath/.@blank}\z@
      \@tfor\x:=+-*\do{%
         \pgfkeysedef{\pgfkeyscurrentpath\x}{%
            \letcs\noexpand\pgfkeys@temp{%
               \ifcsname#1\endcsname#1\else z@\fi}%
            \edef\noexpand\pgfkeys@temp{%
            \noexpand\pgfkeysalso{\pgfkeyscurrentpath={%
               \noexpand\expandonce\noexpand\pgfkeys@temp
               \x
               \if*\x\noexpand\itf@units@scale##1!
               \else\dimexpr\noexpand\unexpanded{##1}\fi}}%
            }\noexpand\pgfkeys@temp}%
      \pgfkeysEsetvalue{\pgfkeyscurrentpath\x/.@def}{\if*\x\@ne\else\z@\fi}%
      \pgfkeysEsetvalue{\pgfkeyscurrentpath\x/.@blank}{\if*\x\@ne\else\z@\fi}%
   }},%
   /handlers/.store as dimen in cs/.value required,%
}% /.store as dimen in cs {csname}{+-}
\pgfkeys{%
   /handlers/.estore as dimen in cs/.code={%
      \pgfkeysdef\pgfkeyscurrentpath{%
         \ifx\pgfkeyscurrentvalue\pgfkeysnovalue@text
         \else \@defaultunits\itf@sk ##1pt\relax\@nnil
               \csedef{#1}{\the\dimexpr\itf@sk\relax}\fi}%
      \pgfkeyslet{\pgfkeyscurrentpath/.@blank}\z@
      \@tfor\x:=+-*\do{%
         \pgfkeysedef{\pgfkeyscurrentpath\x}{%
            \noexpand\ifcsname#1\endcsname
               \noexpand\@defaultunits\itf@sk
                  \noexpand\csname#1\endcsname pt\relax\noexpand\@nnil
            \noexpand\else\itf@sk\z@\noexpand\fi
            \if*\x
               \itf@sk\dimexpr\itf@sk*\noexpand\itf@units@scale##1!\relax
            \else
               \noexpand\@defaultunits\@tempdima ##1pt\relax\noexpand\@nnil
               \advance\itf@sk\x\@tempdima
            \fi
            \noexpand\pgfkeysalso{\pgfkeyscurrentpath=\itf@sk}}%
      \pgfkeysEsetvalue{\pgfkeyscurrentpath\x/.@def}{\if*\x\@ne\else\z@\fi}%
      \pgfkeysEsetvalue{\pgfkeyscurrentpath\x/.@blank}{\if*\x\@ne\else\z@\fi}%
   }},%
   /handlers/.etore as dimen in cs/.value required,%
}% /.estore as dimen in cs
\pgfkeys{%
   /handlers/.store in dimen cs/.code={%
      \pgfkeysdef\pgfkeyscurrentpath{%
         \ifx\pgfkeyscurrentvalue\pgfkeysnovalue@text
         \else\csname#1\endcsname\dimexpr##1\relax\fi}%
      \pgfkeyslet{/\pgfkeyscurrentpath/.@blank}\z@
      \@tfor\x:=+-*\do{%
         \pgfkeysedef{\pgfkeyscurrentpath\x}{%
            \if*\x \else
            \noexpand\@defaultunits\itf@sk ##1pt\relax\noexpand\@nnil
            \fi
            \noexpand\pgfkeysalso{\pgfkeyscurrentpath=%
               \csname#1\endcsname  % should have been defined as a dimen (not expandable)
               \x
               \if*\x \noexpand\itf@units@scale##1!
               \else\itf@sk\fi}}%
      \pgfkeysEsetvalue{\pgfkeyscurrentpath\x/.@def}{\if*\x\@ne\else\z@\fi}%
      \pgfkeysEsetvalue{\pgfkeyscurrentpath\x/.@blank}{\if*\x\@ne\else\z@\fi}%
   }},%
   /handlers/.store in dimen cs/.value required,%
}% /.store in dimen cs
\pgfkeys{%
   /handlers/.is multiple choice/.code=%
      \pgfkeys{\pgfkeyscurrentpath/.cd,%
         .unknown/.style={/errors/unknown choice value=\pgfkeyscurrentkey\pgfkeyscurrentvalue},%
         .code=\expandafter\pgfkeys\expandafter{\pgfkeyscurrentkey/.cd,####1}%
      },%
   /handlers/.is multiple choice/.value forbidden,%
}% /.is multiple choice
\pgfkeys{%
   /handlers/.is enum/.code={%
      \itf@cnt\z@
      \@for\x:=\pgfkeyscurrentvalue\do{%
         \pgfkeysedef{\pgfkeyscurrentpath/\x}{%
            \noexpand\pgfkeyssetvalue{\pgfkeyscurrentpath}{\x}%
            \noexpand\pgfkeyssetvalue{\pgfkeyscurrentpath/.number}{\the\itf@cnt}}%
         \ifnum\itf@cnt=\z@
            \pgfkeyslet{\pgfkeyscurrentpath/.@def}\x
            \pgfkeyslet{\pgfkeyscurrentpath/.@blank}\x
         \fi
         \advance\itf@cnt\@ne
      }%
      \pgfkeysalso{\pgfkeyscurrentpath/.is choice}},%
   /handlers/.is enum/.value required,%
}% /.is enum
\endinput
%%
%% End of file `interfaces-pgfkeys.sty'.
