% \iffalse
% RCS: $Id: jadetex.dtx,v 1.14 2003/05/18 11:26:44 icastle Exp $
% File: jadetex.dtx. Copyright (C) 1996, 1997, 1998, 2000, 2001
% Sebastian Rahtz  <sebastian.rahtz@oucs.ox.ac.uk>
% Copyright (C) 2002, 2003
% Ian Castle <ian.castle@openjade.org>
%
% Permission is hereby granted, free of charge, to any person obtaining
% a copy of this software and associated documentation files (the
% ``Software''), to deal in the Software without restriction, including
% without limitation the rights to use, copy, modify, merge, publish,
% distribute, sublicense, and/or sell copies of the Software, and to
% permit persons to whom the Software is furnished to do so, subject to
% the following conditions:
% 
% The above copyright notice and this permission notice shall be included
% in all copies or substantial portions of the Software.
% 
% THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS
% OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
% MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
% IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
% OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
% ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
% OTHER DEALINGS IN THE SOFTWARE.
%
%<dsssldef>\ProvidesFile{dsssl.def}
%<*dtx>
          \ProvidesFile{jadetex.ltx}
%</dtx>
%<package>\NeedsTeXFormat{LaTeX2e}[1995/06/01]
%<package>\ProvidesFile{jadetex.ltx}
%\GetFileInfo{JadeTeX.dtx}
%<driver> \ProvidesFile{jadetex.drv}
% \fi
%         \ProvidesFile{jadetex.dtx}
%
% \iffalse
%<*driver>
\documentclass{ltxdoc}
\usepackage{times,array,longtable,colortbl}
\usepackage[T1]{fontenc}
\makeatletter
  \let\\\@centercr

\def\arraybackslash{\let\\=\@arraycr}
\newcolumntype{P}[1]{>{\raggedright\arraybackslash}p{#1}}
\makeatother
\EnableCrossrefs
\CodelineIndex
\begin{document}
 \title{Jade DSSSL \TeX{} backend macros}
 \author{Sebastian Rahtz\thanks{Maintained at \url{https://github.com/LaTeX-Package-Repositories/jadetex}}}
 \date{printed \today}
 \maketitle
 \tableofcontents
 \DocInput{jadetex.dtx}
\end{document}
%</driver>
% \fi
%
% \StopEventually{}
%
% \section{Introduction}
% \subsection{Acknowledgements}
% Developed from the skeleton by  David Megginson
% (\texttt{dmeggins@microstar.com}), who wrote the original Jade
% \texttt{TeXFOTBuilder} module. This version incorporates support for
% important changes made by Paul Prescod and Kathleen Marszalek for tables;
% those changes and the corresponding work in JadeTeX were commissioned by
% Novare International, to whom considerable thanks are due.
%
% Considerable benefit has been had from corrections, additions and
% discusions from David Carlisle, Matthias Clasen,
% Ulrich Drepper and Christian Leutloff.
%
% \subsection{Usage}
% The file |jadetex.ltx| can either be loaded before the Jade output
% or (better) made into a format file for fast loading; it
% sits on top of \LaTeX, so do:
% \begin{verbatim}
% tex -ini \&hugelatex jadetex.ltx '\dump'
% \end{verbatim}
% Be warned that because many elements can get labelled in JadeTeX, it is
% easy to run out of memory. You will very likely need to increase poolsize.
%
% If you really want to gain speed and save memory, 
% prepare an even more cut down \LaTeX with unneeded chunks cut out.
% (such as the picture environment etc). Be careful and be legal, please.
%
% We build on \LaTeX, but do not need a lot of the paraphernalia
% of the document classes, so we just load the \texttt{minimal} class,
% designed for this purpose. We also need access to
% input and output font encoding, color, graphics inclusion, and
% headers and footers; so we load some standard packages. The
% \texttt{inputenc} option is temporary, and needs more thought.
% Eventually we want Unicode input working, with Omega.
%
% \StopEventually{}
%    \begin{macrocode}
%<*package>
\def\JadeTeXMajorVersion{3}
\def\JadeTeXMinorVersion{14}
\def\JadeTeXDate{2026/07/30}
\documentclass{minimal}
\RequirePackage{array}[1995/01/01]
\RequirePackage{longtable}[1995/01/01]
\RequirePackage{color}[1997/09/09]
\RequirePackage{colortbl}
\RequirePackage{marvosym}
\RequirePackage{graphicx}[1997/06/09]
\IfFileExists{multicol.sty}
  {\RequirePackage{multicol}[1997/12/16]}
  {\newenvironment{multicols}[1]%
  {\typeout{Warning,  at line \the\inputlineno, multicol package not available}}{}%
}
\RequirePackage[normalem]{ulem}
\RequirePackage{fancyhdr}
\makeatletter
\count@\time
\divide\count@ 60
\count2=-\count@
\multiply\count2 60
\advance\count2 \time
\edef\today{%
  \the\year/\two@digits{\the\month}/\two@digits{\the\day}:%
    \two@digits{\the\count@}:\two@digits{\the\count2}}
\begingroup               
  \catcode`P=12           
  \catcode`T=12
  \lowercase{\endgroup 
  \gdef\rem@ptetc#1.#2PT#3!{#1\ifnum#2>\z@.#2\fi}%
}                 
\def\strip@pt@and@otherjunk#1{\expandafter\rem@ptetc\the#1!}      
\makeatother
\def\TeXFOTversion{0.0} 
\makeatletter
\ifx\pushocplist\@undefined
 \RequirePackage[implicit=true,colorlinks,linkcolor=black,bookmarks=true]{hyperref}[2000/03/01]
 \def\PDFBorders{0 0 0}
 \RequirePackage[dsssl]{inputenc}[1997/12/20]
 \RequirePackage{mlnames}
 \RequirePackage{unicode}
 \def\DefineCharacter#1#2#3{\expandafter\def\csname!#1\endcsname{#3}}
 \def\DefineEntity#1#2{\expandafter\def\csname Ent#1\endcsname{#2}}
 \def\Entity#1{\csname Ent#1\endcsname}
 \input ucharacters.sty
 \input uentities.sty
%    \end{macrocode}
% Define the characters under 127, normally not provided by ucharacters.sty
%    \begin{macrocode}
\DefineCharacter{32}{20}{\space }
\DefineCharacter{33}{21}{!}
\DefineCharacter{34}{22}{"}
\DefineCharacter{35}{23}{\#}
\DefineCharacter{36}{24}{\ifmmode \$\else \textdollar \fi}% 
\DefineCharacter{37}{25}{\%}
\DefineCharacter{38}{26}{\&}
\DefineCharacter{39}{27}{\textquotesingle }
\DefineCharacter{40}{28}{(}
\DefineCharacter{41}{29}{)}
\DefineCharacter{42}{2A}{\ensuremath{\ast }}
\DefineCharacter{43}{2B}{\ensuremath{+}}
\DefineCharacter{44}{2C}{,}
\DefineCharacter{45}{2D}{\ensuremath{-}}
\DefineCharacter{46}{2E}{.}
\DefineCharacter{47}{2F}{/}
\DefineCharacter{48}{30}{0}
\DefineCharacter{49}{31}{1}
\DefineCharacter{50}{32}{2}
\DefineCharacter{51}{33}{3}
\DefineCharacter{52}{34}{4}
\DefineCharacter{53}{35}{5}
\DefineCharacter{54}{36}{6}
\DefineCharacter{55}{37}{7}
\DefineCharacter{56}{38}{8}
\DefineCharacter{57}{39}{9}
\DefineCharacter{58}{3A}{:}
\DefineCharacter{59}{3B}{\ensuremath{;}}
\DefineCharacter{60}{3C}{\ensuremath{<}}
\DefineCharacter{61}{3D}{=}
\DefineCharacter{62}{3E}{\ensuremath{>}}
\DefineCharacter{63}{3F}{?}
\DefineCharacter{64}{40}{@}
\DefineCharacter{65}{41}{A}
\DefineCharacter{66}{42}{B}
\DefineCharacter{67}{43}{C}
\DefineCharacter{68}{44}{D}
\DefineCharacter{69}{45}{E}
\DefineCharacter{70}{46}{F}
\DefineCharacter{71}{47}{G}
\DefineCharacter{72}{48}{H}
\DefineCharacter{73}{49}{I}
\DefineCharacter{74}{4A}{J}
\DefineCharacter{75}{4B}{K}
\DefineCharacter{76}{4C}{L}
\DefineCharacter{77}{4D}{M}
\DefineCharacter{78}{4E}{N}
\DefineCharacter{79}{4F}{O}
\DefineCharacter{80}{50}{P}
\DefineCharacter{81}{51}{Q}
\DefineCharacter{82}{52}{R}
\DefineCharacter{83}{53}{S}
\DefineCharacter{84}{54}{T}
\DefineCharacter{85}{55}{U}
\DefineCharacter{86}{56}{V}
\DefineCharacter{87}{57}{W}
\DefineCharacter{88}{58}{X}
\DefineCharacter{89}{59}{Y}
\DefineCharacter{90}{5A}{Z}
\DefineCharacter{91}{5B}{[}
\DefineCharacter{92}{5C}{\ifmmode \backslash \else \textbackslash \fi}% 
\DefineCharacter{93}{5D}{]}
\DefineCharacter{94}{5E}{\^{}}
\DefineCharacter{95}{5F}{\ensuremath{\_}}
\DefineCharacter{96}{60}{\textasciigrave }
\DefineCharacter{97}{61}{a}
\DefineCharacter{98}{62}{b}
\DefineCharacter{99}{63}{c}
\DefineCharacter{100}{64}{d}
\DefineCharacter{101}{65}{e}
\DefineCharacter{102}{66}{f}
\DefineCharacter{103}{67}{g}
\DefineCharacter{104}{68}{h}
\DefineCharacter{105}{69}{i}
\DefineCharacter{106}{6A}{j}
\DefineCharacter{107}{6B}{k}
\DefineCharacter{108}{6C}{l}
\DefineCharacter{109}{6D}{m}
\DefineCharacter{110}{6E}{n}
\DefineCharacter{111}{6F}{o}
\DefineCharacter{112}{70}{p}
\DefineCharacter{113}{71}{q}
\DefineCharacter{114}{72}{r}
\DefineCharacter{115}{73}{s}
\DefineCharacter{116}{74}{t}
\DefineCharacter{117}{75}{u}
\DefineCharacter{118}{76}{v}
\DefineCharacter{119}{77}{w}
\DefineCharacter{120}{78}{x}
\DefineCharacter{121}{79}{y}
\DefineCharacter{122}{7A}{z}
\DefineCharacter{123}{7B}{\ensuremath{\lbrace }}
\DefineCharacter{124}{7C}{\ensuremath{\vert }}
\DefineCharacter{125}{7D}{\ensuremath{\rbrace }}
\DefineCharacter{126}{7E}{\textasciitilde }
\else
%    \end{macrocode}
% If we are Omega, do some things differently.
% From Apostolos Syropoulos <apostolo@ocean1.ee.duth.gr>
%    \begin{macrocode}
 \RequirePackage{omega}[1999/06/01]
 \background{greek}
 \RequirePackage{nohyperref}
 \RequirePackge{mlnames}
\fi
%    \end{macrocode}
% This was suggested by Matthias Clasen, checking that the macros
% come from the right version of the Jade TeX backend. The package
% will have a n.m version number, where the n changes when Jade changes,
% and the m changes when the JadeTeX package changes.
%    \begin{macrocode}
\def\checkFOTversion#1{%
\ifx\\#1\\\def\TeXFOTmajor{2}
\else
 \def\TeXFOTmajor{#1}%
\fi
 \let\next\relax
 \ifnum\TeXFOTmajor>\JadeTeXMajorVersion
   \message{Your file was generated by Jade TeX backend version \TeXFOTmajor}
   \message{- these macros are for version \JadeTeXMajorVersion and lower. }
   \message{I'll stop here...}
   \let\next\@@end
 \fi
 \next}
%    \end{macrocode}
% \section{Inherited characteristics}
% Here we list the default values; non-inherited characteristics 
% will always be specified.
%    \begin{macrocode}
\def\AlignLeader{}
\def\AsisWrapIndent{}
\def\BackgroundColor{}
\let\BackgroundColorRed\@empty
\def\BackgroundLayer{}
\def\BackgroundTile{}
\def\BorderAlignment{}
\def\BorderOmitAtBreak{}
\def\BorderPresent{0}
\def\BorderPriority{}
\def\BoxBorderAlignment{}
\def\BoxCornerRadius{}
\def\BoxOpenEnd{}
\def\BoxType{}
\def\CellBackground{}
\def\CellCrossed{}
\def\CellRowAlignment{start}
\def\CellBeforeRowMargin{\z@}
\def\CellAfterRowMargin{\z@}
\def\CellBeforeColumnMargin{\z@}
\def\CellAfterColumnMargin{\z@}
\def\Color{}
\def\Country{}
\def\DisplayAlignment{}
\def\EndIndent{\z@}
\def\EndMargin{}
\def\ExpandTabs{}
\def\FieldAlign{start}
\def\FieldWidth{0pt}
\def\FillingDirection{}
\def\FirstLineStartIndent{0pt}
\def\FloatOutLineNumbers{}
\def\FloatOutMarginalia{}
\def\FloatOutSidelines{}
\def\fFamName{Times-Roman} % Use Adobe Times Roman by default
\def\fPosture{normal} 
\def\fProportionateWidth{medium}
\def\fSize{10pt}
\def\fStructure{}
\def\fWeight{medium}
\def\GlyphAlignmentMode{}
\def\GlyphReorderMethod{}
\def\GlyphSubstMethod{}
\def\HangingPunct{}
\def\HeadingLevel{0}
\def\Hyphenate{}
\def\HyphenationKeep{}
\def\HyphenationLadderCount{}
\def\HyphenationMethod{}
\def\HyphenationPushCharCount{}
\def\HyphenationRemainCharCount{}
\def\IgnoreRecordEnd{}
\def\ImplicitBidiMethod{}
\def\InhibitLineBreaks{}
\def\InputWhitespaceTreatment{}
\def\JustifyGlyphSpaceMaxAdd{}
\def\JustifyGlyphSpaceMaxRemove{}
\def\KernMode{}
\def\Kern{}
\def\Language{}
\def\LastLineEndIndent{}
\def\LastLineJustifyLimit{}
\def\LastLineQuadding{}
\def\Layer{0}
\def\Ligature{}
\def\LineBreakingMethod{}
\def\LineCap{}
\def\LineCompositionMethod{}
\def\LineJoin{}
\def\LineNumberSep{}
\def\LineNumberSide{}
\def\LineRepeat{}
\def\LineSpacing{12pt}
\def\Lines{}
\def\MarginaliaKeepWithPrevious{}
\def\MarginaliaSep{}
\def\MarginaliaSide{}
\def\MathDisplayMode{display}
\def\MinLeaderRepeat{}
\def\MinLeading{2\p@}
\def\NColumnsSpanned{1}
\def\NumberedLines{}
\def\OrphanCount{}
\def\PositionPreference{}
\def\PrincipalModeSimultaneous{}
\def\Quadding{start}
\def\ScoreSpaces{}
\def\SidelineSep{}
\def\SidelineSide{}
\def\SpanWeak{}
\def\Span{0}
\def\StartIndent{\z@}
\def\StartMargin{}
\def\TableAutoWidthMethod{}
\def\TableCornerRadius{}
\def\TablePartOmitMiddleFooter{0}
\def\TablePartOmitMiddleHeader{0}
\def\TruncateLeader{}
\def\WidowCount{}
\def\WritingMode{}
\def\AlignLeader{1}% true
\def\BreakAfter{0}%  false
\def\BreakAfterPriority{0}%
\def\BreakBefore{0}%  false
\def\BreakBeforePriority{0}%
\def\CoalesceId{0}%  false
\def\EntitySystemId{}% [required]
\def\EscapementDirection{}% [=writing-mode]
\def\EscapementSpaceAfterNom{\z@}%
\def\EscapementSpaceAfterMin{\z@}%
\def\EscapementSpaceAfterMax{\z@}%
\def\IdrefAddress{}%
\def\IsDisplay{0}%  false
\def\Keep{0}%  false
\def\KeepWithNext{0}%  false
\def\KeepWithPrevious{0}%  false
\def\MayViolateKeepAfter{0}%  false
\def\MayViolateKeepBefore{0}%  false
\def\MaxWidth{!}
\def\MaxHeight{!}
\def\NotationSystemId{}% [required]
\def\Orientation{}% [required]
\def\PageNColumns{1}
\def\PageNumberRestart{0}
\def\PageNumberFormat{1}
 \expandafter\def\csname PageNumbering@1\endcsname#1{%
      \expandafter\@arabic#1}
 \expandafter\def\csname PageNumbering@i\endcsname#1{%
      \expandafter\@roman#1}
 \expandafter\def\csname PageNumbering@I\endcsname#1{%
      \expandafter\@Roman#1}
 \expandafter\def\csname PageNumbering@a\endcsname#1{%
      \expandafter\@alph#1}
 \expandafter\def\csname PageNumbering@A\endcsname#1{%
      \expandafter\@Alph#1}
 \expandafter\def\csname PageNumbering@0\endcsname#1{% this shouldn't happen
      \expandafter\@arabic#1}
 \expandafter\def\csname PageNumbering@\endcsname#1{%
      \expandafter\@arabic#1}
\def\PageBalanceColumns{0}
\def\PageTwoSide{0}
\def\TwoSideStartOnRight{0}
\def\PageColumnSep{\z@}
\def\GridColumnSep{\z@}
\def\PositionPointShift{\z@}
\def\PositionPointShiftFactor{}
\def\PositionPointX{\z@}% ??
\def\PositionPointY{\z@}% ??
\def\PositionPreference{0}%  false
\def\ScaleType{max-uniform}%
\def\ScaleX{}% [n/a] =scale
\def\ScaleY{}% [n/a] =scale
\def\ScoreLength{}% ??
\def\ScoreType{}% [required] =type
\def\saConditional{0}%  false =space-after
\def\saForce{0}%  false =space-after
\def\saMax{0pt}% =space-after
\def\saMaxFactor{0}%  =space-after
\def\saMin{0pt}% =space-after
\def\saMinFactor{0}%  =space-after
\def\saNom{0pt}% =space-after
\def\saNomFactor{0}%  =space-after
\def\saPriority{0}%  =space-after
 \let\@sAfterMin\saMin
 \let\@sAfterMax\saMax
 \let\@sAfterNom\saNom
 \let\@sAfterPriority\saPriority
\def\sbConditional{0}%  false
\def\sbForce{0}%  false
\def\sbMax{0pt}%
\def\sbMaxFactor{0}%
\def\sbMin{0pt}%
\def\sbMinFactor{0}%
\def\sbNom{0pt}%
\def\sbNomFactor{0}%
\def\sbPriority{0}%
\newdimen\CurrentSpaceNom
\newdimen\CurrentSpaceMin
\newdimen\CurrentSpaceMax
\newdimen\LastSpaceNom
\newdimen\LastSpaceMin
\newdimen\LastSpaceMax
\CurrentSpaceNom\z@
\CurrentSpaceMax\z@
\CurrentSpaceMin\z@
\LastSpaceNom\z@
\LastSpaceMax\z@
\LastSpaceMin\z@
\def\LastSpaceConditional{0}%  false
\def\LastSpaceForce{0}%  false
\def\LastSpaceMaxFactor{0}%
\def\LastSpaceMinFactor{0}%
\def\LastSpaceNomFactor{0}%
\def\LastSpacePriority{0}%
\def\TruncateLeader{0}%  false
\def\Width{}% [required] *
\def\Length{}% [context]
\def\TableWidth{\hsize}% 
\def\ColumnIndex{}% [contextual] =column-number?
\def\HeaderMargin{\z@}
\def\FooterMargin{\z@}
\def\LeftMargin{\z@}
\def\RightMargin{\z@}
\def\TopMargin{\z@}
\def\BottomMargin{\z@}
\def\PageWidth{211mm}
\def\PageHeight{297mm}
\def\placement{htbp}
\edef\OldFontSize{\fSize}
\edef\OldLineSpacing{\LineSpacing}
\edef\OldFontPosture{\fPosture}
\edef\OldFontProportionateWidth{\fProportionateWidth}
\edef\OldFontWeight{\fWeight}
\edef\OldfFamName{\fFamName}
\let\pageFontSize\fSize
\let\pageLineSpacing\LineSpacing
\let\pageFontPosture\fPosture
\let\pageFontProportionateWidth\fProportionateWidth
\let\pageFontWeight\fWeight
\let\pagefFamName\fFamName
\let\ColorRed\@empty
\def\listitem@content@mode{listitem-content-mode}
\newtoks\JadeTeXtoks
\def\@displaylevel{0}
\def\NoLig#1{#1\ifmmode\else\/\fi}
\def\DEBUG#1{\typeout{DBG: #1 at \the\inputlineno}}
%    \end{macrocode}
% \section{Nodes and labels}
% A node in mode `listitem-content-mode' is allowed to be
% labeled, but normally only elements in empty mode 
% get labels.
%    \begin{macrocode}
\let\Label\@empty
\let\Element\@empty
\def\Node#1{%
\ifnum\Mathcount>1\relax
\else
  \ifx\\#1\\\else
    \let\ProcessingMode\@empty
    #1%
    \ifx\ProcessingMode\@empty\else
      \ifx\ProcessingMode\listitem@content@mode\else
        \let\Label\@empty\let\Element\@empty
      \fi
    \fi
%    \typeout{Node <\Label> or <\Element> -- pending at \the\inputlineno}%
  \fi
 \fi
}
\def\endNode#1{%
      \let\Label\@empty\let\Element\@empty%\noindent
}
\def\PageLabel#1{%
  \@bsphack
  \expandafter\ifx\csname p@#1\endcsname\relax
  \else
  \protected@write\@auxout{}%
         {\string\pagelabel{#1}{\thepage}}%
  \fi
  \@esphack}
\def\OriginalPageLabel#1{%
  \@bsphack\protected@write\@auxout{}%
         {\string\pagelabel{#1}{\thepage}}\@esphack}
\def\pagelabel#1#2{\global\@namedef{p@#1}{#2}}
\def\Pageref#1{\expandafter\@Setref\csname p@#1\endcsname{#1}}
\def\@qqq{qqq}
\def\@Setref#1#2{%
  \ifx#1\relax
   \immediate\write\@mainaux{\string\pagelabel{#2}{qqq}}%
   \protect\G@refundefinedtrue
   \nfss@text{\reset@font\bfseries ??}%
   \@latex@warning{Reference `#2' on page \thepage \space
             undefined}%
  \else
   \ifx#1\@qqq
    \protect\G@refundefinedtrue
    \nfss@text{\reset@font\bfseries ??}%
    \@latex@warning{Reference `#2' on page \thepage \space undefined}%
   \else
     \ifNestedLink{#1}%
     \else
      \hyper@@link[Page]{}{page.#1}{#1}%
%     \typeout{Made a Link at \the\inputlineno, to page.#1}%
     \fi
   \fi
  \fi
}
%
\def\insertCurrentNodePageNumber#1{%
 \bgroup
 \SetupICs{#1}%
 \InlineNIC
 \ifx\Label\@empty
     \Pageref{\Element}%
 \else
     \Pageref{\Label}%
 \fi
 \endInlineNIC
 \endSetupICs
 \egroup
}
%    \end{macrocode}
%\section{Atomic flow objects}
%    \begin{macrocode}
\def\insertAlignmentPoint#1{}
%    \end{macrocode}
% \subsection{Maths}
% \subsubsection{General math sequences}
%    \begin{macrocode}
\def\@display{display}
%    \end{macrocode}
% We are likely to meet nested math sequences, so maintain a counter
% to determine if we are at the outer level, and should turn
% math (display or inline) off or on.
%    \begin{macrocode}
\newcount\Mathcount
\def\MathSeq#1{%
    \bgroup
    \SetupICs{#1}%
    \FlowObjectSetup{0}%
    \global\advance\Mathcount by 1%
    \let\Action\relax
    \ifnum\Mathcount=1
     \ifx\MathDisplayMode\@display
        \let\Action\Dmath
     \else
        \let\Action\Imath
      \fi
    \fi
    \Action
}
\def\endMathSeq{%
  \global\advance\Mathcount by -1%
  \let\Action\relax
  \ifnum\Mathcount=0
     \ifx\MathDisplayMode\@display\let\Action\endDmath\else\let\Action\Imath\fi
  \fi
  \Action
  \endSetupICs
  \egroup
}
\def\Dmath{\begingroup\abovedisplayskip\Jadeskip\global\Jadeskip\z@\[}
\def\endDmath{\]\endgroup}
\def\Imath{$}
\def\Cleanmath{\def\Node##1{}\def\endNode##1{}%
 \def\MathSeq##1{}\def\endMathSeq##1{}
}
%    \end{macrocode}
% \subsubsection{Fences}
%    \begin{macrocode}
\def\FenceSerial#1#2#3#4{#1\FlowObjectSetup{0}%
 {\Cleanmath
%
% #1: fence characteristics
% #2: fence contents
% #3  open character
% #4  close character
%
  \ifx\\#3\\\left.\else
  \let\plainCharacter\Character
  \let\Character\LeftDelimiterCharacter #3%
  \let\Character\plainCharacter\fi
  {#2}%
  \ifx\\#4\\\right.\else
  \let\plainCharacter\Character
  \let\Character\RightDelimiterCharacter #4%
  \let\Character\plainCharacter\fi
 }%
}
%    \end{macrocode}
% Simon Pepping added this, to really make sure the open and close
% characters of the fence are proper left and right.
%    \begin{macrocode}
\let\plainCharacter\Character
\def\LeftDelimiterCharacter#1{\DelimiterCharacter\left{#1}}%
\def\RightDelimiterCharacter#1{\DelimiterCharacter\right{#1}}%
\def\DelimiterCharacter#1#2{%
   \SetupICs{}%
    \expandafter\ifx\csname !#2\endcsname\relax
     <#2>\typeout{Warning: Unknown character #2, at \the\inputlineno}%
    \else\expandafter#1\csname !#2\endcsname\fi % #1 is \left or \right
   \ifdim\EscapementSpaceAfterNom=\z@
   \else
     \@tempdima\EscapementSpaceAfterNom
     \advance\@tempdima by -\EscapementSpaceAfterMin
     \@tempdimb\EscapementSpaceAfterNom
     \advance\@tempdimb by -\EscapementSpaceAfterMax
     \hskip\EscapementSpaceAfterNom plus \@tempdimb minus \@tempdima%
   \fi
   \endSetupICs{}%
}
%    \end{macrocode}
% \subsubsection{Fractions}
% These simply translate into |{Numerator \over Denominator}|
%    \begin{macrocode}
\def\FractionSerial#1{#1\FlowObjectSetup{0}\bgroup}
\def\endFractionSerial{\egroup}
\def\FractionDenominator{}
\def\endFractionDenominator{}
\def\FractionNumerator{}
\def\endFractionNumerator{\over }
\def\insertFractionBar{}
%    \end{macrocode}
% \subsubsection{Marks}
% Waiting to be implemented.
%    \begin{macrocode}
\def\MarkOver#1#2\endMarkOver{}
\def\MarkUnder#1#2\endMarkUnder{}
\def\MarkSerial#1{}
\def\endMarkSerial{}
%    \end{macrocode}
% \subsubsection{Operators/limits}
%    \begin{macrocode}
\def\MathOperatorSerial#1{#1\FlowObjectSetup{0}\begingroup\Cleanmath}
\def\endMathOperatorSerial{\endgroup}
\def\MathOperatorOperator#1#2\endMathOperatorOperator#3{#1%
 \mathop{#2}}
\def\MathOperatorLowerLimit#1{#1_\bgroup}
\def\endMathOperatorLowerLimit#1{\egroup}
\def\MathOperatorUpperLimit#1{#1^\bgroup}
\def\endMathOperatorUpperLimit#1{\egroup}
%    \end{macrocode}
% \subsubsection{Radicals}
%    \begin{macrocode}
\def\RadicalSerial#1\insertRadicalRadicalDefaulted#2#3\RadicalDegree#4#5\endRadicalDegree#6\endRadicalSerial{#1\FlowObjectSetup{0}%
\ifx\\#5\\\ensuremath{\sqrt{#3}}\else\ensuremath{\root #5 \of {#3}}\fi}
%    \end{macrocode}
% \subsubsection{Grids}
%    \begin{macrocode}
\newcount\GridCells
\newcount\GridRows
\newif\ifExplicitGrid
\def\Grid#1{#1%
 \begingroup
 \FlowObjectSetup{0}%
 \Cleanmath
 \global\GridCells\@ne\global\GridRows0
 \ifnum\NColumns=0 \ExplicitGridtrue\def\NColumns{25}%
 \else\ExplicitGridfalse\fi
 \begin{array}{*{\NColumns}{c}}%
}
\def\endGrid{\end{array}\endgroup}
\def\GridCell#1{#1\FlowObjectSetup{0}}
\def\endGridCell#1{%
  \ifnum\NColumns=\GridCells
    \global\GridCells\@ne
    \def\@tempa{\cr}%
  \else
    \global\advance\GridCells\@ne
    \def\@tempa{&}%
  \fi
  \@tempa}
\def\NewColumn{&}
\def\NewRow{\\}
%    \end{macrocode}
% \subsubsection{Superscript, subscript}
%    \begin{macrocode}
\def\Subscript#1#2{_{#2}}
\def\Superscript#1#2{^{#2}}
%    \end{macrocode}
% \subsubsection{Unmath}
%    \begin{macrocode}
\def\Unmath#1#2{%
  {\SetupICs{#1}\mbox{#2}\endSetupICs}%
}
%    \end{macrocode}
% \subsubsection{ScriptSerial}
%    \begin{macrocode}
\def\ScriptSerial#1#2#3#4#5#6#7#8{%
  \ifx$#3#4$%
  \else
    \vphantom{#2}_{#4}^{#3}%
  \fi
  \ifx$#7#8$%
     {#2}%
  \else
    {\mathop{#2}\limits_{#8}^{#7}}\vphantom{#2}%
  \fi
  _{#6}^{#5}}
%    \end{macrocode}
% \subsection{External Graphic flow object class (clause 12.6.15)}
% How we include graphics depends on the NotationSystemId. 
% Ulrich Drepper <drepper@ipd.info.uni-karlsruhe.de> worked this
% out, and he also made the alignment and indentation work correctly.
%If any other notation needs special
% handling it can be implemented by adding a macro
%	|insertExternalGraphicNotationXXX|
% where XXX is the notation name.
%    \begin{macrocode}
\def\insertExternalGraphic#1{%
  \begingroup
  \SetupICs{#1}%
  \expandafter\ifx\csname insertExternalGraphicNotation\NotationSystemId\endcsname\relax%
  \insertExternalGraphicNotation%
 \else
 \csname insertExternalGraphicNotation\NotationSystemId\endcsname
 \fi
 \endgroup
}
\newbox\jadeGraphic
\newdimen\jadeGraphicHeight
\newdimen\jadeGraphicWidth
\def\insertExternalGraphicNotation{%
  \ifnum\@TableNest>0\def\IsDisplay{0}\fi
  \ExternalGraphicNIC
  \ifcase\IsDisplay
% 0, its inline
   \setbox\jadeGraphic=\hbox{\expandafter\IncludeGraphic\EntitySystemId\\}%
   \noindent%Enter hmode
   \ifdim\PositionPointX>\z@
     \kern -\PositionPointX
   \fi
   \ifnum\Layer>0%
% Graphic drawn at layer > 0 overwrites surrounding text
     \jadeGraphicWidth=\wd\jadeGraphic
     \raisebox{-\PositionPointY}[\z@][\z@]{\box\jadeGraphic}
     \kern\PositionPointX\kern-\jadeGraphicWidth
   \else
     \jadeGraphicHeight=\ht\jadeGraphic
     \advance\jadeGraphicHeight by \dp\jadeGraphic
     \advance\jadeGraphicHeight by -\PositionPointY
     \raisebox{-\PositionPointY}[\jadeGraphicHeight][\PositionPointY]{%
	 \box\jadeGraphic
     }%
   \fi
% 1 its display
  \or%
    \DisplayNIC
    \@@par%
    \@tempdima\columnwidth
    \nointerlineskip
    \ifdim\EndIndent>\z@
      \advance\@tempdima by-\EndIndent
    \fi
    \ifdim\StartIndent>\z@
      \advance\@tempdima by-\StartIndent
      \moveright\StartIndent
    \fi
    \hbox to\@tempdima{%
      \ifx\DisplayAlignment\A@center\hfill\fi%
      \ifx\DisplayAlignment\A@end\hfill\fi%
      \expandafter\IncludeGraphic\EntitySystemId\\%
      \ifx\DisplayAlignment\A@center\hfill\fi%
      \ifx\DisplayAlignment\A@start\hfill\fi%
    }%
    \@@par%
  \else%
   \expandafter\IncludeGraphic\EntitySystemId\\%
  \fi
  \endExternalGraphicNIC
  \ifcase\IsDisplay
  \or  
    \endDisplayNIC  
  \fi
}
\def\insertExternalGraphicNotationTEX{%
 \input\EntitySystemId
}
\def\IncludeGraphic{\@ifnextchar<{\@IncludeGraphic}{\@IncludeGraphic<>}}
\def\scale@max{max}
\def\scale@false{false}
\def\scale@maxuniform{max-uniform}
%    \end{macrocode}
% There are three situations: ScaleX and ScaleY are supplied
% (possibly identical), in which case ScaleType is `false', or
% ScaleType is `max' or `max-uniform' (the default); in the latter
% cases, use MaxWidth and MaxHeight, with and without preserved
% aspect ratio. The width and height default to \LaTeX{} graphics package
% `!', ie their natural size. I \emph{think} this is the right
% interpretation of the standard.
%    \begin{macrocode}
\def\Exclams{!!}
\def\@IncludeGraphic<#1>#2\\{%
  \ifx\ScaleType\scale@false
    \ifx\ScaleX\ScaleY
     \scalebox{\ScaleX}{\includegraphics{#2}}%
    \else
     \scalebox{\ScaleX}[\ScaleY]{\includegraphics{#2}}%
    \fi
  \else
    \ifx\ScaleType\scale@maxuniform  
      \edef\MaxBoth{\MaxHeight\MaxWidth}%
      \ifx\MaxBoth\Exclams
           \includegraphics{#2}%
      \else
            \includegraphics[width=\MaxWidth,keepaspectratio=true,
             height=\MaxHeight]{#2}%
      \fi
    \else
      \ifx\ScaleType\scale@max
        \includegraphics[width=\MaxWidth,height=\MaxHeight,
             keepaspectratio=false]{#2}%
      \else
        \typeout{ERROR: invalid scale type of \ScaleType}%
      \fi
    \fi
  \fi
}
\def\insertPageNumber#1{#1%
  \csname PageNumbering@\PageNumberFormat\endcsname\c@page}
\def\insertParagraphBreak#1{\@@par}
%
\def\horizontal{horizontal}
\def\vertical{vertical}
\def\escapement{escapement}
\def\LineThickness{1pt}
\def\A@center{center}
\def\A@end{end}
\def\A@start{start}
\def\insertRule#1{%
  \bgroup
  \SetupICs{#1}%
  \def\IsDisplay{0}
  \ifx\Orientation\horizontal\def\IsDisplay{1}\fi
  \ifx\Orientation\vertical\def\IsDisplay{1}\fi
  \RuleNIC
  \ifcase\IsDisplay
% 0, its inline
   \ifx\Orientation\escapement
     \ifx\Length\@empty
% Length isn't specified, so it depends of the context. 
% No rule is a good context ;-)
     \else
       \noindent\raisebox{\PositionPointShift}[\z@][\z@]{\vrule width \Length height \LineThickness depth \z@}
       \ifnum\Layer>0
	 \kern-\Length%
	\fi
     \fi
   \else
% Line-progression orientation doesn't affect placement of subsequent
% flow object. [Note 104]
     \ifx\Length\@empty
% Length isn't specified, so it depends of the context. 
% No rule is a good context ;-)
     \else
       \raisebox{\PositionPointShift}[\z@][\z@]{\vrule width \LineThickness height \z@ depth \Length}
     \fi
     \kern-\LineThickness%
   \fi
% 1 its display
  \or%
    \DisplayNIC
    \@@par%
    \@tempdima\linewidth
    \nointerlineskip
    \ifdim\EndIndent>\z@
      \advance\@tempdima by-\EndIndent
    \fi
    \ifdim\StartIndent>\z@
      \advance\@tempdima by-\StartIndent
      \moveright\StartIndent
    \fi
    \hbox to\@tempdima{%
    \ifx\DisplayAlignment\A@center\hfill\fi
    \ifx\DisplayAlignment\A@end\hfill\fi
    \ifx\Orientation\horizontal   
      \ifx\Length\@empty\else \hbox to \Length\fi
      {\leaders\hrule  height \LineThickness \hfill}%
    \else
      \hbox to  \LineThickness {\leaders\hrule 
        \ifx\Length\@empty\else height \Length \fi \relax
        \hfill}%
    \fi
    \ifx\DisplayAlignment\A@center\hfill\fi
    \ifx\DisplayAlignment\A@start\hfill\fi
    }%
    \nointerlineskip
    \@@par%
  \else%
% Unknown IsDiplay
    \typeout{ERROR: invalid IsDisplay value of \IsDisplay}%
  \fi
  \endRuleNIC
  \ifcase\IsDisplay
  \or  
    \endDisplayNIC  
  \fi
 \endSetupICs 
 \egroup
}
%    \end{macrocode}
% \subsection{Tables}
%    \begin{macrocode}
\setlength\arraycolsep\z@
\setlength\tabcolsep\z@
%\extrarowheight3\p@
\setlength\arrayrulewidth{.4\p@}
\setlength\doublerulesep{2\p@}
\def\arraybackslash{\let\\=\@arraycr}
\renewcommand{\arraystretch}{0}
% Those are for backward compatibility
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}}
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}
\newcolumntype{R}[1]{>{\raggedleft\arraybackslash}p{#1}}
% Those columns defs follows the direction of the corresponding
% keys on a QWERTY keyboard.
\newcolumntype{T}[3]{@{\hspace{#1}}>{\raggedright\arraybackslash}p{#2}@{\hspace{#3}}}
\newcolumntype{Y}[3]{@{\hspace{#1}}>{\centering\arraybackslash}p{#2}@{\hspace{#3}}}
\newcolumntype{U}[3]{@{\hspace{#1}}>{\raggedleft\arraybackslash}p{#2}@{\hspace{#3}}}
\newcolumntype{G}[3]{@{\hspace{#1}}>{\raggedright\arraybackslash}m{#2}@{\hspace{#3}}}
\newcolumntype{H}[3]{@{\hspace{#1}}>{\centering\arraybackslash}m{#2}@{\hspace{#3}}}
\newcolumntype{J}[3]{@{\hspace{#1}}>{\raggedleft\arraybackslash}m{#2}@{\hspace{#3}}}
\newcolumntype{B}[3]{@{\hspace{#1}}>{\raggedright\arraybackslash}b{#2}@{\hspace{#3}}}
\newcolumntype{N}[3]{@{\hspace{#1}}>{\centering\arraybackslash}b{#2}@{\hspace{#3}}}
\newcolumntype{M}[3]{@{\hspace{#1}}>{\raggedleft\arraybackslash}b{#2}@{\hspace{#3}}}
% The numeric column types follows the numeric keypad direction
% and support colour
\newcolumntype{7}[4]{@{\hspace{#1}}>{\columncolor[rgb]{#4}\raggedright\arraybackslash}p{#2}@{\hspace{#3}}}
\newcolumntype{8}[4]{@{\hspace{#1}}>{\columncolor[rgb]{#4}\centering\arraybackslash}p{#2}@{\hspace{#3}}}
\newcolumntype{9}[4]{@{\hspace{#1}}>{\columncolor[rgb]{#4}\raggedleft\arraybackslash}p{#2}@{\hspace{#3}}}
\newcolumntype{4}[4]{@{\hspace{#1}}>{\columncolor[rgb]{#4}\raggedright\arraybackslash}m{#2}@{\hspace{#3}}}
\newcolumntype{5}[4]{@{\hspace{#1}}>{\columncolor[rgb]{#4}\centering\arraybackslash}m{#2}@{\hspace{#3}}}
\newcolumntype{6}[4]{@{\hspace{#1}}>{\columncolor[rgb]{#4}\raggedleft\arraybackslash}m{#2}@{\hspace{#3}}}
\newcolumntype{1}[4]{@{\hspace{#1}}>{\columncolor[rgb]{#4}\raggedright\arraybackslash}b{#2}@{\hspace{#3}}}
\newcolumntype{2}[4]{@{\hspace{#1}}>{\columncolor[rgb]{#4}\centering\arraybackslash}b{#2}@{\hspace{#3}}}
\newcolumntype{3}[4]{@{\hspace{#1}}>{\columncolor[rgb]{#4}\raggedleft\arraybackslash}b{#2}@{\hspace{#3}}}
\newcount\@tmpcounta
\def\JadeRowSpanBox#1{\csname jadeRowSpanBox#1\endcsname}
\def\JadeRowSpanSpace#1{\csname jadeRowSpanSpace#1\endcsname}
\def\JadeRowSpan{%
 \expandafter\ifx\csname jadeRowSpanBox\ColumnIndex\endcsname\relax
  \expandafter\newbox\csname jadeRowSpanBox\ColumnIndex\endcsname
  \expandafter\newdimen\csname jadeRowSpanSpace\ColumnIndex\endcsname
 \fi
 \setbox\JadeRowSpanBox{\ColumnIndex}\vtop\bgroup\noindent%
}
\def\endJadeRowSpan{%
 \egroup%
 \global\JadeRowSpanSpace{\ColumnIndex}\ht\JadeRowSpanBox{\ColumnIndex}%
 \global\advance\JadeRowSpanSpace{\ColumnIndex} by \dp\JadeRowSpanBox{\ColumnIndex}%
 \@tempdima\ht\JadeRowSpanBox{\ColumnIndex}%
 \@tempdimb\dp\JadeRowSpanBox{\ColumnIndex}%
 \@tmpcounta\NRowsSpanned%
 \advance\@tmpcounta by -1%
 \@tempdima\CellBeforeRowMargin%
 \@tempdimb\CellAfterRowMargin%
 \multiply\@tempdima by \@tmpcounta%
 \multiply\@tempdimb by \@tmpcounta%
 \global\advance\JadeRowSpanSpace{\ColumnIndex} by -\@tempdima%
 \global\advance\JadeRowSpanSpace{\ColumnIndex} by -\@tempdimb%
 \global\divide\JadeRowSpanSpace{\ColumnIndex} by \NRowsSpanned%
 \vtop to \JadeRowSpanSpace{\ColumnIndex}{\unvbox\JadeRowSpanBox{\ColumnIndex}}
}
\def\JadeRowSpanFiller{%
\expandafter\ifx\csname jadeRowSpanBox\ColumnIndex\endcsname\relax
 \errmessage{Invalid row span identifier}
\fi
\vtop to \JadeRowSpanSpace{\ColumnIndex}{}%
}
\def\insertTableAfterColumnBorder#1{}
\def\insertTableAfterRowBorder#1{}
\def\insertTableBeforeColumnBorder#1{}
\def\insertTableBeforeRowBorder#1{}
%
\def\insertTableCellAfterColumnBorder#1{\edef\AfterCol{\BorderPresent}}
\def\insertTableCellAfterRowBorder#1{\edef\AfterRow{\BorderPresent}}
\def\insertTableCellBeforeColumnBorder#1{\edef\BeforeCol{\BorderPresent}}
\def\insertTableCellBeforeRowBorder#1{\edef\BeforeRow{\BorderPresent}}
\def\insertTableColumn#1{#1}
%    \end{macrocode}
% \section{Non-atomic flow objects}
% \subsection{Box flow object class}
%    \begin{macrocode}
\def\BOX#1{%
 \SetupICs{#1}%
 \fboxrule\LineThickness
 \@tempdima\columnwidth
 \ifdim\EndIndent>\z@
    \advance\@tempdima by-\EndIndent
 \fi
 \ifdim\StartIndent>\z@
   \advance\@tempdima by-\StartIndent 
   \hspace*{\StartIndent}%
 \fi
 \advance\@tempdima by-\StartIndent 
 \setbox0\vbox\bgroup\def\StartIndent{\z@}\hsize\@tempdima\ignorespaces}
\def\endBOX{%
 \ifhmode\unskip\fi
 \egroup%
 % FIXME: we aren't handling box-type: 'both
 \ifx\BackgroundColorRed\@empty
  \ifdim\ht0>\ht\strutbox
   \noindent\fbox{\box0}%
  \else
   \setbox0\vbox{\unvbox0\global\setbox1\lastbox}%
   \noindent\fbox{\kern-\parindent\unhbox1\unskip\unskip}%
  \fi
 \else
  \c@lor@RGB@rgb{\BackgroundColorRed}\@tempa
  \c@lor@RGB@rgb{\BackgroundColorGreen}\@tempb
  \c@lor@RGB@rgb{\BackgroundColorBlue}\@tempc
  \ifdim\ht0>\ht\strutbox
   \noindent\colorbox[rgb]{\@tempa, \@tempb, \@tempc}{\box0}%
  \else
   \setbox0\vbox{\unvbox0\global\setbox1\lastbox}%
   \noindent\colorbox[rgb]{\@tempa, \@tempb, \@tempc}{\kern-\parindent\unhbox1\unskip\unskip}%
 \fi
\fi%
}
%    \end{macrocode}
% \subsection{Multicolumn management macros}
% Contributed by Simon Pepping.
%    \begin{macrocode}
\def\closeOrOpenMulticols#1{%
 % juggling with nesting levels
 {#1\global\edef\SavedSpan{\Span}}%
 \ifnum\@displaylevel=0\relax\ifnum\PageNColumns>1\relax
   % close
   \ifnum\SavedSpan>1\relax
     \ifnum\col@number>1\relax % in multicols
       \ifnum\PageBalanceColumns>0
         \end{multicols}
       \else
         % \endmulticols*
         \vfill\end{multicols}
       \fi
     \fi
   % or delayed open
   \else % not \ifnum\SavedSpan>1\relax
     \ifnum\col@number=1 % not in multicols
       \columnsep\PageColumnSep
       \ifnum\PageBalanceColumns>0
         \begin{multicols}{\PageNColumns}
       \else
         % \begin{multicols*}{\PageNColumns}
         \let\balance@columns@out
           \multi@column@out
         \begin{multicols}{\PageNColumns}
       \fi
     \fi
   \fi
 \fi\fi
}

\def\openMulticols{%
 \ifnum\@displaylevel=0\relax
   \def\@displaylevel{1}%
   % local to this nesting level, for use by endDisplayGroup
   \edef\@SavedSpan{\SavedSpan}
   \ifnum\PageNColumns>1\relax 
   \ifnum\@SavedSpan>1\relax
	 \ifnum\@SavedSpan=\PageNColumns\else
       \columnsep\PageColumnSep
       \ifnum\PageBalanceColumns>0
         \begin{multicols}{\PageNColumns}
       \else
         % \begin{multicols*}{\PageNColumns}
         \let\balance@columns@out
           \multi@column@out
         \begin{multicols}{\PageNColumns}
       \fi
     \fi
   \fi
   \fi
 \else
   \def\@displaylevel{2}%
 \fi
}

\def\closeMulticols{%
 \ifnum\@displaylevel=1\ifnum\PageNColumns>1\relax
   \ifnum\@SavedSpan>1\relax
	 \ifnum\@SavedSpan=\PageNColumns\else
       \ifnum\PageBalanceColumns>0
         \end{multicols}
       \else
         % \endmulticols*
         \vfill\end{multicols}
       \fi
     \fi
   \fi
 \fi\fi
}
%    \end{macrocode}
% \subsection{Display group flow object class (clause 12.6.2)}
%    \begin{macrocode}
\def\Keep@Page{page}
\def\Keep@Column{column}
\newif\ifKeepPage
\KeepPagefalse
\def\DisplayGroup#1{\ifnum\@TableNest>0\SetupICs{#1}\else\@DisplayGroup{#1}\fi}
\def\@DisplayGroup#1{%
 \closeOrOpenMulticols{#1}
 \begingroup
 \SetupICs{#1}%
 \FlowObjectSetup{1}%
 \ifx\Keep\Keep@Page\KeepPagetrue
 \else
    \ifx\Keep\Keep@Column\KeepPagetrue
    \else
      \KeepPagefalse
    \fi
 \fi
 \ifKeepPage
  \vbox\bgroup
 \fi
 \DisplayGroupNIC
 \ifnum\Mathcount>0\relax
   \else\everypar{\UseJadevskip{everypar}}\@@par
 \fi
 \FlowObjectSetup{1}%
 \openMulticols
}
\def\endDisplayGroup#1{\ifnum\@TableNest>0\else\@endDisplayGroup{#1}\fi}
\def\@endDisplayGroup#1{%
 \closeMulticols
 \ifnum\Mathcount>0\relax\else
  \@@par
 \fi
 \endDisplayGroupNIC
 \ifKeepPage
  \egroup
 \fi
 \endgroup
 \gdef\SavedSpan{0}%
%    \end{macrocode}
% This eats the parindent, and then restores an empty everypar;
% it is called by an implicit start of hmode. Contributed by Simon Pepping.
%    \begin{macrocode}
 \everypar{{\leavevmode\setbox\z@\lastbox \UseJadevskip{everypar}}%
   \everypar{\UseJadevskip {everypar}}%
 }
}
%    \end{macrocode}
% \subsection{Leader flow object class}
%    \begin{macrocode}
\newsavebox{\leaderbox}
\def\Leader#1{#1\begin{LRbox}{\leaderbox}}
\def\endLeader{\end{LRbox}\noindent\leaders\box\leaderbox\hfill}
%    \end{macrocode}
% \subsection{Line Field flow object class}
% Field align can be \emph{start}, \emph{end}, or \emph{center}.
%    \begin{macrocode}
\newsavebox\dssslbox
\def\LRbox#1{%
  \edef\reserved@a{%
    \endgroup
    \setbox#1\hbox{%
      \begingroup\aftergroup}%
        \def\noexpand\@currenvir{\@currenvir}}%
  \reserved@a
    \@endpefalse
    \color@setgroup\ignorespaces
}
\def\LRboxW#1#2{%
  \edef\reserved@a{%
    \endgroup
    \setbox#1\hbox to #2{%
      \begingroup\aftergroup}%
        \def\noexpand\@currenvir{\@currenvir}}%
  \reserved@a
    \@endpefalse
    \color@setgroup\ignorespaces
}
\def\endLRbox{\color@endgroup}
\let\endLRboxW\endLRbox
\def\LineField#1{\bgroup
 \SetupICs{#1}%
 \LineFieldNIC
 \FlowObjectSetup{0}%
 \begin{LRbox}{\dssslbox}%
}
\def\endLineField{%
 \end{LRbox}%
 \ifdim\wd\dssslbox>\FieldWidth\def\FieldWidth{\wd\dssslbox}\fi
  \makebox[\FieldWidth][\csname Fld@\FieldAlign\endcsname]{%
    \ifdim\PositionPointShift=\z@ 
        \usebox{\dssslbox}%
    \else
        \raisebox{\PositionPointShift}{\usebox{\dssslbox}}%
    \fi  
   \EndSetFont}%
 \endLineFieldNIC
 \endSetupICs
 \egroup
}
%
%    \end{macrocode}
% \subsection{Link flow object class (clause 12.6.28.3)}
%    \begin{macrocode}
\newif\ifLabelElements
\LabelElementstrue
\newif\ifNestedLink
\NestedLinkfalse
\def\LinkType{link}
\def\Link#1{%
  \begingroup
  \SetupICs{#1}%
  \ifx\Label\@empty\let\Label\Element\fi
%  \typeout{Made a Link at \the\inputlineno, to \Label}%
  \hyper@linkstart{\LinkType}{\Label}%
  \NestedLinktrue
}
\def\endLink{%
  \hyper@linkend
  \NestedLinkfalse
  \endSetupICs
  \endgroup
}
%    \end{macrocode}
% \subsection{Marginalia flow object class (clause 12.6.28.4)}
%    \begin{macrocode}
\def\Marginalia#1{#1\FlowObjectSetup{0}}
\def\endMarginalia{}
%    \end{macrocode}
% \subsection{Paragraph flow object class (clause 12.6.6)}
%\begin{longtable}{|P{.2\textwidth}|l|P{.25\textwidth}|l|l|}
%\hline
%\itshape
%Characteristic&
%\itshape Inh.&\itshape Values&\itshape Default&\itshape Dsssl-o\\
%\hline
%\endhead
%\hline
%\endfoot
%lines&I&wrap, asis, asis-wrap*, asis-truncate*, none&wrap&Partial\\
%\rowcolor{yellow}
%asis-truncate-char&I&\#f, \emph{char object}& &Ignore\\
%asis-wrap-char&I&\#f, \emph{char object}& &Ignore\\
%\rowcolor{yellow}
%asis-wrap-indent&I&\emph{length-spec}& &Ignore\\
%first-line-align&I&\#f, \emph{char object}& &Ignore\\
%\rowcolor{yellow}
%alignment-point-offset&I&\#f, \emph{number between 0 and 100}& &Ignore\\
%ignore-record-end?&I&\#f, \#t&\#f&Standard\\
%\rowcolor{yellow}
%expand-tabs?&I&\#f, \emph{integer greater than zero}&8&Standard\\
%line-spacing&I&\emph{length-spec}&12pt&Standard\\
%\rowcolor{yellow}
%line-spacing-priority&I&force, \emph{integer}&0&Default\\
%min-pre-line-spacing&I&\#f, \emph{length-spec}&\#f&Default\\
%\rowcolor{yellow}
%min-post-line-spacing&I&\#f, \emph{length-spec}&\#f&Default\\
%min-leading&I&\#f, \emph{length-spec}&\#f&Standard\\
%\rowcolor{yellow}
%first-line-start-indent&I&\emph{length-spec}&0m&Standard\\
%last-line-end-indent&I&\emph{length-spec}&0m&Default\\
%\rowcolor{yellow}
%hyphenation-char&I&\emph{character}& &Ignore\\
%hyphenation-method&I&\#f, \emph{public identifier}&\#f&Default\\
%\rowcolor{yellow}
%hyphenation-ladder-count&I&\#f, \emph{integer greater than zero}&\#f&Default\\
%hyphenation-remain-char-count&I&\emph{positive integer}&2&Ignore\\
%\rowcolor{yellow}
%hyphenation-push-char-count&I&\emph{positive integer}&2&Ignore\\
%hyphenation-keep&I&\#f, spread, page, column&\#f&Default\\
%\rowcolor{yellow}
%hyphenation-exceptions&I&\emph{list of strings}&empty list&Default\\
%line-breaking-method&I&\#f, \emph{public identifier}&\#f&Default\\
%\rowcolor{yellow}
%line-composition-method&I&\#f, \emph{public identifier}&\#f&Default\\
%implicit-bidi-method&I&\#f, \emph{public identifier}& &Default\\
%\rowcolor{yellow}
%glyph-alignment-mode&I&base, center, top, bottom, font&font&Default\\
%font-family-name&I&\#f, \emph{string}&iso-serif&Standard\\
%\rowcolor{yellow}
%font-weight&I&\#f, not-applicable*, ultra-light*, extra-light*, light, semi-light*, medium, semi-bold*, bold, extra-bold*, ultra-bold*&medium&Partial\\
%font-posture&I&\#f, not-applicable*, upright, oblique, back-slanted-oblique*, italic, back-slanted-italic*&upright&Partial\\
%\rowcolor{yellow}
%font-structure&I&\#f, not-applicable, solid, outline&solid&Default\\
%font-proportionate-width&I&\#f, not-applicable*, ultra-condensed*, extra-condensed*, condensed, semi-condensed*, medium, semi-expanded*, expanded, extra-expanded*, ultra-expanded*&medium&Partial\\
%\rowcolor{yellow}
%font-name&I&\#f, \emph{public identifier}& &Standard\\
%font-size&I&\emph{length}&10pt&Standard\\
%\rowcolor{yellow}
%numbered-lines?&I&\#f, \#t&\#t&Ignore\\
%line-number&I&\#f, \emph{unlabeled sosofo}& &Ignore\\
%\rowcolor{yellow}
%line-number-side&I&start, end, spread-inside, spread-outside, page-inside, page-outside& &Ignore\\
%line-number-sep&I&\emph{length-spec}& &Ignore\\
%\rowcolor{yellow}
%quadding&I&start, end, spread-inside*, spread-outside*, page-inside*, page-outside*, center, justify*&start&Partial\\
%last-line-quadding&I&relative, start, end, spread-inside, spread-outside, page-inside, page-outside, center, justify&relative&Default\\
%\rowcolor{yellow}
%last-line-justify-limit&I&\emph{length-spec}&0&Ignore\\
%justify-glyph-space-max-add&I&\emph{length-spec}&0m&Ignore\\
%\rowcolor{yellow}
%justify-glyph-space-max-remove&I&\emph{length-spec}&0m&Ignore\\
%hanging-punct?&I&\#f, \#t&\#f&Default\\
%\rowcolor{yellow}
%widow-count&I&\emph{positive integer}&2&Default\\
%orphan-count&I&\emph{positive integer}&2&Default\\
%\rowcolor{yellow}
%language&I&\#f, \emph{ISO 639 language code}&\#f&Standard\\
%country&I&\#f, \emph{ISO 3166 country code}&\#f&Standard\\
%\rowcolor{yellow}
%position-preference&N&\#f, top, bottom&\#f&Ignore\\
%writing-mode&I&left-to-right, right-to-left, top-to-bottom&left-to-right&Default\\
%\rowcolor{yellow}
%start-indent&I&\emph{length-spec}&0m&Standard\\
%end-indent&I&\emph{length-spec}&0m&Standard\\
%\rowcolor{yellow}
%span&I&\emph{integer greater than zero}&1&Default\\
%span-weak?&I&\#f, \#t&\#f&Default\\
%\rowcolor{yellow}
%space-before&N&\emph{display space}&no space before &Standard\\
%space-after&N&\emph{display space}&no space after &Standard\\
%\rowcolor{yellow}
%keep-with-previous?&N&\#f, \#t&\#f&Standard\\
%keep-with-next?&N&\#f, \#t&\#f&Standard\\
%\rowcolor{yellow}
%break-before&N&\#f, page, page-region*, column*, column-set*&\#f&Partial\\
%break-after&N&\#f, page, page-region*, column*, column-set*&\#f&Partial\\
%\rowcolor{yellow}
%keep&N&\#f, page, column-set*, column*, \#t*&\#f&Partial\\
%may-violate-keep-before?&N&\#f, \#t&\#f&Default\\
%\rowcolor{yellow}
%may-violate-keep-after?&N&\#f, \#t&\#f&Default\\
%\end{longtable}
%    \begin{macrocode}
\newcount\@TablePars
\newcount\@ParNest
\newcount\@TableNest
\def\Par#1{%
%    \end{macrocode}
% We need to end the current paragraph, with its current line spacing,
% hyphenation, what have you, before anything is done.
% This could have horrible repercussions, but something like
% it is necessary.
%    \begin{macrocode}
 \everypar{\UseJadevskip{everypar}}\@@par
 \closeOrOpenMulticols{#1}
 \begingroup
 \SetupICs{#1}%
 \ParagraphNIC
 \FlowObjectSetup{1}%
 \openMulticols
 \paraSetup%
}
\def\TablePar#1{%
 \begingroup
 \let\@action\relax
 \global\advance\@ParNest by 1
 \ifnum\@ParNest=1
     \ifnum\@TablePars>0%
       \def\@action{\@@par}%\@arraycr}%
     \fi
  \else
      \ifnum\@ParNest>1
        \ifnum\@TablePars>0\def\@action{\par}\fi
      \fi
 \fi
 \@action
 \SetupICs{#1}%
 \csname startQ@\Quadding\endcsname
 \FlowObjectSetup{1}%
 \paraSetup%
}
\def\FootnotePar#1{%
 \begingroup
 \let\@action\relax
 \global\advance\@ParNest by 1
 \ifnum\@ParNest=1
     \ifnum\@FootnotePars>0%
       \def\@action{\@@par}%
     \fi
  \else
      \ifnum\@ParNest>1
        \ifnum\@FootnotePars>0\def\@action{\par}\fi
      \fi
 \fi
 \@action
 \SetupICs{#1}%
 \csname startQ@\Quadding\endcsname
 \FlowObjectSetup{1}%
 \paraSetup%
}
\def\HeadPar#1{\Par{#1}}
\setcounter{tocdepth}{99}
\def\@mysect#1#2#3{%
	\edef\@thishlabel{\csname theH#1\endcsname}%
	\pdfbookmark[#2]{#3}{\@thishlabel}%
}
%    \end{macrocode}
% From J.-M. Kubek, for PDF bookmarks
%    \begin{macrocode}
\newcounter {headingOne}
\newcounter {headingTwo}[headingOne]
\newcounter {headingThree}[headingTwo]
\newcounter {headingFour}[headingThree]
\newcounter {headingFive}[headingFour]
\def\theHheadingOne{\arabic{headingOne}}
\def\theHheadingTwo{\theHheadingOne.\arabic{headingTwo}}
\def\theHheadingThree{\theHheadingTwo.\arabic{headingThree}}
\def\theHheadingFour{\theHheadingThree.\arabic{headingFour}}
\def\theHheadingFive{\theHheadingFour.\arabic{headingFive}}
\def\endHeadPar#1{%
 \ifnum\@TableNest>0
   \ifnum\@ParNest>1
        \ifnum\@TablePars>0\box\@@par\fi
   \fi
   \csname endQ@\Quadding\endcsname\null
   \global\advance\@TablePars by 1
   \global\advance\@ParNest by -1
 \else
   \ifnum\HeadingLevel>0%
        \ifnum\HeadingLevel=1%
                \addtocounter{headingOne}{1}%
                \@mysect{headingOne}{0}{\HeadingText}%
        \else\ifnum\HeadingLevel=2%
                \addtocounter{headingTwo}{1}%
                \@mysect{headingTwo}{1}{\HeadingText}%
        \else\ifnum\HeadingLevel=3%
                \addtocounter{headingThree}{1}%
                \@mysect{headingThree}{2}{\HeadingText}%
        \else\ifnum\HeadingLevel=4%
                \addtocounter{headingFour}{1}%
                \@mysect{headingFour}{3}{\HeadingText}%
        \else\ifnum\HeadingLevel=5%
                \addtocounter{headingFive}{1}%
                \@mysect{headingFive}{4}{\HeadingText}%
        \fi
        \fi
        \fi
        \fi
        \fi
   \fi
% SP
  \closeMulticols
  \@@par
  \endParagraphNIC
 \fi
 \endSetupICs
 \endgroup
%    \end{macrocode}
% This eats the parindent, and then restores an empty everypar;
% it is called by an implicit start of hmode. Contributed by Simon Pepping.
%    \begin{macrocode}
 \everypar{{\leavevmode\setbox\z@\lastbox \UseJadevskip{everypar}}%
   \everypar{\UseJadevskip {everypar}}%
 }
}
\def\endPar#1{%
  \ifnum\@TableNest>0
   \let\@action\relax
   \ifnum\@ParNest>1
        \ifnum\@TablePars>0\def\@action{\@@par}\fi
   \fi
   \@action
   \csname endQ@\Quadding\endcsname\null
   \global\advance\@TablePars by 1
   \global\advance\@ParNest by -1
 \else
% SP
  \closeMulticols
  \@@par
  \endParagraphNIC
 \fi
 \endSetupICs
 \endgroup
%    \end{macrocode}
% This eats the parindent, and then restores an empty everypar;
% it is called by an implicit start of hmode. Contributed by Simon Pepping.
%    \begin{macrocode}
 \everypar{{\leavevmode\setbox\z@\lastbox \UseJadevskip{everypar}}%
   \everypar{\UseJadevskip {everypar}}%
 }
}
\def\endFootnotePar#1{%
 \let\@action\relax
 \ifnum\@ParNest>1
      \ifnum\@FootnotePars>0\def\@action{\@@par}\fi
 \fi
 \@action
 \csname endQ@\Quadding\endcsname\null
 \global\advance\@FootnotePars by 1
 \global\advance\@ParNest by -1
 \endSetupICs
 \endgroup
 \everypar{{\leavevmode\setbox\z@\lastbox \UseJadevskip{everypar}}%
   \everypar{\UseJadevskip {everypar}}%
 }
}
%    \end{macrocode}
% \subsection{Score flow object class (clause 12.6.17)}
% No support for: score-spaces, color or 
% line-thickness yet.
%
%    \begin{macrocode}
\def\Scoreafter{\uline}
\def\Scorethrough{\sout}
\def\Scorebefore{}
\def\Score#1#2\endScore{#1%
\csname Score\ScoreType\endcsname{#2}%
}
%    \end{macrocode}
% \subsection{Scroll flow object class (clause 12.6.28.1)}
%    \begin{macrocode}
\def\Scroll{\SpS}
\def\endScroll{\endSpS}
%    \end{macrocode}
% \subsection{Sequence flow object class (clause 12.6.1)}
% We have to allow for the document starting with a
% sequence, not a simple page sequence, so we check if the
% `begin document' work has been done.
%    \begin{macrocode}
\newdimen\CurPosShift\CurPosShift\z@
\newif\if@Raised
\def\Seq#1{%
 \ifInSpS\begingroup\fi
 \SetupICs{#1}%
 \ifx \@nodocument\relax
 \else
   \typeout{Jade begin document sequence at \the\inputlineno}%
   \JadeSetPage
   \JadeBeginDocument
   \ifnum\PageNColumns>1
     \columnsep\PageColumnSep
    \ifnum\PageBalanceColumns>0
       \begin{multicols}{\PageNColumns}
    \else
       % begin\{multicols*}{\PageNColumns}
       \let\balance@columns@out
         \multi@column@out
       \begin{multicols}{\PageNColumns}
    \fi
   \fi
 \fi
 \FlowObjectSetup{0}%
 \@Raisedfalse
 \ifdim\PositionPointShift=\CurPosShift
 \else
   \@tempdima\PositionPointShift
   \ifdim\PositionPointShift>\CurPosShift
     \advance\@tempdima by -\CurPosShift
   \else
     \advance\@tempdima by \CurPosShift
   \fi
   \CurPosShift\PositionPointShift
   \@Raisedtrue
 \fi
 \ifnum\@TableNest>0\else\if@Raised\leavevmode\raise\@tempdima\hbox\bgroup\fi\fi
}
\def\endSeq{%
 \ifnum\@TableNest>0\else\if@Raised\egroup\fi\fi
 \EndSetFont
 \endSetupICs
 \@Raisedfalse
 \ifInSpS\endgroup\fi
}
%    \end{macrocode}
% \subsection{Side Line flow object class}
%    \begin{macrocode}
\def\SideLine#1{#1}
\def\endSideLine{}
%    \end{macrocode}
% \subsection{Simple Page Sequence flow object class (clause 12.6.3)}
% Look out for the canonical 1in margins in TeX systems!
%    \begin{macrocode}
\def\JadeSetPage{%
 \ifnum\PageNumberRestart=1
   \global\c@page \@ne
 \fi
 \ifnum\PageTwoSide=0
   \global\@twosidefalse
 \else
   \global\@twosidetrue
 \fi
 \oddsidemargin\LeftMargin
 \ifnum\PageTwoSide=0
    \evensidemargin\LeftMargin
 \else
    \evensidemargin\RightMargin
 \fi
 \topmargin\HeaderMargin
 \headheight\LineSpacing
 \headsep\TopMargin
 \advance\headsep by -\HeaderMargin
 \advance\headsep by -\LineSpacing
 \footskip\BottomMargin
 \advance\footskip by -\FooterMargin
 \paperwidth\PageWidth
 \paperheight\PageHeight
 \textheight\paperheight
 \textwidth\paperwidth
 \advance\textheight by -\TopMargin
 \advance\textheight by -\BottomMargin
 \advance\textwidth by -\LeftMargin
 \advance\textwidth by -\RightMargin
 \ifx\pdfimage\@undefined
  \else
   \global\pdfpagewidth\paperwidth
   \global\pdfpageheight\paperheight
 \fi
 \@colht\textheight
 \@colroom\textheight 
 \vsize\textheight
 \headwidth\textwidth
 \linewidth\textwidth
 \columnwidth\textwidth
 \hsize\columnwidth \linewidth\hsize
 \headheight12pt
 \let\pageFontSize\fSize
 \let\pageLineSpacing\LineSpacing
 \let\pageFontPosture\fPosture
 \let\pageFontProportionateWidth\fProportionateWidth
 \let\pageFontWeight\fWeight
 \let\pagefFamName\fFamName
 \arraycolsep\GridColumnSep
}
% initialize it
\JadeSetPage
\def\JadeBeginDocument{%
%    \end{macrocode}
% We borrow most of the code of |\begin{document}|; we do not
% want it all, as it interposes an unwanted group.
%    \begin{macrocode}
  \@clubpenalty\clubpenalty
  \begingroup\@floatplacement\@dblfloatplacement
    \makeatletter\let\@writefile\@gobbletwo
    \global \let \@multiplelabels \relax
    \@input{\jobname.aux}%
  \endgroup
  \immediate\openout\@mainaux\jobname.aux
  \immediate\write\@mainaux{\relax}%
  \process@table
  \let\glb@currsize\@empty  %% Force math initialisation.
  \normalsize
  \everypar{\UseJadevskip{everypar}}%
  \@noskipsecfalse
  \let \@refundefined \relax
  \let\AtBeginDocument\@firstofone
  \ifdim\topskip<1sp\global\topskip 1sp\relax\fi
  \global\@maxdepth\maxdepth
  \@expl@sys@load@backend@@
  \@kernel@before@begindocument
  \UseOneTimeHook{begindocument}%
  \@kernel@after@begindocument
  \global\let\@begindocumenthook\@undefined
  \global\let\@filelist\relax
  \global\let\@addtofilelist\@gobble
  \gdef\do##1{\global\let ##1\@notprerr}%
  \@preamblecmds
  \global\let \@nodocument \relax
  \global\let\do\noexpand
  \ignorespaces
}
\newif\ifInSpS
\def\SpS#1{%
 \InSpStrue
 \DoFOBSettrue
 \SetupICs{#1}%
 \gdef\thepage{\csname PageNumbering@\PageNumberFormat\endcsname\c@page}%
%    \end{macrocode}
% The basic page setup needs to be delayed to this point, otherwise
% the first page will be `frozen' in the format file. So check
% here whether we are at the start of the document, and if so trigger
% \LaTeX's |\begin{document}|. This is a pain, delaying the start of
% the document. It means that documents which don't have a simple-page-
% sequence at the start will fail.
%    \begin{macrocode}
 \JadeSetPage
 \ifx \@nodocument\relax
 \else
   \JadeBeginDocument
 \fi
%    \end{macrocode}
% Grouping is turned on now we are inside a simple page sequence.
% but is itself inside a group of the page sequence. 
% The problem is that if we start a Sequence, then start a
% PageSequence, the |\begin{document}| occurs inside a group,
% and so gets in a mess. If we turn off grouping
% outside simple page sequences, any changes become global!
% Does it make sense to have material not in a page
% sequence, in TeX? Sadly, yes. The
% document will still \emph{start} in non-group mode.
%    \begin{macrocode}
 \closeOrOpenMulticols{#1}%
 \DisplayNIC
 \openMulticols
 \FlowObjectSetup{0}%
}
\def\endSpS{%
 \DoFOBSetfalse
 \ifnum\PageNColumns>1\relax
   \ifnum\col@number>1\relax % in multicols
     \ifnum\PageBalanceColumns>0
       \end{multicols}
     \else
       % \endmulticols*
       \vfill\end{multicols}
     \fi
   \fi
 \fi
 \if@twoside
   \ifnum\TwoSideStartOnRight=1
      \cleardoublepage
   \else
      \clearpage
   \fi
 \else
   \clearpage
 \fi
 \fancyhf{}%
 \endDisplayNIC
 \let\FancyHook\@empty
 \let\FancyFirstHook\@empty
 \global\let\@sAfterMin\saMin
 \global\let\@sAfterMax\saMax
 \global\let\@sAfterNom\saNom
 \global\let\@sAfterPriority\saPriority
 \InSpSfalse
}
%    \end{macrocode}
% \subsection{Headers and footers}
%    \begin{macrocode}
\def\SpSCenterFooter#1{\Setfoot[C]{#1}{CenterFooter}}
\def\SpSCenterHeader#1{\Sethead[C]{#1}{CenterHeader}}
\def\SpSLeftFooter#1{\Setfoot[L]{#1}{LeftFooter}}
\def\SpSLeftHeader#1{\Sethead[L]{#1}{LeftHeader}}
\def\SpSRightFooter#1{\Setfoot[R]{#1}{RightFooter}}
\def\SpSRightHeader#1{\Sethead[R]{#1}{RightHeader}}
%
\def\SpSOtherBackCenterFooter#1{\Setfoot[CE]{#1}{OtherBackCenterFooter}}
\def\SpSOtherBackLeftFooter#1{\Setfoot[LE]{#1}{OtherBackLeftFooter}}
\def\SpSOtherBackRightFooter#1{\Setfoot[RE]{#1}{OtherBackRightFooter}}
\def\SpSOtherBackRightHeader#1{\Sethead[RE]{#1}{OtherBackRightHeader}}
\def\SpSOtherBackCenterHeader#1{\Sethead[CE]{#1}{OtherBackCenterHeader}}
\def\SpSOtherBackLeftHeader#1{\Sethead[LE]{#1}{OtherBackLeftHeader}}
%
\def\SpSOtherFrontCenterFooter#1{\Setfoot[CO]{#1}{OtherFrontCenterFooter}}
\def\SpSOtherFrontLeftFooter#1{\Setfoot[LO]{#1}{OtherFrontLeftFooter}}
\def\SpSOtherFrontRightFooter#1{\Setfoot[RO]{#1}{OtherFrontRightFooter}}
\def\SpSOtherFrontRightHeader#1{\Sethead[RO]{#1}{OtherFrontRightHeader}}
\def\SpSOtherFrontCenterHeader#1{\Sethead[CO]{#1}{OtherFrontCenterHeader}}
\def\SpSOtherFrontLeftHeader#1{\Sethead[LO]{#1}{OtherFrontLeftHeader}}
%
\def\SpSFirstBackCenterFooter#1{\SetFirstfoot[CE]{#1}{FirstBackCenterFooter}}
\def\SpSFirstBackLeftFooter#1{\SetFirstfoot[LE]{#1}{FirstBackLeftFooter}}
\def\SpSFirstBackRightFooter#1{\SetFirstfoot[RE]{#1}{FirstBackRightFooter}}
\def\SpSFirstBackCenterHeader#1{\SetFirsthead[CE]{#1}{FirstBackCenterHeader}}
\def\SpSFirstBackLeftHeader#1{\SetFirsthead[LE]{#1}{FirstBackLeftHeader}}
\def\SpSFirstBackRightHeader#1{\SetFirsthead[RE]{#1}{FirstBackRightHeader}}

\def\SpSFirstFrontCenterFooter#1{\SetFirstfoot[CO]{#1}{FirstFrontCenterFooter}}
\def\SpSFirstFrontLeftFooter#1{\SetFirstfoot[LO]{#1}{FirstFrontLeftFooter}}
\def\SpSFirstFrontRightFooter#1{\SetFirstfoot[RO]{#1}{FirstFrontRightFooter}}
\def\SpSFirstFrontCenterHeader#1{\SetFirsthead[CO]{#1}{FirstFrontCenterHeader}}
\def\SpSFirstFrontLeftHeader#1{\SetFirsthead[LO]{#1}{FirstFrontLeftHeader}}
\def\SpSFirstFrontRightHeader#1{%
 \SetFirsthead[RO]{#1}{FirstFrontRightHeader}%
%    \end{macrocode}
% This one comes last, so now set up page styles. YUCK!
%    \begin{macrocode}
 \pagestyle{jadeother}%
 \thispagestyle{jadefirst}%
}
\fancypagestyle{jadeother}{\fancyhf{}\FancyHook}%
\fancypagestyle{jadefirst}{\fancyhf{}\FancyFirstHook}%
%
\def\Sethead[#1]#2#3{%
 \ifx\\#2\\\relax\else
  \g@addto@macro\FancyHook{\fancyhead[#1]{\setnormal#2}}%
 \fi
}
\def\Setfoot[#1]#2#3{%
 \ifx\\#2\\\relax\else
  \g@addto@macro\FancyHook{\fancyfoot[#1]{\setnormal#2}}%
 \fi
}
\def\SetFirsthead[#1]#2#3{%
 \ifx\\#2\\\relax\else
  \g@addto@macro\FancyFirstHook{\fancyhead[#1]{\setnormal#2}}%
 \fi
}
\def\SetFirstfoot[#1]#2#3{%
 \ifx\\#2\\\relax\else
 \g@addto@macro\FancyFirstHook{\fancyfoot[#1]{\setnormal#2}}%
\fi
}
\def\FancyHook{}
\def\FancyFirstHook{}
\pagestyle{jadeother}
%    \end{macrocode}
% \subsection{Table flow object class}
%    \begin{macrocode}
\def\Table#1{\TableNIC\UseJadevskip{table}\SetupICs{#1}}
\def\endTable{\endSetupICs\endTableNIC}
\def\@full{full}
\LTpre=\z@
\LTpost=\z@
\newenvironment{TeXTable}[3]{% width, ncolumns, template
 \global\advance\@TableNest by 1
 \ifx\TableWidth\@full\def\TableWidth{\hsize}\fi
 \FlowObjectSetup{0}%
 \let\Node\@gobble
 \let\endNode\@gobble
 \let\Par\TablePar
 \setlength\LTleft\StartIndent
 \setlength\LTright\fill
  \ifnum\PageNColumns>1
     \tabular{#3}%
  \else
    \ifnum\@TableNest>1
     \tabular{#3}%
    \else
     \longtable{#3}%
    \fi
  \fi
}{%
  \ifnum\PageNColumns>1
    \endtabular
  \else
    \ifnum\@TableNest>1
     \endtabular
    \else
     \endlongtable
    \fi
  \fi
  \ifvoid\@mpfootins\else
      \vskip\skip\@mpfootins
      \normalcolor
      \unvbox\@mpfootins
    \fi
   \global\advance\@TableNest by -1
}
%    \end{macrocode}
% \subsection{Table Cell flow object class}
%    \begin{macrocode}
\def\Hline{\hline}
\def\Cline{\cline}
\let\TeXTableCell=\multicolumn
\def\TableCell#1{%
 \TableCellNIC%
 \SetupICs{#1}%
 \FlowObjectSetup{0}%
 \rule[2ex]{0pt}{\CellBeforeRowMargin}%
 \global\@TablePars0%
 \ifnum\NRowsSpanned>1% Row spanning
  \JadeRowSpan%
 \else
   \ifnum\TeXRowSpanFiller>0%
    \JadeRowSpanFiller
   \fi
 \fi%
}
\def\endTableCell#1{%
 \ifnum\NRowsSpanned>1%
  \endJadeRowSpan%
 \fi
 \rule[-\CellAfterRowMargin]{0pt}{0pt}%
 \endSetupICs
 \endTableCellNIC
}
%    \end{macrocode}
% \subsection{Table Part flow object class}
%    \begin{macrocode}
\def\TablePart#1{#1\FlowObjectSetup{0}}
\def\TablePartHeader#1{}
\def\TablePartFooter#1{}
\def\endTablePartFooter#1{}
\def\endTablePartHeader#1{%
 \ifnum\TablePartOmitMiddleHeader=1
  \endfirsthead
 \else
  \endhead
 \fi}
\def\endTablePart{}
%    \end{macrocode}
% \subsection{Table Row flow object class}
%    \begin{macrocode}
\def\TableRow#1{#1}
\def\endTableRow#1{\\}
%    \end{macrocode}
%
% \subsection{Character mapping}
%    \begin{macrocode}
\def\Character#1{%
   \SetupICs{}%
   \ifnum#1<255\char#1\else
    \expandafter\ifx\csname !#1\endcsname\relax
     <#1>\typeout{Warning: Unknown character #1, at \the\inputlineno}%
    \else\csname !#1\endcsname\fi
   \fi
   \ifdim\EscapementSpaceAfterNom=\z@
   \else
     \@tempdima\EscapementSpaceAfterNom
     \advance\@tempdima by -\EscapementSpaceAfterMin
     \@tempdimb\EscapementSpaceAfterNom
     \advance\@tempdimb by -\EscapementSpaceAfterMax
     \hskip\EscapementSpaceAfterNom plus \@tempdimb minus \@tempdima%
   \fi
   \endSetupICs{}%
}
%    \end{macrocode}
%\subsection{DisplayNIC}
%    \begin{macrocode}
\newcount\DisplayStack
\newcount\LastDisplayStack
\newif\ifBreakMe
\newif\ifJadeskipready
\Jadeskipreadyfalse
\newskip\Jadeskip
\newskip\Jadelastskip
\newskip\jadetempskip
\BreakMefalse
\DisplayStack0
\LastDisplayStack-1
\let\@sBeforeMin\sbMin
\let\@sBeforeMax\sbMax
\let\@sBeforeNom\sbNom
\let\@sBeforePriority\sbPriority
\def\@force{force}
\def\Jadevskip#1#2{\global\Jadeskipreadytrue\global\Jadeskip#1\relax}
\def\UseJadevskip#1{%
 \global\Jadeskipreadyfalse
 \ifdim\Jadeskip=\z@\else
  \ifvmode
    \vskip\Jadeskip\global\Jadeskip\z@
  \else
    \setbox\z@\lastbox\par
    \vskip\Jadeskip\global\Jadeskip\z@
    {\everypar{}\noindent\box\z@}%
  \fi
 \fi
}
\def\QueryPageBreak{%
\ifBreakMe
 \ifvmode
    \penalty \@M
 \else
    \@bsphack
    \vadjust{\penalty \@M}%
    \@esphack
 \fi
\else
 \ifnum\KeepWithNext=1
   \penalty-600
 \else
   \penalty \z@
 \fi
\fi
}
\def\DisplayNIC{%
 \advance\DisplayStack by 1
 \QueryPageBreak
%    \end{macrocode}
% What we are trying to identify is a display which starts 
% inside another display.
%    \begin{macrocode}
% \ifnum\DisplayStack>\LastDisplayStack
%   \def\sbPriority{force}%
%   \def\LastSpaceBeforePriority{0}%
% \fi
 \let\@sAfterMin\saMin
 \let\@sAfterMax\saMax
 \let\@sAfterNom\saNom
 \let\@sAfterPriority\saPriority
%
 \begingroup
 \ifx\BreakBefore\relax\else
  \csname Break@\BreakBefore\endcsname
 \fi
 \CurrentSpaceMin=\sbMin
 \CurrentSpaceNom=\sbNom
 \CurrentSpaceMax=\sbMax
%
 \edef\CurrentSpacePriority{\sbPriority}%
%    \end{macrocode}
% See if either display space priority is set to `force';
% if so, use that set of values;
% if both priorities are `force', add values together
%    \begin{macrocode}
\ifx\sbPriority\@force
  \ifx\LastSpacePriority\@force
   \advance\CurrentSpaceMin by \LastSpaceMin
   \advance\CurrentSpaceNom by \LastSpaceNom
   \advance\CurrentSpaceMax by \LastSpaceMax
  \fi
\else
  \ifx\LastSpacePriority\@force
    \CurrentSpaceMin=\LastSpaceMin
    \CurrentSpaceNom=\LastSpaceNom
    \CurrentSpaceMax=\LastSpaceMax
%    \end{macrocode}
% See if the priority of either set is higher, if so use that
%    \begin{macrocode}
  \else
    \ifnum\CurrentSpacePriority>\LastSpacePriority 
      \relax
    \else
       \ifnum\LastSpacePriority>\CurrentSpacePriority 
         \CurrentSpaceMin=\LastSpaceMin
         \CurrentSpaceNom=\LastSpaceNom
         \CurrentSpaceMax=\LastSpaceMax
       \else
%    \end{macrocode}
% So the priorities are equal; take the one with the larger Nom
%    \begin{macrocode}
         \ifdim\CurrentSpaceNom>\LastSpaceNom
            \relax
         \else
            \ifdim\LastSpaceNom>\CurrentSpaceNom
              \CurrentSpaceMin=\LastSpaceMin
              \CurrentSpaceNom=\LastSpaceNom
              \CurrentSpaceMax=\LastSpaceMax
            \else
%    \end{macrocode}
% Dang, the Noms are equal. Take the larger minimum, and smaller
% maximum
%    \begin{macrocode}
               \ifdim\LastSpaceMax<\CurrentSpaceMax
                 \CurrentSpaceMax\LastSpaceMax
               \fi
               \ifdim\LastSpaceMin>\CurrentSpaceMin
                  \CurrentSpaceMin\LastSpaceMin
               \fi
            \fi
         \fi
       \fi
    \fi
  \fi
 \fi
 \@tempdima\CurrentSpaceNom 
 \advance\@tempdima by -\CurrentSpaceMin
 \@tempdimb\CurrentSpaceNom 
 \advance\@tempdimb by -\CurrentSpaceMax
 \QueryPageBreak
 \jadetempskip=\CurrentSpaceNom plus \@tempdimb minus \@tempdima
 \Jadevskip{\the\jadetempskip}{startDisplayNIC}%
 \let\Keep\relax
 \let\BreakBefore\relax
 \let\BreakAfter\relax
 \let\KeepWithPrevious\relax
 \let\MayViolateKeepBefore\relax
 \let\MayViolateKeepAfter\relax
 \def\sbMin{\z@}%
 \def\sbMax{\z@}%
 \def\sbNom{\z@}%
 \def\sbPriority{0}%
 \def\saMin{\z@}%
 \def\saMax{\z@}%
 \def\saNom{\z@}%
 \def\saPriority{0}%
 \ifdim\Jadeskip=\z@\else\the\everypar\fi
}
\def\endDisplayNIC{%
 \ifnum\KeepWithNext=1
   \penalty\@M\global\BreakMetrue\else\global\BreakMefalse
 \fi
 \ifdim\Jadeskip=\z@\else\the\everypar\fi
 \endgroup
 \global\LastSpaceNom=\@sAfterNom
 \global\LastSpaceMax=\@sAfterMax
 \global\LastSpaceMin=\@sAfterMin
 \global\edef\LastSpacePriority{\@sAfterPriority}%
 \@tempdima\@sAfterNom 
 \advance\@tempdima by -\@sAfterMin
 \@tempdimb\@sAfterNom 
 \advance\@tempdimb by -\@sAfterMax
 \jadetempskip=\@sAfterNom plus \@tempdimb minus \@tempdima
 \Jadevskip{\the\jadetempskip}{endDIsplayNIC}%
 \global\LastDisplayStack=\DisplayStack
 \advance\DisplayStack by -1
}
\def\paraSetup{%
 \rightskip\EndIndent
 \leftskip\StartIndent
 \csname JQ@\Quadding\endcsname
 \csname L@\Language\endcsname
 \ifx\FirstLineStartIndent\@empty\relax
   \else\parindent\FirstLineStartIndent
 \fi 
 \ifx\InputWhitespaceTreatment\@empty\relax
   \else\csname White@\InputWhitespaceTreatment\endcsname
 \fi
 \ifx\Lines\@empty\relax
   \else\csname Lines@\Lines\endcsname
 \fi
}
%    \end{macrocode}
%\section{Setup of non-inherited characteristics}
%\subsection{Inline}
%    \begin{macrocode}
\def\InlineNIC{%
 \begingroup
}
\def\endInlineNIC{%
 \let\BreakBeforePriority\relax
 \let\BreakAfterPriority\relax
 \endgroup
}
%    \end{macrocode}
%\subsection{Display}
%    \begin{macrocode}
\def\DisplayGroupNIC{%
 \DisplayNIC 
}
\def\endDisplayGroupNIC{%
 \endDisplayNIC 
}
%    \end{macrocode}
%\subsection{Graphics, boxes, leaders}
%    \begin{macrocode}
\def\ExternalGraphicNIC{%
 \InlineNIC
}
\def\endExternalGraphicNIC{%
 \endInlineNIC
}
\def\BoxNIC{%
 \DisplayNIC
 \InlineNIC 
}
\def\endBoxNIC{%
 \endInlineNIC 
 \endDisplayNIC
}
\def\RuleNIC{%
 \DisplayNIC
 \InlineNIC 
}
\def\endRuleNIC{%
 \endInlineNIC 
 \endDisplayNIC
}
\def\LeaderNIC{%
 \InlineNIC 
}
\def\LeaderNIC{%
 \InlineNIC 
}
%    \end{macrocode}
%\subsection{Tables}
%    \begin{macrocode}
\let\TableNIC\DisplayNIC
\let\endTableNIC\endDisplayNIC
\def\TableColumnNIC{}
\def\endTableColumnNIC{}
\def\TableCellNIC{%
 \begingroup%
 \def\NColumnsSpanned{1}%
 \def\NRowsSpanned{1}%
 \def\ColumnIndex{0}%
 \def\TeXRowSpanFiller{0}%
}
\def\endTableCellNIC{\endgroup}
\def\GridNIC{}
\def\endGridNIC{}
\def\GridCellNIC{}
\def\endGridCellNIC{}
\let\ParagraphNIC\DisplayNIC
\let\LineFieldNIC\InlineNIC
\let\endParagraphNIC\endDisplayNIC
\let\endLineFieldNIC\endInlineNIC
%    \end{macrocode}
%\section{Setup of inherited characteristics}
% A problem arises here is `whitespacetreatment' is set to
% `preserve', as this makes spaces active. If then a font name
% like `Times Roman' is processed, the space in the middle
% is processed! We replace spaces in font family names with `-'
% in TeXFOTBuilder.cxx
%    \begin{macrocode}
\newif\ifNeedsSelect
\chardef\nonactive=10
\def\SetupICs#1{#1%
\let\current@f@series\f@series
\let\current@f@shape\f@shape
\let\current@f@family\f@family
\let\current@f@size\f@size
\edef\LaTeXshape{\csname Width@\fProportionateWidth\endcsname
      \csname Weight@\fWeight\endcsname}%
\ifx\LaTeXshape\@empty\def\LaTeXshape{m}\fi
\edef\f@series{\LaTeXshape}%
\edef\f@shape{\csname Posture@\fPosture\endcsname}%
\IfFileExists{t1\fFamName.fd}
  {\def\f@family{\fFamName}}
  {\edef\f@family{%
    \expandafter\ifx\csname Family@\fFamName\endcsname\relax
     \csname Family@\DefaultfFamName\endcsname
    \else
     \csname Family@\fFamName\endcsname
    \fi}}%
\set@fontsize\baselinestretch{\fSize}{\LineSpacing}%
%\NeedsSelecttrue
%\ifx\f@size\current@f@size\relax\NeedsSelectfalse\fi
%\ifx\f@family\current@f@family\relax\NeedsSelectfalse\fi
%\ifx\f@shape\current@f@shape\relax\NeedsSelectfalse\fi
%\ifx\f@series\current@f@series\relax\NeedsSelectfalse\fi
%\ifNeedsSelect
  \selectfont
%\fi
\ifx\ColorRed\@empty\relax\else
   \RGBColor{\ColorRed}{\ColorGreen}{\ColorBlue}%
\fi
}
\def\endSetupICs{}
%    \end{macrocode}
% |\FlowObjectSetup| should be called at the beginning of every object
% that can be meaningfully labelled. It is this that creates an anchor,
% not the |\Node|, to avoid duplicates and wastage.
%
% Because labelling writes to an external file, or does a |\special|,
% it adds a whatsit to the main vertical list. This wrecks the
% |\vskip-\lastskip| which every paragraph or display does. Bad news! 
% Labelling when we are in a Link element is not a good thing. 
% It messes up the references.
%    \begin{macrocode}
\def\@madelink{ }
\newif\ifDoFOBSet
\DoFOBSettrue
\def\FlowObjectSetup#1{%
\ifDoFOBSet
  \ifLabelElements
     \ifx\Label\@empty\let\Label\Element\fi
  \fi
  \ifx\Label\@empty\else
      \expandafter\ifx\csname x@\Label\endcsname\@madelink
      \else
       \bgroup
         \ifNestedLink
         \else
           \hyper@anchorstart{\Label}\hyper@anchorend
           \PageLabel{\Label}%
           \expandafter\gdef\csname x@\Label\endcsname{ }%
         \fi
       \egroup
       \let\Label\@empty
       \let\Element\@empty
      \fi
  \fi
\fi
}
%    \end{macrocode}
% \section{Non-standard flow objects}
%    \begin{macrocode}
\def\fps@figure{htbp}	% prefer figures to be placed here
\def\ftype@figure{1}
\def\PageFloat#1{\SetupICs{#1}%
  \ifnum\Span>0
   \def\Span{0}%
   \typeout{JadeTeX WARNING: specifying column spans for floats not supported}%
  \fi
  \FlowObjectSetup{0}%
  \@dblfloat{figure}[\placement]%
}
\def\endPageFloat{\end@dblfloat}
\def\Footnotesize{\@setfontsize\small\@ixpt{11}}
\newcount\@FootnotePars
\skip\@mpfootins = \skip\footins
\long\def\PageFootnote#1#2{#1%
\ifnum\@TableNest>0
  \global\setbox\@mpfootins\vbox{%
    \unvbox\@mpfootins
    \reset@font\Footnotesize
    \hsize\TableWidth
    \leftskip\StartIndent
    \@parboxrestore
    \color@begingroup
      \@makefntext{%
        \rule\z@\footnotesep\ignorespaces#2\@finalstrut\strutbox}%
    \color@endgroup}%
\else
    \insert\footins{%
    \let\Par\FootnotePar
    \let\endPar\endFootnotePar
    \global\@FootnotePars0%
    \reset@font\Footnotesize
    \interlinepenalty\interfootnotelinepenalty
    \splittopskip\footnotesep
    \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
    \hsize\columnwidth \@parboxrestore
    \color@begingroup
      \@makefntext{%
        \rule\z@\footnotesep\ignorespaces#2\@finalstrut\strutbox}
    \color@endgroup}%
\fi
}
\def\@makefntext#1{%
    \parindent 1em%
    \noindent
    #1}
%    \end{macrocode}
% \section{Color}
% Only RGB color working at present. Sorry.
%    \begin{macrocode}
\def\RGBColor#1#2#3{%
 \c@lor@RGB@rgb{#1}\@tempa
 \c@lor@RGB@rgb{#2}\@tempb
 \c@lor@RGB@rgb{#3}\@tempc
% \typeout{Set Color \@tempa, \@tempb, \@tempc}%
 \color[rgb]{\@tempa, \@tempb, \@tempc}%
  }
\def\c@lor@RGB@rgb#1#2{%
  \dimen@#1\p@
  \divide\dimen@\@cclv
  \edef#2{\strip@pt\dimen@}}
\def\EndSetFont{%
   \ifx\csname\fPosture Over\endcsname\relax
   \relax\else\csname\fPosture Over\endcsname\fi
}
%    \end{macrocode}
% \section{Startup}
%    \begin{macrocode}
%\let\DEBUG\@gobble
\def\endFOT{%\let\normalcolor\relax
 \def\Hy@colorlink##1{}%
 \def\Hy@endcolorlink{}%
 \ifnum\col@number>1 
    \ifnum\PageBalanceColumns>0
       \end{multicols}
    \else
       % \endmulticols*
       \vfill\end{multicols}
    \fi
 \fi
 \enddocument}
\def\FOT#1{%
 \checkFOTversion{#1}%
 \hoffset-1in\voffset-1in
 \def\setnormal{%
 \let\fSize\pageFontSize
 \let\LineSpacing\pageLineSpacing
 \let\fPosture\pageFontPosture
 \let\fProportionateWidth\pageFontProportionateWidth
 \let\fWeight\pageFontWeight
 \let\fFamName\pagefFamName
 }
 \def\headrulewidth{0\p@}%
 \def\footrulewidth{0\p@}%
 \abovedisplayskip=\z@
 \abovedisplayshortskip=\z@
 \belowdisplayskip=\z@
 \belowdisplayshortskip=\z@
 \raggedbottom
 \clubpenalty=4000
 \widowpenalty=2000
 \setlength\emergencystretch{2in}
 \frenchspacing
 \fancyhf{}%
 \def\familydefault{ptm}%
 \fontfamily{\familydefault}\selectfont
 \pagenumbering{arabic}%
 \nonstopmode
 \Mathcount0
%    \end{macrocode}
% We do not put out a |\begin{document}|, as that would fix
% the page size in advance; we delay that for the first
% page sequence.
%    \begin{macrocode}
 \let\default@color\current@color
%    \end{macrocode}
% Individual users or projects can override anything in this 
% setup with a configuration file, loaded here, called
% \texttt{jadetex.cfg}.
%    \begin{macrocode}
 \InputIfFileExists{jadetex.cfg}{}{}%
 \ifLabelElements
  \typeout{Elements will be labelled}%
 \else
  \typeout{Elements will NOT be labelled}%
 \fi
% wicked. dont redo \@begindocumenthook! cause color in pdftex to foul up.
% \@begindocumenthook
 \makeatletter
}
\everyjob{%
   \typeout{JadeTeX \JadeTeXDate: \JadeTeXMajorVersion.\JadeTeXMinorVersion}%
}
\catcode`\^^M=10%
\catcode0=9%
%</package>
%<*dsssldef>
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvideTextCommandDefault{\textonequarter}{\ensuremath{\frac14}}
\ProvideTextCommandDefault{\textonehalf}{\ensuremath{\frac12}}
\ProvideTextCommandDefault{\textthreequarters}{\ensuremath{\frac34}}
\ProvideTextCommandDefault{\textcent}
   {\TextSymbolUnavailable\textcent}
\ProvideTextCommandDefault{\textyen}
   {\TextSymbolUnavailable\textyen}
\ProvideTextCommandDefault{\textcurrency}
   {\TextSymbolUnavailable\textcurrency}
\ProvideTextCommandDefault{\textbrokenbar}
   {\TextSymbolUnavailable\textbrokenbar}
\providecommand{\mathdegree}{{\ensuremath{^\circ}}
}
\providecommand{\mathonesuperior}{{^1}}
\providecommand{\mathtwosuperior}{{^2}}
\providecommand{\maththreesuperior}{{^3}}
\providecommand{\mathordmasculine}{\mathrm{^{\underline{o}}}}
\providecommand{\mathordfeminine}{\mathrm{^{\underline{a}}}}
\DeclareInputText{"0A0}{\nobreakspace}
\DeclareInputMath{"0B0}{\mathdegree}
\DeclareInputText{"0A1}{\textexclamdown}
\DeclareInputMath{"0B1}{\ensuremath{\pm}}
\DeclareInputText{"0A2}{\textcent}
\DeclareInputMath{"0B2}{\mathtwosuperior}
\DeclareInputText{"0B2}{\ensuremath{\mathtwosuperior}}
\DeclareInputText{"0A3}{\pounds}
\DeclareInputMath{"0B3}{\maththreesuperior}
\DeclareInputText{"0B3}{\ensuremath{\maththreesuperior}}
\DeclareInputText{"0A4}{\textcurrency}
\DeclareInputText{"0B4}{\@tabacckludge'{}}
\DeclareInputText{"0A5}{\textyen}
\DeclareInputMath{"0B5}{\mu}
\DeclareInputText{"0B5}{\textmu}
\DeclareInputText{"0A6}{\textbrokenbar}
\DeclareInputText{"0B6}{\P}
\DeclareInputText{"0A7}{\S}
\DeclareInputText{"0B7}{\ifmmode\cdot\else\textperiodcentered\fi}
\DeclareInputText{"0A8}{\"{}}
\DeclareInputText{"0B8}{\c{}}
\DeclareInputText{"0A9}{\copyright}
\DeclareInputMath{"0B9}{\mathonesuperior}
\DeclareInputMath{"0AA}{\mathordfeminine}
\DeclareInputMath{"0BA}{\mathordmasculine}
\DeclareInputText{"0B9}{\ensuremath{\mathonesuperior}}
\DeclareInputText{"0AA}{\ensuremath{\mathordfeminine}}
\DeclareInputText{"0BA}{\ensuremath{\mathordmasculine}}
\DeclareInputText{"0AB}{\guillemotleft}
\DeclareInputText{"0BB}{\guillemotright}
\DeclareInputMath{"0AC}{\lnot}
\DeclareInputText{"0AC}{\ensuremath{\lnot}}
\DeclareInputText{"0BC}{\textonequarter}
\DeclareInputText{"0AD}{\-}
\DeclareInputText{"0BD}{\textonehalf}
\DeclareInputText{"0AE}{\textregistered}
\DeclareInputText{"0BE}{\textthreequarters}
\DeclareInputText{"0AF}{\ifmmode\else\@tabacckludge={}\fi}
\DeclareInputText{"0BF}{\textquestiondown}
\DeclareInputText{"0C0}{\@tabacckludge`A}
\DeclareInputText{"0D0}{\DH}
\DeclareInputText{"0C1}{\@tabacckludge'A}
\DeclareInputText{"0D1}{\~N}
\DeclareInputText{"0C2}{\^A}
\DeclareInputText{"0D2}{\@tabacckludge`O}
\DeclareInputText{"0C3}{\~A}
\DeclareInputText{"0D3}{\@tabacckludge'O}
\DeclareInputText{"0C4}{\"A}
\DeclareInputText{"0D4}{\^O}
\DeclareInputText{"0C5}{\AA}
\DeclareInputText{"0D5}{\~O}
\DeclareInputText{"0C6}{\AE}
\DeclareInputText{"0D6}{\"O}
\DeclareInputText{"0C7}{\c C}
\DeclareInputMath{"0D7}{\ensuremath{\times}}
\DeclareInputText{"0C8}{\@tabacckludge`E}
\DeclareInputText{"0D8}{\O}
\DeclareInputText{"0C9}{\@tabacckludge'E}
\DeclareInputText{"0D9}{\@tabacckludge`U}
\DeclareInputText{"0CA}{\^E}
\DeclareInputText{"0DA}{\@tabacckludge'U}
\DeclareInputText{"0CB}{\"E}
\DeclareInputText{"0DB}{\^U}
\DeclareInputText{"0CC}{\@tabacckludge`I}
\DeclareInputText{"0DC}{\"U}
\DeclareInputText{"0CD}{\@tabacckludge'I}
\DeclareInputText{"0DD}{\@tabacckludge'Y}
\DeclareInputText{"0CE}{\^I}
\DeclareInputText{"0DE}{\TH}
\DeclareInputText{"0CF}{\"I}
\DeclareInputText{"0DF}{\ss}
\DeclareInputText{"0E0}{\@tabacckludge`a}
\DeclareInputText{"0F0}{\dh}
\DeclareInputText{"0E1}{\@tabacckludge'a}
\DeclareInputText{"0F1}{\~n}
\DeclareInputText{"0E2}{\^a}
\DeclareInputText{"0F2}{\@tabacckludge`o}
\DeclareInputText{"0E3}{\~a}
\DeclareInputText{"0F3}{\@tabacckludge'o}
\DeclareInputText{"0E4}{\"a}
\DeclareInputText{"0F4}{\^o}
\DeclareInputText{"0E5}{\aa}
\DeclareInputText{"0F5}{\~o}
\DeclareInputText{"0E6}{\ae}
\DeclareInputText{"0F6}{\"o}
\DeclareInputText{"0E7}{\c c}
\DeclareInputMath{"0F7}{\ensuremath{\div}}
\DeclareInputText{"0E8}{\@tabacckludge`e}
\DeclareInputText{"0F8}{\o}
\DeclareInputText{"0E9}{\@tabacckludge'e}
\DeclareInputText{"0F9}{\@tabacckludge`u}
\DeclareInputText{"0EA}{\^e}
\DeclareInputText{"0FA}{\@tabacckludge'u}
\DeclareInputText{"0EB}{\"e}
\DeclareInputText{"0FB}{\^u}
\DeclareInputText{"0EC}{\@tabacckludge`\i}
\DeclareInputText{"0FC}{\"u}
\DeclareInputText{"0ED}{\@tabacckludge'\i}
\DeclareInputText{"0FD}{\@tabacckludge'y}
\DeclareInputText{"0EE}{\^\i}
\DeclareInputText{"0FE}{\th}
\DeclareInputText{"0EF}{\"\i}
\DeclareInputText{"0FF}{\"y}
%</dsssldef>
%    \end{macrocode}
% \Finale
%
\endinput

