% Copyright 2018 by Mark Wibrow % % This file may be distributed and/or modified % % 1. under the LaTeX Project Public License and/or % 2. under the GNU Public License. % % See the file doc/generic/pgf/licenses/LICENSE for more details. % Common keys for all logic gates. % \pgfkeys{/pgf/.cd,% logic gate input sep/.initial=0.125cm, logic gate inputs/.initial={normal,normal},% logic gate inverted radius/.initial=2pt, }% % Internal macro for parsing inputs. % \expandafter\ifx\csname pgf@lib@sh@logicgate@parseinputs\endcsname\relax% \def\pgf@lib@sh@logicgate@parseinputs#1{% \edef\pgf@lib@sh@temp{\pgfkeysvalueof{/pgf/logic gate inputs}}% \c@pgf@counta#1\relax% \c@pgf@countb0\relax% \expandafter\pgfutil@in@\expandafter,\expandafter{\pgf@lib@sh@temp}% \ifpgfutil@in@% \let\pgf@lib@sh@next\pgf@lib@sh@logicgate@parseinputs@long% \else% \let\pgf@lib@sh@next\pgf@lib@sh@logicgate@parseinputs@short% \fi% \pgf@lib@sh@next% }% \def\pgf@lib@sh@itext{i}% \def\pgf@lib@sh@invertedtext{inverted}% \def\pgf@lib@sh@atchar{@}% \def\pgf@lib@sh@gobbletilat#1@{}% \def\pgf@lib@sh@gobbletilatcomma#1@,{}% % % The `short' version for input specification is an extension of % ideas due to Juergen Werber and Christoph Bartoschek. % \def\pgf@lib@sh@logicgate@parseinputs@short{% \expandafter\pgf@lib@sh@logicgate@parseinputs@@short\pgf@lib@sh@temp @% }% \def\pgf@lib@sh@logicgate@parseinputs@@short#1{% \def\pgf@lib@sh@tmp{#1}% \ifx\pgf@lib@sh@tmp\pgf@lib@sh@atchar% \edef\pgf@lib@sh@logicgate@numinputs{\the\c@pgf@countb}% \let\pgf@lib@sh@next=\relax% \else% \ifnum\c@pgf@countb=\c@pgf@counta% \edef\pgf@lib@sh@logicgate@numinputs{\the\c@pgf@countb}% \let\pgf@lib@sh@next=\pgf@lib@sh@gobbletilat% \else% \advance\c@pgf@countb by1\relax% \expandafter\ifx\pgf@lib@sh@itext#1% \expandafter\pgf@sh@resavedmacro\expandafter{\csname input-\the\c@pgf@countb\endcsname}{% \expandafter\def\csname input-\the\c@pgf@countb\endcsname{i}}% \else% \expandafter\pgf@sh@resavedmacro\expandafter{\csname input-\the\c@pgf@countb\endcsname}{% \expandafter\def\csname input-\the\c@pgf@countb\endcsname{n}}% \fi% \let\pgf@lib@sh@next=\pgf@lib@sh@logicgate@parseinputs@@short% \fi% \fi% \pgf@lib@sh@next% }% \def\pgf@lib@sh@logicgate@parseinputs@long{% \expandafter\pgf@lib@sh@logicgate@parseinputs@@long\pgf@lib@sh@temp,@,% }% \def\pgf@lib@sh@logicgate@parseinputs@@long#1,{% \def\pgf@lib@sh@tmp{#1}% \ifx\pgf@lib@sh@tmp\pgf@lib@sh@atchar% \edef\pgf@lib@sh@logicgate@numinputs{\the\c@pgf@countb}% \let\pgf@lib@sh@next=\relax% \else% \ifnum\c@pgf@countb=\c@pgf@counta% \edef\pgf@lib@sh@logicgate@numinputs{\the\c@pgf@countb}% \let\pgf@lib@sh@next=\pgf@lib@sh@gobbletilatcomma% \else% \advance\c@pgf@countb by1\relax% \def\pgf@lib@sh@temp{#1}% \ifx\pgf@lib@sh@invertedtext\pgf@lib@sh@temp% \expandafter\pgf@sh@resavedmacro\expandafter{\csname input-\the\c@pgf@countb\endcsname}{% \expandafter\def\csname input-\the\c@pgf@countb\endcsname{i}}% \else% \expandafter\pgf@sh@resavedmacro\expandafter{\csname input-\the\c@pgf@countb\endcsname}{% \expandafter\def\csname input-\the\c@pgf@countb\endcsname{n}}% \fi% \let\pgf@lib@sh@next=\pgf@lib@sh@logicgate@parseinputs@@@long% \fi% \fi% \pgf@lib@sh@next% }% \def\pgf@lib@sh@logicgate@parseinputs@@@long{% \pgfutil@ifnextchar x{\pgf@lib@sh@logicgate@parseinputs@@long}% {\pgf@lib@sh@logicgate@parseinputs@@long}% }% \fi%