%
% CoDi: Commutative Diagrams for TeX
% Copyright (c) 2015-2024 Paolo Brasolin <
[email protected]>
% SPDX-License-Identifier: MIT
%
% This file is part of CoDi 1.1.2, released on 2024/04/22 under MIT license.
%
% εκτροπή • (ektropí)
% 1. diversion
% 2. deflection
% 3. aberration
% Ektropi is a mechanism to hijack the /tikz/.unknown handler.
% It allows the addition of maximum priority paths in the key finding algorithm.
% The diversions are globally scoped, cumulative and removable.
\usetikzlibrary{commutative-diagrams.koinos}
\kDStoreCatcodeOf @
\catcode`@=11
%==[ handler restoring procedure ]==============================================
% The default handler's code is backed up as a token list at load time.
% NOTE: this has strong implications on loading order!
\newtoks\kDEktropiDefaultToksBackup
\expandafter\expandafter
\expandafter\kDEktropiDefaultToksBackup
\expandafter\expandafter
\expandafter{\csname pgfk@/tikz/.unknown/.@body\endcsname}
\def\kDEktropiRestore{
% Restore handler body.
\def\kDAct{\pgfkeyssetvalue{/tikz/.unknown/.@body}}
\expandafter\kDAct\expandafter{\the\kDEktropiDefaultToksBackup}
% Restore handler macro.
% NOTE: #s are doubled since we're inside \kDAct helper.
\def\kDAct{\long\def\kDAct####1\pgfeov}
\expandafter\kDAct\expandafter{\the\kDEktropiDefaultToksBackup}
\pgfkeyslet{/tikz/.unknown/.@cmd}\kDAct
}
% This key is the user interface. Self explanatory.
\pgfkeys{/ektropi/restore/.code={\kDEktropiRestore}}
%==[ handler hacking procedure ]================================================
% This key is the user interface. It wraps the /tikz/.unknown handler code
% with a conditional that executes it only if the unknown key retrieval
% fails inside the path passed to /ektropi/add.
\pgfkeys{/ektropi/add/.style={
/tikz/.unknown/.add code=
{
\let\tikz@key\pgfkeyscurrentname
\pgfkeys{#1/\tikz@key/.try={##1}}
\ifpgfkeyssuccess\else
}{
\fi
}
}
}
\kDRestoreCatcodeOf @