You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
3.5 KiB
103 lines
3.5 KiB
% Copyright 2008 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%
|
|
|