From dc9526cb9ac65af66d74d5b44c78647df15e5b13 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Fri, 11 Dec 2009 01:03:36 +0000 Subject: tikz-timing 0.7 (9dec09) git-svn-id: svn://tug.org/texlive/trunk@16348 c570f23f-e606-0410-a88d-b1316a301751 --- .../tex/latex/tikz-timing/tikz-timing-advnodes.sty | 617 ++++++ .../tex/latex/tikz-timing/tikz-timing-arrows.sty | 48 +- .../tex/latex/tikz-timing/tikz-timing-beamer.sty | 51 + .../latex/tikz-timing/tikz-timing-clockarrows.sty | 99 + .../latex/tikz-timing/tikz-timing-columntype.sty | 89 + .../tex/latex/tikz-timing/tikz-timing-counters.sty | 100 + .../tex/latex/tikz-timing/tikz-timing-either.sty | 799 +++++++- .../tex/latex/tikz-timing/tikz-timing-ifsym.sty | 89 + .../tex/latex/tikz-timing/tikz-timing-interval.sty | 111 ++ .../tex/latex/tikz-timing/tikz-timing-nicetabs.sty | 125 ++ .../tex/latex/tikz-timing/tikz-timing-overlays.sty | 79 +- .../tex/latex/tikz-timing/tikz-timing.sty | 2060 ++++++++++++++------ 12 files changed, 3514 insertions(+), 753 deletions(-) create mode 100644 Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-advnodes.sty create mode 100644 Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-beamer.sty create mode 100644 Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-clockarrows.sty create mode 100644 Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-columntype.sty create mode 100644 Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-counters.sty create mode 100644 Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-ifsym.sty create mode 100644 Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-interval.sty create mode 100644 Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-nicetabs.sty (limited to 'Master/texmf-dist/tex/latex/tikz-timing') diff --git a/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-advnodes.sty b/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-advnodes.sty new file mode 100644 index 00000000000..74c6481058c --- /dev/null +++ b/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-advnodes.sty @@ -0,0 +1,617 @@ +%% +%% This is file `tikz-timing-advnodes.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% tikz-timing.dtx (with options: `lib,lib-advnodes') +%% +%% Copyright (C) 2009 by Martin Scharrer +%% +%% 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[tikz-timing-advnodes] + {$Id: tikz-timing.dtx 1580 2009-12-09 11:14:01Z martin $} + [v0.7 + TikZ-Timing Library for + advanced nodes] +\GetFileInfoSVN*% +\RequirePackage{tikz-timing}[\filedate]% +\DefineFileInfoSVN + + +\let\tikztiming@orig@oldnodecenter\tikztiming@oldnodecenter + +\tikzset{timing/nodes/.cd, + simple/.code={% + \let\tikztiming@oldnodecenter\tikztiming@orig@oldnodecenter + \tikzset{% + timing/inline node/.style={shape=coordinate}, + }% + }, + advanced/.code={% + \let\tikztiming@oldnodecenter\@gobble + \tikzset{% + timing/inline node/.style={shape=tikztiming coordinate}, + timing/nodes/new center, + }% + }, + old center/.code={% + \let\tikztiming@nodecenteranchor\tikztiming@old@nodecenteranchor + },% + new center/.code={% + \let\tikztiming@nodecenteranchor\empty + },% +} +\tikzset{timing/nodes/.cd,advanced,new center} + +\def\anchoralias#1#2{% + \expandafter\def + \csname pgf@anchor@\shape@name @#1\expandafter\endcsname + \expandafter{\csname pgf@anchor@\shape@name @#2\endcsname}% +} + +\def\tikztiming@anchorpoint#1#2#3{% + \pgf@xa=#2\relax + \pgf@ya=#3\relax + \expandafter\edef\csname#1\endcsname{% + \pgf@x=\the\pgf@xa\relax + \pgf@y=\the\pgf@ya\relax + }% + \expandafter\addtosavedmacro\csname#1\endcsname +} +\def\tikztiming@tryanchor#1#2{% + \let\tikztiming@next\relax + \ifnum\tikztiming@debug>2 + \message{^^J Try Anchor: '#1' '#2' ^^J }% + \def\tikztiming@next{\message{^^J TERM ^^J}}% + \fi + \ifx\relax#1\empty\else + \ifx\relax#2\empty\else + \def\tikztiming@next{% + \@ifundefined{tikztiming@anchors@#1@#2}% + {% + \edef\@tempa{% + {\csname tikztiming@alias@#1\endcsname}% + {\csname tikztiming@alias@#2\endcsname}% + }% + \expandafter\tikztiming@tryanchor@\@tempa{#1}{#2}% + }% + {\let\tikztiming@tryanchor\@gobbletwo + \ifnum\tikztiming@debug>2 + \message{^^J Anchor: '#1' '#2' ^^J }% + \fi + \@nameuse{tikztiming@anchors@#1@#2}% + }% + }% + \fi\fi + \tikztiming@next +} +\def\tikztiming@tryanchor@#1#2#3#4{% + \tikztiming@tryanchor{#3}{#2}% + \tikztiming@tryanchor{#1}{#4}% + \tikztiming@tryanchor{#1}{#2}% + \let\tikztiming@tryanchor@\@gobblefour + \tikztiming@tryanchor{#3}{}% + \tikztiming@tryanchor{}{#4}% +} +\pgfdeclareshape{tikztiming coordinate}{% + \savedmacro\anchorpoints{% + \let\anchorpoint\tikztiming@anchorpoint + \let\slope\@tempdima + \let\dslope\@tempdimb + \let\zslope\@tempdimc + \let\height\pgf@yb + \let\fromchar\tikztiming@node@fromchar + \let\tochar\tikztiming@node@tochar + % + \ifnum\tikztiming@debug>2 + \message{^^J Node: \fromchar \tochar ^^J}% + \fi + % + \edef\@tempa{{timing/\tochar}}% + \expandafter\lowercase\expandafter + {\expandafter\tikzset\@tempa}% + \pgfpointxy{\timingslope}{0}% + \slope=\pgf@x\relax + \pgfpointxy{\timingdslope}{0}% + \dslope=\pgf@x\relax + \pgfpointxy{\timingzslope}{0}% + \zslope=\pgf@x\relax + \pgfpointxy{0}{\timingheight}% + \height=\pgf@y\relax + \edef\anchorpoints{% + \noexpand\pgf@yb=\the\height\relax + \let\noexpand\height\noexpand\pgf@yb + }% + % + \tikztiming@tryanchor{\fromchar}{\tochar}% + } + \savedanchor\lowpoint{% + \pgfpointanchor{timing/start base}{center}% + \pgf@x=0pt + }% + \anchor{origin}{% + \pgfpointorigin + \anchorpoints + \@nameuse{originoffset} + \pgf@x=-\pgf@x + \pgf@y=-\pgf@y + }% + \anchor{old center}{% + \pgfpointorigin + \tikztiming@old@nodecenteranchor + }% + \anchor{new center}{\pgfpointorigin}% + \anchor{center}{% + \pgfpointorigin + \tikztiming@nodecenteranchor + }% + \anchor{MID}{\tikztiming@useanchor{HIGH}\advance\pgf@y by -.5\height\relax }% + \anchor{LOW}{\tikztiming@useanchor{HIGH}\advance\pgf@y by -\height\relax }% + \anchor{HIGH}{\tikztiming@useanchor{HIGH}}% + \anchor{TOP}{% + \tikztiming@nodes@getoffset + \tikztiming@useanchor{HIGH} + \advance\pgf@y by \pgf@ya\relax + }% + \anchor{BOTTOM}{% + \tikztiming@nodes@getoffset + \tikztiming@useanchor{HIGH} + \advance\pgf@y by -\pgf@ya\relax + \advance\pgf@y by -\height\relax + }% + \anchor{mid}{\tikztiming@useanchor{mid}}% + \anchor{low}{\tikztiming@useanchor{low}}% + \anchor{high}{\tikztiming@useanchor{high}}% + \anchor{low2}{\tikztiming@useanchor{low2}}% + \anchor{high2}{\tikztiming@useanchor{high2}}% + % + \anchorborder{\pgfpointorigin}% + % + \nodeparts{}% no text +} + +\def\tikztiming@nodes@getoffset{% + \begingroup + \pgfpointxy{0}{1}% + \pgfmathsetresultunitscale{\pgf@y}% + \pgfpoint{0}{\tikztiming@nodes@offset}% + \global\pgf@ya=\pgf@y + \endgroup +} + +\tikzset{% + timing/nodes/.cd, + offset/.store in=\tikztiming@nodes@offset, + offset=0.25, +} + +\def\tikztiming@nodecenteranchor{} + +\def\tikztiming@old@nodecenteranchor{% + \anchorpoints + \@ifundefined{oldcenter}% + {\@nameuse{originoffset}% + \pgf@x=-\pgf@x\relax + \pgf@y=-\pgf@y\relax + }% + {\@nameuse{oldcenter}}% +} + +\def\tikztiming@useanchor#1{% + \anchorpoints + \@ifundefined{#1}% + {\PackageError{tikz-timing}% + {No such anchor '#1' defined for this transition!}% + \pgfpointorigin + }% + {\@nameuse{#1}}% +} + +\tikzset{% + every tikztiming coordinate node/.style={anchor=origin}, +} +\def\tikztiming@anchors#1#2{% + \@namedef{tikztiming@anchors@#1@#2}% +} +\def\tikztiming@anchorslet#1#2#3#4{% + \expandafter\let + \csname tikztiming@anchors@#1@#2\expandafter\endcsname + \csname tikztiming@anchors@#3@#4\endcsname +} + +\tikztiming@anchors{@}{D}{% + \anchorpoint{originoffset}{0pt}{.5\height}% + \anchorpoint{mid}{0pt}{0pt}% + \anchorpoint{high}{0pt}{.5\height}% + \anchorpoint{low}{0pt}{-.5\height}% + \anchorpoint{HIGH}{0pt}{.5\height}% +} + +\tikztiming@anchors{@}{H}{% + \anchorpoint{originoffset}{0pt}{\height}% + \anchorpoint{high}{0pt}{0pt}% + \anchorpoint{HIGH}{0pt}{0pt}% +} + +\tikztiming@anchors{@}{L}{% + \anchorpoint{originoffset}{0pt}{0pt}% + \anchorpoint{low}{0pt}{0pt}% + \anchorpoint{HIGH}{0pt}{\height}% +} + +\tikztiming@anchors{@}{T}{% + \anchorpoint{originoffset}{0pt}{0pt}% + \anchorpoint{low}{0pt}{0pt}% + \anchorpoint{HIGH}{0pt}{\height}% +} + +\tikztiming@anchors{@}{Z}{% + \anchorpoint{originoffset}{0pt}{.5\height}% + \anchorpoint{mid}{0pt}{0pt}% + \anchorpoint{HIGH}{0pt}{.5\height}% +} + +\tikztiming@anchors{D}{D}{% + \anchorpoint{originoffset}{0pt}{0pt}% + \anchorpoint{mid}{0pt}{0pt}% + \anchorpoint{HIGH}{0pt}{.5\height}% + \anchorpoint{high}{0pt}{.5\height}% + \anchorpoint{low}{0pt}{-.5\height}% +} + +\tikztiming@anchors{L}{H}{% + \anchorpoint{originoffset}{.5\slope}{.5\height}% + \anchorpoint{mid}{0pt}{0pt}% + \anchorpoint{high}{.5\slope}{.5\height}% + \anchorpoint{low}{-.5\slope}{-.5\height}% + \anchorpoint{HIGH}{-.5\slope}{.5\height}% +} + +\tikztiming@anchors{E}{H}{% + \anchorpoint{originoffset}{-.5\slope}{-.5\height}% + \anchorpoint{oldcenter}{-.5\slope}{-.5\height}% + \anchorpoint{mid}{0pt}{0pt}% + \anchorpoint{high}{.5\slope}{.5\height}% + \anchorpoint{low}{-.5\slope}{-.5\height}% + \anchorpoint{HIGH}{-.5\slope}{.5\height}% +} + +\tikztiming@anchors{T}{T}{% + \anchorpoint{mid}{0pt}{0pt}% + \anchorpoint{HIGH}{-.5\slope}{.5\height}% + \ifnum 1=\c@tikztimingtrans + \anchorpoint{originoffset}{.5\slope}{-.5\height}% + \anchorpoint{high}{-.5\slope}{.5\height}% + \anchorpoint{low}{.5\slope}{-.5\height}% + \else + \anchorpoint{originoffset}{.5\slope}{.5\height}% + \anchorpoint{high}{.5\slope}{.5\height}% + \anchorpoint{low}{-.5\slope}{-.5\height}% + \fi +} +\tikztiming@anchorslet{T}{E}{T}{T}% + +\tikztiming@anchors{T}{@}{% + \ifnum 1=\c@tikztimingtrans + \anchorpoint{high}{0pt}{0pt}% + \anchorpoint{HIGH}{0pt}{0pt}% + \else + \anchorpoint{low}{0pt}{0pt}% + \anchorpoint{HIGH}{0pt}{\height}% + \fi +} + +\tikztiming@anchors{H}{H}{% + \anchorpoint{originoffset}{0pt}{0pt}% + \anchorpoint{high}{0pt}{0pt}% + \anchorpoint{HIGH}{0pt}{0pt}% +} + +\tikztiming@anchors{L}{L}{% + \anchorpoint{originoffset}{0pt}{0pt}% + \anchorpoint{low}{0pt}{0pt}% + \anchorpoint{HIGH}{0pt}{\height}% +} + +\tikztiming@anchors{Z}{Z}{% + \anchorpoint{originoffset}{0pt}{0pt}% + \anchorpoint{mid}{0pt}{0pt}% + \anchorpoint{HIGH}{0pt}{.5\height}% +} + +\tikztiming@anchors{E}{E}{% + \anchorpoint{mid}{0pt}{0pt}% + \ifnum 1=\c@tikztimingtrans + \anchorpoint{originoffset}{.5\slope}{.5\height}% + \anchorpoint{HIGH}{-.5\slope}{.5\height}% + \anchorpoint{high}{.5\slope}{.5\height}% + \anchorpoint{low}{-.5\slope}{-.5\height}% + \else + \anchorpoint{originoffset}{-.5\slope}{.5\height}% + \anchorpoint{oldcenter}{-.5\slope}{-.5\height}% + \anchorpoint{HIGH}{.5\slope}{.5\height}% + \anchorpoint{high}{-.5\slope}{.5\height}% + \anchorpoint{low}{.5\slope}{-.5\height}% + \fi +} + +\tikztiming@anchors{H}{L}{% + \anchorpoint{originoffset}{.5\slope}{-.5\height}% + \anchorpoint{mid}{0pt}{0pt}% + \anchorpoint{high}{-.5\slope}{.5\height}% + \anchorpoint{HIGH}{-.5\slope}{.5\height}% + \anchorpoint{low}{.5\slope}{-.5\height}% +} +\tikztiming@anchorslet{H}{E}{H}{L}% + +\tikztiming@anchors{E}{L}{% + \anchorpoint{originoffset}{-.5\slope}{.5\height}% + \anchorpoint{oldcenter}{-.5\slope}{-.5\height}% + \anchorpoint{mid}{0pt}{0pt}% + \anchorpoint{high}{-.5\slope}{.5\height}% + \anchorpoint{HIGH}{-.5\slope}{.5\height}% + \anchorpoint{low}{.5\slope}{-.5\height}% +} + +\tikztiming@anchors{E}{T}{% + \anchorpoint{mid}{0pt}{0pt}% + \anchorpoint{HIGH}{-.5\slope}{.5\height}% + \ifnum 1=\c@tikztimingtrans + \anchorpoint{originoffset}{-.5\slope}{-.5\height}% + \anchorpoint{oldcenter}{-.5\slope}{-.5\height}% + \anchorpoint{high}{.5\slope}{.5\height}% + \anchorpoint{low}{-.5\slope}{-.5\height}% + \else + \anchorpoint{originoffset}{-.5\slope}{.5\height}% + \anchorpoint{oldcenter}{-.5\slope}{-.5\height}% + \anchorpoint{high}{-.5\slope}{.5\height}% + \anchorpoint{low}{.5\slope}{-.5\height}% + \fi +} + +\tikztiming@anchors{E}{Z}{% + \anchorpoint{mid}{0pt}{0pt}% + \anchorpoint{oldcenter}{-\zslope}{-.5\height}% + \anchorpoint{HIGH}{-\zslope}{.5\height}% + \anchorpoint{high}{-\zslope}{.5\height}% + \anchorpoint{low}{-\zslope}{-.5\height}% +} + +\tikztiming@anchors{Z}{D}{% + \anchorpoint{originoffset}{0pt}{0pt}% + \anchorpoint{mid}{0pt}{0pt}% + \anchorpoint{HIGH}{0pt}{.5\height}% + \anchorpoint{high}{.5\dslope}{.5\height}% + \anchorpoint{low}{.5\dslope}{-.5\height}% +} + +\tikztiming@anchors{D}{Z}{% + \anchorpoint{originoffset}{0pt}{0pt}% + \anchorpoint{oldcenter}{-.5\dslope}{-.5\height}% + \anchorpoint{mid}{0pt}{0pt}% + \anchorpoint{HIGH}{-.5\dslope}{.5\height}% + \anchorpoint{high}{-.5\dslope}{.5\height}% + \anchorpoint{low}{-.5\dslope}{-.5\height}% +} + +\tikztiming@anchors{D}{H}{% + \anchorpoint{originoffset}{0pt}{0pt}% + \anchorpoint{oldcenter}{-.5\dslope}{-.5\height}% + \anchorpoint{mid}{0pt}{0pt}% + \anchorpoint{HIGH}{-.5\dslope}{.5\height}% + \anchorpoint{high}{-.5\dslope}{.5\height}% + \anchorpoint{high2}{.5\dslope}{.5\height}% + \anchorpoint{low}{-.5\dslope}{-.5\height}% +} + +\tikztiming@anchors{D}{L}{% + \anchorpoint{originoffset}{0pt}{0pt}% + \anchorpoint{oldcenter}{-.5\dslope}{-.5\height}% + \anchorpoint{mid}{0pt}{0pt}% + \anchorpoint{HIGH}{-.5\dslope}{.5\height}% + \anchorpoint{high}{-.5\dslope}{.5\height}% + \anchorpoint{low2}{-.5\dslope}{-.5\height}% + \anchorpoint{low}{.5\dslope}{-.5\height}% +} +\tikztiming@anchorslet{D}{T}{D}{L}% + +\tikztiming@anchors{D@edge@}{D}{% + \anchorpoint{originoffset}{0pt}{0pt}% + \anchorpoint{oldcenter}{-.5\dslope}{-.5\height}% + \anchorpoint{mid}{0pt}{0pt}% + \anchorpoint{HIGH}{-.5\dslope}{.5\height}% + \anchorpoint{high}{-.5\dslope}{.5\height}% + \anchorpoint{high2}{.5\dslope}{.5\height}% + \anchorpoint{low}{-.5\dslope}{-.5\height}% + \anchorpoint{low2}{.5\dslope}{-.5\height}% +} +\tikztiming@anchorslet{D}{U}{D@edge@}{D} +\tikztiming@anchorslet{U}{D}{D@edge@}{D} +\tikztiming@anchorslet{D}{D@edge@}{D@edge@}{D} +\tikztiming@anchorslet{D@edge@}{D@edge@}{D@edge@}{D} +\tikztiming@anchorslet{D}{E}{D@edge@}{D} +\tikztiming@anchorslet{E}{D}{D@edge@}{D} + +\tikztiming@anchorslet{L}{E}{L}{H}% +\tikztiming@anchorslet{L}{T}{L}{H}% +\tikztiming@anchorslet{H}{T}{H}{L}% +\tikztiming@anchorslet{T}{H}{H}{L}% + +\tikztiming@anchors{D}{D}{% + \anchorpoint{originoffset}{0pt}{0pt}% + \anchorpoint{oldcenter}{0pt}{-.5\height}% + \anchorpoint{mid}{0pt}{0pt}% + \anchorpoint{high}{0pt}{.5\height}% + \anchorpoint{low}{0pt}{-.5\height}% + \anchorpoint{HIGH}{0pt}{.5\height}% +} +\tikztiming@anchorslet{D}{@}{D}{D} +\tikztiming@anchorslet{E}{@}{D}{D} +\tikztiming@anchorslet{U}{U}{D}{D} + +\tikztiming@anchorslet{@}{E}{@}{D} + +\tikztiming@anchors{L}{D}{% + \anchorpoint{originoffset}{.5\dslope}{.5\height}% + \anchorpoint{mid}{0pt}{0pt}% + \anchorpoint{high}{.5\dslope}{.5\height}% + \anchorpoint{low}{-.5\dslope}{-.5\height}% + \anchorpoint{low2}{.5\dslope}{-.5\height}% + \anchorpoint{HIGH}{-.5\dslope}{.5\height}% +} + +\tikztiming@anchors{T}{D}{% + \anchorpoint{mid}{0pt}{0pt}% + \anchorpoint{HIGH}{-.5\dslope}{.5\height}% + \ifnum 1=\c@tikztimingtrans + \anchorpoint{originoffset}{.5\dslope}{-.5\height}% + \anchorpoint{high}{-.5\dslope}{.5\height}% + \anchorpoint{high2}{.5\dslope}{.5\height}% + \anchorpoint{low}{.5\dslope}{-.5\height}% + \else + \anchorpoint{originoffset}{.5\dslope}{.5\height}% + \anchorpoint{high}{.5\dslope}{.5\height}% + \anchorpoint{low}{-.5\dslope}{-.5\height}% + \anchorpoint{low2}{.5\dslope}{-.5\height}% + \fi +} + +\tikztiming@anchors{H}{D}{% + \anchorpoint{originoffset}{.5\dslope}{-.5\height}% + \anchorpoint{mid}{0pt}{0pt}% + \anchorpoint{HIGH}{-.5\dslope}{.5\height}% + \anchorpoint{high}{-.5\dslope}{.5\height}% + \anchorpoint{high2}{.5\dslope}{.5\height}% + \anchorpoint{low}{.5\dslope}{-.5\height}% +} + +\tikztiming@anchors{Z}{E}{% + \anchorpoint{mid}{0pt}{0pt}% + \anchorpoint{high}{\zslope}{.5\height}% + \anchorpoint{low}{\zslope}{-.5\height}% + \anchorpoint{HIGH}{0pt}{.5\height}% +} + +\tikztiming@anchors{Z}{H}{% + \anchorpoint{mid}{0pt}{0pt}% + \anchorpoint{high}{\zslope}{.5\height}% + \anchorpoint{HIGH}{0pt}{.5\height}% +} + +\tikztiming@anchors{Z}{T}{% + \anchorpoint{mid}{0pt}{0pt}% + \anchorpoint{HIGH}{0pt}{.5\height}% + \ifnum1=\c@tikztimingtrans\relax + \anchorpoint{low}{\zslope}{-.5\height}% + \else + \anchorpoint{high}{\zslope}{.5\height}% + \fi +} + +\tikztiming@anchors{T}{H}{% + \ifnum1=\c@tikztimingtrans\relax + \anchorpoint{high}{0pt}{0pt}% + \anchorpoint{HIGH}{0pt}{0pt}% + \else + \anchorpoint{originoffset}{.5\slope}{.5\height}% + \anchorpoint{low}{-.5\slope}{-.5\height}% + \anchorpoint{mid}{0pt}{0pt}% + \anchorpoint{high}{.5\slope}{.5\height}% + \anchorpoint{HIGH}{-.5\slope}{.5\height}% + \fi +} + +\tikztiming@anchors{T}{L}{% + \ifnum1=\c@tikztimingtrans\relax + \anchorpoint{originoffset}{.5\slope}{-.5\height}% + \anchorpoint{low}{.5\slope}{-.5\height}% + \anchorpoint{mid}{0pt}{0pt}% + \anchorpoint{high}{-.5\slope}{.5\height}% + \anchorpoint{HIGH}{-.5\slope}{.5\height}% + \else + \anchorpoint{low}{0pt}{0pt}% + \anchorpoint{HIGH}{0pt}{\height}% + \fi +} + +\tikztiming@anchors{T}{Z}{% + \ifnum1=\c@tikztimingtrans\relax + \anchorpoint{high}{0pt}{0pt}% + \anchorpoint{mid}{\zslope}{-.5\height}% + \anchorpoint{HIGH}{0pt}{0pt}% + \else + \anchorpoint{low}{0pt}{0pt}% + \anchorpoint{mid}{\zslope}{.5\height}% + \anchorpoint{HIGH}{0pt}{\height}% + \fi +} + +\tikztiming@anchors{Z}{L}{% + \anchorpoint{mid}{0pt}{0pt}% + \anchorpoint{low}{\zslope}{-.5\height}% + \anchorpoint{HIGH}{0pt}{.5\height}% +} + +\tikztiming@anchors{H}{Z}{% + \anchorpoint{high}{0pt}{0pt}% + \anchorpoint{mid}{\zslope}{-.5\height}% + \anchorpoint{HIGH}{0pt}{0pt}% +} + +\tikztiming@anchors{L}{Z}{% + \anchorpoint{low}{0pt}{0pt}% + \anchorpoint{mid}{\zslope}{.5\height}% + \anchorpoint{HIGH}{0pt}{\height}% +} + +\tikztiming@anchors{Z}{Z}{% + \anchorpoint{mid}{0pt}{0pt}% + \anchorpoint{HIGH}{0pt}{.5\height}% +} + +\tikztiming@anchors{H}{@}{% + \anchorpoint{high}{0pt}{0pt}% + \anchorpoint{HIGH}{0pt}{0pt}% +} + +\tikztiming@anchors{L}{@}{% + \anchorpoint{low}{0pt}{0pt}% + \anchorpoint{HIGH}{0pt}{\height}% +} + +\tikztiming@anchors{Z}{@}{% + \anchorpoint{mid}{0pt}{0pt}% + \anchorpoint{HIGH}{0pt}{.5\height}% +} + +\tikztiming@anchors{}{@}{% + \anchorpoint{originoffset}{0pt}{.5\height}% + \anchorpoint{mid}{0pt}{0pt}% + \anchorpoint{high}{0pt}{.5\height}% + \anchorpoint{low}{0pt}{-.5\height}% + \anchorpoint{HIGH}{0pt}{.5\height}% +} + +\RequirePackage{pgfopts} +\ProcessPgfOptions{/tikz/timing/node} +\endinput +%% +%% End of file `tikz-timing-advnodes.sty'. diff --git a/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-arrows.sty b/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-arrows.sty index e5d3d734539..1e62192a316 100644 --- a/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-arrows.sty +++ b/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-arrows.sty @@ -4,7 +4,7 @@ %% %% The original source files were: %% -%% tikz-timing.dtx (with options: `lib-arrows') +%% tikz-timing.dtx (with options: `lib,lib-arrows') %% %% Copyright (C) 2009 by Martin Scharrer %% @@ -27,46 +27,26 @@ %% \RequirePackage{svn-prov}[2009/05/03] \ProvidesPackageSVN[tikz-timing-arrows] - {$Id: tikz-timing.dtx 1158 2009-07-28 09:14:00Z martin $} - [v0.6a - TikZ-Timing Library for timing arrows] + {$Id: tikz-timing.dtx 1580 2009-12-09 11:14:01Z martin $} + [v0.7 + TikZ-Timing Library for + timing arrows] +\GetFileInfoSVN*% +\RequirePackage{tikz-timing}[\filedate]% \DefineFileInfoSVN +\tikzset{timing/.cd, + A/.style={timing/a}, + W/.style={timing/w}, + a/.style={->}, + w/.style={<-}, +} + \tikztimingchar{A}{++(0,0)}{% \newdraw [\style] -- ++(0,\height) \newdraw ++(#1,-\height) } \def\tikztiming@nocombine@A{}% -\def\tikztiming@nocombine@a{}% -\tikztiminglet{AS}{SS} -\tikztiminglet{AH}{H} -\tikztiminglet{AZ}{Z} -\tikztimingdef{ZA}{ - ++(0,-0.5*\height) - \tikztiminguse{A}{#1} -} -\tikztimingdef{HA}{ - ++(0,-\height) - \tikztiminguse{A}{#1} -} -\tikztiminglet{XA}{ZA} -\tikztiminglet{MA}{ZA} -\tikztiminglet{AX}{AZ} -\tikztiminglet{AM}{AZ} -\tikztiminglet{LA}{A} -\tikztiminglet{AL}{LL} -\tikztiminglet{AD}{DD} -\tikztiminglet{AE}{LE} -\tikztiminglet{AU}{UU} -\tikztiminglet{SA}{A} -\tikztiminglet{AG}{G} -\tikztiminglet{AT}{LT} -\tikztiminglet{AC}{LC} -\tikztiminglet{DA}{A} -\tikztiminglet{UA}{A} -\tikztiminglet{TA}{A} -\tikztiminglet{CA}{A} -\tikztiminglet{EA}{A} \tikztimingecopy{W}{A} \endinput diff --git a/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-beamer.sty b/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-beamer.sty new file mode 100644 index 00000000000..8d170c0ac75 --- /dev/null +++ b/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-beamer.sty @@ -0,0 +1,51 @@ +%% +%% This is file `tikz-timing-beamer.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% tikz-timing.dtx (with options: `lib,lib-beamer') +%% +%% Copyright (C) 2009 by Martin Scharrer +%% +%% 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[tikz-timing-beamer] + {$Id: tikz-timing.dtx 1580 2009-12-09 11:14:01Z martin $} + [v0.7 + TikZ-Timing Library for + beamer overlay support] +\GetFileInfoSVN*% +\RequirePackage{tikz-timing}[\filedate]% +\DefineFileInfoSVN + + +\PackageWarning{\@currname}{This library is experimental and will change in future versions!}{}{} + +\tikztiming@defcode<#1>{ + \tikztiming@output@addcode{ + node [timing/save] (timing@save) {};% + \onslide<#1> + \draw [timing/restore] (timing@save) ++(0,0) + } + \tikztiming@parser +} +\endinput +%% +%% End of file `tikz-timing-beamer.sty'. diff --git a/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-clockarrows.sty b/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-clockarrows.sty new file mode 100644 index 00000000000..3882174695d --- /dev/null +++ b/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-clockarrows.sty @@ -0,0 +1,99 @@ +%% +%% This is file `tikz-timing-clockarrows.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% tikz-timing.dtx (with options: `lib,lib-clockarrows') +%% +%% Copyright (C) 2009 by Martin Scharrer +%% +%% 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[tikz-timing-clockarrows] + {$Id: tikz-timing.dtx 1580 2009-12-09 11:14:01Z martin $} + [v0.7 + TikZ-Timing Library for + timing clock arrows] +\GetFileInfoSVN*% +\RequirePackage{tikz-timing}[\filedate]% +\DefineFileInfoSVN + +\tikztiming@iftrans{CC}% + {\let\tikztiming@trans@C@normal@C\tikztiming@trans@CC}% + {\PackageError{\@currname}{No 'CC' transition defined by the main tikz-timing + package.}{}{}}% + +\tikztimingdef{CC}{% + \code{\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}} + [timing/c/save] + \newdraw + [\style,timing/c/restore,>=\noexpand\tikztiming@c@arrow@tip,timing/c/arrow@style] + -- ++(\slope*\noexpand\tikztiming@c@arrow@pos,\value{tikztimingtrans}*\height*\noexpand\tikztiming@c@arrow@pos) + ; \draw [timing/restore,timing/c/restore] (timing@save) ++(0,0) [\style] + -- ++(\slope,\value{tikztimingtrans}*\height) + -- ++($ (#1,0) - (\slope,0) $) +} +\let\tikztiming@trans@C@arrow@C\tikztiming@trans@CC + +\tikzset{timing/c/.cd, + rising arrows/.code={% + \def\tikztiming@trans@CC{\tikztiming@trans@C@arrow@C}% + \def\tikztiming@clockarrow@style{\ifnum1=\c@tikztimingtrans\tikzset{->,timing/c/arrow}\fi}% + },% + falling arrows/.code={% + \def\tikztiming@trans@CC{\tikztiming@trans@C@arrow@C}% + \def\tikztiming@clockarrow@style{\ifnum-1=\c@tikztimingtrans\tikzset{->,timing/c/arrow}\fi}% + },% + dual arrows/.code={% + \def\tikztiming@trans@CC{\tikztiming@trans@C@arrow@C}% + \def\tikztiming@clockarrow@style{\tikzset{->,timing/c/arrow}}% + },% + no arrows/.code={% + \def\tikztiming@trans@CC{\tikztiming@trans@C@normal@C}% + \def\tikztiming@clockarrow@style{}% + },% + arrow@style/.code={\tikztiming@clockarrow@style},% + arrow/.style={},% + arrow pos/.store in=\tikztiming@c@arrow@pos, + arrow tip/.store in=\tikztiming@c@arrow@tip, + save/.code={% + \global\let\tikztiming@clockarrow@savedstyle\tikztiming@clockarrow@style + \global\let\tikztiming@trans@saved@CC\tikztiming@trans@CC + \global\let\tikztiming@c@arrow@savedpos\tikztiming@c@arrow@pos + \global\let\tikztiming@c@arrow@savedtip\tikztiming@c@arrow@tip + }, + restore/.code={% + \let\tikztiming@clockarrow@style\tikztiming@clockarrow@savedstyle + \let\tikztiming@trans@CC\tikztiming@trans@saved@CC + \let\tikztiming@c@arrow@pos\tikztiming@c@arrow@savedpos + \let\tikztiming@c@arrow@tip\tikztiming@c@arrow@savedtip + }, +} +\tikzset{timing/c/.cd, + no arrows, + arrow pos=0.95, + arrow tip=to, +} + +\RequirePackage{pgfopts} +\ProcessPgfOptions{/tikz/timing/c} +\endinput +%% +%% End of file `tikz-timing-clockarrows.sty'. diff --git a/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-columntype.sty b/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-columntype.sty new file mode 100644 index 00000000000..8d6545e3827 --- /dev/null +++ b/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-columntype.sty @@ -0,0 +1,89 @@ +%% +%% This is file `tikz-timing-columntype.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% tikz-timing.dtx (with options: `lib,lib-columntype') +%% +%% Copyright (C) 2009 by Martin Scharrer +%% +%% 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[tikz-timing-columntype] + {$Id: tikz-timing.dtx 1580 2009-12-09 11:14:01Z martin $} + [v0.7 + TikZ-Timing Library for + timing cell types] +\GetFileInfoSVN*% +\RequirePackage{tikz-timing}[\filedate]% +\DefineFileInfoSVN + +\RequirePackage{array} + +\tikzset{timing/columntype/.code 2 args = + \newcolumntype{#1}{>{\celltiming}#2<{\endcelltiming}}% +}% +\RequirePackage{pgfopts} +\tikzset{timing/columntype/.cd, + type/.style 2 args={/tikz/timing/columntype={#1}{#2}},% + notype/.code={}, + notype/.value forbidden={}, +} + +\ProcessPgfOptions{/tikz/timing/columntype} +\expandafter\ifx\csname opt@\@currname.\@currext\endcsname\empty + \tikzset{timing/columntype={T}{l}}% +\fi +\def\celltiming#1\ignorespaces{% + #1% + \begin{tikzpicture}[timing/picture,baseline={(0,0)}] + \def\tikztiming@endhook{\end@celltiming} + \tikztiming@init + \let\tikztiming@settings\empty + \@ifnextchar{[}% + {\tikztiming@celltiming}% + {\tikztiming@celltiming[]}% +} +\let\endcelltiming\relax +\def\tikztiming@celltiming[#1]{% + \ifx\relax#1\relax\else + \tikztiming@testoptarg#1\relax\relax + \fi + \ifx\tikztiming@lastchar\empty + \def\tikztiming@lastchar{@}% + \fi + \expandafter\scope\expandafter[\tikztiming@settings]% + \begingroup + \let\unskip\relax + \let\\\relax + \tikztiming@parser +} +\def\end@celltiming{% + \tikzset{timing/before}% + \tikztiming@str; + \expandafter\node + \expandafter[\tikztiming@settings,shape=tikztiming@shape,anchor=origin] at (0,0) {}; + \tikzset{timing/after}% + \endscope + \end{tikzpicture}% +} +\endinput +%% +%% End of file `tikz-timing-columntype.sty'. diff --git a/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-counters.sty b/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-counters.sty new file mode 100644 index 00000000000..e81d3412b68 --- /dev/null +++ b/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-counters.sty @@ -0,0 +1,100 @@ +%% +%% This is file `tikz-timing-counters.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% tikz-timing.dtx (with options: `lib,lib-counters') +%% +%% Copyright (C) 2009 by Martin Scharrer +%% +%% 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[tikz-timing-counters] + {$Id: tikz-timing.dtx 1580 2009-12-09 11:14:01Z martin $} + [v0.7 + TikZ-Timing Library for + counter values] +\GetFileInfoSVN*% +\RequirePackage{tikz-timing}[\filedate]% +\DefineFileInfoSVN + +\tikzset{% + timing/new counter/.style={timing/counter/new={#1}}, + timing/counter/.cd, + new/.code={\tikztiming@counter@new{#1}}, + new/.value required, + opt/.cd, + char/.estore in=\tikztiming@counter@char, + reset char/.estore in=\tikztiming@counter@resetchar, + base/.estore in=\tikztiming@counter@base, + half width char/.estore in=\tikztiming@counter@hwchar, + char/.value required, + reset char/.value required, + base/.value required, + half width char/.value required, +} +\def\tikztiming@counter@new#1{% + \let\tikztiming@counter@char\empty + \let\tikztiming@counter@resetchar\empty + \def\tikztiming@counter@base{10}% + \let\tikztiming@counter@hwchar\relax + \pgfqkeys{/tikz/timing/counter/opt}{#1}% + \ifx\tikztiming@counter@char\empty + \PackageError{tikz-timing-counters}{Counter character must be given using + the 'char' key!}% + \else + \edef\@tempa{% + \noexpand\tikztiming@counter@new@{\tikztiming@counter@char}{\tikztiming@counter@base}% + {\tikztiming@counter@hwchar}{\tikztiming@counter@resetchar}% + }% + \expandafter\@tempa + \fi +} +\def\tikztiming@counter@new@#1#2#3#4{% + \newcounter{tikztiming@counter@#1}% + \tikzset{timing/counter/#1/.append style={}}% + \tikztimingmetachar{#1}[1]{##1D{[timing/counter/#1]\tikztiming@counter@vs{#1}{#2}}}% + \ifx\tikztiming@counter@hwchar\empty\else + \ifx\tikztiming@counter@hwchar\relax + \tikztiming@iflower{#1}{}% + {\lowercase{\tikztimingmetachar{#1}}[1]% + {##1d{[timing/counter/#1]\tikztiming@counter@vs{#1}{#2}}}}% + \else + \tikztimingmetachar{#3}[1]{##1d{[timing/counter/#1]\tikztiming@counter@vs{#1}{#2}}}% + \fi + \fi + \ifx\tikztiming@counter@resetchar\empty\else + \tikztimingmetachar{#4}[1]{[|/utils/exec=\tikztiming@counter@reset{#1}{##1}|]}% + \fi +} +\def\tikztiming@counter@reset#1#2{% + \pgfmathsetcounter{tikztiming@counter@#1}{round((#2)/\tikztiming@wscale)}% + \setcounter{tikztiming@counter@#1}{\value{tikztiming@counter@#1}}% +} +\def\tikztiming@counter@vs#1#2{% + \pgfmathdectoBase\pgfmathresult{\value{tikztiming@counter@#1}}{#2}% + \pgfmathresult + \stepcounter{tikztiming@counter@#1}% +} +\RequirePackage{pgfopts} +\ProcessPgfOptions{/tikz/timing/counter} +\endinput +%% +%% End of file `tikz-timing-counters.sty'. diff --git a/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-either.sty b/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-either.sty index 11d3f6c8ede..7a1f73e1249 100644 --- a/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-either.sty +++ b/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-either.sty @@ -4,7 +4,7 @@ %% %% The original source files were: %% -%% tikz-timing.dtx (with options: `lib-either') +%% tikz-timing.dtx (with options: `lib,lib-either') %% %% Copyright (C) 2009 by Martin Scharrer %% @@ -27,13 +27,14 @@ %% \RequirePackage{svn-prov}[2009/05/03] \ProvidesPackageSVN[tikz-timing-either] - {$Id: tikz-timing.dtx 1158 2009-07-28 09:14:00Z martin $} - [v0.6a - TikZ-Timing Library for uncertain transitions] + {$Id: tikz-timing.dtx 1580 2009-12-09 11:14:01Z martin $} + [v0.7 + TikZ-Timing Library for + uncertain transitions] +\GetFileInfoSVN*% +\RequirePackage{tikz-timing}[\filedate]% \DefineFileInfoSVN - -\tikztimingecopy{E}{D} \tikztimingchar{E}{ ++(0,0) \code{\setcounter{tikztimingtranspos}{0}}% @@ -42,67 +43,767 @@ \code{\setcounter{tikztimingtranspos}{0}}% \code{\setcounter{tikztimingtrans}{1}}% \tikztiminguse{D}{#1}% + \newdraw } -\tikztimingdef{LE}{% - -- ++(#1,0)% - \code{\setcounter{tikztimingtranspos}{0}}% - \code{\setcounter{tikztimingtrans}{1}}% - ++($ -1*(#1,0) $)% +\def\tikztiming@triple@E{}% + +\tikztimingdef{LE@}{% + \newdraw [\bgstyle] + -- ++(\slope,\height)% + -- ++($ (#1,0) - (\slope,0) $)% + -- ++(0,-\height)% + -- ++($ -1*(#1,0) $)% + \newdraw [\style] -- ++(\slope,\height)% -- ++($ (#1,0) - (\slope,0) $)% - ++(0,-\height)% + ++($ -1*(#1,\height) $)% + -- ++($ 1*(#1,0) $)% + ++(0,.5\height)% + \newdraw + \code{\setcounter{tikztimingtranspos}{0}}% + \code{\setcounter{tikztimingtrans}{1}}% }% -\tikztimingdef{HE}{% - -- ++(#1,0)% - \code{\setcounter{tikztimingtranspos}{1}}% - \code{\setcounter{tikztimingtrans}{-1}}% - ++($ -1*(#1,0) $)% + +\tikztimingdef{HE@}{% + \newdraw [\bgstyle] -- ++(\slope,-\height)% -- ++($ (#1,0) - (\slope,0) $)% -}% -\tikztimingdef{EE}{% - ++(0, \height * \value{tikztimingtranspos})% - ++(#1,0)% + -- ++(0,\height)% -- ++($ -1*(#1,0) $)% - -- ++(\slope, \height * \value{tikztimingtrans})% - -- ++(-\slope,0)% - -- ++(#1,0)% - ++(0, -\height + \height * \value{tikztimingtranspos})% -}% -\tikztimingdef{EH}{% - ++(0,+\height)% - -- ++(\slope,0)% - ++(-\slope,-\height)% - -- ++(\slope/2.,+\height/2.)% - \newdraw [\style]% - -- ++(\slope/2.,+\height/2.)% + \newdraw [\style] + -- ++(\slope,-\height)% -- ++($ (#1,0) - (\slope,0) $)% + ++($ -1*(#1,-\height) $)% + -- ++($ 1*(#1,0) $)% + ++(0,-.5\height)% + \newdraw + \code{\setcounter{tikztimingtranspos}{1}}% + \code{\setcounter{tikztimingtrans}{-1}}% }% -\tikztimingdef{EL}{% - -- ++(\slope,0)% - ++(-\slope,\height)% - -- ++(\slope/2.,-\height/2.)% - \newdraw [\style]% - -- ++(\slope/2.,-\height/2.)% + +\tikztimingdef{TE@}{% + \newdraw [\bgstyle] + -- ++(\slope,-\height * \value{tikztimingtrans})% + -- ++($ (#1,0) - (\slope,0) $)% + -- ++(0,\height * \value{tikztimingtrans})% + -- ++($ -1*(#1,0) $)% + \newdraw [\style] + -- ++(\slope,-\height * \value{tikztimingtrans})% -- ++($ (#1,0) - (\slope,0) $)% + ++($ -1*(#1,-\height * \value{tikztimingtrans}) $)% + -- ++($ 1*(#1,0) $)% + ++(0,-1*\value{tikztimingtrans}*.5*\height)% + \newdraw }% -\tikztimingdef{ZE}{% - \code{\setcounter{tikztimingtranspos}{1}}% + +\tikztimingdef{LEL}{% + \newdraw [\style,preaction={\bgstyle}] + -- +(\slope,\height)% + -- +(#1,\height)% + -- +($ (#1,0) + (\slope,0) $)% + -- +(0,0) + ++(#1,\height/2) coordinate (timing@ref) + ++(\slope,-\height/2)% + \newdraw +}% + +\tikztimingdef{LEH}{% + \newdraw [\style,preaction={\bgstyle}] + -- +(\slope,\height)% + -- +($ (#1,\height) + (\slope,0) $)% + -- +(#1,0)% + -- +(0,0) + ++(#1,\height/2) coordinate (timing@ref) + ++(\slope,\height/2)% + \newdraw +}% + +\tikztimingdef{HEH}{% + \newdraw [\style,preaction={\bgstyle}] + -- +($ (#1,0) + (\slope,0) $)% + -- +(#1,-\height)% + -- +(\slope,-\height) + -- +(0,0) + ++(#1,-\height/2) coordinate (timing@ref) + ++(\slope,\height/2)% + \newdraw +}% + +\tikztimingdef{HEL}{% + \newdraw [\style,preaction={\bgstyle}] + -- +(#1,0) + -- +($ (#1,-\height) + (\slope,0) $)% + -- +(\slope,-\height) + -- +(0,0) + ++(#1,-\height/2) coordinate (timing@ref) + ++(\slope,-\height/2)% + \newdraw +}% + +\tikztimingdef{HET}{ + \newdraw [\style,preaction={\bgstyle}] + -- +(#1,0) + {[\nstyle] + -- +($ (#1,-\height) + (\slope,0) $)% + } + -- +(\slope,-\height) + -- +(0,0) + {[\nstyle] + ++(#1,-\height/2) coordinate (timing@ref) + ++(\slope,-\height/2)% + } + \newdraw \code{\setcounter{tikztimingtrans}{-1}}% - \tikztiminguse{ZD}{#1}% } -\tikztimingdef{XE}{% - \code{\setcounter{tikztimingtranspos}{1}}% - \code{\setcounter{tikztimingtrans}{-1}}% - \tikztiminguse{XD}{#1}% + +\tikztimingdef{LET}{ + \newdraw [\style,preaction={\bgstyle}] + -- +(\slope,\height)% + {[\nstyle] + -- +($ (#1,\height) + (\slope,0) $)% + } + -- +(#1,0)% + -- +(0,0) + {[\nstyle] + ++(#1,\height/2)% + coordinate (timing@ref) + ++(\slope,\height/2)% + } + \newdraw + \code{\setcounter{tikztimingtrans}{1}}% } -\tikztimingdef{ME}{% + +\tikztimingdef{HEE}{% + \newdraw [\style,preaction={\bgstyle}] + -- +(#1,0) coordinate (timing@refb) + coordinate [shift={(0,-\height/2)}] (timing@ref) + -- +($ (#1,-\height) + (\slope,0) $) coordinate (timing@refa) + -- +(\slope,-\height) + -- +(0,0) + coordinate [shift={(#1,-\height/2)}] (timing@ref) + ++($ (#1,-\height) + (\slope,0) $)% \code{\setcounter{tikztimingtranspos}{1}}% \code{\setcounter{tikztimingtrans}{-1}}% - \tikztiminguse{MD}{#1}% + \newdraw +}% + +\tikztimingdef{LEE}{% + \newdraw [\style,preaction={\bgstyle}] + -- +(#1,0) coordinate (timing@refa) + coordinate [shift={(0,\height/2)}] (timing@ref) + -- +($ (#1,\height) + (\slope,0) $) coordinate (timing@refb) + -- +(\slope,\height) + -- +(0,0) + ++(#1,0) coordinate [shift={(0,\height/2)}] (timing@ref) + \code{\setcounter{tikztimingtranspos}{0}}% + \code{\setcounter{tikztimingtrans}{1}}% + \newdraw +}% + +\tikztimingdef{TEE}{% + \newdraw [\style,preaction={\bgstyle}] + -- +(\slope, -\height * \value{tikztimingtrans})% + -- +($ (#1,0) + (\slope, -\height * \value{tikztimingtrans}) $) + -- +(#1,0) + -- +(0,0)% + \code{\setcounter{tikztimingtranspos}{\value{tikztimingtrans}}% + \addtocounter{tikztimingtranspos}{+1}} + +($ (#1,0) + (\slope/2 + \slope/2 * \value{tikztimingtrans}, -\height/2 * \value{tikztimingtranspos}) $) + coordinate (timing@refa) + +($ (#1,0) + (\slope/2 - \slope/2 * \value{tikztimingtrans}, \height - \height/2 * \value{tikztimingtranspos}) $) + coordinate (timing@refb) + ++(#1,0) + coordinate [shift={(0,-\height/2 * \value{tikztimingtrans})}] (timing@ref) + ++( + .5 * \slope + .5 * \value{tikztimingtrans} * \slope, + -.5 * \height - .5 * \value{tikztimingtrans} * \height + ) + \code{\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}} + \newdraw +}% + +\tikztimingdef{TEH}{% + \newdraw [\style,preaction={\bgstyle}] + -- ++(\slope,-\height * \value{tikztimingtrans}) + -- ++($ (#1,0) - (\slope/2 + \slope/2 * \value{tikztimingtrans},0) $) + -- ++(\slope * \value{tikztimingtrans}, + \height * \value{tikztimingtrans}) + -- ++($ -1*(#1,0) - (\slope/2 + \slope/2 * \value{tikztimingtrans},0) $) + ++($ (#1,-\height/2 * \value{tikztimingtrans}) $) coordinate (timing@ref) + ++(\slope,\height/2) + \newdraw +} + +\tikztimingdef{TEL}{% + \newdraw [\style,preaction={\bgstyle}] + -- ++(\slope,-\height * \value{tikztimingtrans}) + -- ++($ (#1,0) - (\slope/2 - \slope/2 * \value{tikztimingtrans},0) $) + -- ++(-\slope * \value{tikztimingtrans}, + \height * \value{tikztimingtrans}) + -- ++($ -1*(#1,0) - (\slope/2 + -\slope/2 * \value{tikztimingtrans},0) $) + ++($ (#1,-\height/2 * \value{tikztimingtrans}) $) coordinate (timing@ref) + ++(\slope,-\height/2) + \newdraw +} + +\tikztimingdef{TEZ}{% + \newdraw [\style,preaction={\bgstyle}] + -- ++(\slope,-\height * \value{tikztimingtrans}) + -- ++($ (#1,0) - (\slope,0) $) + -- ++(\zslope, + \height/2 * \value{tikztimingtrans}) + -- ++(-\zslope, + \height/2 * \value{tikztimingtrans}) + -- ++($ -1*(#1,0) $) + ++($ (#1,0) + (0,-\height/2 * \value{tikztimingtrans}) $) + coordinate (timing@ref) + ++(\zslope,0) + \newdraw +} + +\tikztimingdef{TED}{% + \newdraw [\style,preaction={\bgstyle}] + -- ++(\slope,-\height * \value{tikztimingtrans}) + -- ++($ (#1,0) - (\slope,0) $) + -- ++(\dslope/2, + \height/2 * \value{tikztimingtrans}) + -- ++(-\dslope/2, + \height/2 * \value{tikztimingtrans}) + -- ++($ -1*(#1,0) $) + ++($ (#1,0) + (0,-\height/2 * \value{tikztimingtrans}) $) + coordinate (timing@ref) + ++(\dslope/2,0) + \newdraw +} + +\tikztimingdef{TET}{% + \newdraw [\style,preaction={\bgstyle}] + -- +(\slope, -\height * \value{tikztimingtrans})% + {[\nstyle] + -- +($ (#1,0) + (\slope, -\height * \value{tikztimingtrans}) $)% + } + -- +(#1,0)% + -- +(0,0)% + {[\nstyle] + ++($ (#1,0) + (0, -\height/2 * \value{tikztimingtrans}) $)% + coordinate (timing@ref) + ++(\slope, -\height/2 * \value{tikztimingtrans})% + } + \code{\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}} + \newdraw +}% + +\tikztimingdef{EEZ}{% + \newdraw [\style,preaction={\bgstyle}] + -- (timing@refb) + -- ($ (timing@ref) + (#1,+\height/2) $) + -- ($ (timing@ref) + (#1,0) + (\zslope,0) $) + -- ($ (timing@ref) + (#1,-\height/2) $) + -- (timing@refa) + ($ (timing@ref) + (#1,0) + (\zslope,0) $) + coordinate (timing@ref) at ($ (timing@ref) + (#1,0) $) + \newdraw +}% + +\tikztimingdef{EED}{% + \newdraw [\style,preaction={\bgstyle}] + -- (timing@refb) + -- ($ (timing@ref) + (#1,+\height/2) $) + -- ($ (timing@ref) + (#1,0) + (\dslope/2,0) $) + -- ($ (timing@ref) + (#1,-\height/2) $) + -- (timing@refa) + ($ (timing@ref) + (#1,0) + (\dslope/2,0) $) + coordinate (timing@ref) at ($ (timing@ref) + (#1,0) $) + \newdraw +}% + +\tikztimingdef{HEZ}{% + \newdraw [\style,preaction={\bgstyle}] + -- +(#1,0) + -- +($ (#1,-\height/2) + (\zslope,0) $)% + -- +(#1,-\height) + -- +(\slope,-\height) + -- +(0,0) + ++(#1,-\height/2) coordinate (timing@ref) + ++(\zslope,0)% + \newdraw +}% + +\tikztimingdef{LEZ}{% + \newdraw [\style,preaction={\bgstyle}] + -- +(\slope,\height) + -- +(#1,\height) + -- +($ (#1,\height/2) + (\zslope,0) $)% + -- +(#1,0) + -- +(0,0) + ++(#1,\height/2) coordinate (timing@ref) + ++(\zslope,0)% + \newdraw +}% + +\tikztimingdef{LED}{% + \newdraw [\style,preaction={\bgstyle}] + -- +(\slope,\height) + -- +(#1,\height) + -- +($ (#1,\height/2) + (\dslope/2,0) $)% + -- +(#1,0) + -- +(0,0) + ++(#1,\height/2) coordinate (timing@ref) + ++(\dslope/2,0)% + \newdraw +}% + +\tikztimingdef{HED}{% + \newdraw [\style,preaction={\bgstyle}] + -- +(#1,0) + -- +($ (#1,-\height/2) + (\dslope/2,0) $)% + -- +(#1,-\height) + -- +(\slope,-\height) + -- +(0,0) + ++(#1,-\height/2) coordinate (timing@ref) + ++(\dslope/2,0)% + \newdraw +}% + +\tikztimingdef{EZ}{% + \newdraw [\style] + -- ($ (timing@ref) + (#1,0) $)% +} + +\tikztimingdef{EM}{% + \newdraw [\style] + -- ($ (timing@ref) + (#1,0) $)% + \newdraw [\style/base] +} + +\tikztimingdef{EL}{% + -- ($ (timing@ref) + (#1,-\height/2) $)% +}% +\tikztimingdef{EH}{% + -- ($ (timing@ref) + (#1,+\height/2) $)% +}% + +\tikztimingdef{ED@}{% + \tikztiming@chard@{#1}% +} +\tikztimingcpy{E{D@edge@}@}{ED@} + +\tikztimingdef{ED}{% + \tikztiming@chard{#1}% +} +\tikztimingcpy{E{D@edge@}}{ED} +\tikztimingdef{EDD}{% + \tikztiming@chard@{#1}% +} +\tikztimingdef{EUU}{% + \tikztiming@chard@{#1}% +} +\tikztimingdef{EDU}{% + \tikztiming@chard{#1}% +} +\tikztimingdef{EUD}{% + \tikztiming@chard{#1}% +} + +\tikztimingdef{DE@}{% + \tikztiming@oldnodecenter@% + \newdraw [\bgstyle] + -- +(\dslope/2,\height/2) + -- ($ (timing@ref) + (#1,\height/2) $)% + -- ($ (timing@ref) + (#1,-\height/2) $)% + -- ($ (timing@save) + (\dslope/2,-\height/2) $) + -- (timing@save) + \newdraw [\style] + -- +(\dslope/2,\height/2) + -- ($ (timing@ref) + (#1,\height/2) $)% + ($ (timing@ref) + (#1,-\height/2) $)% + -- ($ (timing@save) + (\dslope/2,-\height/2) $) + -- (timing@save) + ($ (timing@ref) + (#1,0) $)% + coordinate (timing@ref) +} + +\tikztimingdef{EEE}{% + \newdraw [\style,preaction={\bgstyle}] + -- (timing@refb) + -- ($ (timing@refb) + (#1,0) $) + -- ($ (timing@refa) + (#1,0) $) + -- (timing@refa) + ++(#1,0) coordinate (timing@refa) + coordinate (timing@refb) at ($ (timing@refb) + (#1,0) $) + coordinate (timing@ref) at ($ (timing@ref) + (#1,0) $) + \newdraw +}% + +\tikztimingdef{EET}{% + \newdraw [\style,preaction={\bgstyle}] + -- (timing@refb) + {[\nstyle] + -- ($ (timing@ref) + (#1,+\height/2) + (\slope/2 + \slope/2 * \value{tikztimingtrans},0) $) + -- ($ (timing@ref) + (#1,-\height/2) + (\slope/2 - \slope/2 * \value{tikztimingtrans},0) $) + } + -- (timing@refa) + {[\nstyle] + ($ (timing@ref) + (#1,\height/2 * \value{tikztimingtrans}) + (\slope,0) $) + } + coordinate (timing@ref) at ($ (timing@ref) + (#1,0) $) + \newdraw +}% + +\tikztimingdef{EEL}{% + \newdraw [\style,preaction={\bgstyle}] + -- (timing@refb) + -- ($ (timing@ref) + (#1,+\height/2) $) + -- ($ (timing@ref) + (#1,-\height/2) + (\slope,0) $) + -- (timing@refa) + ($ (timing@ref) + (#1,-\height/2) + (\slope,0) $) + coordinate (timing@ref) at ($ (timing@ref) + (#1,0) $) + \newdraw +}% + +\tikztimingdef{EEH}{% + \newdraw [\style,preaction={\bgstyle}] + -- (timing@refb) + -- ($ (timing@ref) + (#1,+\height/2) + (\slope,0) $) + -- ($ (timing@ref) + (#1,-\height/2) $) + -- (timing@refa) + ($ (timing@ref) + (#1,+\height/2) + (\slope,0) $) + coordinate (timing@ref) at ($ (timing@ref) + (#1,0) $) + \newdraw +}% + +\tikztimingdef{EE@}{% + \newdraw [\bgstyle] + let \p0 = (timing@ref), \p1 = (timing@refa), \p2 = (timing@refb) in + -- (\p2) + -- ($ (\x0,\y2) + (#1,0) $) + -- +(0,\y1-\y2) + -- (\p1) + \newdraw [\style] + let \p0 = (timing@ref), \p1 = (timing@refa), \p2 = (timing@refb) in + -- (\p2) + -- ($ (\x0,\y2) + (#1,0) $) + +(0,\y1-\y2) + -- (\p1) + ($ (timing@ref) + (#1,0) $) coordinate (timing@ref) + \newdraw +}% + +\tikztimingdef{ZE@}{ + \newdraw [\bgstyle] + -- +(\zslope,\height/2) + -- +(#1,\height/2)% + -- +(#1,-\height/2)% + -- +(\zslope,-\height/2) + -- +(0,0) + \newdraw [\style] + -- +(\zslope,\height/2) + -- +(#1,\height/2)% + +(#1,-\height/2)% + -- +(\zslope,-\height/2) + -- +(0,0) + ++(#1,0) coordinate (timing@ref) +} + +\tikztimingdef{ZEH}{% + \newdraw [\style,preaction={\bgstyle}] + -- +(\zslope, \height/2) + -- +($ (#1,0) + (\slope, \height/2) $) + -- +(#1,-\height/2) + -- +(\zslope, -\height/2) + -- +(0,0) + ++(#1,0) coordinate (timing@ref) + ++(\slope, \height/2) + \newdraw +} + +\tikztimingdef{ZEL}{% + \newdraw [\style,preaction={\bgstyle}] + -- +(\zslope, \height/2) + -- +(#1,\height/2) + -- +($ (#1,0) + (\slope, -\height/2) $) + -- +(\zslope, -\height/2) + -- +(0,0) + ++(#1,0) coordinate (timing@ref) + ++(\slope, -\height/2) + \newdraw +} + +\tikztimingdef{ZET}{% + \newdraw [\style,preaction={\bgstyle}] + -- +(\zslope, \height/2) + {[\nstyle] + -- +($ (#1, \height/2) + (\slope/2 - \slope/2 * \value{tikztimingtrans}, 0) $) + -- +($ (#1,-\height/2) + (\slope/2 + \slope/2 * \value{tikztimingtrans}, 0) $) + } + -- +(\zslope, -\height/2) + -- +(0,0) + {[\nstyle] + ++(#1,0) coordinate (timing@ref) + ++(\slope,-\height/2 * \value{tikztimingtrans}) + } + \code{\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}} + \newdraw +} + +\tikztimingdef{DET}{% + \tikztiming@oldnodecenter@% + \newdraw [\style,preaction={\bgstyle}] + -- +(\dslope/2, \height/2) + {[\nstyle] + -- ($ (timing@ref) + (#1, \height/2) + (\slope/2 - \slope/2 * \value{tikztimingtrans}, 0) $) + -- ($ (timing@ref) + (#1,-\height/2) + (\slope/2 + \slope/2 * \value{tikztimingtrans}, 0) $) + } + -- ($ (timing@save) + (\dslope/2, -\height/2) $) + -- (timing@save) + {[\nstyle] + ($ (timing@ref) + (#1,0) $) coordinate (timing@ref) + ++(\slope,-\height/2 * \value{tikztimingtrans}) + } + \code{\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}} + \newdraw +} + +\tikztimingdef{ZEZ}{% + \newdraw [\style,preaction={\bgstyle}] + -- +(\zslope, \height/2) + -- +(#1,\height/2) + -- +($ (#1,0) + (\zslope, 0) $) + -- +(#1,-\height/2) + -- +(\zslope, -\height/2) + -- +(0,0) + ++(#1,0) coordinate (timing@ref) + ++(\zslope, 0) + \newdraw +} + +\tikztimingdef{ZEE}{% + \newdraw [\style,preaction={\bgstyle}] + -- +(\zslope, \height/2) + -- +($ (#1,0) + (\slope, \height/2) $) coordinate (timing@refb) + -- +(#1,-\height/2) coordinate (timing@refa) + -- +(\zslope, -\height/2) + -- +(0,0) + +(#1,0) coordinate (timing@ref) + ++(#1,-\height/2) + \code{\setcounter{tikztimingtranspos}{0}}% + \code{\setcounter{tikztimingtrans}{1}}% +} + +\tikztimingdef{DEE}{% + \tikztiming@oldnodecenter@ + \newdraw [\style,preaction={\bgstyle}] + -- +(\dslope/2, \height/2) + -- ($ (timing@ref) + (#1,0) + (\slope, \height/2) $) coordinate (timing@refb) + -- ($ (timing@ref) + (#1,-\height/2) $) coordinate (timing@refa) + -- ($ (timing@save) + (\dslope/2, -\height/2) $) + -- (timing@save) + coordinate (timing@ref) at ($ (timing@ref) + (#1,0) $) + (timing@refa) + \code{\setcounter{tikztimingtranspos}{0}}% + \code{\setcounter{tikztimingtrans}{1}}% +} + +\tikztimingdef{DED}{% + \tikztiming@oldnodecenter@% + \newdraw [\style,preaction={\bgstyle}] + -- +(\dslope/2, \height/2) + -- ($ (timing@ref) + (#1,\height/2) $) + -- ($ (timing@ref) + (#1,0) + (\dslope/2,0) $) + -- ($ (timing@ref) + (#1,-\height/2) $) + -- ($ (timing@save) + (\dslope/2, -\height/2) $) + -- (timing@save) + ($ (timing@ref) + (#1,0) $) + coordinate (timing@ref) + ++(\dslope/2,0) + \newdraw +} + +\tikztimingdef{ZED}{% + \newdraw [\style,preaction={\bgstyle}] + -- +(\zslope, \height/2) + -- +(#1,\height/2) + -- +($ (#1,0) + (\dslope/2, 0) $) + -- +(#1,-\height/2) + -- +(\zslope, -\height/2) + -- +(0,0) + ++(#1,0) coordinate (timing@ref) + ++(\dslope/2, 0) + \newdraw +} + +\tikztimingdef{DEZ}{% + \tikztiming@oldnodecenter@ + \newdraw [\style,preaction={\bgstyle}] + -- +(\dslope/2, \height/2) + -- ($ (timing@ref) + (#1,\height/2) $) + -- ($ (timing@ref) + (#1,0) + (\zslope, 0) $) + -- ($ (timing@ref) + (#1,-\height/2) $) + -- ($ (timing@save) + (\dslope/2, -\height/2) $) + -- (timing@save) + ($ (timing@ref) + (#1,0) $) + coordinate (timing@ref) + ++(\zslope, 0) + \newdraw +} + +\tikztimingdef{DEH}{% + \tikztiming@oldnodecenter@% + \newdraw [\style,preaction={\bgstyle}] + -- +(\dslope/2, \height/2) + -- ($ (timing@ref) + (#1,0) + (\slope, \height/2) $) + -- ($ (timing@ref) + (#1,-\height/2) $) + -- ($ (timing@save) + (\dslope/2, -\height/2) $) + -- (timing@save) + ($ (timing@ref) + (#1,0) $) coordinate (timing@ref) + ++(\slope, \height/2) + \newdraw +} + +\tikztimingdef{DEL}{% + \tikztiming@oldnodecenter@% + \newdraw [\style,preaction={\bgstyle}] + -- +(\dslope/2, \height/2) + -- ($ (timing@ref) + (#1,\height/2) $) + -- ($ (timing@ref) + (#1,0) + (\slope, -\height/2) $) + -- ($ (timing@save) + (\dslope/2, -\height/2) $) + -- (timing@save) + ($ (timing@ref) + (#1,0) $) coordinate (timing@ref) + ++(\slope, -\height/2) + \newdraw +} + +\tikztimingdef{@E}{% + \code{\setcounter{tikztimingtranspos}{0}}% + \code{\setcounter{tikztimingtrans}{1}}% + \tikztiminguse{@D}{#1} +} + +\tikztimingdef{@DE}{% + \tikztiming@@chard{#1}% } +\tikztimingdef{DDE}{ + \tikztiming@@chard{#1}% +} + +\tikztimingdef{@EH}{% + coordinate [shift={(0,\height/2)}] (timing/start) + \newdraw [\bgstyle] + -- +(0,\height) + -- +($ (#1,\height) + (\slope,0) $) + -- +(#1,0) + -- +(0,0) + \newdraw [\style] + +(0,\height) + -- +($ (#1,\height) + (\slope,0) $) + -- +(#1,0) + -- +(0,0) + ++(#1,\height/2) coordinate (timing@ref) + ++(\slope,\height/2) + \newdraw +} + +\tikztimingdef{@ET}{% + coordinate [shift={(0,\height/2)}] (timing/start) + \newdraw [\bgstyle] + -- +(0,\height) + {[\nstyle] + -- ($ (timing@ref) + (#1,\height/2) + (\slope,0) $) + } + -- ($ (timing@ref) + (#1,-\height/2) $) + -- (timing@save) + \newdraw [\style] + +(0,\height) + {[\nstyle] + -- ($ (timing@ref) + (#1,\height/2) + (\slope,0) $) + } + -- ($ (timing@ref) + (#1,-\height/2) $) + -- (timing@save) + {[\nstyle] + ($ (timing@ref) + (#1,0) $) coordinate (timing@ref) + ++(\slope,\height/2) + } + \newdraw + \code{\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}} +} + +\tikztimingdef{ET}{% + {[\style] + -- ($ (timing@ref) + (#1,\height/2 * \value{tikztimingtrans}) $) + } +} + +\tikztimingdef{@EL}{% + coordinate [shift={(0,\height/2)}] (timing/start) + \newdraw [\bgstyle] + -- +(0,\height) + -- +(#1,\height) + -- +($ (#1,0) + (\slope,0) $) + -- +(0,0) + \newdraw [\style] + +(0,\height) + -- +(#1,\height) + -- +($ (#1,0) + (\slope,0) $) + -- +(0,0) + ++(#1,\height/2) coordinate (timing@ref) + ++(\slope,-\height/2) + \newdraw +} + +\tikztimingdef{@ED}{% + coordinate [shift={(0,\height/2)}] (timing/start) + \newdraw [\bgstyle] + -- +(0,\height) + -- +(#1,\height) + -- +($ (#1,\height/2) + (\dslope/2,0) $) + -- +(#1,0) + -- +(0,0) + \newdraw [\style] + +(0,\height) + -- +(#1,\height) + -- +($ (#1,\height/2) + (\dslope/2,0) $) + -- +(#1,0) + -- +(0,0) + ++(#1,\height/2) coordinate (timing@ref) + ++(\dslope/2,0) +} + +\tikztimingdef{@EZ}{% + coordinate [shift={(0,\height/2)}] (timing/start) + \newdraw [\bgstyle] + -- +(0,\height) + -- +(#1,\height) + -- +($ (#1,\height/2) + (\zslope,0) $) + -- +(#1,0) + -- +(0,0) + \newdraw [\style] + +(0,\height) + -- +(#1,\height) + -- +($ (#1,\height/2) + (\zslope,0) $) + -- +(#1,0) + -- +(0,0) + ++(#1,\height/2) coordinate (timing@ref) + ++(\zslope,0) +} + +\tikztimingdef{@EE}{% + coordinate [shift={(0,\height/2)}] (timing/start) + \newdraw [\bgstyle] + -- +(0,\height) + -- +($ (#1,\height) + (\slope,0) $) + -- +(#1,0) + -- +(0,0) + \newdraw [\style] + +(0,\height) + -- +($ (#1,\height) + (\slope,0) $) coordinate (timing@refb) + -- +(#1,0) coordinate (timing@refa) + -- +(0,0) + ++(#1,0) coordinate [shift={(0,\height/2)}] (timing@ref) + \code{\setcounter{tikztimingtranspos}{0}}% + \code{\setcounter{tikztimingtrans}{1}}% +} + \def\tikztiming@nocombine@E{}%% -\def\tikztiming@nocombine@e{}%% \endinput %% %% End of file `tikz-timing-either.sty'. diff --git a/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-ifsym.sty b/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-ifsym.sty new file mode 100644 index 00000000000..86a8548dbac --- /dev/null +++ b/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-ifsym.sty @@ -0,0 +1,89 @@ +%% +%% This is file `tikz-timing-ifsym.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% tikz-timing.dtx (with options: `lib,lib-ifsym') +%% +%% Copyright (C) 2009 by Martin Scharrer +%% +%% 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[tikz-timing-ifsym] + {$Id: tikz-timing.dtx 1580 2009-12-09 11:14:01Z martin $} + [v0.7 + TikZ-Timing Library for + ifsym compatible macros] +\GetFileInfoSVN*% +\RequirePackage{tikz-timing}[\filedate]% +\DefineFileInfoSVN + +\tikzset{% + timing/ifsym/macro/.style={/tikz/timing/ifsym,/utils/exec={\pgfmathparse{.6*\f@size}\let\ysize\pgfmathresult},/tikz/y=\ysize}, + timing/ifsym/.style={% + /tikz,timing/slope=0,x=\f@size,y=\f@size,line width=0.1ex, + timing/metachar={|}{G}, + timing/x/.style={}, + timing/metachar={M}[1]{#1X}, + timing/metachar={m}[1]{#1x}, + /utils/exec={% +\def\tikztimingsetdslope##1{% + \pgfmathparse{max(0.0,##1)}% + \let\tikztiming@dslope\pgfmathresult + \edef\timingdslope{\tikztiming@dslope*\noexpand\timingwidth}% +} +\tikztiming@defcode{<}{% + \@ifnextchar{<}% + {\tikztiming@ifsym@longslope{X}{D}}% + {\tikztiming@parser [timing/dslope=1] 0Xd;}% +}% +\tikztiming@defcode{>}{% + \@ifnextchar{>}% + {\tikztiming@ifsym@longslope{D}{X}}% + {\tikztiming@parser [timing/dslope=1] 0Dx;}% +}% +\def\tikztiming@ifsym@longslope##1##2##3{ + \tikztiming@parser [timing/dslope=2.] 0##1 ##2;% +}% + }}, +} +\tikzset{% + timing/ifsym/.cd, + provide/.code={\let\tikztiming@ifsym@def\providecommand}, + renew/.code={\let\tikztiming@ifsym@def\renewcommand}, + new/.code={\let\tikztiming@ifsym@def\newcommand}, + off/.code={\let\tikztiming@ifsym@def\@gobbletwo}, +} +\tikzset{timing/ifsym/provide}% +\RequirePackage{pgfopts} +\ProcessPgfOptions{/tikz/timing/ifsym} +\tikztiming@ifsym@def{\RaisingEdge}{\hbox{\texttiming[timing/ifsym/macro]{.4L .4H}}} +\tikztiming@ifsym@def{\FallingEdge}{\hbox{\texttiming[timing/ifsym/macro]{.4H .4L}}} +\tikztiming@ifsym@def{\ShortPulseHigh}{\hbox{\texttiming[timing/ifsym/macro]{.4L .2H .4L}}} +\tikztiming@ifsym@def{\ShortPulseLow}{\hbox{\texttiming[timing/ifsym/macro]{.4H .2L .4H}}} +\tikztiming@ifsym@def{\PulseHigh}{\hbox{\texttiming[timing/ifsym/macro]{.4L .6H .4L}}} +\tikztiming@ifsym@def{\PulseLow}{\hbox{\texttiming[timing/ifsym/macro]{.4H .6L .4H}}} +\tikztiming@ifsym@def{\LongPulseHigh}{\hbox{\texttiming[timing/ifsym/macro]{.4L H .4L}}} +\tikztiming@ifsym@def{\LongPulseLow}{\hbox{\texttiming[timing/ifsym/macro]{.4H L .4H}}} +\tikztiming@ifsym@def{\textifsym}{\texttiming[timing/ifsym]} +\let\tikztiming@ifsym@def\@undefined +\endinput +%% +%% End of file `tikz-timing-ifsym.sty'. diff --git a/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-interval.sty b/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-interval.sty new file mode 100644 index 00000000000..ba133dea8e9 --- /dev/null +++ b/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-interval.sty @@ -0,0 +1,111 @@ +%% +%% This is file `tikz-timing-interval.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% tikz-timing.dtx (with options: `lib,lib-interval') +%% +%% Copyright (C) 2009 by Martin Scharrer +%% +%% 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[tikz-timing-interval] + {$Id: tikz-timing.dtx 1580 2009-12-09 11:14:01Z martin $} + [v0.7 + TikZ-Timing Library for + alternative Z transitions] +\GetFileInfoSVN*% +\RequirePackage{tikz-timing}[\filedate]% +\DefineFileInfoSVN + + +\let\tikztiming@linterval\relax +\let\tikztiming@rinterval\relax + +\tikztimingdef{LZ}{ + \tikztiming@linterval + {\newdraw [\style]} + {-- ++(\zslope,+\height/2.)} + -- ++($ (#1,0) - (\zslope,0) $) +} + +\tikztimingdef{HZ}{% + \tikztiming@linterval + {\newdraw [\style]} + {-- ++(\zslope,-\height/2.)} + -- ++($ (#1,0) - (\zslope,0) $) +} + +\tikztimingdef{TZ}{% + \code{\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}} + \tikztiming@linterval + {\newdraw [\style]} + {-- ++(\zslope,\value{tikztimingtrans}*\height/2.)} + -- ++($ (#1,0) - (\zslope,0) $) +} + +\tikztimingdef{ZL}{% + \tikztiming@rinterval + {\newdraw} + {-- ++(\zslope,-\height/2.)} + -- ++($ (#1,0) - (\zslope,0) $) +} + +\tikztimingdef{ZH}{% + \tikztiming@rinterval + {\newdraw} + {-- ++(\zslope,\height/2.)} + -- ++($ (#1,0) - (\zslope,0) $) +} + +\tikztimingdef{ZT}{% + \code{\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}} + \tikztiming@rinterval + {\newdraw [\style]} + {-- ++(\zslope,\value{tikztimingtrans}*\height/2.)} + -- ++($ (#1,0) - (\zslope,0) $) +} + +\def\tikztiming@onetwo#1#2{#1#2} +\def\tikztiming@twoone#1#2{#2#1} + +\let\tikztiming@linterval\tikztiming@onetwo +\let\tikztiming@rinterval\tikztiming@onetwo + +\tikzset{timing/interval/.code={\pgfqkeys{/tikz/timing/interval}{#1}}} +\tikzset{timing/interval/.cd, + lo/.style={/tikz/timing/interval/left open}, + lc/.style={/tikz/timing/interval/left close}, + ro/.style={/tikz/timing/interval/right open}, + rc/.style={/tikz/timing/interval/right close}, + left close/.code={\let\tikztiming@linterval\tikztiming@onetwo}, + left open/.code={\let\tikztiming@linterval\tikztiming@twoone}, + right open/.code={\let\tikztiming@rinterval\tikztiming@onetwo}, + right close/.code={\let\tikztiming@rinterval\tikztiming@twoone}, +} +\tikzset{ + timing/interval/normal/.style={/tikz/timing/interval/left close,/tikz/timing/interval/right open}, + timing/interval/verilog/.style={/tikz/timing/interval/normal}, + timing/interval/metachar/.style={/tikz/timing/metachar={#1}[2]{[timing/interval={##2}]}}, +} + +\endinput +%% +%% End of file `tikz-timing-interval.sty'. diff --git a/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-nicetabs.sty b/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-nicetabs.sty new file mode 100644 index 00000000000..4b4f8cc0ad8 --- /dev/null +++ b/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-nicetabs.sty @@ -0,0 +1,125 @@ +%% +%% This is file `tikz-timing-nicetabs.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% tikz-timing.dtx (with options: `lib,lib-nicetabs') +%% +%% Copyright (C) 2009 by Martin Scharrer +%% +%% 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[tikz-timing-nicetabs] + {$Id: tikz-timing.dtx 1580 2009-12-09 11:14:01Z martin $} + [v0.7 + TikZ-Timing Library for + nice timing tables] +\GetFileInfoSVN*% +\RequirePackage{tikz-timing}[\filedate]% +\DefineFileInfoSVN + +\RequirePackage{array} +\RequirePackage{booktabs} + +\newcommand*\tikztiming@nicetabs@tableheader[3][]{% + \path [timing/table/midrules] [/utils/exec=\xdef\@gtempa{\the\pgflinewidth}]; + \path [timing/table/header,#1] + let \p1 = (0,\belowrulesep + \aboverulesep + \@gtempa + \arraystretch * + {(\ht\strutbox + \extrarowheight)} + \arraystretch\dp\strutbox) in + node [anchor=base west] (tikztiming@header) at (0,\y1) {\ignorespaces + #3\unskip\strut} + node [anchor=base east] at (-1*{(\tikztiming@coldist)},\y1) {\ignorespaces + #2\unskip\strut} + ; + \tikztiming@tableheadtrue +} +\newcommand*\tikztiming@nicetabs@tablerules[1][]{% + \begin{scope}[#1] + \coordinate (NW) at (current bounding box.north west); + \coordinate (SE) at (current bounding box.south east); + % + \draw [timing/table/rules] + let + \p1 = (NW), + \p2 = (SE), + \p3 = (last row text.base), + \p4 = ($ (0,\y3) - (0,\arraystretch\dp\strutbox + \aboverulesep + + .5\pgflinewidth) $) + in + (\x1-\tabcolsep,\y4) -- (\x2+\tabcolsep,\y4) + \iftikztiming@tablehead + let + \p5 = (tikztiming@header.base), + \p6 = ($ (0,\y5) + (0,\arraystretch * {(\ht\strutbox + \extrarowheight + )} + \belowrulesep + .5\pgflinewidth) $) + in + (\x1-\tabcolsep,\y6) -- (\x2+\tabcolsep,\y6) + \fi + ; + \draw + \iftikztiming@tablehead [timing/table/midrules] \else [timing/table/rules] \fi + let + \p1 = (NW), + \p2 = (SE), + \p3 = (0, \arraystretch * {( \ht\strutbox + \extrarowheight )} + + \belowrulesep + .5\pgflinewidth) + in + (\x1-\tabcolsep, \y3) + -- + (\x2+\tabcolsep, \y3) + ; + \end{scope} +} +\let\tikztiming@normal@tableheader\tikztiming@tableheader +\let\tikztiming@normal@tablerules\tikztiming@tablerules +\let\tikztiming@normal@coldist\tikztiming@coldist +\let\tikztiming@normal@rowdist\tikztiming@rowdist + +\tikzset{% + timing/no nice tabs/.code={% + \let\tikztiming@coldist\tikztiming@normal@coldist + \let\tikztiming@rowdist\tikztiming@normal@rowdist + \let\tikztiming@tableheader\tikztiming@normal@tableheader + \let\tikztiming@tablerules\tikztiming@normal@tablerules + }, + timing/nice tabs/.code={% + \ifx\tikztiming@tableheader\tikztiming@nicetabs@tableheader\else + \let\tikztiming@normal@coldist\tikztiming@coldist + \let\tikztiming@normal@rowdist\tikztiming@rowdist + \fi + \def\tikztiming@rowdist{% + \arraystretch * {(\ht\strutbox+\extrarowheight)}% + +\arraystretch\dp\strutbox + }% + \def\tikztiming@coldist{2\tabcolsep}% + \let\tikztiming@tableheader\tikztiming@nicetabs@tableheader + \let\tikztiming@tablerules\tikztiming@nicetabs@tablerules + }, + timing/nicetabs/no nice tabs/.style={/tikz/timing/no nice tabs}, + timing/nicetabs/off/.style={/tikz/timing/no nice tabs}, + timing/nicetabs/nice tabs/.style={/tikz/timing/nice tabs}, + timing/nicetabs/on/.style={/tikz/timing/nice tabs}, +} +\tikzset{timing/nice tabs}% +\RequirePackage{pgfopts} +\ProcessPgfOptions{/tikz/timing/nicetabs} +\endinput +%% +%% End of file `tikz-timing-nicetabs.sty'. diff --git a/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-overlays.sty b/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-overlays.sty index 4a7de0dc35b..a312ca31e04 100644 --- a/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-overlays.sty +++ b/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing-overlays.sty @@ -4,7 +4,7 @@ %% %% The original source files were: %% -%% tikz-timing.dtx (with options: `lib-overlays') +%% tikz-timing.dtx (with options: `lib,lib-overlays') %% %% Copyright (C) 2009 by Martin Scharrer %% @@ -27,36 +27,63 @@ %% \RequirePackage{svn-prov}[2009/05/03] \ProvidesPackageSVN[tikz-timing-overlays] - {$Id: tikz-timing.dtx 1158 2009-07-28 09:14:00Z martin $} - [v0.6a - TikZ-Timing Library for timing overlays] + {$Id: tikz-timing.dtx 1580 2009-12-09 11:14:01Z martin $} + [v0.7 + TikZ-Timing Library for + timing overlays] +\GetFileInfoSVN*% +\RequirePackage{tikz-timing}[\filedate]% \DefineFileInfoSVN -\tikztiming@defcode{O}{% - \@ifnextchar\relax - {\tikztiming@\relax}% - {\tikztiming@overlay}% -} -\def\tikztiming@overlay#1#2{% - \ifx\relax#1\relax - \tikztiming@output@flush - \def\next{\tikztiming@\relax}% +\tikztiming@defcode{O}#1{% + \ifx\relax#1\empty + \def\tikztiming@next{\tikztiming@parser#1}% \else - \ifx\relax#2\relax - \def\next{\tikztiming@#1\relax}% - \else - \tikztiming@output@flush - \let\tikztiming@overlay@lastchar\lastchar - \tikztiming@addtostr{ node [timing/save] (timing@overlay@start) {} }% - \tikztiming@#1\relax - \tikztiming@output@flush - \let\lastchar\tikztiming@overlay@lastchar - \tikztiming@addtostr{ (timing@overlay@start) }% - \def\next{\tikztiming@#2}% - \fi + \let\tikztiming@overlay@lastchar\tikztiming@lastchar + \let\tikztiming@overlay@width\tikztimingwidth + \tikztiming@output@addcode{\tikztiming@overlay@begin}% + \begingroup + \def\tikztiming@parser@end{% + \def\tikztiming@output@nextchar{@}% + \tikztiming@output@flush + } + \begingroup + \tikztiming@parser #1\relax + \endgroup + \endgroup + \tikztiming@output@addcode{\tikztiming@overlay@end}% + \global\let\tikztiming@lastchar\tikztiming@overlay@lastchar + \global\let\tikztimingwidth\tikztiming@overlay@width + \def\tikztiming@next{\expandafter\tikztiming@parser\@firstofone}% \fi - \next + \tikztiming@next } +\let\tikztiming@overlay@save\empty +\let\pgf@sh@nt@tikztiming@overlay@node\empty +\def\tikztiming@overlay@begin{ + [/utils/exec={% + \xdef\tikztiming@overlay@save{% + \noexpand\global\noexpand\c@tikztimingtrans\the\c@tikztimingtrans\relax% + \noexpand\global\noexpand\c@tikztimingtranspos\the\c@tikztimingtranspos\relax% + \noexpand\gdef\noexpand\pgf@sh@nt@tikztiming@overlay@node + {\csname pgf@sh@nt@tikztiming@overlay@node\endcsname}% + \noexpand\gdef\noexpand\pgf@sh@nt@timing@refa + {\csname pgf@sh@nt@timing@refa\endcsname}% + \noexpand\gdef\noexpand\pgf@sh@nt@timing@refb + {\csname pgf@sh@nt@timing@refb\endcsname}% + \noexpand\gdef\noexpand\pgf@sh@nt@timing@ref + {\csname pgf@sh@nt@timing@ref\endcsname}% + \noexpand\gdef\noexpand\tikztiming@overlay@save{% + \expandafter\unexpanded\expandafter{\tikztiming@overlay@save}% + }% + }% + }]% + node [timing/save] (tikztiming@overlay@node) {} + }% +\def\tikztiming@overlay@end{% + \tikztiming@newdraw (tikztiming@overlay@node) + [/utils/exec={\tikztiming@overlay@save}] +}% \endinput %% %% End of file `tikz-timing-overlays.sty'. diff --git a/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing.sty b/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing.sty index 1328131562c..d2ff15dc603 100644 --- a/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing.sty +++ b/Master/texmf-dist/tex/latex/tikz-timing/tikz-timing.sty @@ -27,8 +27,8 @@ %% \RequirePackage{svn-prov}[2009/05/03] \ProvidesPackageSVN - {$Id: tikz-timing.dtx 1158 2009-07-28 09:14:00Z martin $} - [v0.6a + {$Id: tikz-timing.dtx 1580 2009-12-09 11:14:01Z martin $} + [v0.7 Digital Timing Diagrams using TikZ] \DefineFileInfoSVN[tikztiming] @@ -42,89 +42,148 @@ {\RequirePackage{environ}} {\RequirePackage{amsmath}} \fi - -\newcommand*\usetikztiminglibrary[2][]{% - \edef\tikztiming@library@options{#1}% - \@ifnextchar{[}%] - {\tikztiming@library{#2}}% - {\tikztiming@library{#2}[]}% -} -\def\tikztiming@library#1[#2]{% - \edef\tikztiming@library@date{#2}% - \tikztiming@library@#1,\relax -} - -\def\tikztiming@library@#1,{% - \IfFileExists{tikz-timing-#1.sty}% - {\RequirePackage[\tikztiming@library@options]{tikz-timing-#1}% - [\tikztiming@library@date]}% - {\PackageError{tikz-timing}% - {No tikz-timing library `#1' found!}% - {}{}{}{}% - }% - \@ifnextchar\relax{}{\tikztiming@library@}% -} - \def\tikztimingwidth{0.0} \newcount\tikztiming@numint \newcount\tikztiming@numfrac -\def\tikztiming@num{1.0}% +\def\tikztiming@wscale{1.0}% +\def\tikztimingsetwscale#1{% + \pgfmathparse{#1}% + \let\tikztiming@wscale\pgfmathresult +} +\def\tikztiming@num{0.0}% \let\tikztiming@back\empty \newlength\tikztiming@xunit \newlength\tikztiming@yunit +\setlength{\tikztiming@xunit}{1.6ex}% +\setlength{\tikztiming@yunit}{1.6ex}% + +\def\tikztiming@setnum#1{% + \pgfmathparse{#1}% + \global\let\tikztiming@num\pgfmathresult +} + +\newcount\tikztiming@debug + +\def\tikztiming@xsep{0pt} +\def\tikztiming@ysep{0pt} \newcounter{tikztiming@nrows}% \def\tikztiming@rowdist{2}% \def\tikztiming@coldist{1}% -\def\tikztiminglabel#1{#1}% -\def\tikztiming@prefix{tikztiming@trans@} +\def\tikztiming@prefix{tikztiming@trans@}% +\def\tikztiming@ttt#1#2#3{#1#2#3}% +\def\tikztiming@pfxtr{% + \tikztiming@prefix\expandafter\tikztiming@ttt +} + +\def\timingwidth{1}% +\def\timingheight{1}% -\tikzset{timing/.style={% - x=1.6ex, y=1.6ex, +\tikzset{% + timing/.style={% line cap=round, line join=round, - /utils/exec={\setlength{\tikztiming@xunit}{1.6ex}\setlength{\tikztiming@yunit}{1.6ex}}, - }% + timing/adjust@xy + },% } \tikzset{% timing/.cd, + adjust@xy/.style={% + /utils/exec={% + \tikz@textfont + \setlength{\tikztiming@xunit}{1.6ex}% + \setlength{\tikztiming@yunit}{1.6ex}% + },% + /tikz/x=1.6ex, /tikz/y=1.6ex, + }, + font/.style={% + /tikz/font={#1}, + /tikz/timing/adjust@xy + },% initchar/.value required, - initchar/.code={\ifx\lastchar\empty\uppercase{\def\lastchar{#1}}\fi}, - metachar/.code 2 args={\tikztimingmetachar{#1}{#2}}, + initchar/.code={\uppercase{\gdef\tikztiming@lastchar{#1}}}, + metachar/.code={\tikztimingmetachar#1}, grid/.style={timing,help lines}, + @grid/.code={\texttiminggrid}, + draw grid/.style={% + timing/before text/.append style={timing/@grid},% + timing/before/.append style={timing/@grid}% + }, + no grid/.style={timing/@grid/.code={}}, + before/.code={}, + after/.code={}, + before text/.code={\texttimingbefore}, + after text/.code={\texttimingafter}, picture/.style={timing,line width=0.15ex}, intext/.style={timing,line width=0.15ex}, inline node/.style={shape=coordinate}, - table/.style={timing,line width=0.15ex,font=\sffamily}, + inline node/from char/.store in=\tikztiming@node@fromchar, + inline node/to char/.store in=\tikztiming@node@tochar, + table/.style={font=\sffamily,timing,line width=0.15ex}, + before table/.code={}, + after table/.code={}, coord/.style={coordinate}, - save/.style={coordinate,/utils/exec=\tikztiming@savesettings}, - restore/.style={/utils/exec=\tikztiming@restoresettings}, - name/.style={inner sep=0pt,outer sep=0pt}, + save/.style={coordinate}, + restore/.style={/utils/exec={\expandafter\tikzset\expandafter{\tikztiming@saved@options}}}, + option/.style={/utils/exec={\g@addto@macro\tikztiming@saved@options{#1,}},#1}, + nooptions/.style={/utils/exec={\gdef\tikztiming@saved@options{}}}, + name/.style={inner sep=0pt,outer sep=0pt,minimum size=0pt}, + text format/.store in=\tikztiming@textformat, + @/.style={}, + D/.style={timing/d}, + D/text/.style={timing/d/text}, + D/background/.style={timing/d/background}, + D@edge@/.style={timing/d@edge@}, + D@edge@/text/.style={timing/d@edge@/text}, + D@edge@/background/.style={timing/d@edge@/background}, + U/.style={timing/u}, + U/text/.style={timing/u/text}, + U/background/.style={timing/u/background}, + U@edge@/.style={timing/u@edge@}, + U@edge@/text/.style={timing/u@edge@/text}, + U@edge@/background/.style={timing/u@edge@/background}, + H/.style={timing/h}, + L/.style={timing/l}, + E/.style={timing/e}, + E/background/.style={timing/e/background}, + M/decoration/.style={timing/m/decoration}, + M/base/.style={timing/m/base}, + M/.style={timing/m}, + G/.style={timing/g}, + Z/.style={timing/z}, + T/.style={timing/t}, + C/.style={timing/c}, + X/.style={timing/x}, + d/.style={}, d/text/.style={timing,scale=0.6,font=\sffamily}, - d/background/.style={}, + d/background/.style={draw=none}, + d@edge@/.style={timing/d}, + d@edge@/text/.style={timing/d/text}, + d@edge@/background/.style={timing/d/background}, + u/.style={}, + u/background/.style={draw=none,fill=gray}, + u@edge@/.style={timing/u}, + u@edge@/text/.style={timing/u/text}, + u@edge@/background/.style={timing/u/background}, h/.style={}, l/.style={}, - d/.style={}, e/.style={}, - e/background/.style={}, - a/.style={->}, - w/.style={<-}, - m/.style={black!40!brown}, - m/decoration/.style={decorate,decoration={zigzag,segment - length=.25\tikztiming@xunit,amplitude=.225\tikztiming@yunit}}, - k/.style={black!40!blue,semitransparent}, - u/background/.style={fill=gray}, - u/.style={}, - o/background/.style={}, - o/.style={timing/d,line width=0.10ex,dotted}, - g/.style={}, + e/background/.style={draw=none}, + m/decoration/.style={decorate,% + decoration={zigzag,segment length=.25\tikztiming@xunit, + amplitude=.225\tikztiming@yunit}}, + m/base/.style={black!40!brown}, + m/.style={timing/m/base,timing/m/decoration}, + g/.style={decorate=false}, z/.style={blue}, t/.style={}, - c/.style={timing/slope=0.0}, + c/.style={timing/lslope=0.0}, x/.style={red}, table/grid/.style={timing/grid}, table/lines/.style={}, table/rules/.style={line width=0.08em,line cap=butt}, + table/midrules/.style={line width=0.05em,line cap=butt}, + table/header/.style={timing/name}, slope/.code={% \tikztimingsetslope{#1}% \tikztimingsetdslope{2*#1}% @@ -133,8 +192,25 @@ lslope/.code={\tikztimingsetslope{#1}}, dslope/.code={\tikztimingsetdslope{#1}}, zslope/.code={\tikztimingsetzslope{#1}}, + wscale/.code={\tikztimingsetwscale{#1}}, coldist/.store in=\tikztiming@coldist, rowdist/.store in=\tikztiming@rowdist, + outer xsep/.store in=\tikztiming@xsep, + outer ysep/.store in=\tikztiming@ysep, + outer sep/.style={/tikz/timing/outer xsep=#1,/tikz/timing/outer ysep=#1}, + % + debug/level/.code={\tikztiming@debug=#1\relax}, + debug/level/.value required, + debug/scope/.style={font=\sffamily\tiny,gray}, + debug/node/.style={above,inner sep=2pt}, + debug/nodes/.style={% + /tikz/timing/after table/.append code={\tikztiming@marknodes{\tikztiming@namednodes}}, + /tikz/timing/after text/.append code={\tikztiming@marknodes{\tikztiming@namednodes}} + }, + debug/markcmd/.store in={\tikztiming@markcmd}, +} +\tikzset{timing/inline node/.cd, + from char={}, to char={} } \def\texttimingbefore{} \def\texttimingafter{} @@ -144,179 +220,308 @@ } \DeclareRobustCommand*\texttiming[2][]{% \begingroup - \tikztiming@init + \let\tikztiming@lastchar\empty + \let\tikztiming@settings\empty + \tikzset{timing/before/.append style={timing/before text}}% + \tikzset{timing/after/.prefix style={timing/after text}}% \ifx\relax#1\relax\else \tikztiming@testoptarg#1\relax\relax% \fi - \def\@tempa{\begin{tikzpicture}[timing/intext,}%]}[ - \expandafter\@tempa\settings] - \@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}% - \path[use as bounding box] (0,0) rectangle - (\timingwidth*\tikztimingwidth,\timingheight);% - \texttimingbefore - \tikztiming@str;% - \node [shape=tikztiming@shape,anchor=origin,name=last texttiming] at (0,0) - {}; - \texttimingafter + \begin{tikzpicture}[timing/intext,baseline={(0,0)}] + \tikztiming@picinit + \def\@tempa{\expandafter\timing\expandafter[\tikztiming@settings] at (0,0)}% + \expandafter\@tempa\expandafter{\expandafter[\tikztiming@lastchar]#2};% \end{tikzpicture}% \endgroup } \def\tikztiming@testoptarg#1#2\relax{% \ifx\relax#2\relax - \uppercase{\def\lastchar{#1}}% + \uppercase{\def\tikztiming@lastchar{#1}}% \else - \def\settings{#1#2}% + \def\tikztiming@settings{#1#2}% \fi } +\def\tikztiming@picinit{% + \global\let\tikztiming@namednodes\empty +} +\let\tikztiming@namednodes\empty \def\tikztiming@init{% - \let\lastchar\empty% - \let\currentchar\empty - \let\settings\empty + \def\tikztiming@lastchar{@}% + \def\tikztiming@num{0}% + \let\tikztiming@currentchar\empty + \let\tikztiming@settings\empty + \let\tikztiming@fromchar\empty + \let\tikztiming@tochar\empty + \let\setwscale\tikztimingsetwscale + \def\wscale{\tikztiming@wscale}% + \let\xunit\tikztiming@xunit + \let\yunit\tikztiming@yunit + \def\slope{\timingslope}% + \def\lslope{\timingslope}% + \def\zslope{\timingzslope}% + \def\dslope{\timingdslope}% + \gdef\tikztiming@saved@settings{}% + \gdef\tikztiming@saved@options{}% + \gdef\tikztiming@oldnodecenter@{}% \def\tikztimingwidth{0.0}% \setcounter{tikztimingtrans}{-1}% \setcounter{tikztimingtranspos}{0}% - \def\tikztiming@str{\draw (0,0) coordinate (timing/start base) }% + \def\tikztiming@str{% + \useasboundingbox (0,0) rectangle (\tikztimingwidth,\timingheight); + \draw (0,0) + coordinate (timing@refa) + coordinate [shift={(0,\timingheight)}] (timing@refb) + coordinate [shift={(0,\timingheight/2)}] (timing@ref) + coordinate (timing/start) + coordinate (timing/start base) + }% } -\def\timing{% +\def\tikz@timing{% \@ifnextchar{[}% - {\timing@}% - {\timing@[]}% + {\tikz@timing@}% + {\tikz@timing@[]}% +} +\g@addto@macro\tikz@installcommands{% + \let\tikz@origtiming=\timing% + \let\timing=\tikz@timing% } -\def\timing@[#1]{% +\g@addto@macro\tikz@uninstallcommands{% + \let\timing=\tikz@origtiming% +} +\def\tikz@timing@[#1]{% \@ifnextchar{a}% - {\timing@at{#1}}% + {\tikz@timing@at{#1}}% {\PackageWarning{tikz-timing}{The \string\timing\space command awaits now an `at' before the coordinate, like the \string\node\space command is doing. Please update your source code to ensure compatibility with newer versions}{}{}{}% \@ifnextchar{+}% - {\timing@@{#1}}% + {\tikz@timing@@{#1}}% {\@ifnextchar(%) - {\timing@@{#1}}% - {\timing@@{#1}++(0,0)}% + {\tikz@timing@@{#1}}% + {\tikz@timing@@{#1}++(0,0)}% }% }% } -\def\timing@at#1at#2(#3){% - \timing@@@{#1}{#2(#3)}% +\def\tikz@timing@at#1at#2(#3){% + \tikz@timing@@@{#1}{#2(#3)}% } -\def\timing@@#1#2(#3){% - \timing@@@{#1}{#2(#3)}% +\def\tikz@timing@@#1#2(#3){% + \tikz@timing@@@{#1}{#2(#3)}% } -\def\timing@@@#1#2#3{% +\def\tikz@timing@@@#1#2#3{% \begingroup \tikztiming@init \let\tikz@alias=\pgfutil@empty% \begin{scope}[shift={#2},timing,#1]% \@ifnextchar{[}% - {\timing@@@init}% - {\timing@@@init[]}% + {\tikz@timing@@@init}% + {\tikz@timing@@@init[]}% #3\relax - %\message{^^J\meaning\tikztiming@str^^J}% + \ifnum\tikztiming@debug>1 + \message{^^J\meaning\tikztiming@str^^J}% + \ifnum\tikztiming@debug>2 + {% + \def\@protect##1{\def##1{\noexpand##1}}% + \@protect\useasboundingbox + \@protect\draw + \@protect\p + \@protect\n + \@protect\x + \@protect\y + \@protect\tikztiming@overlay@save + \edef\@tempa{\tikztiming@str}% + \message{^^J\meaning\@tempa^^J}% + }% + \fi + \fi + \tikzset{timing/before}% \tikztiming@str;% \node [shape=tikztiming@shape,anchor=origin,#1] at (0,0) {}; + \tikzset{timing/after}% \end{scope}% \endgroup - \timing@@@end + \tikz@timing@@@end } -\def\timing@@@end#1;{% - \ifx;#1;\else - \PackageError{tikz-package}{Can not parse timing path}{}{}{}% - \fi +\def\tikz@timing@@@end{% + \@ifnextchar{;}% + {\@gobble}% + {\PackageError{tikz-package}{Can not parse timing path}{}{}{}}% } -\def\timing@@@init[#1]{% +\def\tikz@timing@@@init[#1]{% + \begingroup \ifx\relax#1\relax\else - \uppercase{\def\lastchar{#1}}% + \uppercase{\def\tikztiming@lastchar{#1}}% \fi - \@ifundefined{tikztiming@initcode@\lastchar}% + \@ifundefined{tikztiming@initcode@\tikztiming@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}{}}% + {\@nameuse{tikztiming@initcode@\tikztiming@lastchar}}% + \if @\tikztiming@lastchar\relax\else + \tikztiming@iftrans{@\tikztiming@lastchar}% + {\tikztiming@nameaddtostr{@}{\tikztiming@lastchar}{}}% + {\PackageWarning{tikz-timing}{Start value for timing character + '\tikztiming@lastchar' is not defined and will be ignored!}{}{}{}}% \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 + \tikztiming@parser } -\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@trans@#1#2#3#4{% + \csname\tikztiming@prefix #2#3#4\endcsname{#1}{#2}{#3}{#4}% } \def\tikztiming@beforenextcode@D@edge@{% - \if D\currentchar\else - \if d\currentchar\else - \def\lastchar{D}% - \fi + \if D\tikztiming@currentchar\else + \gdef\tikztiming@lastchar{D}% \fi } -\def\tikztiming@beforenextcode@d@edge@{% - \if D\currentchar\else - \if d\currentchar\else - \def\lastchar{D}% - \fi +\def\tikztiming@beforenextcode@U@edge@{% + \if U\tikztiming@currentchar\else + \gdef\tikztiming@lastchar{U}% \fi } +\def\tikztiming@initcode@{% + \gdef\tikztiming@lastchar{@}% +} \def\tikztiming@initcode@D{% - \def\lastchar{D@edge@}% + \gdef\tikztiming@lastchar{D@edge@}% } -\def\tikztiming@initcode@d{% - \def\lastchar{d@edge@}% +\def\tikztiming@initcode@U{% + \gdef\tikztiming@lastchar{U@edge@}% } -\def\tikztiming@{% - \@ifnextchar\bgroup - {\tikztiming@testfornum}% +\def\tikztiming@parser{% + \@ifnextchar\relax + {\tikztiming@parser@end}% {\tikztiming@testfornum}% } -\def\tikztiming@eaddtostr#1{% +\def\tikztiming@eaddto#1#2{% \begingroup - \tikztiming@internaldefs{}% - \@temptokena\expandafter{\tikztiming@str}% - \xdef\tikztiming@str{% + \tikztiming@internaldefs + \@temptokena\expandafter{#1}% + \xdef#1{% \the\@temptokena - #1% + #2% }% \endgroup } +\def\tikztiming@eaddtostr{% + \tikztiming@eaddto\tikztiming@str +} \def\tikztiming@addtostr{% \g@addto@macro\tikztiming@str } +\def\tikztiming@makeglobal#1{% + \global\let#1#1\relax\relax +} +\def\tikztiming@trans{}% +\def\tikztiming@iftrans#1{% + \tikztiming@iftrans@#1\empty\empty\empty\relax +} +\def\tikztiming@iftrans@#1#2#3#4\relax{% + \begingroup + \xdef\tikztiming@trans{#1#2}% + \ifx\tikztiming@trans\empty + \gdef\tikztiming@trans{{@}{}{@}}% + \else + \global\let\tikztiming@trans\relax + % Use triple macros before double macros + \@ifundefined{tikztiming@triple@#2}% + {\@ifundefined{\tikztiming@prefix#1#2}% + {}% + {\xdef\tikztiming@trans{{#1}{#2}{}}}% + }% + {% + \@ifundefined{\tikztiming@prefix#1#2#3}% + {}% + {\xdef\tikztiming@trans{{#1}{#2}{#3}}}% + }% + % If both do not exist, search for aliases: + \ifx\tikztiming@trans\relax + \@ifundefined{tikztiming@alias@#1}% + {\edef\chara{#1}}% + {\edef\chara{#1,\csname tikztiming@alias@#1\endcsname}}% + \@ifundefined{tikztiming@alias@#2}% + {\edef\charb{#2}}% + {\edef\charb{#2,\csname tikztiming@alias@#2\endcsname}}% + \@ifundefined{tikztiming@triple@#2}% + {\def\charc{\empty}}% + {% + \@ifundefined{tikztiming@alias@#3}% + {\edef\charc{#3,}}% + {\edef\charc{#3,\csname tikztiming@alias@#3\endcsname,}}% + }% + \ifx\charb\empty + \def\charb{\empty}% + \fi + \let\tikztiming@next\relax + \foreach \b in \charb {% + \foreach \a in \chara {% + \foreach \c in \charc {% + %\message{ ^^J Testing: \a\b\c ^^J}% + \@ifundefined{\tikztiming@prefix\a\b\c}% + {}{% + \xdef\tikztiming@trans{{#1}{#2}{#3}}% + \expandafter\tikztimingcpy\expandafter + {\tikztiming@trans}{\a\b\c}% + \ifnum\tikztiming@debug>0 + \message{^^J DEBUG: '#1#2#3' = '\a\b\c' ^^J}% + \fi + \expandafter\tikztiming@makeglobal + \csname\tikztiming@pfxtr\tikztiming@trans\endcsname + \ifnum\tikztiming@debug>1 + \ifnum\tikztiming@debug>2 + \expandafter\show\csname\tikztiming@pfxtr\tikztiming@trans\endcsname + \else + \message{^^J\tikztiming@trans: + \expandafter\meaning\csname\tikztiming@pfxtr\tikztiming@trans\endcsname^^J}% + \message{^^J\a\b\c: + \expandafter\meaning\csname\tikztiming@prefix\a\b\c\endcsname^^J}% + \fi + \fi + \global\let\tikztiming@next\breakforeach + }% + \tikztiming@next + }% + \tikztiming@next + }% + \tikztiming@next + }% + \fi + \fi + \endgroup + \ifx\tikztiming@trans\relax + \expandafter\@secondoftwo + \else + \expandafter\@firstoftwo + \fi +} +\def\tikztiming@nameaddtostr#1#2#3{% + \tikztiming@iftrans{{#1}{#2}{#3}}% + {% + \edef\@tempa{\noexpand\tikztiming@trans@{\tikztiming@num}\tikztiming@trans}% + \expandafter\g@addto@macro + \expandafter\tikztiming@str + \expandafter{\@tempa}% + }% + {\PackageWarning{tikz-timing}{No transitions '#1#2' (or '#1#2#3') defined!}}% +} +\def\tikztiming@output@addcode#1{% + \g@addto@macro\tikztiming@output@bufcode{\unexpanded{ #1 }}% +} +\def\tikztiming@output@eaddcode#1{% + \g@addto@macro\tikztiming@output@bufcode{ #1 }% +} +\def\tikztiming@output@Eaddcode{% + \tikztiming@eaddto\tikztiming@output@bufcode% +} +\def\tikztiming@output@bufchara{}% +\def\tikztiming@output@bufcharb{}% +\def\tikztiming@output@bufnum{0}% +\def\tikztiming@output@bufcode{}% +\def\tikztiming@output@nextchar{}% \def\tikztiming@output#1#2{% + \edef\tikztiming@fromchar{#1}% + \edef\tikztiming@tochar{#2}% \ifx\relax#2\relax - \tikztiming@nameaddtostr{#1}% + %\tikztiming@output@codeflush + \tikztiming@nameaddtostr{}{#1}{}% \else \ifcase0% \ifx\tikztiming@output@bufchara\empty @@ -327,61 +532,65 @@ % 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 + \ifx\tikztiming@output@bufcode\empty% Stop combining if code was inserted + \expandafter\ifx\csname tikztiming@nocombine@#2\endcsname\relax + \ifx\tikztiming@output@currentchar\tikztiming@output@bufcharb + 2% + \fi + \fi + \else + 1% + \fi \relax + \edef\tikztiming@output@nextchar{#2}% + \tikztiming@output@flush + \xdef\tikztiming@output@bufchara{#1}% + \xdef\tikztiming@output@bufcharb{#2}% + \or + \edef\tikztiming@output@nextchar{#2}% \tikztiming@output@flush - \edef\tikztiming@output@bufchara{#1}% - \edef\tikztiming@output@bufcharb{#2}% + \xdef\tikztiming@output@bufchara{#1}% + \xdef\tikztiming@output@bufcharb{#2}% \or \pgfmathparse{\tikztiming@output@bufnum + \tikztiming@num}% - \let\tikztiming@output@bufnum\pgfmathresult - \def\tikztiming@num{1.0}% + \global\let\tikztiming@output@bufnum\pgfmathresult \fi \else % empty - \edef\tikztiming@output@bufchara{#1}% - \edef\tikztiming@output@bufcharb{#2}% - \let\tikztiming@output@bufnum\tikztiming@num - \def\tikztiming@num{1.0}% + \tikztiming@output@codeflush + \xdef\tikztiming@output@bufchara{#1}% + \xdef\tikztiming@output@bufcharb{#2}% + \global\let\tikztiming@output@bufnum\tikztiming@num \fi \fi } -\def\tikztiming@output@bufchara{}% -\def\tikztiming@output@bufcharb{}% -\def\tikztiming@output@bufnum{0}% \def\tikztiming@output@flush{% + \tikztiming@output@charflush + \tikztiming@output@codeflush +} +\def\tikztiming@output@codeflush{% + \tikztiming@eaddtostr{\tikztiming@output@bufcode}% + \global\let\tikztiming@output@bufcode\empty% +} +\def\tikztiming@output@charflush{% \begingroup \let\tikztiming@num\tikztiming@output@bufnum - \tikztiming@nameaddtostr{% - \tikztiming@output@bufchara - \tikztiming@output@bufcharb - }% + \tikztiming@nameaddtostr + {\tikztiming@output@bufchara}% + {\tikztiming@output@bufcharb}% + {\tikztiming@output@nextchar}% \endgroup% + \gdef\tikztiming@output@nextchar{}% \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 +\newcommand\tikztiming@nameedef[4]{% + \def\@gtempa##1{#4}% \begingroup - \tikztiming@internaldefs{#1}% - \xdef\@gtempa##1{\@gtempa{\width}}% + \tikztiming@internaldefs + \xdef\@gtempa##1##2##3##4{\@gtempa{\width}}% \endgroup - \expandafter\let\csname\tikztiming@prefix#2\endcsname\@gtempa + \expandafter\let\csname\tikztiming@prefix#1#2#3\endcsname\@gtempa \let\@gtempa\empty } \newcommand\tikztiming@namelet[2]{% @@ -398,7 +607,10 @@ \csname\tikztiming@prefix#2\endcsname \fi } -\def\tikztiming@@end{% +\def\tikztiming@parser@end{% + \def\tikztiming@output@nextchar{@}% + \let\tikztiming@fromchar\tikztiming@tochar + \edef\tikztiming@tochar{@}% \tikztiming@output@flush \global\let\tikztimingwidth\tikztimingwidth \tikztiming@addtostr{ coordinate (timing/end) @@ -406,42 +618,29 @@ coordinate (timing/end base) at (\x2,\y1) coordinate (timing/end top) at (\x2,1+\y1) }% + \endgroup + \tikztiming@endhook% } -\def\tikztiming@@#1{% +\let\tikztiming@endhook\relax +\def\tikztiming@parser@#1{% \ifx\relax#1\empty - \expandafter\tikztiming@@end + \expandafter\tikztiming@parser@end \else - \let\lasttikztimingwidth\tikztimingwidth \tikztiming@iflower{#1}% - {\pgfmathparse{\tikztiming@num/2.0}\let\tikztiming@num\pgfmathresult}% + {\tikztiming@setnum{\tikztiming@num/2}}% {}% \ifx\tikztiming@back\empty\else - \pgfmathparse{\tikztiming@num-\tikztiming@back}% - \let\tikztiming@num\pgfmathresult - \let\tikztiming@back\empty + \tikztiming@setnum{\tikztiming@num - \tikztiming@back}% + \global\let\tikztiming@back\empty \fi \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}}% + \global\let\tikztimingwidth\pgfmathresult + \uppercase{\gdef\tikztiming@currentchar{#1}}% + \@nameuse{tikztiming@beforenextcode@\tikztiming@lastchar}% + \@nameuse{tikztiming@beforecode@\tikztiming@currentchar}% + \tikztiming@output{\tikztiming@lastchar}{\tikztiming@currentchar}% + \global\let\tikztiming@lastchar\tikztiming@currentchar + \@nameuse{tikztiming@aftercode@\tikztiming@currentchar}% \expandafter \tikztiming@testfortext \fi @@ -449,58 +648,90 @@ \def\tikztiming@testfortext{% \@ifnextchar\bgroup {\tikztiming@handletext}% - {\tikztiming@}% + {\tikztiming@parser}% } \def\tikztiming@handletext#1{% + \@ifnextchar\relax + {\def\tikztiming@output@nextchar{@}\tikztiming@handletext@{#1}}% + {\def\tikztiming@output@nextchar{Z}\tikztiming@handletext@{#1}}% +} +\def\tikztiming@handletext@#1{% \@ifnextchar{[}% - {\tikztiming@handletext@}% - {\tikztiming@handletext@[]}% - #1\relax + {\tikztiming@handletext@@}% + {\tikztiming@handletext@@[]}% + #1\tikztiming@endoftext } -\def\tikztiming@handletext@[#1]#2\relax{% - \begingroup +\def\tikztiming@handletext@@[#1]#2\tikztiming@endoftext{% + \@ifnextchar{\relax}% + {\def\tikztiming@output@nextchar{@}% + \tikztiming@handletext@@@{#1}{#2}}% + {\tikztiming@handletext@@@{#1}{#2}}% +} +\def\tikztiming@handletext@@@#1#2{% \expandafter\lowercase\expandafter{% - \expandafter\def\expandafter\currentcharlc - \expandafter{\currentchar}% + \expandafter\def\expandafter\@tempa + \expandafter{\tikztiming@currentchar}% }% - \pgfkeysifdefined{/tikz/timing/\currentcharlc/text/.@cmd}% + \pgfkeysifdefined{/tikz/timing/\@tempa/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@}% + \edef\@tempa{node [timing/\@tempa/text,}% + \expandafter\tikztiming@output@addcode\expandafter{% + \@tempa + #1] at ($ (timing@dstart) !.5! (timing@dend) $) + {\tikztiming@textformat{#2}} + }% + \ifcase0% + \if @\tikztiming@output@bufchara + 1% + \else + \ifx\tikztiming@output@bufchara\tikztiming@currentchar + 1% + \fi + \fi + \relax + \else + \fi + \xdef\tikztiming@output@bufcharb{\tikztiming@currentchar @edge@}% + \xdef\tikztiming@lastchar{\tikztiming@currentchar @edge@}% }{% \endgroup \PackageWarning{tikz-timing}{Ignoring text for character - '\currentchar'!}{}{}{}% + '\tikztiming@currentchar'!}{}{}{}% }% - \tikztiming@ + \tikztiming@parser } +\let\tikztiming@textformat\empty \def\tikztiming@defcode#1{% \@namedef{tikztiming@code@\meaning#1}% } +\tikztiming@defcode{@}#1{% + #1\relax + \tikztiming@parser +} +\begingroup + \expandafter\let\expandafter\temp + \csname tikztiming@code@\meaning @\endcsname + \makeatother + \expandafter\global\expandafter\let + \csname tikztiming@code@\meaning @\endcsname\temp +\endgroup +\tikztiming@defcode$#1${% + \pgfmathparse{#1}% + \expandafter + \tikztiming@parser\pgfmathresult +} \tikztiming@defcode{,}{% - \tikztiming@output@flush - \tikztiming@eaddtostr{% + \tikztiming@output@eaddcode{% \newdraw }% - \tikztiming@ + \tikztiming@parser } \tikztiming@defcode{;}{% - \tikztiming@output@flush - \tikztiming@eaddtostr{% + \endgroup\begingroup + \tikztiming@output@eaddcode{% \newdrawns }% - \tikztiming@ + \tikztiming@parser } \tikztiming@defcode{N}{% \@ifnextchar[%] @@ -512,6 +743,53 @@ {\tikztiming@addnode@getoptions}% {\tikztiming@addnode@getoptions[]}% } +\tikztiming@defcode{B}{% + \pgfmathparse{\tikztiming@back+\tikztiming@num}% + \global\let\tikztiming@back\pgfmathresult + \tikztiming@parser +} +\tikztiming@defcode{b}{% + \pgfmathparse{\tikztiming@back+\tikztiming@num/2}% + \global\let\tikztiming@back\pgfmathresult + \tikztiming@parser +} +\tikztiming@defcode{F}{% + \pgfmathparse{\tikztiming@back-\tikztiming@num}% + \global\let\tikztiming@back\pgfmathresult + \tikztiming@parser +} +\tikztiming@defcode{f}{% + \pgfmathparse{\tikztiming@back-\tikztiming@num/2}% + \global\let\tikztiming@back\pgfmathresult + \tikztiming@parser +} +\tikztiming@defcode[{%}]{ + \@ifnextchar[%] + {\tikztiming@bothoption}% + {\@ifnextchar{!}% + {\tikztiming@parseroption}% + {\@ifnextchar{|}% + {\tikztiming@onceoption}% + {\tikztiming@addoption}% + }% + }% +} +\def\tikztiming@parseroption!#1!]{% + \pgfqkeys{/tikz/timing}{#1}% + \tikztiming@parser +} +\def\tikztiming@addoption#1]{% + \tikztiming@output@addcode{ [timing/option={#1}] }% + \tikztiming@parser +} +\def\tikztiming@bothoption[#1]]{% + \tikzset{#1}%[ + \tikztiming@addoption{#1}]% +} +\def\tikztiming@onceoption|#1|]{% + \tikztiming@output@addcode{ [#1] }% + \tikztiming@parser +} \def\tikztiming@addnode@getoptions[#1]{% \@ifnextchar(%) {\tikztiming@addnode@getname{#1}}% @@ -523,25 +801,54 @@ {\tikztiming@addnode@{#1}{#2}{}}% } \def\tikztiming@addnode@#1#2#3{% - \tikztiming@output@flush + \def\@tempa{#2}% + \ifx\@tempa\empty + \def\@tempa{ node [timing/inline node,% + timing/inline node/from char={\tikztiming@fromchar},% + timing/inline node/to char={\tikztiming@tochar},% + \unexpanded{#1}] }% + \def\@tempb{}% + \else + \def\@tempa{ node [timing/inline node,% + timing/inline node/from char={\tikztiming@fromchar},% + timing/inline node/to char={\tikztiming@tochar},% + \unexpanded{#1}] (\unexpanded{#2}) }% + \xdef\tikztiming@namednodes{\tikztiming@namednodes,#2}% + \fi + \expandafter\tikztiming@output@eaddcode\expandafter{\@tempa \unexpanded{{#3}}}% + \tikztiming@parser +} +\newcommand*\tikztiming@marknodes[2][]{% + \scope[timing/debug/scope,#1] + \edef\@tempa{floor((\noexpand\y1-\tikztiming@xunit) / \tikztiming@rowdist\tikztiming@xunit) * \tikztiming@rowdist\tikztiming@xunit}% + \foreach \N in #2 {% + \ifx\N\empty\else + \tikztiming@markcmd + \path let \p1=(\N) in + node [timing/debug/node] at ($ (\x1,\noexpand\@tempa) + (0,1) $) {\N}; + \fi + }% + \endscope +} +\def\tikztiming@markcmd{ \draw (\N) circle (1pt); }% +\newcommand*\tikztiming@mark@nodes[2][]{% \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} }% + \ifx\@tempa\empty \let\@tempa\tikztiming@namednodes \fi + \ifx\@tempa\space \let\@tempa\tikztiming@namednodes \fi + \def\@tempb{\tikztiming@marknodes[#1]}% + \expandafter\@tempb\expandafter{\expandafter{\@tempa}}% \endgroup - \tikztiming@ } \def\tikztiming@testforcode{% \@ifnextchar{!}% {\tikztiming@testforcode@}% {\@ifundefined{tikztiming@code@\meaning\@let@token}% - {\tikztiming@@}% - {\csname tikztiming@code@\meaning\@let@token\expandafter - \endcsname\@gobble}% + {\tikztiming@parser@}% + {\expandafter\afterassignment + \csname tikztiming@code@\meaning\@let@token\endcsname + \let\@let@token=% + }% }% } \def\tikztiming@testforcode@#1{% @@ -550,40 +857,15 @@ {% \PackageWarning{tikz-timing}{Missing braces after '!' character. Ignoring this character}{}{}{}% - \tikztiming@ + \tikztiming@parser }% } -\tikztiming@defcode{B}{% - \pgfmathparse{\tikztiming@back+\tikztiming@num}% - \let\tikztiming@back\pgfmathresult - \tikztiming@ -} -\tikztiming@defcode{b}{% - \pgfmathparse{\tikztiming@back+\tikztiming@num/2}% - \let\tikztiming@back\pgfmathresult - \tikztiming@ -} -\tikztiming@defcode{F}{% - \pgfmathparse{\tikztiming@back-\tikztiming@num}% - \let\tikztiming@back\pgfmathresult - \tikztiming@ -} -\tikztiming@defcode{f}{% - \pgfmathparse{\tikztiming@back-\tikztiming@num/2}% - \let\tikztiming@back\pgfmathresult - \tikztiming@ -} \def\tikztiming@handlecode#1{% - \tikztiming@output@flush - \tikztiming@addtostr{ #1 }% - \tikztiming@ -} -\tikztiming@defcode[#1]{% - \tikztiming@addtostr{ [#1] }% - \tikztiming@ + \tikztiming@output@addcode{ #1 }% + \tikztiming@parser } - \def\tikztiming@testfornum{% + \global\let\tikztiming@num\tikztiming@wscale \let\tikztiming@numchars\empty \tikztiming@numfrac0\relax \afterassignment @@ -607,6 +889,9 @@ \fi } \def\tikztiming@testfornum@{% + \ifx0\@let@token + \let\tikztiming@next\tikztiming@testfornum@@ + \else \ifnum0<\tikztiming@numint \let\tikztiming@next\tikztiming@testfornum@@ \else @@ -616,18 +901,17 @@ {% \tikztiming@numint1\relax \tikztiming@numfrac0\relax - \def\tikztiming@num{1.0}% + \global\let\tikztiming@num\tikztiming@wscale \if@tikztiming@metachar {\def\@tempa{\expandafter\expandafter\expandafter - \tikztiming@testfornum@@@@ - \expandafter\expandafter\expandafter{% - \csname tikztiming@metachar@\meaning\@let@token\endcsname}}% - \expandafter\@tempa\@gobble + \tikztiming@parser + \csname tikztiming@metachar@\meaning\@let@token\endcsname{1}}% + \expandafter\@tempa\@gobble }% {\tikztiming@testforcode}% }% }% - \fi + \fi\fi \tikztiming@next } \def\tikztiming@testfornum@@{% @@ -636,7 +920,8 @@ {\tikztiming@testfornum@@@}% } \def\tikztiming@testfornum@@@{% - \xdef\tikztiming@num{\the\tikztiming@numint.\expandafter\@gobble\the\tikztiming@numfrac}% + \edef\tikztiming@num{\the\tikztiming@numint.\expandafter\@gobble\the\tikztiming@numfrac}% + \tikztiming@setnum{\tikztiming@wscale * \tikztiming@num}% \@ifnextchar\bgroup {% \expandafter\tikztiming@numfrac\expandafter0\expandafter @@ -646,31 +931,21 @@ \PackageWarning{tikz-timing}% {Can not repeat group by a non-integer factor!^^J% Rounding '\tikztiming@num' to '\pgfmathresult'.}{}{}{}% - \let\tikztiming@num\pgfmathresult + \global\let\tikztiming@num\pgfmathresult \fi \tikztiming@testfornum@@@@ }% {% \if@tikztiming@metachar {\def\@tempa{\expandafter\expandafter\expandafter - \tikztiming@testfornum@@@@ - \expandafter\expandafter\expandafter{% - \csname tikztiming@metachar@\meaning\@let@token\endcsname}}% + \tikztiming@parser + \csname tikztiming@metachar@\meaning\@let@token\expandafter\endcsname + \expandafter{\tikztiming@num}}% \expandafter\@tempa\@gobble }% {\tikztiming@testforcode}% }% } -\def\tikztimingmetachar#1#2{% - \ifx\relax#2\relax - \expandafter\let\csname tikztiming@metachar@\meaning#1\endcsname\@undefined - \else - \@namedef{tikztiming@metachar@\meaning#1}{#2}% - \fi -} -\def\if@tikztiming@metachar#1#2{% - \@ifundefined{tikztiming@metachar@\meaning\@let@token}{#2}{#1}% -} \def\tikztiming@testfornum@@@@#1{% \begingroup \@temptokena{#1}% @@ -678,43 +953,67 @@ \endgroup \tikztiming@numint1\relax \tikztiming@numfrac0\relax - \expandafter\tikztiming@\tikztiming@numchars + \expandafter\tikztiming@parser\tikztiming@numchars +} +\def\tikztimingmetachar#1{% + \@ifnextchar{[}%] + {\tikztiming@metachar{#1}}% + {\tikztiming@metachar{#1}[]}% +} +\def\tikztiming@metachar#1[#2]#3{% + \ifx\relax#3\relax + \expandafter\let\csname tikztiming@metachar@\meaning#1\endcsname\@undefined + \else + \@namedef{tikztiming@metachar@\meaning#1}{}% + \ifx\relax#2\relax + \expandafter\renewcommand\expandafter*% + \csname tikztiming@metachar@\meaning#1\expandafter + \endcsname\expandafter[1]{##1{#3}}% + \else + \expandafter\renewcommand\expandafter*% + \csname tikztiming@metachar@\meaning#1\expandafter + \endcsname\expandafter[#2]{#3}% + \fi + \fi +} +\def\if@tikztiming@metachar#1#2{% + \@ifundefined{tikztiming@metachar@\meaning\@let@token}{#2}{#1}% } \newcounter{tikztimingrows} -\def\tikztiming@extracode{\@gobble{EXTRACODE}}% - +\def\abc{\tracingassigns=1} \newenvironment{tikztimingtable}[1][]{% \begingroup \setcounter{tikztiming@nrows}{0}% \def\tikztiming@maxwidth{0.0}% \let\extracode\tikztiming@extracode + \let\endextracode\tikztiming@endextracode \let\tablegrid\tikztiming@tablegrid \let\fulltablegrid\tikztiming@fulltablegrid \let\horlines\tikztiming@horlines \let\vertlines\tikztiming@vertlines - \let\tablerules\tikztiming@tablerules + \let\marknodes\tikztiming@mark@nodes + \def\background{\pgfonlayer{background}\scope}% + \def\endbackground{\endscope\endpgfonlayer}% + \def\tablerules{\tikztiming@tablerules}% + \def\tableheader{\tikztiming@tableheader}% \def\rowdist{\tikztiming@rowdist}% \def\coldist{\tikztiming@coldist}% \def\nrows{\the\c@tikztiming@nrows}% \def\twidth{\tikztiming@maxwidth}% \tikzpicture[timing/table,#1]% \coordinate (last row) at (0,\rowdist); - \coordinate (label pos) at (-1*\coldist,0); + \coordinate (label pos) at (-1*{(\coldist)},0); \coordinate (timing/table/top left) at (0,1); \coordinate (timing/table/bottom right) at (0,0); - \collect@body\tikztiming@table + \tikztiming@picinit + \tikzset{timing/before table}% + \tikztimingtable@checkrow }{% -} - -\def\tikztiming@table#1{% - \tikztimingtable@row#1\endtikztimingtable@ + \tikzset{timing/after table}% \endtikzpicture \endgroup } - -\def\endtikztimingtable@{\@gobble{ENDTIKSTIMING}} - -\long\def\tikztimingextracode#1#2\endtikztimingtable@{% +\def\tikztiming@extracode{% \path let \p1 = (timing/table/top left), \p2 = (timing/table/bottom right) @@ -723,15 +1022,53 @@ coordinate (timing/table/top right) at (\x2,\y1) coordinate (timing/table/size) at (\x2-\x1,\y1-\y2) ; - #2% + \@ifnextchar[{\tikztiming@oset}{} +} +\def\tikztiming@endextracode{% + \@ifnextchar\@checkend + {\aftergroup\expandafter\aftergroup\tikztimingtable@checkrow}% + {\tikztimingtable@checkrow}% +}% +\def\tikztimingtable@checkrow{% + \@ifnextchar\end + {}% + {\ifx\@let@token\extracode + \let\tikztiming@next\empty + \else + \ifx\@let@token\begin + \def\tikztiming@next{\tikztimingtable@chkbegec}% + \else + \def\tikztiming@next{\tikztimingtable@row}% + \fi + \fi + \tikztiming@next + }% +} +\def\tikztimingtable@chkbegec\begin#1{ + \begingroup + \def\@tempa{#1}% + \def\@tempb{extracode}% + \ifx\@tempa\@tempb + \endgroup + \def\tikztiming@next{\begin{extracode}}% + \else + \endgroup + \def\tikztiming@next{\tikztimingtable@row\begin{#1}}% + \fi + \tikztiming@next +} +\def\tikztiming@oset[#1]{% + \let\tikz@options\pgfutil@empty + \tikzset{#1}% + \tikz@options } \def\tikztiming@emptycell{% \@gobble{tikztiming@emptycell}% } -\def\tikztimingtable@row#1\\{% +\long\def\tikztimingtable@row#1\\{% \tikztimingtable@row@#1&\tikztiming@emptycell&\\ } -\def\tikztimingtable@row@#1\\{% +\long\def\tikztimingtable@row@#1\\{% \ifx\\#3\\\else \begingroup \def\@tempa{\tikztiming@emptycell&}% @@ -744,17 +1081,17 @@ \endgroup \fi \ifx\tikztiming@emptycell#2% - \def\next{\tikztimingtable@row@@{#1}{}}% + \def\tikztiming@next{\tikztimingtable@row@@{#1}{}}% \else - \def\next{\tikztimingtable@row@@{#1}{#2}}% + \def\tikztiming@next{\tikztimingtable@row@@{#1}{#2}}% \fi - \next + \tikztiming@next }% -\def\tikztimingtable@row@@#1#2{% +\long\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}}; + \coordinate (last row) at ($ (last row) - (0,\tikztiming@rowdist) $); + \node [anchor=base east,timing/name] (last row text) + at ($ (last row) - (\tikztiming@coldist,0) $) {\ignorespaces #1\unskip}; \@ifnextchar{[}% {\tikztiming@tabletiming}% {\tikztiming@tabletiming[]}% @@ -764,26 +1101,21 @@ % \pgfmathparse{max(\tikztiming@maxwidth,\tikztimingwidth)}% \let\tikztiming@maxwidth\pgfmathresult - \@ifnextchar\extracode - {% - \let\extracode\relax - \tikztimingextracode - }% - {% - \@ifnextchar\endtikztimingtable@ - {\@gobble}{\tikztimingtable@row}% - }% + \tikztimingtable@checkrow } \def\tikztiming@tabletiming[#1]#2\relax{% - \let\lastchar\empty - \let\settings\empty + \let\tikztiming@lastchar\empty + \let\tikztiming@settings\empty \ifx\relax#1\relax\else \tikztiming@testoptarg#1\relax\relax \fi - \edef\@tempa{\noexpand\timing[name=row\the\c@tikztiming@nrows,\settings] + \ifx\tikztiming@lastchar\empty + \def\tikztiming@lastchar{@}% + \fi + \edef\@tempa{\noexpand\timing[name=row\the\c@tikztiming@nrows,\tikztiming@settings] at (last row)}% - \expandafter\@tempa\expandafter{\expandafter[\lastchar]#2}; + \expandafter\@tempa\expandafter{\expandafter[\tikztiming@lastchar]#2}; } \newcommand*\tikztiming@fulltablegrid[1][]{% @@ -795,27 +1127,62 @@ \endscope \end{pgfonlayer} } -\newcommand*\tikztiming@tablegrid[1][]{% +\def\tikztiming@tablegrid{% + \@ifnextchar{*}% + {\tikztiming@tablegrid@{row\row.high end}}% + {\tikztiming@tablegrid@{timing/table/top right}}% +} +\def\tikztiming@tablegrid@#1{% + \@ifnextchar{[}%] + {\tikztiming@tablegrid@@{#1}}% + {\tikztiming@tablegrid@@{#1}[]}% +} +\def\tikztiming@tablegrid@@#1[#2]{% \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)}; + \scope[xstep={\timingwidth/2.},ystep={\timingheight/2.},timing/table/grid,#2] + \foreach \row in {1,...,\nrows} {% + \draw {[shift={(row\row.low start)}] + let \p1 = (#1) in (0,0) grid (\x1,1)}; }% \endscope \end{pgfonlayer} } +\newcommand*\tikztiming@tableheader[3][]{% + \path [timing/table/header,#1] + (-1*{(\tikztiming@coldist)},1.5*{(\tikztiming@rowdist)}) node + [anchor=base east] {\ignorespaces #2\unskip\strut} + (0,1.5*{(\tikztiming@rowdist)}) node + [anchor=base west] {\ignorespaces #3\unskip\strut} + ; + \tikztiming@tableheadtrue +} +\newif\iftikztiming@tablehead \newcommand*\tikztiming@tablerules[1][]{% - \draw [timing/table/rules,#1] let - \p1 = (current bounding box.north west), - \p2 = (current bounding box.south east), + \begin{scope}[#1] + \coordinate (NW) at (current bounding box.north west); + \coordinate (SE) at (current bounding box.south east); + % + \draw [timing/table/rules] + let + \p1 = (NW), + \p2 = (SE), \p3 = (last row) + in + ($ (\x1-\tabcolsep,\y3) - (0,.5*{(\rowdist)}) $) -- + ($ (\x2+\tabcolsep,\y3) - (0,.5*{(\rowdist)}) $) + \iftikztiming@tablehead + (\x1-\tabcolsep,2.5*{(\rowdist)}) -- (\x2+\tabcolsep,2.5*{(\rowdist)}) + \fi + ; + \draw + \iftikztiming@tablehead [timing/table/midrules] \else [timing/table/rules] \fi + let + \p1 = (NW), + \p2 = (SE) in (\x1-\tabcolsep,\rowdist) -- (\x2+\tabcolsep,\rowdist) - ($ (\x1-\tabcolsep,\y3) - (0,\rowdist-1) $) -- - ($ (\x2+\tabcolsep,\y3) - (0,\rowdist-1) $) ; + \end{scope} } \newcommand*\tikztiming@horlines[2][]{% \begingroup @@ -823,11 +1190,12 @@ \ifx\list\empty \def\list{1,2,...,\nrows}% \fi - \foreach \row in \list% + \foreach \row in \list {% \draw [timing/table/lines,#1] let \p1 = (timing/table/bottom right) in - (0,\rowdist-\row*\rowdist) -- +(\x1,0); + ($ (0,\rowdist) - (0,\row * {(\rowdist)}) $) -- +(\x1,0); + }% \endgroup } \newcommand*\tikztiming@vertlines[2][]{% @@ -897,6 +1265,18 @@ \pgfpointborderrectangle{\pgfpoint{\@tempdima}{\@tempdimb}}{\northeastborder}% }% } +\gdef\tikztiming@oldnodecenter@{}% +\tikzset{timing/old@node@center/.code={\xdef\tikztiming@oldnodecenter@{% + ++($ (0,0) - #1 $) + [timing/no@old@node@center]}}% +}% +\tikzset{timing/no@old@node@center/.code={\gdef\tikztiming@oldnodecenter@{}}}% + +\def\tikztiming@oldnodecenter#1{% + [timing/old@node@center={#1}] + ++#1 +} + \def\tikztiming@iflower#1{% \begingroup \edef\@tempa{`#1}% @@ -910,12 +1290,15 @@ \@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\tikztiming@internaldefs{% + \let\draw\relax + \let\path\relax + \let\p\relax + \let\x\relax + \let\y\relax + \let\n\relax + \let\tikztiming@oldnodecenter\relax + \let\tikztiming@oldnodecenter@\relax \def\width{####1*\noexpand\timingwidth}% \def\fwidth{\noexpand\timingwidth}% \def\height{\noexpand\timingheight}% @@ -923,10 +1306,9 @@ \def\zslope{\noexpand\timingzslope}% \def\dslope{\noexpand\timingdslope}% \def\gslope{0}% - \lowercase{% - \def\style{timing/#1}% - \def\bgstyle{timing/#1/background}% - }% + \def\style{timing/####3}% + \def\bgstyle{draw=none,timing/####3/background}% + \def\nstyle{timing/####4}% \def\newdraw{\tikztiming@newdraw}% \def\newdrawns{\tikztiming@newdraw@nosave}% \def\code##1{ [/utils/exec={\unexpanded{##1}}] }% @@ -950,39 +1332,41 @@ \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\tikztiminguse#1#2{% + \@nameuse{\tikztiming@prefix#1}{#2}{##2}{##3}{##4}% } \def\tikztimingdef#1{% - \tikztimingdef@#1\relax% + \tikztimingdef@#1\empty\empty\relax } -\def\tikztimingdef@#1#2\relax#3{% - \ifx\relax#2\relax - \tikztiming@nameedef[#1]{#1}{#3}% +\def\tikztimingdef@#1#2#3\relax#4{% + \ifx\empty#2\empty + \tikztiming@nameedef{}{#1}{}{#4}% \else - \tikztiming@nameedef[#2]{#1#2}{#3}% + \tikztiming@nameedef{#1}{#2}{#3}{#4}% \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\tikztimingcpy#1#2{% + \begingroup + \edef\tikztimingcpy@a{#1}% + \edef\tikztimingcpy@b{#2}% + \ifx\tikztimingcpy@a\tikztimingcpy@b + \endgroup + %\message{^^J Copy macro '#2' to '#1' skipped.^^J}% + \else + \endgroup + \@ifundefined{\tikztiming@pfxtr#2\empty\empty\empty}% + {\ifnum\tikztiming@debug>0\relax + \message{^^J Copy macro '#2' to '#1' failed.^^J}\fi}% + {\ifnum\tikztiming@debug>0\relax + \message{^^J Copy macro '#2' to '#1'.^^J}\fi + \expandafter\let + \csname\tikztiming@pfxtr#1\empty\empty\empty\expandafter\endcsname + \csname\tikztiming@pfxtr#2\empty\empty\empty\endcsname }% - }% + \fi +} +\def\tikztiminglet#1#2{% + \tikztiming@namelet{#1}{#2}% } \def\tikztiming@chars#1{} \def\tikztiming@ifcharexists#1{% @@ -1006,98 +1390,108 @@ \tikztiming@addchar{#1}% \tikztimingchar@{#1}}% } -\expandafter\def\csname\tikztiming@prefix @start\endcsname#1{}% +\@namedef{\tikztiming@prefix @@}#1#2#3#4{ coordinate (timing/start)}% \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}% + \tikztiming@nameedef{@}{#1}{}{#2 coordinate (timing/start) #3}% + \tikztimingdef{{#1}{#1}}{#3}% } -\def\tikztimingalias#1#2{% - \uppercase{\tikztimingalias@{#1}{#2}}% +\def\tikztimingecopy#1#2{% + \@namedef{tikztiming@alias@#1}{#2}% + \tikztiming@addchar{#1}% + \expandafter\let + \csname tikztiming@triple@#1\expandafter\endcsname + \csname tikztiming@triple@#2\endcsname + \expandafter\let + \csname tikztiming@nocombine@#1\expandafter\endcsname + \csname tikztiming@nocombine@#2\endcsname } -\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\tikztiming@newdraw{% + node [timing/save] (timing@save) {};% + \draw [timing/restore] (timing@save) ++(0,0) } -\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\tikztiming@newdraw@nosave{% + node [timing/coord] (timing@save) {};% + \draw [timing/nooptions] (timing@save) ++(0,0) +} +\def\tikztiming@baseline{% + node [timing/save] (timing@save) {};% + \draw [timing/restore] let \p1 = (timing@save) in (\x1,0) ++(0,0) +} +\def\tikztiming@chars{H,L,Z,X,M,D,U,T,C}% +\tikztiming@defcode{S}{% + \pgfmathparse{\tikztimingwidth + \tikztiming@num}% + \global\let\tikztimingwidth\pgfmathresult + \tikztiming@output@Eaddcode{% + coordinate (timing@ref) at ($ (timing@ref) + (\tikztiming@num,0) $) + coordinate (timing@refa) at ($ (timing@refa) + (\tikztiming@num,0) $) + coordinate (timing@refb) at ($ (timing@refb) + (\tikztiming@num,0) $) + ++(\tikztiming@num,0) }% + \tikztiming@parser } -\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}% + +\tikztiming@defcode{s}{% + \pgfmathparse{\tikztimingwidth + \tikztiming@num/2}% + \global\let\tikztimingwidth\pgfmathresult + \tikztiming@output@Eaddcode{% + coordinate (timing@ref) at ($ (timing@ref) + (\tikztiming@num/2,0) $) + coordinate (timing@refa) at ($ (timing@refa) + (\tikztiming@num/2,0) $) + coordinate (timing@refb) at ($ (timing@refb) + (\tikztiming@num/2,0) $) + ++(\tikztiming@num/2,0) + }% + \tikztiming@parser } -\def\tikztiminglet@@@#1#2#3{% - \tikztiminglet{#1#2}{#1#3}% - \tikztiminglet{#2#1}{#3#1}% +\tikztiming@defcode{G}{% + \tikztiming@output@addcode{% + \tikztiming@glitch + }% + \tikztiming@parser } -\def\tikztimingdef@@#1#2#3{% - \tikztimingdef{#1#2}{\tikztiminguse{#1#3}{##1}}% - \tikztimingdef{#2#1}{\tikztiminguse{#3#1}{##1}}% +\tikztiming@defcode{g}{% + \tikztiming@output@addcode{% + \tikztiming@glitch + }% + \tikztiming@parser } -\def\tikztiming@savesettings{% - \xdef\tikztiming@saved@settings{% - {\tikztiming@slope}% - {\tikztiming@dslope}% - {\tikztiming@zslope}% - {\the\pgflinewidth}% + +\def\tikztiming@glitch{% + {[timing/g] let \p1 = +(0,0) in (\x1,0) -- (\x1,\timingheight) + coordinate (timing@dstart) at (\x1,\timingheight/2) (\x1,\y1) }% } -\def\tikztiming@restoresettings{% - \expandafter\tikztiming@restoresettings@ - \tikztiming@saved@settings\relax +\tikztimingchar{H}{++(0,\height)}{-- ++(#1,0)} + +\tikztimingdef{HH}{ + -- ++(#1,0) } -\def\tikztiming@restoresettings@#1#2#3#4\relax{% - \tikztimingsetslope{#1}% - \tikztimingsetdslope{#2}% - \tikztimingsetzslope{#3}% - \pgfsetlinewidth{#4}% + +\tikztimingdef{LH}{ + -- +(\slope, \height) + -- ++(#1, \height) } -\def\tikztiming@newdraw{% - node [timing/save] (timing@save) {};% - \draw [timing/restore] (timing@save) ++(0,0) + +\tikztimingdef{ZH}{ + \newdraw + -- ++(\zslope,+\height/2.) + -- ++($ (#1,0) - (\zslope,0) $) } -\def\tikztiming@newdraw@nosave{% - node [timing/coord] (timing@save) {};% - \draw (timing@save) ++(0,0) +\tikztimingdef{DH}{ + \tikztiming@oldnodecenter@% + \newdraw [\style] + -- +(\dslope/2.,\height/2.) + -- ($ (timing@ref) + (#1,\height/2) $) +} + +\tikztimingdef{DL}{ + \tikztiming@oldnodecenter@ + \newdraw [\style] + -- +(\dslope/2.,-\height/2.) + -- ($ (timing@ref) + (#1,-\height/2) $) } -\tikztimingchar{H}{++(0,\height)}{-- ++(#1,0)} \tikztimingchar{L}{++(0,0)}{-- ++(#1,0)} @@ -1106,30 +1500,7 @@ -- ++(#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)}{ +\tikztimingchar{D}{++(0,\height/2.)}{ node [timing/save] (timing@save) {}; \path [\bgstyle] (timing@save) ++(0,0) -- +(#1,0) -- +($ (#1,0) + 0.5*(\dslope,\height) $) @@ -1142,21 +1513,10 @@ -- ++(#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@triple@D{}% +\def\tikztiming@triple@D@edge@{}% +\def\tikztiming@nocombine@D@edge@{}% +\def\tikztiming@alias@D@edge@{D}% \def\tikztiming@trans@D@fill#1#2{% node [timing/save] (timing@save) {}; \path [\bgstyle] (timing@save) ++(0,0) -- +(0.5*\dslope,-0.5*\height) @@ -1168,138 +1528,470 @@ \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) +\tikztimingdef{LL}{ + -- ++(#1,0) } -\tikztiminglet{DG}{LG} -\tikztiminglet{HS}{S} -\tikztiminglet{LS}{S} -\tikztiminglet{ZS}{S} -\tikztiminglet{DS}{S} -\tikztiminglet{TS}{S} +\tikztimingdef{HL}{ + -- ++(\slope,-\height) + \tikztiminguse{HH}{#1-\slope} +} \tikztimingdef{LZ}{ \newdraw [\style] - -- ++(\zslope,+\height/2.) -- ++($ (#1,0) - (\zslope,0) $) + -- ++(\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) $) + -- ++(\zslope,-\height/2.) + -- ++($ (#1,0) - (\zslope,0) $) } \tikztimingdef{ZL}{% \newdraw - -- ++(\zslope,-\height/2.) -- ++($ (#1,0) - (\zslope,0) $) + -- ++(\zslope,-\height/2.) + -- ++($ (#1,0) - (\zslope,0) $) } \tikztimingdef{DZ}{ - -- ++( \dslope/2.,+\height/2.) - ++(-\dslope/2.,+\height/2.) - -- ++( \dslope/2.,-\height/2.) + \tikztiming@oldnodecenter@ \newdraw [\style] - -- ++($ (#1,0) - (\dslope/2.,0) $) + -- ($ (timing@ref) + (#1,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) $) +\def\tikztiming@chard#1{% + \newdraw [\style,preaction={\bgstyle}] + coordinate (timing@dstart) + -- +(\dslope/2,\height/2) + -- ($ (timing@ref) + (#1,\height/2) $) + -- +(\dslope/2,-\height/2) + -- +(0,-\height) + -- ($ (timing@dstart) + (\dslope/2,-\height/2) $) + -- (timing@dstart) + ($ (timing@ref) + (#1,0) $) + coordinate (timing@ref) + ++(\dslope/2,0) + coordinate (timing@dend) + \tikztiming@oldnodecenter{% + (-\dslope/2,-\height/2) + }% + \newdraw } -\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) $) +\def\tikztiming@chard@#1{% + \newdraw [\bgstyle] + -- +(\dslope/2,\height/2) + -- ($ (timing@ref) + (#1,\height/2) $) + -- +(0,-\height)% + -- ($ (timing@save) + (\dslope/2,-\height/2) $) + -- (timing@save) + \newdraw [\style] + coordinate (timing@dstart) + -- +(\dslope/2,\height/2) + -- ($ (timing@ref) + (#1,\height/2) $) + +(0,-\height)% + -- ($ (timing@save) + (\dslope/2,-\height/2) $) + -- (timing@save) + ($ (timing@ref) + (#1,0) $) + coordinate (timing@ref) + coordinate [shift={(\dslope/2,0)}] (timing@dend) + \tikztiming@oldnodecenter{% + (0,-\height/2) + }% + \newdraw } -\tikztimingdef{DL}{ - -- ++( \dslope/2.,+\height/2.) - ++(-\dslope/2.,+\height/2.) - -- ++(\dslope/2.,-\height/2.) +\def\tikztiming@@chard#1{% + ++(0,\height/2) + \newdraw [\bgstyle] + -- +(0,\height/2) + -- ($ (timing@ref) + (#1,\height/2) $) + -- +(\dslope/2,-\height/2) + -- +(0,-\height) + -- ($ (timing@save) + (0,-\height/2) $) + -- (timing@save) \newdraw [\style] - -- ++(\dslope/2.,-\height/2.) - -- ++($ (#1,0) - (\dslope,0) $) + +(0,0) + coordinate (timing/start) + +(-\dslope/2,0) + coordinate (timing@dstart) + +(0,\height/2) + -- ($ (timing@ref) + (#1,\height/2) $) + -- +(\dslope/2,-\height/2) + -- +(0,-\height) + -- ($ (timing@save) + (0,-\height/2) $) + ($ (timing@ref) + (#1,0) $) + coordinate (timing@ref) + ++(\dslope/2,0) + coordinate (timing@dend) + \tikztiming@oldnodecenter{% + (-\dslope/2,-\height/2) + }% + \newdraw } -\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) +\def\tikztiming@@chard@#1{% + ++(0,\height/2) + \newdraw [\bgstyle] + -- +(0,\height/2) + -- ($ (timing@ref) + (#1,\height/2) $) + -- +(0,-\height) + -- ($ (timing@save) + (0,-\height/2) $) + -- (timing@save) + \newdraw [\style] + +(0,0) + coordinate (timing/start) + coordinate (timing@ref) + coordinate [shift={(-\dslope/2,0)}] (timing@dstart) + +(0,\height/2) + -- +(#1,\height/2) + +(#1,-\height/2) + -- ($ (timing@save) + (0,-\height/2) $) + ++(#1,\height/2) + coordinate (timing@ref) + coordinate [shift={(\dslope/2,0)}] (timing@dend) + \tikztiming@oldnodecenter{% + (0,-\height/2) + }% + \newdraw } -\tikztimingdef{DH}{ - ++(0,+\height) - -- ++(+\dslope/2.,-\height/2.) - ++(-\dslope/2.,-\height/2.) - -- ++(\dslope/2.,+\height/2.) +\def\tikztiming@dchardu#1{% + \tikztiming@oldnodecenter@ + \newdraw [\bgstyle] + -- +(0,\height/2) + -- ($ (timing@ref) + (#1,\height/2) $) + -- +(\dslope/2,-\height/2) + -- +(0,-\height) + -- ($ (timing@save) + (0,-\height/2) $) + -- (timing@save) \newdraw [\style] - -- ++(\dslope/2.,+\height/2.) - -- ++($ (#1,0) - (\dslope,0) $) + +(0,\height/2) + -- ($ (timing@ref) + (#1,\height/2) $) + -- +(\dslope/2,-\height/2) + -- +(0,-\height) + -- ($ (timing@save) + (0,-\height/2) $) + ($ (timing@ref) + (#1,0) $) + coordinate (timing@ref) + ++(\dslope/2,0) + coordinate (timing@dend) + \tikztiming@oldnodecenter{% + (-\dslope/2,-\height/2) + }% + \newdraw } -\tikztimingalias{M}{Z} -\tikztimingchar{M}{++(0,\height/2.)}{ - \newdraw [\style/decoration,\style] - -- ++(#1,0) +\def\tikztiming@uchardd#1{% + \tikztiming@oldnodecenter@ + \newdraw [\bgstyle] + -- +(\dslope/2,\height/2) + -- ($ (timing@ref) + (#1,\height/2) $) + -- +(0,-\height) + -- ($ (timing@save) + (\dslope/2,-\height/2) $) + -- (timing@save) + \newdraw [\style] + coordinate (timing@dstart) + -- +(\dslope/2,\height/2) + -- ($ (timing@ref) + (#1,\height/2) $) + +(0,-\height) + -- ($ (timing@save) + (\dslope/2,-\height/2) $) + -- (timing@save) + ($ (timing@ref) + (#1,0) $) + coordinate (timing@ref) + coordinate [shift={(\dslope/2,0)}](timing@dend) + \tikztiming@oldnodecenter{% + ($ (0,0) - (0,\height/2) $) + }% + \newdraw +} + +\tikztimingdef{DD}{% + \tikztiming@dchardu{#1}% +} + +\tikztimingdef{UU}{% + \tikztiming@dchardu{#1}% +} + +\def\tikztiming@dchard@#1{% + \tikztiming@oldnodecenter@ + \newdraw [\bgstyle] + -- +(0,\height/2) + -- ($ (timing@ref) + (#1,\height/2) $) + -- +(0,-\height) + -- ($ (timing@save) + (0,-\height/2) $) + -- (timing@save) + \newdraw [\style] + +(0,\height/2) + -- ($ (timing@ref) + (#1,\height/2) $) + +(0,-\height) + -- ($ (timing@save) + (0,-\height/2) $) + ($ (timing@ref) + (#1,0) $) + coordinate (timing@ref) + coordinate [shift={(\dslope/2,0)}] (timing@dend) + \tikztiming@oldnodecenter{% + (0,-\height/2) + }% + \newdraw +} + +\tikztimingdef{DD@}{ + \tikztiming@dchard@{#1}% +} + +\tikztimingcpy{DDD}{DD@} +\tikztimingcpy{UUU}{DDD} + +\tikztimingdef{{D@edge@}{D@edge@}}{% + \tikztiming@oldnodecenter@ + \tikztiming@chard{#1}% +}% + +\tikztimingdef{@{D@edge@}}{% + \tikztiming@@chard@{#1}% +}% + +\tikztimingdef{@{D@edge@}@}{% + \tikztiming@@chard@{#1}% +}% + +\tikztimingdef{@{D@edge@}D}{% + \tikztiming@@chard{#1}% +} + +\tikztimingdef{D{D@edge@}}{% + \tikztiming@dchardu{#1}% +} + +\tikztimingdef{U{U@edge@}}{% + \tikztiming@dchardu{#1}% +} + +\tikztimingdef{U{D@edge@}}{% + \tikztiming@oldnodecenter@ + \tikztiming@chard{#1}% +} + +\tikztimingdef{U{D@edge@}@}{% + \tikztiming@oldnodecenter@% + \tikztiming@chard@{#1}% +} + +\tikztimingdef{D{U@edge@}}{% + \tikztiming@oldnodecenter@% + \tikztiming@chard{#1}% +} + +\tikztimingdef{D{U@edge@}@}{% + \tikztiming@oldnodecenter@% + \tikztiming@chard@{#1}% +} + +\tikztimingdef{D{D@edge@}@}{% + \tikztiming@dchard@{#1}% +}% + +\tikztimingdef{U{U@edge@}@}{% + \tikztiming@dchard@{#1}% +}% + +\tikztimingdef{{D@edge@}{D@edge@}@}{% + \tikztiming@oldnodecenter@% + \tikztiming@chard@{#1}% +}% + +\tikztimingdef{@{D@edge@}}{% + \tikztiming@@chard{#1}% +}% + +\tikztimingdef{{D@edge@}D}{% + \tikztiming@oldnodecenter@% + \tikztiming@chard{#1}% +}% + +\tikztimingdef{{D@edge@}D@}{% + \tikztiming@oldnodecenter@% + \tikztiming@chard@{#1}% +}% + +\tikztimingdef{ZDZ}{ + coordinate (timing@ref) + \tikztiming@chard{#1} +} +\tikztimingcpy{ZDX}{ZDZ} +\tikztimingcpy{XDX}{ZDZ} +\tikztimingcpy{XDZ}{ZDZ} + +\tikztimingdef{ZDD}{ + coordinate (timing@ref) + \tikztiming@chard@{#1} } -\tikztimingdef{MG}{ - \newdraw [timing/m] - -- ++(\gslope,-\height/2.0) - -- ++(\gslope,+\height) - -- ++(\gslope,-\height/2.0) + +\tikztimingdef{ZDU}{ + coordinate (timing@ref) + \tikztiming@chard{#1} +} + +\tikztimingcpy{ZUD}{ZDU} +\tikztimingcpy{ZUU}{ZDD} + +\tikztimingdef{ZD}{ + coordinate (timing@ref) + \tikztiming@chard{#1} +} + +\tikztimingdef{@DD}{% + \tikztiming@@chard@{#1}% +} + +\tikztimingdef{ZD@}{% + coordinate (timing@ref) + \tikztiming@chard@{#1}% +} + +\tikztimingdef{HD@}{% + coordinate [shift={(0,-\height/2)}] (timing@ref) + -- ++(\dslope/2, -\height/2) + \tikztiming@chard@{#1}% +} + +\tikztimingdef{TD@}{% + coordinate [shift={(0,-\height/2 * \value{tikztimingtrans})}] (timing@ref) + -- ++(\dslope/2, -\height/2 * \value{tikztimingtrans}) + \tikztiming@chard@{#1}% +} + +\tikztimingdef{TD}{% + \code{\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}} + coordinate [shift={(0,\height/2 * \value{tikztimingtrans})}] (timing@ref) + -- ++(\dslope/2, \height/2 * \value{tikztimingtrans}) + \tikztiming@chard{#1}% +} + +\tikztimingdef{TDD}{% + \code{\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}} + coordinate [shift={(0,\height/2 * \value{tikztimingtrans})}] (timing@ref) + -- ++(\dslope/2, \height/2 * \value{tikztimingtrans}) + \tikztiming@chard@{#1}% +} + +\tikztimingdef{TUD}{% + \code{\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}} + coordinate [shift={(0,\height/2 * \value{tikztimingtrans})}] (timing@ref) + -- ++(\dslope/2, \height/2 * \value{tikztimingtrans}) + \tikztiming@chard{#1}% +} + +\tikztimingcpy{TDU}{TUD} +\tikztimingcpy{TUU}{TDD} + +\tikztimingdef{LD@}{% + coordinate [shift={(0,\height/2)}] (timing@ref) + -- ++(\dslope/2, \height/2) + \tikztiming@chard@{#1}% +} + +\tikztimingdef{@D}{% + \tikztiming@@chard@{#1}% +} + +\tikztimingdef{@D@}{% + \tikztiming@@chard@{#1}% +} + +\tikztimingcpy{H{D@edge@}@}{HD@} +\tikztimingcpy{L{D@edge@}@}{LD@} +\tikztimingcpy{Z{D@edge@}@}{ZD@} +\tikztimingcpy{T{D@edge@}@}{TD@} + +\tikztimingdef{@DZ}{% + \tikztiming@@chard{#1}% +} +\tikztimingdef{@DH}{% + \tikztiming@@chard{#1}% +} +\tikztimingdef{@DL}{% + \tikztiming@@chard{#1}% } +\tikztimingdef{@DT}{% + \tikztiming@@chard{#1}% +} + +\tikztimingdef{LD}{ + coordinate [shift={(0,\height/2)}] (timing@ref) + -- ++(\dslope/2, \height/2) + \tikztiming@chard{#1}% +} + +\tikztimingdef{LDD}{ + coordinate [shift={(0,\height/2)}] (timing@ref) + -- ++(\dslope/2, \height/2) + \tikztiming@chard@{#1} +} + +\tikztimingdef{LDU}{ + coordinate [shift={(0,\height/2)}] (timing@ref) + -- ++(\dslope/2, \height/2) + \tikztiming@chard{#1} +} + +\tikztimingcpy{LUD}{LDU} +\tikztimingcpy{LUU}{LDD} -\tikztimingdef{MZ}{ +\tikztimingdef{HD}{ + coordinate [shift={(0,-\height/2)}] (timing@ref) + -- ++(\dslope/2, -\height/2) + \tikztiming@chard{#1} +} + +\tikztimingdef{HDD}{ + coordinate [shift={(0,-\height/2)}] (timing@ref) + -- ++(\dslope/2, -\height/2) + \tikztiming@chard@{#1} +} + +\tikztimingdef{HDU}{ + coordinate [shift={(0,-\height/2)}] (timing@ref) + -- ++(\dslope/2, -\height/2) + \tikztiming@chard{#1} +} +\tikztimingcpy{HUD}{HDU} +\tikztimingcpy{HUU}{HDD} + +\tikztimingecopy{M}{Z} +\tikztimingchar{M}{++(0,\height/2.)}{ \newdraw [\style] - \tikztiminguse{ZZ}{#1} + -- ++(#1,0) + \newdraw [\style/base] } \tikztimingdef{ZM}{ \newdraw [\style] - \tikztiminguse{MM}{#1} + -- ++(#1,0) + \newdraw [\style/base] } \tikztimingdef{LM}{ - \newdraw [\style] + \newdraw [\style/base] -- ++($ (1/8,0) + (0,\height/2) $) - \newdraw [\style/decoration,\style] + \newdraw [\style] -- ++($ (-1/8,0) + (#1,0) $) + \newdraw [\style/base] } \tikztimingdef{HM}{ - \newdraw [\style] + \newdraw [\style/base] -- ++($ (1/8,0) + (0,-1*\height/2) $) - \newdraw [\style/decoration,\style] + \newdraw [\style] -- ++($ (-1/8,0) + (#1,0) $) + \newdraw [\style/base] } \tikztimingdef{DM}{ - -- +($ (1/8,0) + (0,\height*.50) $) - +(0,\height) - -- ++($ (1/8,0) + (0,\height*.50) $) - \newdraw [\style/decoration,\style] - -- ++($ (-1/8,0) + (#1,0) $) + \tikztiming@oldnodecenter@% + \newdraw [\style] + -- ($ (timing@ref) + (#1,0) $) + \newdraw [\style/base] } \newcounter{tikztimingtrans} @@ -1308,6 +2000,7 @@ \tikztimingchar{T}{++(0,0)}{ -- ++(#1,0) } +\def\tikztiming@nocombine@T{}% \tikztimingdef{HT}{% {[\style] @@ -1338,85 +2031,164 @@ \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) + -- ++(\zslope,\value{tikztimingtrans}*\height/2.) + -- ++($ (#1,0) - (\zslope,0) $) } \tikztimingdef{ZT}{% - \newdraw - {[\style] + \newdraw {[\style] \code{\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}} - -- ++(\slope,\value{tikztimingtrans}*\height/2.) - -- ++($ (#1,0) - (\slope,0) $) + -- ++(\zslope,\value{tikztimingtrans}*\height/2.) + -- ++($ (#1,0) - (\zslope,0) $) } } \tikztimingdef{TT}{% {[\style] \code{\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}} - -- ++(\slope,\value{tikztimingtrans}*\height) -- ++($ (#1,0) - (\slope,0) $) + -- ++(\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) $) + \tikztiming@oldnodecenter@% + \newdraw {[\style] + -- +(\dslope/2.,-\height/2) + -- ($ (timing@ref) + (#1,-\height/2) $) } } \tikztimingdef{TM}{% - \newdraw [\style] + \newdraw [\style/base] \code{\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}} -- ++($ (1/8,0) + (0,\value{tikztimingtrans}*\height/2) $) - \newdraw [\style/decoration,\style] + \newdraw [\style] -- ++($ (-1/8,0) + (#1,0) $) + \newdraw [\style/base] } +\tikztimingecopy{C}{T} +\tikztimingecopy{U}{D} -\let\tikztiming@chars@default\tikztiming@chars +\def\tikztiming@triple@U@edge@{}% +\def\tikztiming@nocombine@U@edge@{}% +\def\tikztiming@alias@U@edge@{D@edge@}% +\tikztimingcpy{UU@}{DD@}% -\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{}% -\def\tikztiming@nocombine@W{}% -\def\tikztiming@nocombine@w{}% +\tikztimingdef{UDU}{% + \tikztiming@oldnodecenter@% + \tikztiming@chard{#1}% +} +\tikztimingcpy{DUD}{UDU}% -\tikztimingecopy{U}{D} -\tikztimingdef{UD}{\tikztiminguse{D@edge@D}{#1}} -\tikztimingdef{DU}{\tikztiminguse{D@edge@D}{#1}} +\tikztimingdef{UDD}{% + \tikztiming@uchardd{#1}% +} + +\tikztimingcpy{{D@edge@}DD}{UDD} +\tikztimingcpy{{U@edge@}UU}{{D@edge@}DD} + +\tikztimingdef{H{D@edge@}}{ + coordinate [shift={(0,-\height/2)}] (timing@ref) + -- ++(\dslope/2, -\height/2) + \tikztiming@chard{#1}% +} + +\tikztimingdef{L{D@edge@}}{ + coordinate [shift={(0,\height/2)}] (timing@ref) + -- ++(\dslope/2, \height/2) + \tikztiming@chard{#1}% +} + +\tikztimingdef{Z{D@edge@}}{ + coordinate (timing@ref) + \tikztiming@chard{#1}% +} + +\tikztimingdef{T{D@edge@}}{ + \code{\setcounter{tikztimingtrans}{-\value{tikztimingtrans}}} + coordinate [shift={(0,\height/2 * \value{tikztimingtrans})}] (timing@ref) + -- ++(\dslope/2, \height/2 * \value{tikztimingtrans}) + \tikztiming@chard{#1}% +} + +\tikztimingdef{{D@edge@}DU}{ + \tikztiming@oldnodecenter@ + \tikztiming@chard{#1} +} +\tikztimingcpy{{U@edge@}UD}{{D@edge@}DU} + +\tikztimingdef{DDU}{% + \tikztiming@dchardu{#1} +} + +\tikztimingcpy{DUU}{UDD}% +\tikztimingcpy{UUD}{DDU}% + +\tikztimingdef{@UU}{% + \tikztiming@@chard@{#1}% +} + +\tikztimingdef{@UD}{% + \tikztiming@@chard{#1}% +} + +\tikztimingdef{@DU}{% + \tikztiming@@chard{#1}% +} + +\tikztimingdef{UD}{% + \tikztiming@oldnodecenter@% + \tikztiming@chard{#1}% +} + +\tikztimingdef{DU}{% + \tikztiming@oldnodecenter@% + \tikztiming@chard{#1}% +} + +\tikztimingdef{UD@}{% + \tikztiming@oldnodecenter@% + \tikztiming@chard@{#1}% +} + +\tikztimingdef{DU@}{% + \tikztiming@oldnodecenter@% + \tikztiming@chard@{#1}% +} \tikztimingecopy{X}{Z} +\let\tikztiming@chars@default\tikztiming@chars +\newcommand*\usetikztiminglibrary[2][]{% + \edef\tikztiming@library@options{#1}% + \@ifnextchar{[}%] + {\tikztiming@library{#2}}% + {\tikztiming@library{#2}[]}% +} +\def\tikztiming@library#1[#2]{% + \edef\tikztiming@library@date{#2}% + \tikztiming@library@#1,\relax +} +\def\tikztiming@zap@space#1 \@empty{#1} +\def\tikztiming@library@#1,{% + \IfFileExists{tikz-timing-#1.sty}% + { \let\tikztiming@orig@zap@space\zap@space + \let\zap@space\tikztiming@zap@space + \RequirePackage + [\tikztiming@library@options]% + {tikz-timing-#1}% + [\tikztiming@library@date]% + \let\zap@space\tikztiming@orig@zap@space + }% + {\PackageError{tikz-timing}% + {No tikz-timing library `#1' found!}% + {}{}{}{}% + }% + \@ifnextchar\relax{}{\tikztiming@library@}% +} \endinput %% %% End of file `tikz-timing.sty'. -- cgit v1.2.3