summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing.sty
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2009-05-07 01:03:06 +0000
committerKarl Berry <karl@freefriends.org>2009-05-07 01:03:06 +0000
commit5050a2bc79879cd4e8e64db1e16776dc0ad6e2ea (patch)
treeaa6fda12fd5f2194165bb1f9eb24aedda471499a /Master/texmf-dist/tex/latex/tikz-timing/tikz-timing.sty
parente2681bc64b61864ab5d8671fcf7d75ebe30586cc (diff)
tikz-timing 0.4a (5may09)
git-svn-id: svn://tug.org/texlive/trunk@12963 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/tikz-timing/tikz-timing.sty')
-rw-r--r--Master/texmf-dist/tex/latex/tikz-timing/tikz-timing.sty1329
1 files changed, 1329 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing.sty b/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing.sty
new file mode 100644
index 00000000000..c00effacb16
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing.sty
@@ -0,0 +1,1329 @@
+%%
+%% This is file `tikz-timing.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% tikz-timing.dtx (with options: `package')
+%%
+%% Copyright (C) 2009 by Martin Scharrer <martin@scharrer-online.de>
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% 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.3c or later is part of all distributions of LaTeX
+%% version 2008/05/04 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Martin Scharrer.
+%%
+%% This work consists of the files tikz-timing.dtx, tikz-timing.ins
+%% and the derived file tikz-timing.sty.
+%%
+\RequirePackage{svn-prov}[2009/05/03]
+\ProvidesPackageSVN
+ {$Id: tikz-timing.dtx 1069 2009-05-05 13:52:29Z martin $}
+ [v0.4a
+ Digital Timing Diagrams using TikZ]
+\DefineFileInfoSVN[tikztiming]
+
+\RequirePackage{tikz}
+\usetikzlibrary{calc}
+\usetikzlibrary{backgrounds}
+\RequirePackage{environ}
+
+\def\tikztimingwidth{0.0}
+\newcount\tikztiming@numint
+\newcount\tikztiming@numfrac
+\def\tikztiming@num{1.0}%
+%%\def\tikztiming@num{\the\tikztiming@numint.\the\tikztiming@numfrac}
+
+\newcounter{tikztiming@nrows}%
+\def\tikztiming@rowdist{2}%
+\def\tikztiming@coldist{1}%
+\def\tikztiminglabel#1{#1}%
+
+\def\tikztiming@prefix{tikztiming@trans@}
+
+\tikzset{timing/.style={%
+ x=1.6ex, y=1.6ex,
+ line cap=round, line join=round,
+ }%
+}
+\tikzset{%
+ timing/.cd,
+ grid/.style={timing,help lines},
+ intext/.style={timing,line width=0.15ex},
+ inline node/.style={shape=coordinate},
+ table/.style={timing,line width=0.15ex,font=\sffamily},
+ coord/.style={inner sep=0pt,outer sep=0pt},
+ save/.style={inner sep=0pt,outer sep=0pt,/utils/exec=\tikztiming@savesettings},
+ restore/.style={/utils/exec=\tikztiming@restoresettings},
+ name/.style={inner sep=0pt,outer sep=0pt},
+ d/text/.style={timing,scale=0.6,font=\sffamily},
+ d/background/.style={},
+ h/.style={},
+ l/.style={},
+ d/.style={},
+ m/.style={black!40!brown},
+ u/background/.style={fill=gray},
+ u/.style={},
+ o/background/.style={},
+ o/.style={timing/d,line width=0.10ex,dotted},
+ z/.style={blue},
+ t/.style={},
+ c/.style={timing/slope=0.0},
+ x/.style={red},
+ table/grid/.style={timing/grid},
+ table/lines/.style={},
+ table/rules/.style={line width=0.08em,line cap=butt},
+ slope/.code={%
+ \tikztimingsetslope{#1}%
+ \tikztimingsetdslope{2*#1}%
+ \tikztimingsetzslope{#1/2}%
+ },
+ lslope/.code={\tikztimingsetslope{#1}},
+ dslope/.code={\tikztimingsetdslope{#1}},
+ zslope/.code={\tikztimingsetzslope{#1}},
+ coldist/.store in=\tikztiming@coldist,
+ rowdist/.store in=\tikztiming@rowdist,
+}
+\def\texttimingbefore{}
+\def\texttimingafter{}
+\def\texttiminggrid{%
+ \draw[xstep={\timingwidth/2.},ystep={\timingheight/2.},timing/grid] (0,0) grid
+ (\timingwidth*\tikztimingwidth,\timingheight);
+}
+\DeclareRobustCommand*\texttiming[2][]{%
+ \begingroup
+ \tikztiming@init
+ \uppercase{\def\lastchar{#1}}%
+ \@ifundefined{tikztiming@initcode@\lastchar}%
+ {}%
+ {\@nameuse{tikztiming@initcode@\lastchar}}%
+ \ifx\lastchar\empty\else
+ \@ifundefined{\tikztiming@prefix\lastchar @start}%
+ {\PackageWarning{tikz-timing}{Start value for timing character '\lastchar'
+ is not defined and will be ignored!}{}{}{}}%
+ {\tikztiming@nameaddtostr{\lastchar @start}{}}%
+ \fi
+ \tikztiming@#2\relax
+ %\message{^^J\meaning\tikztiming@str^^J}%
+ \begin{tikzpicture}[timing/intext]%
+ \path[use as bounding box] (0,0) rectangle
+ (\timingwidth*\tikztimingwidth,\timingheight);%
+ \texttimingbefore
+ \tikztiming@str;%
+ \texttimingafter
+ \end{tikzpicture}%
+ \endgroup
+}
+\def\tikztiming@init{%
+ \def\lastchar{}%
+ \let\currentchar\empty
+ \def\tikztimingwidth{0.0}%
+ \setcounter{tikztimingtrans}{-1}%
+ \def\tikztiming@str{\draw (0,0) coordinate (timing/start base) }%
+}
+\def\timing{%
+ \@ifnextchar{[}%
+ {\timing@}%
+ {\timing@[]}%
+}
+\def\timing@[#1]{%
+ \@ifnextchar{+}%
+ {\timing@@{#1}}%
+ {\@ifnextchar(%)
+ {\timing@@{#1}}%
+ {\timing@@{#1}+(0,0)}%
+ }%
+}
+\def\timing@@#1#2(#3){%
+ \timing@@@{#1}{#2(#3)}%
+}
+\def\timing@@@#1#2#3{%
+ \begingroup
+ \tikztiming@init
+ \@ifnextchar{[}%
+ {\timing@@@init}%
+ {\timing@@@init[]}%
+ #3\relax
+ %\message{^^J\meaning\tikztiming@str^^J}%
+ \begin{scope}[shift={#2},timing,#1]%
+ \tikztiming@str;%
+ \end{scope}%
+ \endgroup
+ \timing@@@end
+}
+\def\timing@@@end#1;{%
+ \ifx;#1;\else
+ \PackageError{tikz-package}{Can not parse timing path}{}{}{}%
+ \fi
+}
+\def\timing@@@init[#1]{%
+ \uppercase{\def\lastchar{#1}}%
+ \@ifundefined{tikztiming@initcode@\lastchar}%
+ {}%
+ {\@nameuse{tikztiming@initcode@\lastchar}}%
+ \ifx\lastchar\empty\else
+ \@ifundefined{\tikztiming@prefix\lastchar @start}%
+ {\PackageWarning{tikz-timing}{Start value for timing character '\lastchar'
+ is not defined and will be ignored!}{}{}{}}%
+ {\tikztiming@nameaddtostr{\lastchar @start}{}}%
+ \fi
+ \tikztiming@
+}
+\let\tikztiming@trans@\@gobble
+\def\tikztiming@aftercode@T{%
+ \tikztiming@output@flush
+}
+\def\tikztiming@aftercode@t{%
+ \tikztiming@aftercode@T
+}
+\def\tikztiming@aftercode@C{%
+ %\tikztiming@output@flush
+}
+\def\tikztiming@aftercode@c{%
+ \tikztiming@aftercode@C
+}
+\def\tikztiming@aftercode@G{%
+ \let\lastchar\secondlastchar
+ \let\tikztimingwidth\lasttikztimingwidth
+}
+\def\tikztiming@aftercode@g{%
+ \let\lastchar\secondlastchar
+ \let\tikztimingwidth\lasttikztimingwidth
+}
+\def\tikztiming@aftercode@S{%
+ \let\lastchar\secondlastchar
+}
+\def\tikztiming@aftercode@s{%
+ \let\lastchar\secondlastchar
+}
+\def\tikztiming@beforenextcode@D@edge@{%
+ \if D\currentchar\else
+ \if d\currentchar\else
+ \def\lastchar{D}%
+ \fi
+ \fi
+}
+\def\tikztiming@beforenextcode@d@edge@{%
+ \if D\currentchar\else
+ \if d\currentchar\else
+ \def\lastchar{D}%
+ \fi
+ \fi
+}
+\def\tikztiming@initcode@D{%
+ \def\lastchar{D@edge@}%
+}
+\def\tikztiming@initcode@d{%
+ \def\lastchar{d@edge@}%
+}
+\def\tikztiming@{%
+ \@ifnextchar\bgroup
+ {\tikztiming@testfornum}%
+ {\tikztiming@testfornum}%
+}
+\def\tikztiming@eaddtostr#1{%
+ \begingroup
+ \tikztiming@internaldefs{}%
+ \@temptokena\expandafter{\tikztiming@str}%
+ \xdef\tikztiming@str{%
+ \the\@temptokena
+ #1%
+ }%
+ \endgroup
+}
+\def\tikztiming@addtostr{%
+ \g@addto@macro\tikztiming@str
+}
+\def\tikztiming@output#1#2{%
+ \ifx\relax#2\relax
+ \tikztiming@nameaddtostr{#1}%
+ \else
+ \ifcase0%
+ \ifx\tikztiming@output@bufchara\empty
+ \ifx\tikztiming@output@bufcharb\empty
+ 1%
+ \fi
+ \fi\relax
+ % not empty
+ \edef\tikztiming@output@currentchar{#2}%
+ \ifcase0%
+ \expandafter\ifx\csname tikztiming@nocombine@#2\endcsname\relax
+ \ifx\tikztiming@output@currentchar\tikztiming@output@bufcharb
+ 1%
+ \fi\fi
+ \relax
+ \tikztiming@output@flush
+ \edef\tikztiming@output@bufchara{#1}%
+ \edef\tikztiming@output@bufcharb{#2}%
+ \or
+ \pgfmathparse{\tikztiming@output@bufnum + \tikztiming@num}%
+ \let\tikztiming@output@bufnum\pgfmathresult
+ \def\tikztiming@num{1.0}%
+ \fi
+ \else % empty
+ \edef\tikztiming@output@bufchara{#1}%
+ \edef\tikztiming@output@bufcharb{#2}%
+ \let\tikztiming@output@bufnum\tikztiming@num
+ \def\tikztiming@num{1.0}%
+ \fi
+ \fi
+}
+\def\tikztiming@output@bufchara{}%
+\def\tikztiming@output@bufcharb{}%
+\def\tikztiming@output@bufnum{0}%
+\def\tikztiming@output@flush{%
+ \begingroup
+ \let\tikztiming@num\tikztiming@output@bufnum
+ \tikztiming@nameaddtostr{%
+ \tikztiming@output@bufchara
+ \tikztiming@output@bufcharb
+ }%
+ \endgroup%
+ \gdef\tikztiming@output@bufchara{}%
+ \gdef\tikztiming@output@bufcharb{}%
+ \global\let\tikztiming@output@bufnum\tikztiming@num
+ \gdef\tikztiming@num{1.0}%
+}
+\def\tikztiming@nameaddtostr#1{%
+ \begingroup
+ \edef\@tempa{\tikztiming@num}%
+ \expandafter\g@addto@macro
+ \expandafter\tikztiming@str
+ \expandafter{\csname\tikztiming@prefix#1\expandafter\endcsname
+ \expandafter{\@tempa} }%
+ \endgroup
+ \def\tikztiming@num{1.0}%
+}
+\newcommand\tikztiming@nameedef[3][A]{%
+ \def\@gtempa##1{#3}%
+ \expandafter\let\csname\tikztiming@prefix#2@general\endcsname\@gtempa
+ \begingroup
+ \tikztiming@internaldefs{#1}%
+ \xdef\@gtempa##1{\@gtempa{\width}}%
+ \endgroup
+ \expandafter\let\csname\tikztiming@prefix#2\endcsname\@gtempa
+ \let\@gtempa\empty
+}
+\newcommand\tikztiming@namelet[2]{%
+ \ifcase0%
+ \@ifundefined{\tikztiming@prefix#2}%
+ {\@ifundefined{\tikztiming@prefix#1}%
+ {0}{1}%
+ }%
+ {1}%
+ \relax
+ \else
+ \expandafter\let
+ \csname\tikztiming@prefix#1\expandafter\endcsname
+ \csname\tikztiming@prefix#2\endcsname
+ \fi
+}
+\def\tikztiming@@end{%
+ \tikztiming@output@flush
+ \global\let\tikztimingwidth\tikztimingwidth
+ \tikztiming@addtostr{ coordinate (timing/end)
+ let \p1 = (timing/start base), \p2 = (timing/end) in
+ coordinate (timing/end base) at (\x2,\y1)
+ coordinate (timing/end top) at (\x2,1+\y1)
+ }%
+}
+\def\tikztiming@@#1{%
+ \ifx\relax#1\empty
+ \expandafter\tikztiming@@end
+ \else
+ \let\lasttikztimingwidth\tikztimingwidth
+ \tikztiming@iflower{#1}%
+ {\pgfmathparse{\tikztiming@num/2.0}\let\tikztiming@num\pgfmathresult}%
+ {}%
+ \pgfmathparse{\tikztimingwidth + \tikztiming@num}%
+ \let\tikztimingwidth\pgfmathresult
+ \def\currentchar{#1}%
+ \uppercase{\def\currentcharuc{#1}}%
+ \@ifundefined{tikztiming@beforenextcode@\lastchar}%
+ {}%
+ {\@nameuse{tikztiming@beforenextcode@\lastchar}}%
+ \@ifundefined{tikztiming@beforecode@\currentchar}%
+ {}%
+ {\@nameuse{tikztiming@beforecode@\currentchar}}%
+ \@ifundefined{\tikztiming@prefix\lastchar\currentchar}%
+ {\@ifundefined{\tikztiming@prefix\lastchar\currentcharuc}%
+ {\PackageWarning{tikz-timing}{Timing transition '\lastchar\currentchar'
+ is not defined and will be ignored!}{}{}{}}%
+ {\tikztiming@output{\lastchar}{\currentcharuc}}%
+ }%
+ {\tikztiming@output{\lastchar}{\currentchar}}%
+ \let\secondlastchar\lastchar
+ \let\lastchar\currentcharuc
+ \@ifundefined{tikztiming@aftercode@\currentcharuc}%
+ {}%
+ {\@nameuse{tikztiming@aftercode@\currentcharuc}}%
+ \expandafter
+ \tikztiming@testfortext
+ \fi
+}
+\def\tikztiming@testfortext{%
+ \@ifnextchar\bgroup
+ {\tikztiming@handletext}%
+ {\tikztiming@}%
+}
+\def\tikztiming@handletext#1{%
+ \@ifnextchar{[}%
+ {\tikztiming@handletext@}%
+ {\tikztiming@handletext@[]}%
+ #1\relax
+}
+\def\tikztiming@handletext@[#1]#2\relax{%
+ \begingroup
+ \expandafter\lowercase\expandafter{%
+ \expandafter\def\expandafter\currentcharlc
+ \expandafter{\currentchar}%
+ }%
+ \pgfkeysifdefined{/tikz/timing/\currentcharlc/text/.@cmd}%
+ {%
+ \tikztiming@output@flush
+ \tikztiming@eaddtostr{%
+ node (timing@dend) at +(\dslope/2.0,\height/2.0) {}
+ node [%]
+ shift={($ (timing@dstart)!0.5!(timing@dend) $)},%
+ timing/\currentcharlc/text,%
+ }%
+ \endgroup
+ \tikztiming@addtostr{%[
+ #1%
+ ] {#2}%
+ }%
+ \def\lastchar{D@edge@}%
+ }{%
+ \endgroup
+ \PackageWarning{tikz-timing}{Ignoring text for character
+ '\currentchar'!}{}{}{}%
+ }%
+ \tikztiming@
+}
+\def\tikztiming@stoppath#1{%
+ \tikztiming@output@flush
+ \tikztiming@eaddtostr{%
+ \newdraw
+ }%
+ \tikztiming@
+}
+\def\tikztiming@stoppath@nosave#1{%
+ \tikztiming@output@flush
+ \tikztiming@eaddtostr{%
+ \newdrawns
+ }%
+ \tikztiming@
+}
+\def\tikztiming@addnode#1{%
+ \@ifnextchar{[}%]
+ {\tikztiming@addnode@getoptions}%
+ {\tikztiming@addnode@getoptions[]}%
+}
+\def\tikztiming@addnode@getoptions[#1]{%
+ \@ifnextchar{(}%)}
+ {\tikztiming@addnode@getname{#1}}%
+ {\tikztiming@addnode@getname{#1}()}%
+}
+\def\tikztiming@addnode@getname#1(#2){%
+ \@ifnextchar\bgroup
+ {\tikztiming@addnode@{#1}{#2}}%
+ {\tikztiming@addnode@{#1}{#2}{}}%
+}
+\def\tikztiming@addnode@#1#2#3{%
+ \tikztiming@output@flush
+ \begingroup
+ \def\@tempa{#2}%
+ \ifx\@tempa\empty
+ \def\@tempa{ node [timing/inline node,#1] }%
+ \else
+ \def\@tempa{ node [timing/inline node,#1] (#2) }%
+ \fi
+ \expandafter\tikztiming@addtostr\expandafter{\@tempa {#3} }%
+ \endgroup
+ \tikztiming@
+}
+\def\tikztiming@testforcode{%
+ \@ifnextchar{!}%
+ {\tikztiming@testforcode@}%
+ {\@ifnextchar{[}%
+ {\tikztiming@handleoption}%
+ {\@ifnextchar{;}%
+ {\tikztiming@stoppath@nosave}%
+ {\@ifnextchar{,}%
+ {\tikztiming@stoppath}%
+ {\@ifnextchar{N}%
+ {\tikztiming@addnode}%
+ {\tikztiming@@}%
+ }%
+ }%
+ }%
+ }%
+}
+\def\tikztiming@testforcode@#1{%
+ \@ifnextchar\bgroup
+ {\tikztiming@handlecode}%
+ {%
+ \PackageWarning{tikz-timing}{Missing braces after '!' character. Ignoring
+ this character}{}{}{}%
+ \tikztiming@
+ }%
+}
+\def\tikztiming@handlecode#1{%
+ \tikztiming@output@flush
+ \tikztiming@addtostr{ #1 }%
+ \tikztiming@
+}
+\def\tikztiming@handleoption[#1]{%
+ \tikztiming@addtostr{ [#1] }%
+ \tikztiming@
+}
+
+\def\tikztiming@testfornum{%
+ \let\tikztiming@numchars\empty
+ \tikztiming@numfrac0\relax
+ \afterassignment
+ \tikztiming@testfornum@
+ \tikztiming@numint0%
+}
+\def\tikztiming@testfornumfrac{%
+ \afterassignment
+ \tikztiming@testfornum@@@
+ \tikztiming@numfrac1%
+}
+\def\tikztiming@numloop{%
+ \ifnum\tikztiming@numint>0%
+ \toks@\expandafter{\tikztiming@numchars}%
+ \xdef\tikztiming@numchars{%
+ \the\toks@
+ \the\@temptokena
+ }%
+ \advance\tikztiming@numint by -1\relax
+ \expandafter\tikztiming@numloop
+ \fi
+}
+\def\tikztiming@testfornum@{%
+ \ifnum0<\tikztiming@numint
+ \let\tikztiming@next\tikztiming@testfornum@@
+ \else
+ \def\tikztiming@next{%
+ \@ifnextchar{.}%
+ {\expandafter\tikztiming@testfornumfrac\@gobble}%
+ {%
+ \tikztiming@numint1\relax
+ \tikztiming@numfrac0\relax
+ \def\tikztiming@num{1.0}%
+ \expandafter\tikztiming@testforcode
+ }%
+ }%
+ \fi
+ \tikztiming@next
+}
+\def\tikztiming@testfornum@@{%
+ \@ifnextchar{.}%
+ {\expandafter\tikztiming@testfornumfrac\@gobble}%
+ {\tikztiming@testfornum@@@}%
+}
+\def\tikztiming@testfornum@@@{%
+ \xdef\tikztiming@num{\the\tikztiming@numint.\expandafter\@gobble\the\tikztiming@numfrac}%
+ \@ifnextchar\bgroup
+ {%
+ \expandafter\tikztiming@numfrac\expandafter0\expandafter
+ \@gobble\the\tikztiming@numfrac\relax
+ \ifnum0=\tikztiming@numfrac\else
+ \pgfmathparse{round(\tikztiming@num)}%
+ \PackageWarning{tikz-timing}%
+ {Can not repeat group by a non-integer factor!^^J%
+ Rounding '\tikztiming@num' to '\pgfmathresult'.}{}{}{}%
+ \let\tikztiming@num\pgfmathresult
+ \fi
+ \tikztiming@testfornum@@@@
+ }%
+ {%
+ \tikztiming@testforcode
+ }%
+}
+\def\tikztiming@testfornum@@@@#1{%
+ \begingroup
+ \@temptokena{#1}%
+ \tikztiming@numloop%
+ \endgroup
+ \tikztiming@numint1\relax
+ \tikztiming@numfrac0\relax
+ \expandafter\tikztiming@\tikztiming@numchars
+}
+\newcounter{tikztimingrows}
+\def\tikztiming@extracode{\@gobble{EXTRACODE}}%
+
+\NewEnviron{tikztimingtable}[1][]{%
+ \begingroup
+ \setcounter{tikztiming@nrows}{0}%
+ \def\tikztiming@maxwidth{0.0}%
+ \let\extracode\tikztiming@extracode
+ \let\tablegrid\tikztiming@tablegrid
+ \let\fulltablegrid\tikztiming@fulltablegrid
+ \let\horlines\tikztiming@horlines
+ \let\vertlines\tikztiming@vertlines
+ \let\tablerules\tikztiming@tablerules
+ \def\rowdist{\tikztiming@rowdist}%
+ \def\coldist{\tikztiming@coldist}%
+ \def\nrows{\the\c@tikztiming@nrows}%
+ \def\twidth{\tikztiming@maxwidth}%
+ \begin{tikzpicture}[timing/table,#1]%
+ \coordinate (last row) at (0,\rowdist);
+ \coordinate (label pos) at (-1*\coldist,0);
+ \coordinate (timing/table/top left) at (0,1);
+ \coordinate (timing/table/bottom right) at (0,0);
+ \expandafter\tikztimingtable@row\BODY\endtikztimingtable@
+ \end{tikzpicture}
+ \endgroup
+}
+
+\def\endtikztimingtable@{\@gobble{ENDTIKSTIMING}}
+
+\long\def\tikztimingextracode#1#2\endtikztimingtable@{%
+ \path let
+ \p1 = (timing/table/top left),
+ \p2 = (timing/table/bottom right)
+ in
+ coordinate (timing/table/bottom left) at (\x1,\y2)
+ coordinate (timing/table/top right) at (\x2,\y1)
+ coordinate (timing/table/size) at (\x2-\x1,\y1-\y2)
+ ;
+ #2%
+}
+\def\tikztiming@emptycell{%
+ \@gobble{tikztiming@emptycell}%
+}
+\def\tikztimingtable@row#1\\{%
+ \tikztimingtable@row@#1&\tikztiming@emptycell&\\
+}
+\def\tikztimingtable@row@#1&#2&#3\\{%
+ \ifx\\#3\\\else
+ \begingroup
+ \def\@tempa{\tikztiming@emptycell&}%
+ \def\@tempb{#3}%
+ \ifx\@tempa\@tempb\else
+ \PackageWarning{tikz-timing}{%
+ To many columns in tikztimingtable row! Only two are allowed%
+ }{}{}{}%
+ \fi
+ \endgroup
+ \fi
+ \ifx\tikztiming@emptycell#2%
+ \def\next{\tikztimingtable@row@@{#1}{}}%
+ \else
+ \def\next{\tikztimingtable@row@@{#1}{#2}}%
+ \fi
+ \next
+}%
+\def\tikztimingtable@row@@#1#2{%
+ \addtocounter{tikztiming@nrows}{1}%
+ \path ($ (last row) + (0,-1*\rowdist) $) coordinate (last row);
+ \path ($ (last row) + (-1*\coldist,0) $) node [anchor=base east,timing/name]
+ {\tikztiminglabel{#1}};
+ \timing (last row) {#2};
+ \path let \p1 = (timing/table/bottom right), \p2 = (timing/end base) in
+ coordinate (timing/table/bottom right) at ({max(\x1,\x2)},\y2);
+ %
+ \pgfmathparse{max(\tikztiming@maxwidth,\tikztimingwidth)}%
+ \let\tikztiming@maxwidth\pgfmathresult
+ \@ifnextchar\extracode
+ {%
+ \let\extracode\relax
+ \tikztimingextracode
+ }%
+ {%
+ \@ifnextchar\endtikztimingtable@
+ {\@gobble}{\tikztimingtable@row}%
+ }%
+}
+
+\newcommand*\tikztiming@fulltablegrid[1][]{%
+ \begin{pgfonlayer}{background}
+ \scope[xstep={\timingwidth/2.},ystep={\timingheight/2.},
+ shift={(timing/table/bottom left)},timing/table/grid,#1]
+ \draw (0,0) grid
+ ($ (timing/table/top right) - (timing/table/bottom left) $);
+ \endscope
+ \end{pgfonlayer}
+}
+\newcommand*\tikztiming@tablegrid[1][]{%
+ \begin{pgfonlayer}{background}
+ \scope[xstep={\timingwidth/2.},ystep={\timingheight/2.},timing/table/grid,#1]
+ \foreach \y in {1,...,\nrows} {%
+ \draw {[shift={($ (timing/table/bottom left) + (0,\y*\rowdist) -
+ (0,\rowdist) $)}] let \p1 = (timing/table/bottom right) in (0,0) grid
+ (\x1,1)};
+ }%
+ \endscope
+ \end{pgfonlayer}
+}
+\newcommand*\tikztiming@tablerules[1][]{%
+ \draw [timing/table/rules,#1] let
+ \p1 = (current bounding box.north west),
+ \p2 = (current bounding box.south east),
+ \p3 = (last row)
+ in
+ (\x1-\tabcolsep,\rowdist) -- (\x2+\tabcolsep,\rowdist)
+ ($ (\x1-\tabcolsep,\y3) - (0,\rowdist-1) $) --
+ ($ (\x2+\tabcolsep,\y3) - (0,\rowdist-1) $)
+ ;
+}
+\newcommand*\tikztiming@horlines[2][]{%
+ \begingroup
+ \def\list{#2}%
+ \ifx\list\empty
+ \def\list{1,2,...,\nrows}%
+ \fi
+ \foreach \row in \list%
+ \draw [timing/table/lines,#1] let
+ \p1 = (timing/table/bottom right)
+ in
+ (0,\rowdist-\row*\rowdist) -- +(\x1,0);
+ \endgroup
+}
+\newcommand*\tikztiming@vertlines[2][]{%
+ \begingroup
+ \def\list{#2}%
+ \ifx\list\empty
+ \def\list{0,1,...,\twidth}%
+ \fi
+ \draw [timing/table/lines,#1] let
+ \p1 = ($ (timing/table/bottom right) - (0,2) $)
+ in
+ \foreach \clk in \list {
+ (\clk,+1.5) -- +(0,\y1)
+ }
+ ;
+ \endgroup
+}
+\def\tikztiming@iflower#1{%
+ \begingroup
+ \edef\@tempa{`#1}%
+ \ifnum\@tempa=\lccode\@tempa
+ \endgroup
+ \expandafter
+ \@firstoftwo
+ \else
+ \endgroup
+ \expandafter
+ \@secondoftwo
+ \fi
+}
+\def\timingwidth{1}%
+\def\timingheight{1}%
+\def\tikztiming@internaldefs#1{%
+ \def\draw{\noexpand\draw}%
+ \def\path{\noexpand\path}%
+ \def\fill{\noexpand\fill}%
+ \def\width{####1*\noexpand\timingwidth}%
+ \def\fwidth{\noexpand\timingwidth}%
+ \def\height{\noexpand\timingheight}%
+ \def\slope{\noexpand\timingslope}%
+ \def\zslope{\noexpand\timingzslope}%
+ \def\dslope{\noexpand\timingdslope}%
+ \def\gslope{0}%
+ \lowercase{%
+ \def\style{timing/#1}%
+ \def\bgstyle{timing/#1/background}%
+ }%
+ \def\newdraw{\tikztiming@newdraw}%
+ \def\newdrawns{\tikztiming@newdraw@nosave}%
+ \def\code##1{ [/utils/exec={\unexpanded{##1}}] }%
+}
+
+\def\tikztimingsetslope#1{%
+ \pgfmathparse{min(1.0,{max(0.0,#1)})}%
+ \let\tikztiming@slope\pgfmathresult
+ \edef\timingslope{\tikztiming@slope*\noexpand\timingwidth}%
+}
+\def\tikztimingsetdslope#1{%
+ \pgfmathparse{min(1.0,{max(0.0,#1)})}%
+ \let\tikztiming@dslope\pgfmathresult
+ \edef\timingdslope{\tikztiming@dslope*\noexpand\timingwidth}%
+}
+\def\tikztimingsetzslope#1{%
+ \pgfmathparse{min(1.0,{max(0.0,#1)})}%
+ \let\tikztiming@zslope\pgfmathresult
+ \edef\timingzslope{\tikztiming@zslope*\noexpand\timingwidth}%
+}
+\tikztimingsetslope{0.10}%
+\tikztimingsetdslope{0.20}%
+\tikztimingsetzslope{0.05}%
+\def\tikztiminguse#1{%
+ \@ifundefined{\tikztiming@prefix#1@general}%
+ {\PackageWarning{Can not use transition macro for '#1'.}{}{}{}}%
+ {\@nameuse{\tikztiming@prefix#1@general}}%
+}
+\def\tikztimingdef#1{%
+ \tikztimingdef@#1\relax%
+}
+\def\tikztimingdef@#1#2\relax#3{%
+ \ifx\relax#2\relax
+ \tikztiming@nameedef[#1]{#1}{#3}%
+ \else
+ \tikztiming@nameedef[#2]{#1#2}{#3}%
+ \fi
+}
+\def\tikztiminglet#1#2{%
+ \tikztiminglet@#1\relax#2\relax
+}
+\def\tikztiminglet@#1#2\relax#3#4\relax{%
+ \tikztiming@namelet{#1#2}{#3#4}%
+ \tikztiming@namelet{#1#2@general}{#3#4@general}%
+ \tikztiming@iflower{#1}{}%
+ {\tikztiming@iflower{#2}%
+ {%
+ \lowercase{\tikztiminglet@{#1}{#2}\relax{#3}{#4}}\relax
+ }%
+ {%
+ \uppercase{\lowercase{%
+ \uppercase{\lowercase{\tikztiminglet@{#1}}{#2}}\relax{#3}}{#4}}\relax
+ \lowercase{\uppercase{%
+ \lowercase{\uppercase{\tikztiminglet@{#1}}{#2}}\relax{#3}}{#4}}\relax
+ }%
+ }%
+}
+\def\tikztiming@chars#1{}
+\def\tikztiming@ifcharexists#1{%
+ \def\tikztiming@ifcharexists@##1,#1,##2\relax{%
+ \ifx\relax##2\relax%
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ }%
+ \expandafter\tikztiming@ifcharexists@
+ \expandafter,\tikztiming@chars,#1,\relax%
+}
+\def\tikztiming@addchar#1{%
+ \tikztiming@ifcharexists{#1}{%
+ \edef\tikztiming@chars{\tikztiming@chars,#1}%
+ }{}%
+}
+\def\tikztimingchar#1{%
+ \uppercase{%
+ \tikztiming@addchar{#1}%
+ \tikztimingchar@{#1}}%
+}
+\expandafter\def\csname\tikztiming@prefix @start\endcsname#1{}%
+\def\tikztimingchar@#1#2#3{%
+ \tikztiming@nameedef[#1]{#1@start}{#2 coordinate (timing/start) }%
+ \tikztiming@nameedef[#1]{#1}{#2 coordinate (timing/start) #3}%
+ \tikztimingdef{#1#1}{#3}%
+}
+\def\tikztimingalias#1#2{%
+ \uppercase{\tikztimingalias@{#1}{#2}}%
+}
+\def\tikztimingalias@#1#2{%
+ \tikztiming@namelet{#1}{#2}%
+ \tikztiming@namelet{#1@start}{#2@start}%
+ \lowercase{%
+ \tikztiming@namelet{#1}{#2}%
+ \tikztiming@namelet{#1@start}{#2@start}%
+ }%
+ \tikztiminglet{#1#1}{#2#2}%
+ \@for\@tempa:=\tikztiming@chars\do{%
+ \expandafter\tikztiminglet@@
+ \expandafter{\@tempa}{#1}{#2}%
+ }%
+}
+\def\tikztimingecopy#1#2{%
+ \uppercase{\tikztimingecopy@{#1}{#2}}%
+}
+\def\tikztimingecopy@#1#2{%
+ \tikztimingchar{#1}{}{}%
+ \tikztimingdef{#1}{\tikztiminguse{#2}{##1}}%
+ \tikztiming@nameedef[#1]{#1@start}{\tikztiminguse{#2@start}{##1}}%
+ \lowercase{%
+ \@ifundefined{\tikztiming@prefix#2}{}{%
+ \tikztimingdef{#1}{\tikztiminguse{#2}{##1}}%
+ \tikztiming@nameedef[#1]{#1@start}{\tikztiminguse{#2@start}{##1}}%
+ }%
+ }%
+ \tikztimingdef{#1#1}{\tikztiminguse{#2#2}{##1}}%
+ \@for\@tempa:=\tikztiming@chars\do{%
+ \expandafter\tikztimingdef@@
+ \expandafter{\@tempa}{#1}{#2}%
+ \expandafter\lowercase\expandafter{\expandafter\def\expandafter\@tempb
+ \expandafter{\@tempa}}%
+ \@ifundefined{\tikztiming@prefix#2\@tempb}{}{%
+ \expandafter\tikztimingdef@@
+ \expandafter{\@tempb}{#1}{#2}%
+ }%
+ }%
+}
+\def\tikztiminglet@@#1#2#3{%
+ \tikztiminglet@@@#1#2#3%
+ % Should stay, cause no harm:
+ \lowercase{\tikztiminglet@@@#1}#2#3%
+ \lowercase{\tikztiminglet@@@#1#2#3}%
+ \lowercase{\uppercase{\tikztiminglet@@@#1}#2#3}%
+}
+\def\tikztiminglet@@@#1#2#3{%
+ \tikztiminglet{#1#2}{#1#3}%
+ \tikztiminglet{#2#1}{#3#1}%
+}
+
+\def\tikztimingdef@@#1#2#3{%
+ \tikztimingdef{#1#2}{\tikztiminguse{#1#3}{##1}}%
+ \tikztimingdef{#2#1}{\tikztiminguse{#3#1}{##1}}%
+}
+\def\tikztiming@savesettings{%
+ \xdef\tikztiming@saved@settings{%
+ {\tikztiming@slope}%
+ {\tikztiming@dslope}%
+ {\tikztiming@zslope}%
+ {\the\pgflinewidth}%
+ }%
+}
+\def\tikztiming@restoresettings{%
+ \expandafter\tikztiming@restoresettings@
+ \tikztiming@saved@settings\relax
+}
+\def\tikztiming@restoresettings@#1#2#3#4\relax{%
+ \tikztimingsetslope{#1}%
+ \tikztimingsetdslope{#2}%
+ \tikztimingsetzslope{#3}%
+ \pgfsetlinewidth{#4}%
+}
+\def\tikztiming@newdraw{%
+ node [timing/save] (timing@save) {};%
+ \draw [timing/restore] (timing@save) ++(0,0)
+}
+
+\def\tikztiming@newdraw@nosave{%
+ node [timing/coord] (timing@save) {};%
+ \draw (timing@save) ++(0,0)
+}
+
+\tikztimingchar{H}{++(0,\height)}{-- ++(#1,0)}
+
+\tikztimingchar{L}{++(0,0)}{-- ++(#1,0)}
+
+\tikztimingchar{Z}{++(0,\height/2.)}{%
+ \newdraw [\style]
+ -- ++(#1,0)
+}
+
+\tikztimingchar{X}{}{}%
+\tikztimingchar{D}{}{}%
+\tikztimingchar{U}{}{}%
+\tikztimingchar{M}{}{}%
+
+\tikztimingchar{G}{++(0,0)}{-- ++(\gslope,\height) -- ++(\gslope,-\height)}
+\tikztimingchar{S}{++(0,0)}{++(#1,0)}
+
+\tikztimingdef{DD}{
+ node [timing/save] (timing@save) {}; \path [\bgstyle] (timing@save) ++(0,0)
+ +(0.5*\dslope,0.5*\height) -- +(\dslope,0)
+ -- +(#1,0)
+ -- +($ (#1,0) + 0.5*(\dslope,\height) $)
+ -- +(#1,\height)
+ -- +(\dslope,\height) -- cycle;
+ \draw [timing/restore,\style] (timing@save) ++(0,0)
+ node [timing/save] (timing@dstart) at +(\dslope/2.,\height/2.) {}
+ -- +(\dslope,+\height) -- +(#1,+\height) ++(0,+\height)
+ -- +(\dslope,-\height) -- ++(#1,-\height)
+}
+\tikztiming@namelet{D@edge@D}{DD}
+\tikztiming@namelet{D@edge@D@general}{DD@general}
+
+\tikztimingchar{D}{++(0,0)}{
+ node [timing/save] (timing@save) {}; \path [\bgstyle] (timing@save) ++(0,0)
+ -- +(#1,0)
+ -- +($ (#1,0) + 0.5*(\dslope,\height) $)
+ -- +(#1,\height)
+ -- +(0,\height)
+ -- cycle;
+ \draw [timing/restore,\style] (timing@save) ++(0,0)
+ node [timing/save] (timing@dstart) at +(-\dslope/2.,\height/2.0) {}
+ -- +(#1,0) ++(0,+\height)
+ -- ++(#1,0) ++(0,-\height)
+}
+
+\tikztimingdef{DD}{
+ node [timing/save] (timing@save) {}; \path [\bgstyle] (timing@save) ++(0,0)
+ -- +(#1,0)
+ -- +($ (#1,0) + 0.5*(\dslope,\height) $)
+ -- +(#1,\height)
+ -- +(0,\height)
+ -- cycle;
+ \newdraw [\style]
+ -- +(#1,0) ++(0,+\height)
+ -- ++(#1,0) ++(0,-\height)
+}
+
+\tikztiming@namelet{D@edge@@start}{D@start}
+\tikztiming@namelet{d@edge@@start}{d@start}
+
+\def\tikztiming@trans@D@fill#1#2{%
+ node [timing/save] (timing@save) {}; \path [\bgstyle] (timing@save) ++(0,0)
+ -- +(0.5*\dslope,-0.5*\height)
+ -- ++($ (#1,-0.5*\height) - (#2,0) $)
+ -- +(0.5*\dslope,0.5*\height)
+ -- +(0,\height)
+ -- ++($ (#2,\height) - (#1,0) + (0.5*\dslope,0) $)
+ -- cycle;
+ \draw [timing/restore,\style] (timing@save) ++(0,0)
+ node [timing/save] (timing@dstart) {}
+}
+\tikztimingdef{HH}{-- ++(#1,0)}
+\tikztimingdef{LL}{-- ++(#1,0)}
+\tikztimingdef{HL}{-- ++(\slope,-\height) \tikztiminguse{HH}{#1-\slope}}
+\tikztimingdef{LH}{-- ++(\slope, \height) \tikztiminguse{LL}{#1-\slope}}
+
+\tikztimingdef{HG}{-- ++(\gslope,-\height) -- ++(\gslope,+\height)}
+\tikztimingdef{LG}{-- ++(\gslope,+\height) -- ++(\gslope,-\height)}
+\tikztimingdef{ZG}{
+ -- ++(\gslope,-\height/2.0)
+ -- ++(\gslope,+\height)
+ -- ++(\gslope,-\height/2.0)
+}
+\tikztiminglet{DG}{LG}
+\tikztiminglet{MG}{ZG}
+
+\tikztiminglet{HS}{S}
+\tikztiminglet{LS}{S}
+\tikztiminglet{ZS}{S}
+\tikztiminglet{DS}{S}
+\tikztiminglet{TS}{S}
+
+\tikztimingdef{LZ}{
+ \newdraw [\style]
+ -- ++(\zslope,+\height/2.) -- ++($ (#1,0) - (\zslope,0) $)
+}
+\tikztimingdef{HZ}{%
+ \newdraw [\style]
+ -- ++(\zslope,-\height/2.) -- ++($ (#1,0) - (\zslope,0) $)
+}
+ \tikztimingdef{ZH}{
+ \newdraw
+ -- ++(\zslope,+\height/2.) -- ++($ (#1,0) - (\zslope,0) $)
+}
+\tikztimingdef{ZL}{%
+ \newdraw
+ -- ++(\zslope,-\height/2.) -- ++($ (#1,0) - (\zslope,0) $)
+}
+
+\tikztimingdef{DZ}{
+ -- ++( \dslope/2.,+\height/2.)
+ ++(-\dslope/2.,+\height/2.)
+ -- ++( \dslope/2.,-\height/2.)
+ \newdraw [\style]
+ -- ++($ (#1,0) - (\dslope/2.,0) $)
+}
+
+\tikztimingdef{ZD}{
+ \tikztiming@trans@D@fill{#1}{0}%
+ -- ++(\dslope/2.,\height/2.) -- ++($ (#1,0) - (\dslope/2.,0) $)
+ ++($ -1*(#1,0) + (0,-\height/2.) $)
+ -- ++(\dslope/2.,-\height/2.) -- ++($ (#1,0) - (\dslope/2.,0) $)
+}
+
+\tikztimingdef{LD}{
+ -- ++(0.5*\dslope,0.5*\height)
+ \tikztiming@trans@D@fill{#1}{0.5*\dslope}%
+ -- ++(0.5*\dslope,0.5*\height)
+ -- ++($ (#1,0) - (\dslope,0) $)
+ ++($ -1*(#1,0) + (0,-\height) $) ++(\dslope/2.,+\height/2.)
+ -- ++(\dslope/2.,-\height/2.) -- ++($ (#1,0) - (\dslope,0) $)
+}
+
+\tikztimingdef{DL}{
+ -- ++( \dslope/2.,+\height/2.)
+ ++(-\dslope/2.,+\height/2.)
+ -- ++(\dslope/2.,-\height/2.)
+ \newdraw [\style]
+ -- ++(\dslope/2.,-\height/2.)
+ -- ++($ (#1,0) - (\dslope,0) $)
+}
+
+\tikztimingdef{HD}{
+ -- ++(0.5*\dslope,-0.5*\height)
+ \tikztiming@trans@D@fill{#1}{0.5*\dslope}%
+ -- ++(0.5*\dslope,-0.5*\height)
+ -- ++($ (#1,0) - (\dslope,0) $)
+ ++($ -1*(#1,0) + (0,+\height) $) ++(\dslope/2.,-\height/2.)
+ -- ++(\dslope/2.,+\height/2.) -- ++($ (#1,0) - (\dslope,0) $)
+ ++(0,-\height)
+}
+
+\tikztimingdef{DH}{
+ ++(0,+\height)
+ -- ++(+\dslope/2.,-\height/2.)
+ ++(-\dslope/2.,-\height/2.)
+ -- ++(\dslope/2.,+\height/2.)
+ \newdraw [\style]
+ -- ++(\dslope/2.,+\height/2.)
+ -- ++($ (#1,0) - (\dslope,0) $)
+}
+
+\tikztimingalias{M}{Z}
+\tikztimingchar{M}{++(0,\height/2.)}{
+ [\style]
+ -- ++($ 1/16.*(#1,0) + (0,+\height*.225) $)
+ -- ++($ 1/8.*(#1,0) + (0,-\height*.45) $)
+ -- ++($ 1/8.*(#1,0) + (0,+\height*.45) $)
+ -- ++($ 1/8.*(#1,0) + (0,-\height*.45) $)
+ -- ++($ 1/8.*(#1,0) + (0,+\height*.45) $)
+ -- ++($ 1/8.*(#1,0) + (0,-\height*.45) $)
+ -- ++($ 1/8.*(#1,0) + (0,+\height*.45) $)
+ -- ++($ 1/8.*(#1,0) + (0,-\height*.45) $)
+ -- ++($ 1/16.*(#1,0) + (0,+\height*.225) $)
+}
+
+\tikztimingdef{MZ}{
+ \newdraw [\style]
+ -- ++(#1,0)
+}
+
+\tikztimingdef{m}{
+ [\style]
+ ++(0,+\height/2.)
+ -- ++($ 1/8.*(#1,0) + (0,+\height*.225) $)
+ -- ++($ 1/4.*(#1,0) + (0,-\height*.45) $)
+ -- ++($ 1/4.*(#1,0) + (0,+\height*.45) $)
+ -- ++($ 1/4.*(#1,0) + (0,-\height*.45) $)
+ -- ++($ 1/8.*(#1,0) + (0,+\height*.225) $)
+}
+
+\tikztimingdef{ZM}{
+ \newdraw [\style]
+ -- ++($ 1/16.*(#1,0) + (0,+\height*.075) $)
+ -- ++($ 1/8.*(#1,0) + (0,-\height*.20) $)
+ -- ++($ 1/8.*(#1,0) + (0,+\height*.25) $)
+ -- ++($ 1/8.*(#1,0) + (0,-\height*.30) $)
+ -- ++($ 1/8.*(#1,0) + (0,+\height*.35) $)
+ -- ++($ 1/8.*(#1,0) + (0,-\height*.40) $)
+ -- ++($ 1/8.*(#1,0) + (0,+\height*.45) $)
+ -- ++($ 1/8.*(#1,0) + (0,-\height*.45) $)
+ -- ++($ 1/16.*(#1,0) + (0,+\height*.225) $)
+}
+
+\tikztimingdef{Zm}{
+ \newdraw [\style]
+ -- ++($ 1/8.*(#1,0) + (0,+\height*.075) $)
+ -- ++($ 1/4.*(#1,0) + (0,-\height*.20) $)
+ -- ++($ 1/4.*(#1,0) + (0,+\height*.25) $)
+ -- ++($ 1/4.*(#1,0) + (0,-\height*.30) $)
+ -- ++($ 1/8.*(#1,0) + (0,+\height*.175) $)
+}
+
+\tikztimingdef{Mm}{
+ -- ++($ 1/8.*(#1,0) + (0,+\height*.225) $)
+ -- ++($ 1/4.*(#1,0) + (0,-\height*.45) $)
+ -- ++($ 1/4.*(#1,0) + (0,+\height*.45) $)
+ -- ++($ 1/4.*(#1,0) + (0,-\height*.45) $)
+ -- ++($ 1/8.*(#1,0) + (0,+\height*.225) $)
+}
+
+\tikztimingdef{LM}{
+ \newdraw [\style]
+ -- ++($ 1/16.*(#1,0) + (0,+\height*.60) $)
+ -- ++($ 1/8.*(#1,0) + (0,-\height*.20) $)
+ -- ++($ 1/8.*(#1,0) + (0,+\height*.25) $)
+ -- ++($ 1/8.*(#1,0) + (0,-\height*.30) $)
+ -- ++($ 1/8.*(#1,0) + (0,+\height*.35) $)
+ -- ++($ 1/8.*(#1,0) + (0,-\height*.40) $)
+ -- ++($ 1/8.*(#1,0) + (0,+\height*.45) $)
+ -- ++($ 1/8.*(#1,0) + (0,-\height*.45) $)
+ -- ++($ 1/16.*(#1,0) + (0,+\height*.20) $)
+}
+\tikztimingdef{HM}{
+ \newdraw [\style]
+ -- ++($ 1/16.*(#1,0) + (0,-\height*.40) $)
+ -- ++($ 1/8.*(#1,0) + (0,-\height*.20) $)
+ -- ++($ 1/8.*(#1,0) + (0,+\height*.25) $)
+ -- ++($ 1/8.*(#1,0) + (0,-\height*.30) $)
+ -- ++($ 1/8.*(#1,0) + (0,+\height*.35) $)
+ -- ++($ 1/8.*(#1,0) + (0,-\height*.40) $)
+ -- ++($ 1/8.*(#1,0) + (0,+\height*.45) $)
+ -- ++($ 1/8.*(#1,0) + (0,-\height*.45) $)
+ -- ++($ 1/16.*(#1,0) + (0,+\height*.20) $)
+}
+\tikztimingdef{DM}{
+ ++($ -1/16.*(#1,0) + (0,0) $)
+ -- ++($ 1/16.*(#1,0) + (0,0) $)
+ -- ++($ 1/16.*(#1,0) + (0,+\height*.50) $)
+ ++($ -1/8.*(#1,0) + (0,+\height*.50) $)
+ -- ++($ 1/16.*(#1,0) + (0,0) $)
+ -- ++($ 1/16.*(#1,0) + (0,-\height*.50) $)
+ \newdraw [\style]
+ -- ++($ 1/8.*(#1,0) + (0,-\height*.10) $)
+ -- ++($ 1/8.*(#1,0) + (0,+\height*.25) $)
+ -- ++($ 1/8.*(#1,0) + (0,-\height*.30) $)
+ -- ++($ 1/8.*(#1,0) + (0,+\height*.35) $)
+ -- ++($ 1/8.*(#1,0) + (0,-\height*.40) $)
+ -- ++($ 1/8.*(#1,0) + (0,+\height*.45) $)
+ -- ++($ 1/8.*(#1,0) + (0,-\height*.45) $)
+ -- ++($ 1/16.*(#1,0) + (0,+\height*.20) $)
+}
+
+\tikztimingdef{Lm}{
+ \newdraw [\style]
+ -- ++($ 1/8.*(#1,0) + (0,+\height*.575) $)
+ -- ++($ 1/4.*(#1,0) + (0,-\height*.20) $)
+ -- ++($ 1/4.*(#1,0) + (0,+\height*.25) $)
+ -- ++($ 1/4.*(#1,0) + (0,-\height*.30) $)
+ -- ++($ 1/8.*(#1,0) + (0,+\height*.175) $)
+}
+\tikztimingdef{Hm}{
+ \newdraw [\style]
+ -- ++($ 1/8.*(#1,0) + (0,-\height*.425) $)
+ -- ++($ 1/4.*(#1,0) + (0,-\height*.20) $)
+ -- ++($ 1/4.*(#1,0) + (0,+\height*.25) $)
+ -- ++($ 1/4.*(#1,0) + (0,-\height*.30) $)
+ -- ++($ 1/8.*(#1,0) + (0,+\height*.175) $)
+}
+\tikztimingdef{Dm}{
+ ++($ -1/8.*(#1,0) + (0,0) $)
+ -- ++($ 1/8.*(#1,0) + (0,0) $)
+ -- ++($ 1/8.*(#1,0) + (0,+\height*.50) $)
+ ++($ -1/4.*(#1,0) + (0,+\height*.50) $)
+ -- ++($ 1/8.*(#1,0) + (0,0) $)
+ -- ++($ 1/8.*(#1,0) + (0,-\height*.50) $)
+ \newdraw [\style]
+ -- ++($ 1/4.*(#1,0) + (0,-\height*.10) $)
+ -- ++($ 1/4.*(#1,0) + (0,+\height*.25) $)
+ -- ++($ 1/4.*(#1,0) + (0,-\height*.30) $)
+ -- ++($ 1/8.*(#1,0) + (0,+\height*.15) $)
+}
+
+\newcounter{tikztimingtrans}
+\newcounter{tikztimingtranspos}
+
+\tikztimingchar{T}{++(0,0)}{
+ -- ++(#1,0)
+}
+
+\tikztimingdef{HT}{%
+ {[\style]
+ \code{\setcounter{tikztimingtrans}{-1}}
+ -- ++(\slope,\value{tikztimingtrans}*\height) -- ++($ (#1,0) - (\slope,0) $)
+ }
+}
+
+\tikztimingdef{LT}{%
+ {[\style]
+ \code{\setcounter{tikztimingtrans}{+1}}
+ -- ++(\slope,\value{tikztimingtrans}*\height) -- ++($ (#1,0) - (\slope,0) $)
+ }
+}
+
+\tikztimingdef{TL}{%
+ \code{\setcounter{tikztimingtranspos}{\value{tikztimingtrans}}%
+ \addtocounter{tikztimingtranspos}{+1}}
+ -- ++(\slope, -0.5*\value{tikztimingtranspos}*\height) -- ++($ (#1,0) - (\slope,0) $)
+}
+
+\tikztimingdef{TH}{%
+ \code{\setcounter{tikztimingtranspos}{\value{tikztimingtrans}}%
+ \addtocounter{tikztimingtranspos}{-1}}
+ -- ++(\slope, -0.5*\value{tikztimingtranspos}*\height) -- ++($ (#1,0) - (\slope,0) $)
+}
+
+\tikztimingdef{TZ}{%
+ \newdraw [\style]
+ \code{\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}}
+ -- ++(\slope,\value{tikztimingtrans}*\height/2.)
+ -- ++($ (#1,0) - (\slope,0) $)
+}
+
+\tikztimingdef{TG}{%
+ -- +(\gslope,-1*\value{tikztimingtrans}*\height)
+ -- +(\gslope,0)
+}
+
+\tikztimingdef{ZT}{%
+ \newdraw
+ {[\style]
+ node [timing/save] {\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}}
+ -- ++(\slope,\value{tikztimingtrans}*\height/2.)
+ -- ++($ (#1,0) - (\slope,0) $)
+ }
+}
+
+\tikztimingdef{TT}{%
+ {[\style]
+ \code{\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}}
+ -- ++(\slope,\value{tikztimingtrans}*\height) -- ++($ (#1,0) - (\slope,0) $)
+ }
+}
+
+\tikztimingdef{TD}{
+ \code{\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}}
+ \code{\setcounter{tikztimingtranspos}{\value{tikztimingtrans}}%
+ \addtocounter{tikztimingtranspos}{-1}}
+ -- ++(0.5*\dslope,+0.5*\value{tikztimingtrans} * \height)
+ \tikztiming@trans@D@fill{#1}{0.5*\dslope}%
+ -- ++(0.5*\dslope,+0.5*\value{tikztimingtrans} * \height)
+ -- ++($ (#1,0) - (\dslope,0) $)
+ ++($ -1*(#1,\value{tikztimingtrans}*\height) $)
+ ++(\dslope/2.,+1*\value{tikztimingtrans}*\height/2.)
+ -- ++(\dslope/2.,-1*\value{tikztimingtrans}*\height/2.)
+ -- ++($ (#1,0) - (\dslope,0) $)
+ ++(0,\value{tikztimingtranspos}*\height/2.)
+}
+
+\tikztimingdef{DT}{
+ \code{\setcounter{tikztimingtrans}{-1}}
+ \tikztiminguse{DL}{#1}%
+}
+
+\tikztimingdef{MT}{%
+ \newdraw
+ {[\style]
+ -- ++(\slope,\value{tikztimingtrans}*\height/2.) -- ++($ (#1,0) - (\slope,0) $)
+ }
+}
+
+\tikztimingdef{TM}{%
+ \newdraw [\style]
+ \code{\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}}
+ -- ++($ 1/16.*(#1,0) + (0,\value{tikztimingtrans}*\height*.50+\height*.10) $)
+ -- ++($ 1/8.*(#1,0) + (0,-\height*.20) $)
+ -- ++($ 1/8.*(#1,0) + (0,+\height*.25) $)
+ -- ++($ 1/8.*(#1,0) + (0,-\height*.30) $)
+ -- ++($ 1/8.*(#1,0) + (0,+\height*.35) $)
+ -- ++($ 1/8.*(#1,0) + (0,-\height*.40) $)
+ -- ++($ 1/8.*(#1,0) + (0,+\height*.45) $)
+ -- ++($ 1/8.*(#1,0) + (0,-\height*.45) $)
+ -- ++($ 1/16.*(#1,0) + (0,+\height*.20) $)
+}
+
+\tikztimingdef{Tm}{%
+ \newdraw [\style]
+ \code{\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}}
+ -- ++($ 1/8.*(#1,0) + (0,\value{tikztimingtrans}*\height*.50+\height*.075) $)
+ -- ++($ 1/4.*(#1,0) + (0,-\height*.20) $)
+ -- ++($ 1/4.*(#1,0) + (0,+\height*.25) $)
+ -- ++($ 1/4.*(#1,0) + (0,-\height*.30) $)
+ -- ++($ 1/8.*(#1,0) + (0,+\height*.175) $)
+}
+
+\tikztimingecopy{C}{T}
+\def\tikztiming@nocombine@T{}%
+\def\tikztiming@nocombine@C{}%
+\def\tikztiming@nocombine@t{}%
+\def\tikztiming@nocombine@c{}%
+\def\tikztiming@nocombine@M{}%
+\def\tikztiming@nocombine@m{}%
+
+\tikztimingecopy{U}{D}
+\tikztimingdef{UD}{\tikztiminguse{D@edge@D}{#1}}
+\tikztimingdef{DU}{\tikztiminguse{D@edge@D}{#1}}
+
+\tikztimingecopy{X}{Z}
+\endinput
+%%
+%% End of file `tikz-timing.sty'.