% \CheckSum{12884}
% \iffalse meta-comment
% forest-index.dtx
%% `forest-compat' defines a compatibility layer of package `forest'.
%%
%% Copyright (c) 2012-2017 Saso Zivanovic
%%                         (Sa\v{s}o \v{Z}ivanovi\'{c})
%% [email protected]
%%
%% 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 `author-maintained'.
%%
%% This file is a part of package `forest'. For the list of files
%% constituting the package see main source file of the package,
%% `forest.dtx', or the derived `forest.sty'.

\ProvidesPackage{forest-compat}[2016/12/31]

\def\forest@deprecated#1{%
 \PackageWarning{forest}{Compatibility mode for #1}%
}
\forestset{@@deprecated/.code={\forest@deprecated{#1}}}
\def\forestcompat#1{\pgfqkeys{/forest/@compat}{#1}}
\def\forestcompat@patchfailed{%
 \pgfkeys@split@path
 \PackageError{forest}{Patching in compat=\pgfkeyscurrentname\space failed}{}%
}
\forestcompat{
 silent/.code={\def\forest@deprecated##1{}},
 %%% begin listing region: compat_keys
 most/.style={1.0-most},
 all/.style={1.0-all},
 none/.style={},
 1.0-harmless/.style={
   1.0-triangle,1.0-linear,1.0-nodewalk,1.0-ancestors,
   1.0-fittotree,1.0-for,1.0-forall,
 },
 1.0-most/.style={1.0-harmless,2.0.2-most},
 1.0-all/.style={1.0-harmless,
   1.0-forstep,1.0-rotate,1.0-stages,1.0-name,
   2.0.2-all,
 },
 2.0.2-most/.style={2.0-most},
 2.0.2-all/.style={
   2.0.2-delayn,2.0.2-wrapnpgfmathargs,
   2.0-all,
 },
 2.0-edges/.style={2.0-anchors,2.0-forkededge,2.0-folder},
 2.0-most/.style={2.1.1-most},
 2.0-all/.style={
   2.0-delayn,
   2.0-edges,
   2.1.1-all,
 },
 2.1.1-most/.style={},
 2.1.1-all/.style={2.1.1-loops},
 %%% end listing region: compat_keys
 1.0-triangle/.style={
   /forest/triangle/.style={
     @@deprecated={key "triangle" from v1.0.x. Use key "roof" from library "linguistics" instead},
     edge path'={%
       (.north west)--(!u.south)--(.north east)--cycle
     }
   }
 },
 1.0-linear/.style={
   /forest/define long step={linear next}{autostep}{%
     \forest@deprecated{nodewalk step "linear next" from v1.0. Use key "next node" instead.}%
     \edef\forest@cn{\forest@node@linearnextid}},
   /forest/define long step={linear previous}{autostep}{%
     \forest@deprecated{nodewalk step "linear previous" from v1.0. Use key "previous node" instead.}%
     \edef\forest@cn{\forest@node@linearpreviousid}},
 },
 1.0-nodewalk/.style={
   /forest/node walk/before walk/.style={},
   /forest/node walk/every step/.style={},
   /forest/node walk/after walk/.style={},
   /forest/node walk/.style={
     @@deprecated={key "node walk" from v1.0. Use key "nodewalk" instead.},
     /forest/node walk/before walk,
     /forest/nodewalk/before walk/.style={/forest/node walk/before walk},
     /forest/nodewalk/every step/.style={/forest/node walk/every step},
     /forest/nodewalk/after walk/.style={/forest/node walk/after walk},
     /forest/nodewalk/node walk/.style={before walk,for nodewalk={####1,options={/forest/nodewalk/after walk}}{/forest/nodewalk/every step}},
     for nodewalk={##1,options={/forest/nodewalk/after walk}}{/forest/nodewalk/every step},
   },
 },
 1.0-ancestors/.style={
   /forest/for ancestors'/.style={
     @@deprecated={key "for ancestors'" from v1.0.x.  Use key "for current and ancestors" instead.},
     for current and ancestors={##1}},
 },
 1.0-fittotree/.style={%
   /tikz/fit to tree/.style={
     /forest/@@deprecated={key "/tikz/fit to tree" from v1.0.x.  Use "/tikz/fit to=tree" instead.},
     inner sep=0pt,fit to=tree
   }
 },
 1.0-for/.style={
   /forest/for/.code 2 args={%  #1 = nodewalk, #2 = after walk keylist
     \forest@deprecated{Key "for" from v1.0.x.  Use key "for group" instead.}%
     \forest@forthis{\forest@nodewalk{##1,options={##2}}{}}%
   }
 },
 1.0-forall/.style={
   /forest/for all next/.style={
     @@deprecated={Key "for all next" from v1.0.x.  Use key "for following siblings" instead.},
     for following siblings={##1}},
   /forest/for all previous/.style={
     @@deprecated={Key "for all previous" from v1.0.x.  Use key "for preceding siblings" instead.},
     for preceding siblings={##1}},
 },
 1.0-forstep/.code={%
   \def\forest@forstepwrapper##1##2{%
     \forest@forthis{%
       \forest@configured@nodewalk{independent}{independent}{compatfake}{##1}{##2}%
     }%
   }%
   \def\forest@relatednode@option@compat@ignoreinvalidsteps##1{%
     \forest@saveandrestoremacro\forest@nodewalk@oninvalid{%
       \def\forest@nodewalk@oninvalid{compatfake}%
       ##1%
     }%
   }%
 },
 1.0-rotate/.style={
   /forest/undef option=rotate,
   rotate/.style={
     @@deprecate={Using non-autoforwarded key "rotate". Some keys, like "forked edges" and "folder", might produce a wrong result.},
     node options={rotate={##1}},
   },
 },
 1.0-stages/.style={
   /forest/@@deprecated={Using v1.0.x "stages" style},
   /forest/stages/.style={
     process keylist=before typesetting nodes,
     typeset nodes stage,
     process keylist=before packing,
     pack stage,
     process keylist=before computing xy,
     compute xy stage,
     process keylist=before drawing tree,
     draw tree stage,
   },
   /forest/TeX={%
     \def\forest@defstages##1{%
       \def\forest@stages{%
         begin forest,
         for root'={
           process keylist register=default preamble,
           process keylist register=preamble
         },
         process keylist=given options,
         ##1,
         end forest
       }%
     }%
   },
 },
 1.0-name/.code={%
   \forest@deprecated{key "name": using key "name" from v1.0.x, which does not enforce uniqueness. If you really need this, you're doing something wrong.}%
   \def\forest@node@setname##1{%
     \ifstrempty{##1}{}{%
       \forestoeset{name}{##1}%
       \csedef{forest@id@of@##1}{\forest@cn}%
     }%
   }%
   \def\forest@node@setalias##1{%
     \ifstrempty{##1}{}{%
       \csedef{forest@id@of@##1}{\forest@cn}%
     }%
   }%
 },
 2.0.2-delayn/.style={
   /forest/delay@n/.style 2 args={
     @@deprecated={propagator "delay n" (it introduces two levels of hash doubling reevaluates the first argument (the desired number of cycles) at every cycle)},
     if={##1==1}{delay={##2}}{delay={delay@n/.wrap pgfmath arg={{####1}{##2}}{##1-1}}}
   },
   2.0-delayn/.style={}, % this key would patch the same thing!
 },
 2.0.2-wrapnpgfmathargs/.code={%
   \def\forest@wrap@pgfmath@args@@@wrapandpasson{%
     \forest@deprecated{handler "wrap n pgfmath args" (it introduces two levels of hash doubling)}%
     \expandafter\expandafter\expandafter\def
         \expandafter\expandafter\expandafter\forest@wrapped
         \expandafter\expandafter\expandafter{%
           \expandafter\forest@wrap@code\forest@wrap@args}%
     \expandafter\pgfkeysalso\expandafter{\expandafter\pgfkeyscurrentpath\expandafter=\expandafter{\forest@wrapped}}%
   }%
 },
 2.0-delayn/.style={
   /forest/delay n/.style 2 args={
     @@deprecated={propagator "delay n" (it reevaluates the first argument (the desired number of cycles) at every cycle)},
     if={##1==0}{##2}{delay@n={##1}{##2}}
   },
   /forest/delay@n/.style 2 args={
     if={##1==1}{delay={##2}}{delay={delay@n/.process={P}{##1-1}{##2}}}
   },
 },
 2.0-anchors/.code={%
   \csdef{forest@anchor@@parent'}{%
     \forest@anchor@isbordertrue
     \edef\forest@temp@anchor{\number\numexpr\forestove{grow}-\forestove{rotate}+180}%
   }
   \csdef{forest@anchor@@parent first'}{%
     \forest@anchor@isbordertrue
     \edef\forest@temp@anchor@parent{\number\numexpr\forestove{grow}-\forestove{rotate}+180}%
     \edef\forest@temp@anchor@first{\number\numexpr\forestove{grow}-\forestove{rotate}\ifnum\forestove{reversed}=0 -\else+\fi90}%
     \forest@getaverageangle{\forest@temp@anchor@parent}{\forest@temp@anchor@first}\forest@temp@anchor
   }
   \csdef{forest@anchor@@parent last'}{%
     \forest@anchor@isbordertrue
     \edef\forest@temp@anchor@parent{\number\numexpr\forestove{grow}-\forestove{rotate}+180}%
     \edef\forest@temp@anchor@last{\number\numexpr\forestove{grow}-\forestove{rotate}\ifnum\forestove{reversed}=0 +\else-\fi90}%
     \forest@getaverageangle{\forest@temp@anchor@parent}{\forest@temp@anchor@last}\forest@temp@anchor
   }
 },
 2.0-forkededge/.code={%
   \forest@iflibraryloaded{edges}{%
     \forestset{
       forked edge/.style={
         edge={rotate/.pgfmath=grow()},
         edge path'={(!u.parent anchor) -- ++(\forestoption{fork sep},0) |- (.child anchor)},
       },
       forked edges/.style={
         for tree={parent anchor=children},
         for descendants={child anchor=parent,forked edge}
       },
     }%
   }{%
     \appto\forest@compat@libraries@edges{\forestcompat{2.0-forkededge}}%
   }%
 },
 2.0-folder/.code={%
   \forest@iflibraryloaded{edges}{%
     \expandafter\patchcmd\csname pgfk@/forest/folder/.@cmd\endcsname
       {parent anchor=-children last}
       {parent anchor=parent last}
       {}{\forestcompat@patchfailed}%
     \expandafter\patchcmd\csname pgfk@/forest/folder/.@cmd\endcsname
       {edge={rotate/.option=!parent.grow},}
       {edge={rotate/.pgfmath=grow()}}
       {}{\forestcompat@patchfailed}%
   }{%
     \appto\forest@compat@libraries@edges{\forestcompat{2.0-folder}}%
   }%
 },
 2.1.1-loops/.code={%
   \patchcmd\newsafeRKloop % pre-{##1}
     {\forest@temp@toks}%
     {%
       \forest@deprecated{hash-doubling loops from pre-2.1.2}%
       \def\forest@temp
     }%
     {}{\forestcompat@patchfailed}%
   \patchcmd\newsafeRKloop % post-{##1}
     {\csedef}%
     {\forest@temp@toks\expandafter{\forest@temp}\csedef}%
     {}{\forestcompat@patchfailed}%
 },
}
\expandafter\forestcompat\expandafter{\forest@compat}