summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/pgf/modules/pgfmoduleparser.code.tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2010-10-29 00:31:31 +0000
committerKarl Berry <karl@freefriends.org>2010-10-29 00:31:31 +0000
commit6bc1f5497cfb2f56d65c80a4c36ea3bad6dc046c (patch)
treef7751da75030fb1e06653eeb44e579fcee09c65f /Master/texmf-dist/tex/generic/pgf/modules/pgfmoduleparser.code.tex
parented0c7c756e441b2d2ba3633da233fc24361ac0d3 (diff)
pgf 2.10 (28oct10)
git-svn-id: svn://tug.org/texlive/trunk@20236 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/pgf/modules/pgfmoduleparser.code.tex')
-rw-r--r--Master/texmf-dist/tex/generic/pgf/modules/pgfmoduleparser.code.tex111
1 files changed, 111 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/pgf/modules/pgfmoduleparser.code.tex b/Master/texmf-dist/tex/generic/pgf/modules/pgfmoduleparser.code.tex
new file mode 100644
index 00000000000..ed13b25324c
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/pgf/modules/pgfmoduleparser.code.tex
@@ -0,0 +1,111 @@
+% Copyright 2009 by Till Tantau
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/generic/pgf/licenses/LICENSE for more details.
+
+\ProvidesFileRCS[v\pgfversion] $Header: /cvsroot/pgf/pgf/generic/pgf/modules/pgfmoduleparser.code.tex,v 1.1 2009/01/12 12:56:09 tantau Exp $
+
+%
+% This file defines commands for defining a letter-by-letter parser
+% based on a dfa.
+%
+
+
+
+
+% Parse the following text
+%
+% #1 = parser
+%
+% Description:
+%
+% This command starts the parser #1 in the initial state "initial". It
+% will parse the following text, stopping when the state "final" has
+% been reached.
+
+\def\pgfparserparse#1{%
+ \def\pgf@parser{#1}%
+ \def\pgf@parser@state{initial}%
+ \pgf@parser@parse%
+}
+\def\pgf@parser@parse{%
+ \futurelet\pgf@parser@symbol\pgf@parser@cont%
+}
+\def\pgf@parser@cont{%
+ % Ok, defined?
+ \expandafter\let\expandafter\pgf@parser@action%
+ \csname pgf@parser@a@\pgf@parser @\pgf@parser@state @\meaning\pgf@parser@symbol\endcsname%
+ \ifx\pgf@parser@action\relax%
+ \expandafter\let\expandafter\pgf@parser@action%
+ \csname pgf@parser@a@\pgf@parser @all@\meaning\pgf@parser@symbol\endcsname%
+ \ifx\pgf@parser@action\relax%
+ \PackageError{pgfparse}{Unexpected character
+ '\meaning\pgf@parser@symbol' in parser '\pgf@parser' in state
+ '\pgf@parser@state'}{}%
+ \fi%
+ \fi%
+ \pgf@parser@action%
+ \ifx\pgf@parser@symbol\pgfutil@sptoken%
+ \expandafter\pgf@parser@rid@space%
+ \else%
+ \expandafter\pgf@parser@rid@other%
+ \fi%
+}
+
+\def\pgf@parser@ridded{%
+ \ifx\pgf@parser@state\pgf@parser@final@text%
+ % done
+ \else%
+ \expandafter\pgf@parser@parse%
+ \fi%
+}
+
+\def\pgf@parser@final@text{final}
+
+{%
+ \def\:{\pgf@parser@rid@space} \expandafter\gdef\: {\futurelet\pgf@parser@ignore\pgf@parser@ridded}
+ \gdef\pgf@parser@rid@other{\afterassignment\pgf@parser@ridded\let\pgf@parser@ignore=}
+}
+
+
+
+% Switches the state
+%
+% #1 = new state
+%
+% Description:
+%
+% This command can be used inside a state action to switch to a
+% different state.
+
+\def\pgfparserswitch#1{\def\pgf@parser@state{#1}}
+
+
+
+
+% Defines an action to be taken in a state for some symbol
+%
+% #1 = parser
+% #2 = state
+% #3 = symbol text (result of saying \meaning on the symbol)
+% #4 = action
+%
+% Description:
+%
+% When the parser encounters #3 while being in state #2, then code #4
+% is executed.
+%
+% When #2 is set to the special text "all", then the symbol is handled
+% in all states by #4, except when a state defines something special
+% for this symbol
+
+\def\pgfparserdef#1#2#3#4{%
+ \expandafter\def\csname pgf@parser@a@#1@#2@#3\endcsname{#4}
+}
+
+
+\endinput