doc-src/rail.sty
author wenzelm
Thu, 20 Feb 1997 15:15:17 +0100
changeset 2658 13ba951a4572
child 3097 ae362c99a635
permissions -rw-r--r--
added this file;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2658
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
     1
% rail.sty - style file to support railroad diagrams
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
     2
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
     3
% 09-Jul-90 L. Rooijakkers
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
     4
% 08-Oct-90 L. Rooijakkers	fixed centering bug when \rail@tmpc<0.
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
     5
% 07-Feb-91 L. Rooijakkers	added \railoptions command, indexing
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
     6
% 08-Feb-91 L. Rooijakkers	minor fixes
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
     7
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
     8
% This style file needs to be used in conjunction with the 'rail'
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
     9
% program. Running LaTeX as 'latex file' produces file.rai, which should be
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    10
% processed by Rail with 'rail file'. This produces file.rao, which will
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    11
% be picked up by LaTeX on the next 'latex file' run.
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    12
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    13
% LaTeX will warn if there is no file.rao or it's out of date.
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    14
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    15
% The macros in this file thus consist of two parts: those that read and
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    16
% write the .rai and .rao files, and those that do the actual formatting
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    17
% of the railroad diagrams.
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    18
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    19
% railroad read/write macros
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    20
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    21
% \begin{rail} TEXT \end{rail} : TEXT is written out to the .rai file,
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    22
%                                as \rail@i{NR}{TEXT}. Then the matching
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    23
%                                \rail@o{NR}{FMT} from the .rao file is
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    24
%                                executed (if defined).
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    25
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    26
% \railoptions{OPTIONS} : OPTIONS are written out to the .rai file,
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    27
%                         as \rail@p{OPTIONS}.
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    28
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    29
% \railterm{IDENT,IDENT,...} : format IDENT as terminals. writes out
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    30
%                              \rail@t{IDENT} to the .rai file and
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    31
%                              defines \rail@t@IDENT as \rail@termfont IDENT.
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    32
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    33
% \railtoken{IDENT}{TEXT} : format IDENT as terminal TEXT. writes out
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    34
%                           \rail@t{IDENT} to the .rai file and defines
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    35
%                           \rail@t@IDENT as TEXT.
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    36
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    37
% \rail@nr : railroad diagram counter, starts at 1
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    38
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    39
% \ifrail@match : current \rail@i{NR}{TEXT} matches
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    40
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    41
% \rail@first :	actions to be done first. read in .rao file,
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    42
%               open .rai file if \@filesw true, undefine \rail@first.
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    43
%               executed from \begin{rail} and \railtoken.
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    44
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    45
% \rail@i{NR}{TEXT} : defines \rail@i@NR as TEXT. written to the .rai
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    46
%                     file by \rail, read from the .rao file by
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    47
%                     \rail@first
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    48
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    49
% \rail@t{IDENT} : tells Rail that IDENT is to be custom formatted,
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    50
%                  written to the .rai file by \railterm and \railtoken.
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    51
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    52
% \rail@o{NR}{TEXT} : defines \rail@o@NR as TEXT, read from the .rao
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    53
%                     file by \rail@first.
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    54
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    55
% \rail@p{OPTIONS} : pass options to rail, written to the .rai file by
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    56
%                    \railoptions
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    57
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    58
% \rail@warn : warn user for mismatching diagrams
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    59
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    60
% \rail@endwarn : either \relax or \rail@warn
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    61
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    62
% \rail@enddocument : original \enddocument
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    63
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    64
% \enddocument : checks \ifrail@all
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    65
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    66
\newcount\rail@nr
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    67
\rail@nr=1
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    68
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    69
\newif\ifrail@all
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    70
\rail@alltrue
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    71
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    72
\newif\ifrail@match
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    73
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    74
\def\rail@first{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    75
\makeatletter
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    76
\@input{\jobname.rao}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    77
\makeatother
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    78
\if@filesw
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    79
\newwrite\tf@rai
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    80
\immediate\openout\tf@rai\jobname.rai\relax
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    81
\fi
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    82
\global\let\rail@first=\relax
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    83
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    84
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    85
\long\def\rail#1\end#2{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    86
\end{#2}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    87
\rail@first
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    88
\begingroup
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    89
\let\\=\relax
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    90
\global\edef\rail@i@{#1}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    91
\endgroup
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    92
\@ifundefined{tf@rai}{}{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    93
\begingroup
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    94
\let\\=\relax
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    95
\immediate\write\tf@rai{\noexpand\rail@i{\number\rail@nr}{\rail@i@}}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    96
\endgroup
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    97
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    98
\rail@matchtrue
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
    99
\@ifundefined{rail@o@\number\rail@nr}{\rail@matchfalse}{}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   100
\expandafter\ifx\csname rail@i@\number\rail@nr\endcsname\rail@i@
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   101
\else
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   102
\rail@matchfalse
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   103
\fi
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   104
\ifrail@match
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   105
\expandafter\relax\csname rail@o@\number\rail@nr\endcsname
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   106
\else
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   107
\@warning{Railroad diagram {\number\rail@nr} doesn't match}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   108
\global\let\rail@endwarn=\rail@warn
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   109
\rail@begin{1}{}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   110
\rail@setbox{\bf ???}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   111
\rail@oval
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   112
\rail@end
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   113
\fi
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   114
\global\advance\rail@nr by 1
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   115
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   116
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   117
\def\railoptions#1{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   118
\rail@first
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   119
\@writefile{rai}{\noexpand\rail@p{#1}}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   120
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   121
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   122
\def\railterm#1{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   123
\rail@first
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   124
\@for\rail@i@:=#1\do{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   125
\@writefile{rai}{\noexpand\rail@t{\rail@i@}}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   126
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   127
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   128
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   129
\def\railtoken#1#2{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   130
\rail@first
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   131
\@writefile{rai}{\noexpand\rail@t{#1}}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   132
\expandafter\def\csname rail@t@#1\endcsname{#2}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   133
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   134
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   135
\long\def\rail@i#1#2{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   136
\expandafter\gdef\csname rail@i@#1\endcsname{#2}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   137
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   138
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   139
\def\rail@o#1#2{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   140
\expandafter\gdef\csname rail@o@#1\endcsname{#2}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   141
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   142
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   143
\def\rail@t#1{}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   144
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   145
\def\rail@p#1{}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   146
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   147
\def\rail@warn{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   148
\@warning{Railroad diagram(s) may have changed. Use 'rail' and rerun}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   149
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   150
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   151
\let\rail@endwarn=\relax
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   152
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   153
\let\rail@enddocument=\enddocument
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   154
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   155
\def\enddocument{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   156
\rail@endwarn
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   157
\rail@enddocument
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   158
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   159
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   160
% index entry macro
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   161
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   162
% \rail@index{IDENT} : add index entry for IDENT
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   163
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   164
\def\rail@index#1{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   165
\index{\rail@indexfont#1}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   166
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   167
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   168
% railroad diagram formatting parameters (user level)
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   169
% all of these are copied into their internal versions by \railinit
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   170
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   171
% \railunit : \unitlength within railroad diagrams
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   172
% \railextra : extra length at outside of diagram
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   173
% \railboxheight : height of ovals and frames
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   174
% \railboxskip : vertical space between lines
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   175
% \railboxleft : space to the left of a box
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   176
% \railboxright : space to the right of a box
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   177
% \railovalspace : extra space around contents of oval
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   178
% \railframespace : extra space around contents of frame
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   179
% \railtextleft : space to the left of text
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   180
% \railtextright : space to the right of text
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   181
% \railtextup : space to lift text up
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   182
% \railjoinsize : circle size of join/split arcs
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   183
% \railjoinadjust : space to adjust join
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   184
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   185
% \railnamesep : separator between name and rule body
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   186
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   187
\newdimen\railunit
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   188
\newdimen\railextra
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   189
\newdimen\railboxheight
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   190
\newdimen\railboxskip
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   191
\newdimen\railboxleft
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   192
\newdimen\railboxright
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   193
\newdimen\railovalspace
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   194
\newdimen\railframespace
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   195
\newdimen\railtextleft
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   196
\newdimen\railtextright
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   197
\newdimen\railtextup
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   198
\newdimen\railjoinsize
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   199
\newdimen\railjoinadjust
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   200
\newdimen\railnamesep
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   201
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   202
% internal versions of the formatting parameters
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   203
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   204
% \rail@extra   : \railextra
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   205
% \rail@boxht   : \railboxheight
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   206
% \rail@boxsp   : \railboxskip
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   207
% \rail@boxlf   : \railboxleft
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   208
% \rail@boxrt   : \railboxright
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   209
% \rail@boxhht  : \railboxheight / 2
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   210
% \rail@ovalsp  : \railovalspace
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   211
% \rail@framesp : \railframespace
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   212
% \rail@textlf	: \railtextleft
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   213
% \rail@textrt	: \railtextright
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   214
% \rail@textup	: \railtextup
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   215
% \rail@joinsz  : \railjoinsize
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   216
% \rail@joinhsz : \railjoinsize / 2
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   217
% \rail@joinadj : \railjoinadjust
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   218
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   219
% \railinit : internalize all of the parameters.
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   220
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   221
\newcount\rail@extra
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   222
\newcount\rail@boxht
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   223
\newcount\rail@boxsp
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   224
\newcount\rail@boxlf
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   225
\newcount\rail@boxrt
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   226
\newcount\rail@boxhht
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   227
\newcount\rail@ovalsp
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   228
\newcount\rail@framesp
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   229
\newcount\rail@textlf
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   230
\newcount\rail@textrt
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   231
\newcount\rail@textup
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   232
\newcount\rail@joinsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   233
\newcount\rail@joinhsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   234
\newcount\rail@joinadj
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   235
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   236
\def\railinit{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   237
\rail@extra=\railextra
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   238
\divide\rail@extra by \railunit
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   239
\rail@boxht=\railboxheight
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   240
\divide\rail@boxht by \railunit
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   241
\rail@boxsp=\railboxskip
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   242
\divide\rail@boxsp by \railunit
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   243
\rail@boxlf=\railboxleft
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   244
\divide\rail@boxlf by \railunit
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   245
\rail@boxrt=\railboxright
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   246
\divide\rail@boxrt by \railunit
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   247
\rail@boxhht=\railboxheight
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   248
\divide\rail@boxhht by \railunit
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   249
\divide\rail@boxhht by 2
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   250
\rail@ovalsp=\railovalspace
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   251
\divide\rail@ovalsp by \railunit
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   252
\rail@framesp=\railframespace
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   253
\divide\rail@framesp by \railunit
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   254
\rail@textlf=\railtextleft
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   255
\divide\rail@textlf by \railunit
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   256
\rail@textrt=\railtextright
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   257
\divide\rail@textrt by \railunit
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   258
\rail@textup=\railtextup
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   259
\divide\rail@textup by \railunit
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   260
\rail@joinsz=\railjoinsize
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   261
\divide\rail@joinsz by \railunit
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   262
\rail@joinhsz=\railjoinsize
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   263
\divide\rail@joinhsz by \railunit
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   264
\divide\rail@joinhsz by 2
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   265
\rail@joinadj=\railjoinadjust
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   266
\divide\rail@joinadj by \railunit
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   267
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   268
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   269
% initialize the parameters
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   270
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   271
\railunit=1sp
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   272
\railextra=4ex
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   273
\railboxleft=1ex
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   274
\railboxright=1ex
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   275
\railovalspace=2ex
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   276
\railframespace=2ex
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   277
\railtextleft=1ex
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   278
\railtextright=1ex
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   279
\railjoinadjust=0pt
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   280
\railnamesep=1ex
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   281
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   282
\ifcase\@ptsize
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   283
% 10 pt
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   284
\railboxheight=16pt
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   285
\railboxskip=24pt
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   286
\railtextup=5pt
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   287
\railjoinsize=16pt
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   288
\or
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   289
% 11 pt
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   290
\railboxheight=16pt
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   291
\railboxskip=24pt
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   292
\railtextup=5pt
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   293
\railjoinsize=16pt
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   294
\or
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   295
% 12 pt
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   296
\railboxheight=20pt
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   297
\railboxskip=28pt
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   298
\railtextup=6pt
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   299
\railjoinsize=20pt
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   300
\fi
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   301
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   302
\railinit
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   303
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   304
% railroad formatting primitives
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   305
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   306
% \rail@x : current x
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   307
% \rail@y : current y
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   308
% \rail@ex : current end x
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   309
% \rail@sx : starting x for \rail@cr
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   310
% \rail@rx : rightmost previous x for \rail@cr
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   311
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   312
% \rail@tmpa : temporary count
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   313
% \rail@tmpb : temporary count
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   314
% \rail@tmpc : temporary count
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   315
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   316
% \rail@put : put at (\rail@x,\rail@y)
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   317
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   318
% \rail@eline : end line by drawing from \rail@ex to \rail@x
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   319
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   320
% \rail@sety{LEVEL} : set \rail@y to level LEVEL
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   321
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   322
\newcount\rail@x
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   323
\newcount\rail@y
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   324
\newcount\rail@ex
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   325
\newcount\rail@sx
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   326
\newcount\rail@rx
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   327
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   328
\newcount\rail@tmpa
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   329
\newcount\rail@tmpb
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   330
\newcount\rail@tmpc
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   331
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   332
\def\rail@put{\put(\number\rail@x,\number\rail@y)}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   333
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   334
\def\rail@eline{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   335
\rail@tmpb=\rail@x
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   336
\advance\rail@tmpb by -\rail@ex
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   337
\rail@put{\line(-1,0){\number\rail@tmpb}}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   338
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   339
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   340
\def\rail@sety#1{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   341
\rail@y=#1
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   342
\multiply\rail@y by -\rail@boxsp
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   343
\advance\rail@y by -\rail@boxht
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   344
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   345
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   346
% \rail@list : declarations for list environment
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   347
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   348
% \railparam{TEXT} : sets \rail@list to TEXT
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   349
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   350
% \rail@begin{HEIGHT}{NAME} : begin a railroad diagram of height HEIGHT
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   351
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   352
% \rail@end : end a railroad diagram
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   353
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   354
\def\rail@list{}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   355
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   356
\def\railparam#1{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   357
\def\rail@list{#1}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   358
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   359
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   360
\newbox\tempbox
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   361
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   362
\def\rail@begin#1#2{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   363
\medskip
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   364
\begin{list}{}{\rail@list}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   365
\item[]
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   366
\vbox\bgroup
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   367
\ifx\@empty#2\else
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   368
{\rail@namefont #2}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   369
\\*[\railnamesep]\nopagebreak
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   370
\fi
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   371
\unitlength=\railunit
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   372
\rail@tmpa=#1
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   373
\multiply\rail@tmpa by \rail@boxsp
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   374
\begin{picture}(0,\number\rail@tmpa)(0,-\number\rail@tmpa)
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   375
\rail@ex=0
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   376
\rail@rx=0
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   377
\rail@x=\rail@extra
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   378
\rail@sx=\rail@x
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   379
\rail@sety{0}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   380
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   381
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   382
\def\rail@end{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   383
\advance\rail@x by \rail@extra
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   384
\rail@eline
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   385
\end{picture}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   386
\egroup
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   387
\end{list}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   388
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   389
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   390
% \rail@tokenfont : format setup for \railtoken identifiers
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   391
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   392
% \rail@termfont : format setup for terminals
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   393
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   394
% \rail@nontfont : format setup for nonterminals
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   395
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   396
% \rail@annofont : format setup for annotations
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   397
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   398
% \rail@rulefont : format setup for rule names
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   399
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   400
% \rail@indexfont : format setup for index entry
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   401
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   402
% \railtokenfont{TEXT} : set \railtoken format setup to TEXT
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   403
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   404
% \railtermfont{TEXT} : set terminal format setup to TEXT
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   405
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   406
% \railnontermfont{TEXT} : set nonterminal format setup to TEXT
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   407
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   408
% \railannotatefont{TEXT} : set annotation format setup to TEXT
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   409
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   410
% \railnamefont{TEXT} : set rule name format setup to TEXT
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   411
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   412
% \railindexfont{TEXT} : set index entry format setup to TEXT
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   413
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   414
\let\rail@tokenfont=\tt
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   415
\let\rail@termfont=\tt
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   416
\let\rail@nontfont=\rm
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   417
\let\rail@annofont=\it
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   418
\let\rail@namefont=\it
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   419
\let\rail@indexfont=\it
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   420
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   421
\def\railtokenfont#1{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   422
\def\rail@tokenfont{#1}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   423
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   424
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   425
\def\railtermfont#1{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   426
\def\rail@termfont{#1}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   427
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   428
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   429
\def\railnontermfont#1{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   430
\def\rail@nontfont{#1}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   431
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   432
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   433
\def\railannotatefont#1{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   434
\def\rail@annofont{#1}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   435
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   436
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   437
\def\railnamefont#1{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   438
\def\rail@namefont{#1}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   439
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   440
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   441
\def\railindexfont#1{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   442
\def\rail@indexfont{#1}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   443
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   444
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   445
% \rail@token{TEXT} : format token TEXT
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   446
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   447
% \rail@ctoken{TEXT} : format token TEXT centered
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   448
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   449
% \rail@nont{TEXT} : format nonterminal TEXT
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   450
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   451
% \rail@cnont{TEXT} : format nonterminal TEXT centered
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   452
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   453
% \rail@cterm{TEXT} : format terminal TEXT
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   454
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   455
% \rail@cterm{TEXT} : format terminal TEXT centered
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   456
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   457
% \rail@annote[TEXT] : format TEXT as annotation
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   458
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   459
% \rail@annotebox[TEXT] : annotate box with TEXT
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   460
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   461
\def\rail@token#1{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   462
\expandafter\@ifundefined{rail@t@#1}{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   463
\rail@setbox{\rail@termfont #1}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   464
}{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   465
\rail@setbox{\rail@tokenfont \csname rail@t@#1\endcsname}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   466
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   467
\rail@oval
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   468
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   469
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   470
\def\rail@ctoken#1{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   471
\rail@setbox{\rail@tokenfont \csname rail@t@#1\endcsname}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   472
\rail@coval
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   473
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   474
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   475
\def\rail@nont#1{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   476
\rail@setbox{\rail@nontfont #1}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   477
\rail@frame
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   478
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   479
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   480
\def\rail@cnont#1{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   481
\rail@setbox{\rail@nontfont #1}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   482
\rail@cframe
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   483
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   484
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   485
\def\rail@term#1{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   486
\rail@setbox{\rail@termfont #1}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   487
\rail@oval
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   488
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   489
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   490
\def\rail@cterm#1{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   491
\rail@setbox{\rail@termfont #1}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   492
\rail@coval
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   493
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   494
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   495
\def\rail@annote[#1]{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   496
\rail@setbox{\rail@annofont #1}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   497
\rail@text
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   498
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   499
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   500
\def\rail@annotebox[#1]{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   501
\ \rail@annofont #1
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   502
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   503
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   504
% \rail@box : temporary box for \rail@oval and \rail@frame
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   505
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   506
% \rail@setbox{TEXT} : set \rail@box to TEXT, set \rail@tmpa to width
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   507
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   508
% \rail@oval : format \rail@box of width \rail@tmpa inside an oval
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   509
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   510
% \rail@coval : same as \rail@oval, but centered between \rail@x and
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   511
%               \rail@mx
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   512
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   513
% \rail@frame : format \rail@box of width \rail@tmpa inside a frame
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   514
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   515
% \rail@cframe : same as \rail@frame, but centered between \rail@x and
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   516
%                \rail@mx
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   517
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   518
% \rail@text : format \rail@box of width \rail@tmpa above the line
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   519
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   520
\newbox\rail@box
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   521
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   522
\def\rail@setbox#1{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   523
\setbox\rail@box\hbox{\strut#1}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   524
\rail@tmpa=\wd\rail@box
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   525
\divide\rail@tmpa by \railunit
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   526
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   527
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   528
\def\rail@oval{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   529
\advance\rail@x by \rail@boxlf
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   530
\rail@eline
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   531
\advance\rail@tmpa by \rail@ovalsp
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   532
\ifnum\rail@tmpa<\rail@boxht\rail@tmpa=\rail@boxht\fi
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   533
\rail@tmpb=\rail@tmpa
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   534
\divide\rail@tmpb by 2
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   535
\advance\rail@y by -\rail@boxhht
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   536
\rail@put{\makebox(\number\rail@tmpa,\number\rail@boxht){\box\rail@box}}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   537
\advance\rail@y by \rail@boxhht
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   538
\advance\rail@x by \rail@tmpb
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   539
\rail@put{\oval(\number\rail@tmpa,\number\rail@boxht)}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   540
\advance\rail@x by \rail@tmpb
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   541
\rail@ex=\rail@x
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   542
\advance\rail@x by \rail@boxrt
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   543
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   544
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   545
\def\rail@coval{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   546
\rail@tmpb=\rail@tmpa
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   547
\advance\rail@tmpb by \rail@ovalsp
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   548
\ifnum\rail@tmpb<\rail@boxht\rail@tmpb=\rail@boxht\fi
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   549
\advance\rail@tmpb by \rail@boxlf
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   550
\advance\rail@tmpb by \rail@boxrt
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   551
\rail@tmpc=\rail@mx
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   552
\advance\rail@tmpc by -\rail@x
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   553
\advance\rail@tmpc by -\rail@tmpb
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   554
\divide\rail@tmpc by 2
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   555
\ifnum\rail@tmpc>0
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   556
\advance\rail@x by \rail@tmpc
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   557
\fi
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   558
\rail@oval
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   559
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   560
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   561
\def\rail@frame{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   562
\advance\rail@x by \rail@boxlf
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   563
\rail@eline
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   564
\advance\rail@tmpa by \rail@framesp
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   565
\ifnum\rail@tmpa<\rail@boxht\rail@tmpa=\rail@boxht\fi
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   566
\advance\rail@y by -\rail@boxhht
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   567
\rail@put{\framebox(\number\rail@tmpa,\number\rail@boxht){\box\rail@box}}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   568
\advance\rail@y by \rail@boxhht
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   569
\advance\rail@x by \rail@tmpa
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   570
\rail@ex=\rail@x
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   571
\advance\rail@x by \rail@boxrt
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   572
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   573
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   574
\def\rail@cframe{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   575
\rail@tmpb=\rail@tmpa
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   576
\advance\rail@tmpb by \rail@framesp
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   577
\ifnum\rail@tmpb<\rail@boxht\rail@tmpb=\rail@boxht\fi
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   578
\advance\rail@tmpb by \rail@boxlf
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   579
\advance\rail@tmpb by \rail@boxrt
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   580
\rail@tmpc=\rail@mx
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   581
\advance\rail@tmpc by -\rail@x
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   582
\advance\rail@tmpc by -\rail@tmpb
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   583
\divide\rail@tmpc by 2
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   584
\ifnum\rail@tmpc>0
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   585
\advance\rail@x by \rail@tmpc
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   586
\fi
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   587
\rail@frame
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   588
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   589
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   590
\def\rail@text{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   591
\advance\rail@x by \rail@textlf
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   592
\advance\rail@y by \rail@textup
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   593
\rail@put{\box\rail@box}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   594
\advance\rail@y by -\rail@textup
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   595
\advance\rail@x by \rail@tmpa
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   596
\advance\rail@x by \rail@textrt
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   597
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   598
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   599
% alternatives
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   600
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   601
% \rail@jx \rail@jy : current join point
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   602
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   603
% \rail@gx \rail@gy \rail@gex \rail@grx : global versions of \rail@x etc,
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   604
%                                         to pass values over group closings
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   605
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   606
% \rail@mx : maximum x so far
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   607
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   608
% \rail@sy : starting \rail@y for alternatives
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   609
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   610
% \rail@jput : put at (\rail@jx,\rail@jy)
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   611
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   612
% \rail@joval[PART] : put \oval[PART] with adjust
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   613
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   614
\newcount\rail@jx
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   615
\newcount\rail@jy
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   616
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   617
\newcount\rail@gx
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   618
\newcount\rail@gy
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   619
\newcount\rail@gex
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   620
\newcount\rail@grx
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   621
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   622
\newcount\rail@sy
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   623
\newcount\rail@mx
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   624
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   625
\def\rail@jput{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   626
\put(\number\rail@jx,\number\rail@jy)
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   627
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   628
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   629
\def\rail@joval[#1]{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   630
\advance\rail@jx by \rail@joinadj
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   631
\rail@jput{\oval(\number\rail@joinsz,\number\rail@joinsz)[#1]}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   632
\advance\rail@jx by -\rail@joinadj
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   633
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   634
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   635
% \rail@barsplit : incoming split for '|'
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   636
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   637
% \rail@plussplit : incoming split for '+'
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   638
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   639
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   640
\def\rail@barsplit{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   641
\advance\rail@jy by -\rail@joinhsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   642
\rail@joval[tr]
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   643
\advance\rail@jx by \rail@joinhsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   644
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   645
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   646
\def\rail@plussplit{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   647
\advance\rail@jy by -\rail@joinhsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   648
\advance\rail@jx by \rail@joinsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   649
\rail@joval[tl]
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   650
\advance\rail@jx by -\rail@joinhsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   651
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   652
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   653
% \rail@alt{SPLIT} : start alternatives with incoming split SPLIT
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   654
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   655
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   656
\def\rail@alt#1{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   657
\rail@sy=\rail@y
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   658
\rail@jx=\rail@x
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   659
\rail@jy=\rail@y
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   660
\advance\rail@x by \rail@joinsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   661
\rail@mx=0
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   662
\let\rail@list=\@empty
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   663
\let\rail@comma=\@empty
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   664
\let\rail@split=#1
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   665
\begingroup
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   666
\rail@sx=\rail@x
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   667
\rail@rx=0
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   668
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   669
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   670
% \rail@nextalt{FIX}{Y} : start next alternative at vertical position Y
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   671
%                         and fix-up FIX
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   672
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   673
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   674
\def\rail@nextalt#1#2{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   675
\global\rail@gx=\rail@x
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   676
\global\rail@gy=\rail@y
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   677
\global\rail@gex=\rail@ex
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   678
\global\rail@grx=\rail@rx
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   679
\endgroup
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   680
#1
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   681
\ifnum\rail@gx>\rail@mx\rail@mx=\rail@gx\fi
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   682
\ifnum\rail@grx>\rail@mx\rail@mx=\rail@grx\fi
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   683
\edef\rail@list{\rail@list\rail@comma\number\rail@gex:\number\rail@gy}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   684
\def\rail@comma{,}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   685
\rail@split
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   686
\let\rail@split=\@empty
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   687
\rail@sety{#2}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   688
\rail@tmpa=\rail@jy
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   689
\advance\rail@tmpa by -\rail@y
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   690
\advance\rail@tmpa by -\rail@joinhsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   691
\rail@jput{\line(0,-1){\number\rail@tmpa}}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   692
\rail@jy=\rail@y
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   693
\advance\rail@jy by \rail@joinhsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   694
\advance\rail@jx by \rail@joinhsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   695
\rail@joval[bl]
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   696
\advance\rail@jx by -\rail@joinhsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   697
\rail@ex=\rail@x
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   698
\begingroup
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   699
\rail@sx=\rail@x
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   700
\rail@rx=0
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   701
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   702
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   703
% \rail@barjoin : outgoing join for first '|' alternative
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   704
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   705
% \rail@plusjoin : outgoing join for first '+' alternative
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   706
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   707
% \rail@altjoin : join for subsequent alternative
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   708
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   709
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   710
\def\rail@barjoin{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   711
\ifnum\rail@y<\rail@sy
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   712
\global\rail@gex=\rail@jx
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   713
\else
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   714
\global\rail@gex=\rail@ex
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   715
\fi
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   716
\advance\rail@jy by -\rail@joinhsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   717
\rail@joval[tl]
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   718
\advance\rail@jx by -\rail@joinhsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   719
\ifnum\rail@y<\rail@sy
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   720
\rail@altjoin
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   721
\fi
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   722
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   723
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   724
\def\rail@plusjoin{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   725
\global\rail@gex=\rail@ex
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   726
\advance\rail@jy by -\rail@joinhsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   727
\advance\rail@jx by -\rail@joinsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   728
\rail@joval[tr]
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   729
\advance\rail@jx by \rail@joinhsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   730
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   731
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   732
\def\rail@altjoin{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   733
\rail@eline
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   734
\rail@tmpa=\rail@jy
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   735
\advance\rail@tmpa by -\rail@y
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   736
\advance\rail@tmpa by -\rail@joinhsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   737
\rail@jput{\line(0,-1){\number\rail@tmpa}}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   738
\rail@jy=\rail@y
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   739
\advance\rail@jy by \rail@joinhsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   740
\advance\rail@jx by -\rail@joinhsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   741
\rail@joval[br]
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   742
\advance\rail@jx by \rail@joinhsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   743
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   744
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   745
% \rail@eltsplit EX:Y; : split EX:Y into \rail@ex \rail@y
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   746
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   747
% \rail@endalt{JOIN} : end alternatives with outgoing join JOIN
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   748
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   749
\def\rail@eltsplit#1:#2;{\rail@ex=#1\rail@y=#2}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   750
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   751
\def\rail@endalt#1{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   752
\global\rail@gx=\rail@x
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   753
\global\rail@gy=\rail@y
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   754
\global\rail@gex=\rail@ex
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   755
\global\rail@grx=\rail@rx
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   756
\endgroup
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   757
\ifnum\rail@gx>\rail@mx\rail@mx=\rail@gx\fi
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   758
\ifnum\rail@grx>\rail@mx\rail@mx=\rail@grx\fi
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   759
\edef\rail@list{\rail@list\rail@comma\number\rail@gex:\number\rail@gy}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   760
\rail@x=\rail@mx
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   761
\rail@jx=\rail@x
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   762
\rail@jy=\rail@sy
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   763
\advance\rail@jx by \rail@joinsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   764
\let\rail@join=#1
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   765
\@for\rail@elt:=\rail@list\do{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   766
\expandafter\rail@eltsplit\rail@elt;
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   767
\rail@join
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   768
\let\rail@join=\rail@altjoin
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   769
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   770
\rail@x=\rail@mx
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   771
\rail@y=\rail@sy
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   772
\rail@ex=\rail@gex
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   773
\advance\rail@x by \rail@joinsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   774
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   775
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   776
% \rail@bar : start '|' alternatives
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   777
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   778
% \rail@nextbar : next '|' alternative
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   779
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   780
% \rail@endbar : end '|' alternatives
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   781
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   782
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   783
\def\rail@bar{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   784
\rail@alt\rail@barsplit
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   785
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   786
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   787
\def\rail@nextbar{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   788
\rail@nextalt\relax
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   789
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   790
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   791
\def\rail@endbar{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   792
\rail@endalt\rail@barjoin
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   793
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   794
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   795
% \rail@plus : start '+' alternatives
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   796
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   797
% \rail@nextplus: next '+' alternative
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   798
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   799
% \rail@endplus : end '+' alternatives
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   800
%
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   801
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   802
\def\rail@plus{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   803
\rail@alt\rail@plussplit
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   804
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   805
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   806
\def\rail@nextplus{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   807
\rail@nextalt\rail@fixplus
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   808
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   809
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   810
\def\rail@fixplus{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   811
\ifnum\rail@gy<\rail@sy
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   812
\begingroup
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   813
\rail@x=\rail@gx
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   814
\rail@y=\rail@gy
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   815
\rail@ex=\rail@gex
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   816
\rail@rx=\rail@grx
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   817
\ifnum\rail@x<\rail@rx
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   818
\rail@x=\rail@rx
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   819
\fi
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   820
\rail@eline
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   821
\rail@jx=\rail@x
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   822
\rail@jy=\rail@y
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   823
\advance\rail@jy by \rail@joinhsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   824
\rail@joval[br]
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   825
\advance\rail@jx by \rail@joinhsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   826
\rail@tmpa=\rail@sy
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   827
\advance\rail@tmpa by -\rail@joinhsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   828
\advance\rail@tmpa by -\rail@jy
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   829
\rail@jput{\line(0,1){\number\rail@tmpa}}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   830
\rail@jy=\rail@sy
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   831
\advance\rail@jy by -\rail@joinhsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   832
\advance\rail@jx by \rail@joinhsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   833
\rail@joval[tl]
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   834
\advance\rail@jy by \rail@joinhsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   835
\global\rail@gx=\rail@jx
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   836
\global\rail@gy=\rail@jy
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   837
\global\rail@gex=\rail@gx
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   838
\global\rail@grx=\rail@rx
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   839
\endgroup
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   840
\fi
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   841
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   842
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   843
\def\rail@endplus{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   844
\rail@endalt\rail@plusjoin
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   845
}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   846
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   847
% \rail@cr{Y} : carriage return to vertical position Y
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   848
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   849
\def\rail@cr#1{
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   850
\rail@tmpa=\rail@sx
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   851
\advance\rail@tmpa by \rail@joinsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   852
\ifnum\rail@x<\rail@tmpa\rail@x=\rail@tmpa\fi
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   853
\rail@eline
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   854
\rail@jx=\rail@x
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   855
\rail@jy=\rail@y
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   856
\advance\rail@x by \rail@joinsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   857
\ifnum\rail@x>\rail@rx\rail@rx=\rail@x\fi
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   858
\advance\rail@jy by -\rail@joinhsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   859
\rail@joval[tr]
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   860
\advance\rail@jx by \rail@joinhsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   861
\rail@sety{#1}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   862
\rail@tmpa=\rail@jy
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   863
\advance\rail@tmpa by -\rail@y
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   864
\advance\rail@tmpa by -\rail@boxsp
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   865
\advance\rail@tmpa by -\rail@joinhsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   866
\rail@jput{\line(0,-1){\number\rail@tmpa}}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   867
\rail@jy=\rail@y
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   868
\advance\rail@jy by \rail@boxsp
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   869
\advance\rail@jy by \rail@joinhsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   870
\advance\rail@jx by -\rail@joinhsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   871
\rail@joval[br]
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   872
\advance\rail@jy by -\rail@joinhsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   873
\rail@tmpa=\rail@jx
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   874
\advance\rail@tmpa by -\rail@sx
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   875
\advance\rail@tmpa by -\rail@joinhsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   876
\rail@jput{\line(-1,0){\number\rail@tmpa}}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   877
\rail@jx=\rail@sx
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   878
\advance\rail@jx by \rail@joinhsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   879
\advance\rail@jy by -\rail@joinhsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   880
\rail@joval[tl]
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   881
\advance\rail@jx by -\rail@joinhsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   882
\rail@tmpa=\rail@boxsp
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   883
\advance\rail@tmpa by -\rail@joinsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   884
\rail@jput{\line(0,-1){\number\rail@tmpa}}
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   885
\advance\rail@jy by -\rail@tmpa
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   886
\advance\rail@jx by \rail@joinhsz
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   887
\rail@joval[bl]
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   888
\rail@x=\rail@jx
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   889
\rail@ex=\rail@x
13ba951a4572 added this file;
wenzelm
parents:
diff changeset
   890
}