
###############################################################################
#                                                                             #
#  Lout @DocumentLayout package (Version 3.07)                                #
#                                                                             #
#  Version 1.0 by Jeffrey H. Kingston, 17 July 1991.                          #
#  Version 2.0 by Jeffrey H. Kingston, 22 December 1992.                      #
#  Version 3.0 by Jeffrey H. Kingston, 19 April 1994.                         #
#  Version 3.03 by Jeffrey H. Kingston, 6 May 1995.                           #
#  Versions 3.04 and 3.05 by Jeffrey H. Kingston, 11 June 1995.               #
#  Version 3.05 by Jeffrey H. Kingston, 25 July 1995.                         #
#      @RawList modified by JHK Oct 95 to fix problem with lists.             #
#  Version 3.07 by Jeffrey H. Kingston, February 1996.                        #
#                                                                             #
#  This Lout package contains the general definitions used by all types of    #
#  documents.  It needs to be extended (see docf, reportf, bookf, slidesf,    #
#  etc.) with definitions for particular document types.  Consult "A User's   #
#  Guide to the Lout Document Formatting System" for user information.        #
#                                                                             #
###############################################################################

    @SysPrependGraphic { "dl.lpg" }   # margin note setup

    ###########################################################################
    #                                                                         #
    #  The following symbols are defined outside @DocumentLayout so that      #
    #  they can be invoked when setting its parameters in the @Use clause.    #
    #                                                                         #
    ###########################################################################

    ###########################################################################
    #                                                                         #
    #   @Plain, @Sym, font symbols, and miscellaneous special characters.     #
    #                                                                         #
    ###########################################################################

    def @Plain
        left x
        right y
    {
        @BackEnd @Case {
            PlainText @Yield x
            PostScript @Yield y
        }
    }

    def @Sym right x { { Symbol Base } @Font @Char x		}

    def @R   right x { Base @Font x				}
    def @I   right x { Slope @Font x				}
    def @B   right x { Bold @Font x				}
    def @BI  right x { BoldSlope @Font x			}
    def @S   right x { smallcaps @Font x			}
    def @F   right x { { Courier Base -1p } @Font x 		}

    def "~"  left x right y { x &1s y }
    def "~~" left x right y { x &2s y }

    def "``"       { "``"  @Plain @Char "quotedblleft"		}
    def "''"       { "''"  @Plain @Char "quotedblright"		}
    def "--"       { "--"  @Plain @Char "endash"		}
    def "---"      { "---" @Plain @Char "emdash"		}
    def @Bullet    { "o"   @Plain @Char "bullet"		}
    def @ParSym    { "P"   @Plain @Char "paragraph"		}
    def @SectSym   { "$"   @Plain @Char "section"		}
    def @Dagger    { "+"   @Plain @Char "dagger"		}
    def @DaggerDbl { "++"  @Plain @Char "daggerdbl"		}
    def @CDot      { "."   @Plain @Char "periodcentered"	}
    def @Sterling  { "&"   @Plain @Char "sterling"		}
    def @Yen       { "Y"   @Plain @Char "yen"			}
    def @Florin    { "f"   @Plain @Char "florin"		}

    def @Star      { "*"   @Plain @Sym  "asteriskmath"		}
    def @Degree    { "o"   @Plain @Sym  "degree"		}
    def @Minute    { "'"   @Plain @Sym  "minute"		}
    def @Second    { "''"  @Plain @Sym  "second"		}
    def @Multiply  { "x"   @Plain @Sym  "multiply"		}
    def @Divide    { "/"   @Plain @Sym  "divide"		}
    def @Lozenge   { "O"   @Plain @Sym  "lozenge"		}
    def @Register  { "R"   @Plain @Sym  "registersans"		}
    def @CopyRight { "C"   @Plain @Sym  "copyrightsans"		}
    def @TradeMark { "TM"  @Plain @Sym  "trademarksans"		}


    ###########################################################################
    #                                                                         #
    #  Symbols stored in the "standard" database                              #
    #                                                                         #
    #    @Word            language-spacific words such as Chapter, etc.       #
    #    @Roman           lower case Roman numerals i, ii, ... , cc           #
    #    @UCRoman         upper case Roman numerals I, II, ... , CC           #
    #    @Alpha           lower case Roman alphabet a, b,  ... , z            #
    #    @UCAlpha         upper case Roman alphabet A, B,  ... , Z            #
    #    @Months          months of the year:  January, ... , December        #
    #    @ShortMonths     months of the year, abbreviated:  Jan, ... , Dec    #
    #    @WeekDays        days of the week:  Sunday, ... , Saturday           #
    #    @ShortWeekDays   days of the week, abbreviated:  Sun, ... , Sat      #
    #    @TwelveHours     hours, from 1 to 12                                 #
    #    @ShortHours      hours, from 0 to 23                                 #
    #    @DateTimeFormat  format of results of @Date and @Time                #
    #                                                                         #
    ###########################################################################

    def @Word		left @Tag right @Val { @Val }
    def @Roman		left @Tag right @Val { @Val }
    def @UCRoman	left @Tag right @Val { @Val }
    def @Alpha		left @Tag right @Val { @Val }
    def @UCAlpha	left @Tag right @Val { @Val }
    def @Months		left @Tag right @Val { @Val }
    def @ShortMonths	left @Tag right @Val { @Val }
    def @WeekDays	left @Tag right @Val { @Val }
    def @ShortWeekDays	left @Tag right @Val { @Val }
    def @TwelveHours  	left @Tag right @Val { @Val }
    def @ShortHours  	left @Tag right @Val { @Val }
    def @MeriDiems  	left @Tag right @Val { @Val }
    def @ShortMeriDiems	left @Tag right @Val { @Val }

    export @Value
    def @DateTimeFormat	left @Tag
	named @Value
	    named @Year          {}
	    named @ShortYear     {}
	    named @Month         {}
	    named @ShortMonth    {}
	    named @MonthNum      {}
	    named @Day           {}
	    named @ShortDay      {}
	    named @DayNum        {}
	    named @MeriDiem      {}
	    named @ShortMeriDiem {}
	    named @Hour          {}
	    named @TwelveHour    {}
	    named @ShortHour     {}
	    named @Minute        {}
	    named @Second        {}
	{}
    {}

    @SysDatabase @Word @Roman @UCRoman @Alpha @UCAlpha @Months
		 @ShortMonths @WeekDays @ShortWeekDays @TwelveHours
		 @ShortHours @MeriDiems @ShortMeriDiems @DateTimeFormat
    { standard  }


    ###########################################################################
    #                                                                         #
    #  @Date and @Time: the date and time now.                                #
    #                                                                         #
    ###########################################################################

    def @Date
      named @Format
	named @Year          { @Moment&&now @Open { {@Century}@Year          }}
	named @ShortYear     { @Moment&&now @Open { @Year                    }}
	named @Month         { @Moment&&now @Open { @Months&&@Month          }}
	named @ShortMonth    { @Moment&&now @Open { @ShortMonths&&@Month     }}
	named @MonthNum      { @Moment&&now @Open { @Month                   }}
	named @Day           { @Moment&&now @Open { @WeekDays&&@WeekDay      }}
	named @ShortDay      { @Moment&&now @Open { @ShortWeekDays&&@WeekDay }}
	named @DayNum        { @Moment&&now @Open { @Day                     }}
	named @MeriDiem      { @Moment&&now @Open { @MeriDiems&&@Hour        }}
	named @ShortMeriDiem { @Moment&&now @Open { @ShortMeriDiems&&@Hour   }}
	named @Hour          { @Moment&&now @Open { @Hour                    }}
	named @TwelveHour    { @Moment&&now @Open { @TwelveHours&&@Hour      }}
	named @ShortHour     { @Moment&&now @Open { @ShortHours&&@Hour       }}
	named @Minute        { @Moment&&now @Open { @Minute                  }}
	named @Second        { @Moment&&now @Open { @Second                  }}
      {
	  @DateTimeFormat&&date @Open { @Value
	    @Year          { @Year }
	    @ShortYear     { @ShortYear }
	    @Month         { @Month }
	    @ShortMonth    { @ShortMonth }
	    @MonthNum      { @MonthNum }
	    @Day           { @Day }
	    @ShortDay      { @ShortDay }
	    @DayNum        { @DayNum }
	    @MeriDiem      { @MeriDiem }
	    @ShortMeriDiem { @ShortMeriDiem }
	    @Hour          { @Hour }
	    @TwelveHour    { @TwelveHour }
	    @ShortHour     { @ShortHour }
	    @Minute        { @Minute }
	    @Second        { @Second }
	  }
      }
    { @Format }

    def @Time
      named @Format
	named @Year          { @Moment&&now @Open { {@Century}@Year          }}
	named @ShortYear     { @Moment&&now @Open { @Year                    }}
	named @Month         { @Moment&&now @Open { @Months&&@Month          }}
	named @ShortMonth    { @Moment&&now @Open { @ShortMonths&&@Month     }}
	named @MonthNum      { @Moment&&now @Open { @Month                   }}
	named @Day           { @Moment&&now @Open { @WeekDays&&@WeekDay      }}
	named @ShortDay      { @Moment&&now @Open { @ShortWeekDays&&@WeekDay }}
	named @DayNum        { @Moment&&now @Open { @Day                     }}
	named @MeriDiem      { @Moment&&now @Open { @MeriDiems&&@Hour        }}
	named @ShortMeriDiem { @Moment&&now @Open { @ShortMeriDiems&&@Hour   }}
	named @Hour          { @Moment&&now @Open { @Hour                    }}
	named @TwelveHour    { @Moment&&now @Open { @TwelveHours&&@Hour      }}
	named @ShortHour     { @Moment&&now @Open { @ShortHours&&@Hour       }}
	named @Minute        { @Moment&&now @Open { @Minute                  }}
	named @Second        { @Moment&&now @Open { @Second                  }}
      {
	  @DateTimeFormat&&time @Open { @Value
	    @Year          { @Year }
	    @ShortYear     { @ShortYear }
	    @Month         { @Month }
	    @ShortMonth    { @ShortMonth }
	    @MonthNum      { @MonthNum }
	    @Day           { @Day }
	    @ShortDay      { @ShortDay }
	    @DayNum        { @DayNum }
	    @MeriDiem      { @MeriDiem }
	    @ShortMeriDiem { @ShortMeriDiem }
	    @Hour          { @Hour }
	    @TwelveHour    { @TwelveHour }
	    @ShortHour     { @ShortHour }
	    @Minute        { @Minute }
	    @Second        { @Second }
	  }
      }
    { @Format }


    ###########################################################################
    #                                                                         #
    #  @DropCapTwo and @DropCapThree                                          #
    #                                                                         #
    ###########################################################################

    def @DropCapTwo
        left y
        named height { 1.5v }
        right x
    {
        def @ParPlace { @Galley }
        def @EndParPlace { @Galley }

        def @LineList
        {
	    @PAdjust @ParPlace
	    //1vx @LineList
        }

        def @ParGalley horizontally into { @ParPlace&&preceding }
	    right x
        {
	    x
        }

	def @EndPar force into { @EndParPlace&&following } { @Null }

        def @Cap
        {
	    -0.25f @VShift 1.0w @VShift {
	        -90d @Rotate height @Wide @Scale 90d @Rotate y
	    }
        }

						  |1s @PAdjust @ParPlace 
        /1vo  @Cap @ParGalley {x & @EndPar &1rt } |   @PAdjust @ParPlace
        //1vx @LineList
	//    @EndParPlace
    }

    def @DropCapThree
        left y
        named height { 2.5v }
        right x
    {
        def @ParPlace { @Galley }
        def @EndParPlace { @Galley }

        def @LineList
        {
	    @PAdjust @ParPlace
	    //1vx @LineList
        }

        def @ParGalley force horizontally into { @ParPlace&&preceding }
	    right x
        {
	    x
        }

	def @EndPar force into { @EndParPlace&&following } { @Null }

        def @Cap
        {
	    -0.25f @VShift 1.0w @VShift {
	        -90d @Rotate height @Wide @Scale 90d @Rotate y
	    }
        }

						|1s @PAdjust @ParPlace 
        /1vo  @ParGalley { x & @EndPar &1rt }	|   @PAdjust @ParPlace
        /1vo  @Cap				|   @PAdjust @ParPlace
        //1vx @LineList
	//    @EndParPlace
    }


    ###########################################################################
    #                                                                         #
    #  @Centre, @Center, @Right, @DotSep, @DotJoin, @OverStrike               #
    #                                                                         #
    ###########################################################################

    macro @Centre { |0.5rt @OneCol }
    macro @Center { |0.5rt @OneCol }
    macro @Right  { |1.0rt @OneCol }

    def @DotSep left x right y
    {
	x @Case {
	    {}   @Yield y
	    else @Yield {
	        y @Case {
		    {}   @Yield x
		    else @Yield { x. |2s y }
	        }
	    }
        }
    }

    def @DotJoin left x right y
    {
        x @Case {
	    {}   @Yield y
	    else @Yield {
	        y @Case {
		    {}   @Yield x
		    else @Yield { x.y }
	        }
	    }
        }
    }

    def @OverStrike left x right y
    {
	@OneRow { @HContract @VContract x /0io @HContract @VContract y }
    }


    ###########################################################################
    #                                                                         #
    #   @Sup and @Sub                                                         #
    #                                                                         #
    ###########################################################################

    def @Sup
	left x
	named gap { 0.40fk }
	right y
    {
	@HContract @VContract
	{
	    | 0.7f @Font y ^/gap x
	}
    }

    def @Sub
	left x
	named gap { 0.40fk }
	right y
    {
	@HContract @VContract
	{
	    x /gap | 0.7f @Font y
	}
    }


    ###########################################################################
    #                                                                         #
    #   @Colour, @Color, @AddPaint, @LineWidth                                #
    #                                                                         #
    ###########################################################################

    def @ColourCommand right col
    {
	col @Case {
	    nochange		@Yield	{ nochange                }
	    darkblue		@Yield	{ 0.0 0.0 0.5 setrgbcolor }
	    blue		@Yield	{ 0.0 0.0 1.0 setrgbcolor }
	    lightblue		@Yield	{ 0.5 0.5 1.0 setrgbcolor }
	    darkgreen		@Yield	{ 0.0 0.5 0.0 setrgbcolor }
	    green		@Yield	{ 0.0 1.0 0.0 setrgbcolor }
	    lightgreen		@Yield	{ 0.5 1.0 0.5 setrgbcolor }
	    darkred		@Yield	{ 0.5 0.0 0.0 setrgbcolor }
	    red			@Yield	{ 1.0 0.0 0.0 setrgbcolor }
	    lightred		@Yield	{ 1.0 0.5 0.5 setrgbcolor }
	    darkcyan		@Yield	{ 0.0 0.5 0.5 setrgbcolor }
	    cyan		@Yield	{ 0.0 1.0 1.0 setrgbcolor }
	    lightcyan		@Yield	{ 0.5 1.0 1.0 setrgbcolor }
	    darkmagenta		@Yield	{ 0.5 0.0 0.5 setrgbcolor }
	    magenta		@Yield	{ 1.0 0.0 1.0 setrgbcolor }
	    lightmagenta	@Yield	{ 1.0 0.5 1.0 setrgbcolor }
	    darkyellow		@Yield	{ 0.5 0.5 0.0 setrgbcolor }
	    yellow		@Yield	{ 1.0 1.0 0.0 setrgbcolor }
	    lightyellow		@Yield	{ 1.0 1.0 0.5 setrgbcolor }
	    darkgray		@Yield	{ 0.2 0.2 0.2 setrgbcolor }
	    gray		@Yield	{ 0.5 0.5 0.5 setrgbcolor }
	    lightgray		@Yield	{ 0.8 0.8 0.8 setrgbcolor }
	    darkgrey		@Yield	{ 0.2 0.2 0.2 setrgbcolor }
	    grey		@Yield	{ 0.5 0.5 0.5 setrgbcolor }
	    lightgrey		@Yield	{ 0.8 0.8 0.8 setrgbcolor }
	    black		@Yield	{ 0.0 0.0 0.0 setrgbcolor }
	    white		@Yield	{ 1.0 1.0 1.0 setrgbcolor }
	}
    }

    def @Colour left col right y { {@ColourCommand col} @SetColour y }

    macro @Color { @Colour }

    def @AddPaint right col
    {
	col @Case {
	    none      @Yield ""
	    nochange  @Yield "gsave fill grestore"
	    else      @Yield { "gsave" @ColourCommand col "fill grestore" }
	}
    }

    def @LineWidth right lw
    {
	lw @Case {
	   ""	@Yield ""
	   else	@Yield { lw "setlinewidth" }
	}
    }


    ###########################################################################
    #                                                                         #
    #   @Box, @CurveBox, and @ShadowBox                                       #
    #                                                                         #
    ###########################################################################

    def @Box
	named margin { 0.3f }
	named linewidth
	    named c { " cm" }
	    named i { " in" }
	    named e { " em" }
	    named p { " pt" }
	    named f { " ft" }
	    named s { " sp" }
	    named v { " vs" }
	{}
	named paint { none }
	right x
    {
	@VContract @HContract 0c @HShift {
	    {"LoutBox" @AddPaint paint @LineWidth linewidth "stroke"} @Graphic
	    { ^/margin ^|margin 0c @HShift @OneRow x |margin /margin }
	}
    }

    def @CurveBox
	named margin { 0.3f }
	named linewidth
	    named c { " cm" }
	    named i { " in" }
	    named e { " em" }
	    named p { " pt" }
	    named f { " ft" }
	    named s { " sp" }
	    named v { " vs" }
	{}
	named paint { none }
	right x
    {
	@VContract @HContract 0c @HShift {
	    { "LoutCurveBox" @AddPaint paint @LineWidth linewidth "stroke" }
	    @Graphic { ^/margin ^|margin 0c @HShift @OneRow x |margin /margin }
	}
    }

    def @ShadowBox
	named margin { 0.3f }
	named linewidth
	    named c { " cm" }
	    named i { " in" }
	    named e { " em" }
	    named p { " pt" }
	    named f { " ft" }
	    named s { " sp" }
	    named v { " vs" }
	{}
	named paint { none }
	named shadow { 0.2f }
	right x
    {
	@VContract @HContract 0c @HShift {
	    "LoutShadowBox fill" @Graphic
	    {	^/shadow ^|shadow 0c @HShift
		@Box margin {margin} paint {paint} linewidth {linewidth} x
		|shadow /shadow
	    }
	}
    }


    ###########################################################################
    #                                                                         #
    #   @BoundaryMarks                                                        #
    #                                                                         #
    ###########################################################################

    def @BoundaryMarks
	named linewidth
	    named c { " cm" }
	    named i { " in" }
	    named e { " em" }
	    named p { " pt" }
	    named f { " ft" }
	    named s { " sp" }
	    named v { " vs" }
	{ 0.2p }
	named length
	    named c { " cm" }
	    named i { " in" }
	    named e { " em" }
	    named p { " pt" }
	    named f { " ft" }
	    named s { " sp" }
	    named v { " vs" }
	{ 0.5c }
	named gap
	    named c { " cm" }
	    named i { " in" }
	    named e { " em" }
	    named p { " pt" }
	    named f { " ft" }
	    named s { " sp" }
	    named v { " vs" }
	{ 0.5c }
    {
	{
	    "0     0"     gap "sub moveto  0" length "neg rlineto"
	    "xsize 0"     gap "sub moveto  0" length "neg rlineto"
	    "0     ysize" gap "add moveto  0" length     "rlineto"
	    "xsize ysize" gap "add moveto  0" length     "rlineto"

	    "0"     gap "sub 0     moveto"  length "neg 0 rlineto"
	    "xsize" gap "add 0     moveto"  length     "0 rlineto"
	    "0"     gap "sub ysize moveto"  length "neg 0 rlineto"
	    "xsize" gap "add ysize moveto"  length     "0 rlineto"

	    linewidth "setlinewidth stroke"
	} @Graphic {}
    }

    ###########################################################################
    #                                                                         #
    #   @Verbatim                                                             #
    #                                                                         #
    ###########################################################################

    def @Verbatim right x
    {
	def @Filter {
	    "sed '1,$s/\\\\/\\\\\\\\/g;1,$s/\"/\\\\\"/g;1,$s/^/\"/;1,$s/$/\"/'"
	    "<" @FilterIn ">" @FilterOut
	}

	lines @Break x
    }

    ###########################################################################
    #                                                                         #
    #   @PageMarker, @PageMark, and @PageOf                                   #
    #                                                                         #
    ###########################################################################

    export num @Tag
    def @PageMarker
	named @Tag {}
	named num {}
    {
	# @Null
	@PageLabel num
    }

    def @PageMark
	right x
    {
	@PageMarker&&preceding @Tagged x
    }

    def @PageOf
	right x
    {
	@PageMarker&&x @Open { num }
    }


###############################################################################
#                                                                             #
#   @DocumentLayout                                                           #
#                                                                             #
###############################################################################

export
    @InitialFont @InitialBreak @InitialSpace @HeadingFont @ParaGap @ParaIndent
    @DisplayGap @DisplayIndent @DefaultIndent @WideIndent @VeryWideIndent

    @Heading "^" "&-" @If @Not @And @Or @True
    @Runner @NumberOf
    @PP @LP @LLP @DP @NP @CNP
	
    @BAD     @BeginAlignedDisplays
    @EAD     @EndAlignedDisplays

    @D       @Display
    @LD      @LeftDisplay
    @ID      @IndentedDisplay
    @QD      @QuotedDisplay
    @CD      @CentredDisplay @CenteredDisplay
             @RightDisplay
    @AD      @AlignedDisplay
    @LAD     @LeftAlignedDisplay
    @IAD     @IndentedAlignedDisplay
    @QAD     @QuotedAlignedDisplay
    @CAD     @CentredAlignedDisplay @CenteredAlignedDisplay
             @RightAlignedDisplay
    @ND      @NumberedDisplay
    @LND     @LeftNumberedDisplay
    @IND     @IndentedNumberedDisplay
    @QND     @QuotedNumberedDisplay
    @CND     @CentredNumberedDisplay @CenteredNumberedDisplay
             @RightNumberedDisplay
    @AND     @AlignedNumberedDisplay
    @LAND    @LeftAlignedNumberedDisplay
    @IAND    @IndentedAlignedNumberedDisplay
    @QAND    @QuotedAlignedNumberedDisplay
    @CAND    @CentredAlignedNumberedDisplay @CenteredAlignedNumberedDisplay
             @RightAlignedNumberedDisplay

    @RD      @RawDisplay
    @RLD     @RawLeftDisplay
    @RID     @RawIndentedDisplay
    @RQD     @RawQuotedDisplay
    @RCD     @RawCentredDisplay @RawCenteredDisplay
    @RRD     @RawRightDisplay
    @RAD     @RawAlignedDisplay
    @RLAD    @RawLeftAlignedDisplay
    @RIAD    @RawIndentedAlignedDisplay
    @RQAD    @RawQuotedAlignedDisplay
    @RCAD    @RawCentredAlignedDisplay @RawCenteredAlignedDisplay
    @RRAD    @RawRightAlignedDisplay
    @RND     @RawNumberedDisplay
    @RLND    @RawLeftNumberedDisplay
    @RIND    @RawIndentedNumberedDisplay
    @RQND    @RawQuotedNumberedDisplay
    @RCND    @RawCentredNumberedDisplay @RawCenteredNumberedDisplay
    @RRND    @RawRightNumberedDisplay
    @RAND    @RawAlignedNumberedDisplay
    @RLAND   @RawLeftAlignedNumberedDisplay
    @RIAND   @RawIndentedAlignedNumberedDisplay
    @RQAND   @RawQuotedAlignedNumberedDisplay
    @RCAND   @RawCentredAlignedNumberedDisplay
             @RawCenteredAlignedNumberedDisplay
    @RRAND   @RawRightAlignedNumberedDisplay
	
    @LI      @ListItem
    @DLI     @DropListItem
    @TI      @TagItem
    @DTI     @DropTagItem

    @EL      @EndList
    @REL     @RawEndList

             @RawList
    @RLL     @RawLeftList
    @RIL     @RawIndentedList
    @RQL     @RawQuotedList
    @RCL     @RawCentredList @RawCenteredList
    @RNL     @RawNumberedList
    @RPNL    @RawParenNumberedList
    @RRL     @RawRomanList
    @RPRL    @RawParenRomanList
    @RUCRL   @RawUCRomanList
    @RPUCRL  @RawParenUCRomanList
    @RAL     @RawAlphaList
    @RPAL    @RawParenAlphaList
    @RUCAL   @RawUCAlphaList
    @RPUCAL  @RawParenUCAlphaList
    @RBL     @RawBulletList
    @RSL     @RawStarList
    @RDL     @RawDashList
    @RTL     @RawTaggedList
    @RWTL    @RawWideTaggedList
    @RVWTL   @RawVeryWideTaggedList

    @L       @List
    @LL	     @LeftList
    @IL      @IndentedList
    @QL      @QuotedList
    @CL	     @CentredList @CenteredList
    @NL      @NumberedList 
    @PNL     @ParenNumberedList
    @RL      @RomanList
    @PRL     @ParenRomanList
    @UCRL    @UCRomanList
    @PUCRL   @ParenUCRomanList
    @AL      @AlphaList
    @PAL     @ParenAlphaList
    @UCAL    @UCAlphaList
    @PUCAL   @ParenUCAlphaList
    @BL      @BulletList 
    @SL      @StarList 
    @DL      @DashList
    @TL	     @TaggedList
    @WTL     @WideTaggedList
    @VWTL    @VeryWideTaggedList

    @Figure @Table @FootNote @EndNote
    @LeftNote @RightNote @OuterNote @InnerNote @Place
    @Theorem @Proof @EndProof
    @Definition @Claim @Proposition @Lemma @Corollary @Example
    @Reference @RefStyle @RefPrint
    @Ref @NoRef @ChapRef @NoChapRef
    @Cite @NoCite @ChapCite @NoChapCite

    @IndexA @SubIndexA @SubSubIndexA @RawIndexA
    @RawSubIndexA @RawSubSubIndexA @IndexABlanks

    @IndexB @SubIndexB @SubSubIndexB @RawIndexB
    @RawSubIndexB @RawSubSubIndexB @IndexBBlanks

    @Index @SubIndex @SubSubIndex @RawIndex
    @RawSubIndex @RawSubSubIndex @IndexBlanks

    @BypassContentsEntry @BypassMajorContentsEntry
    @BypassFigureContentsEntry @BypassTableContentsEntry
    @BypassReference @BypassChapReference
    @BypassBeginIndex @BypassRawIndex @BypassEndIndex
    @BypassBeginIndexA @BypassRawIndexA @BypassEndIndexA
    @BypassBeginIndexB @BypassRawIndexB @BypassEndIndexB


def @DocumentLayout
    named @InitialFont		{  Times Base 12p	} # initial font
    named @InitialBreak		{  adjust 1.20fx hyphen } # initial break
    named @InitialSpace		{  lout		} # initial space style
    named @InitialLanguage	{  English	} # initial language
    named @InitialColour	{  black	} # initial colour
    named @OptimizePages	{  No		} # optimize page breaks?
    named @HeadingFont		{  Bold		} # font for @Heading
    named @ParaGap		{  1.30vx	} # gap between paragraphs
    named @ParaIndent		{  2.00f	} # first-line indent for @PP
    named @DisplayGap		{  1.00v	} # gap above, below displays
    named @DisplayIndent	{  2.00f	} # @IndentedDisplay indent
    named @DisplayNumStyle
	right num		{  (num) 	} # display number style
    named @DefaultIndent	{  0.5rt	} # @Display indent
    named @WideIndent		{  4.00f	} # @WideTaggedList indent
    named @VeryWideIndent	{  8.00f	} # @VeryWideTaggedList indent
    named @ListGap		{  1.00v	} # gap between list items
    named @ListIndent		{  0c		} # indent of list items
    named @ListRightIndent	{  0c		} # right indent of list items
    named @ListLabelWidth	{  2.00f	} # width allowed for list tags
    named @PageType		{  A4		} # page type (width, height)
    named @PageWidth		{		} # page width if type Other
    named @PageHeight		{		} # page height if type Other
    named @PageOrientation	{  Portrait	} # Portrait, Landscape, etc.
    named @PageBackground	{  		} # background of each page
    named @TopMargin		{  2.50c	} # top margin of all pages
    named @FootMargin		{  2.50c	} # bottom margin of all pages
    named @OddLeftMargin	{  2.50c	} # left margin of odd pages
    named @OddRightMargin	{  2.50c	} # right margin of odd pages
    named @EvenLeftMargin	{  2.50c	} # left margin of even pages
    named @EvenRightMargin	{  2.50c	} # right margin of even pages
    named @PageBoxType		{  None		} # None Box CurveBox ShadowBox
    named @PageBoxMargin	{  1.00c	} # page box margin
    named @PageBoxLineWidth
	named c { " cm" } named i { " in" } named e { " em" }
	named p { " pt" } named f { " ft" } named s { " sp" }
	named v { " vs" }
				{		} # page box line thickness
    named @PageBoxPaint		{  none		} # page box paint
    named @PageBoxShadow	{  0.60c	} # shadow margin if ShadowBox
    named @ColumnNumber		{  1		} # number of columns (1 to 10)
    named @ColumnGap		{  1.00c	} # column gap
    named @FigureLocation	{  PageTop	} # default figure location
    named @TableLocation	{  PageTop	} # default table location
    named @FigureWord		{  figure	} # "Figure" word else anything
    named @TableWord		{  table	} # "Table" word else anything
    named @FigureNumbers	{  Arabic	} # method of numbering figures
    named @TableNumbers		{  Arabic	} # method of numbering tables
    named @FigureCaptionPos	{  Below	} # Above or Below
    named @TableCaptionPos	{  Below	} # Above or Below
    named @CaptionFont          {               } # figure, table caption font
    named @CaptionBreak         {               } # figure, table caption break
    named @MakeFigureContents   {  No           } # list of figures at start
    named @MakeTableContents    {  No           } # list of tables at start
    named @MakeContents		{  No		} # make contents? Yes or No
    named @ContentsGap		{  0.20v	} # extra gap above minor entry
    named @ContentsGapAbove	{  0.80v	} # extra gap above major entry
    named @ContentsGapBelow	{  0.00v	} # extra gap below major entry
    named @ContentsLeader	{  ..		} # leader symbol in contents
    named @ContentsLeaderGap	{  4s		} # gap between leaders
    named @ContentsRightWidth	{  3f		} # page numbers column width

    named @MakeReferences	{  Yes		} # make references? Yes or No
    named @RefCiteStyle right cite {  [cite]	} # citation style
    named @RefCiteLabels
	named @RefNum       {}
	named @Tag          {}
	named @Type         {}
	named @Abstract     {}
	named @Address      {}
	named @Annote       {}
	named @Author       {}
	named @Day          {}
	named @Edition      {}
	named @HowPublished {}
	named @InAuthor     {}
	named @InTitle      {}
	named @Institution  {}
	named @Journal      {}
	named @Keywords     {}
	named @Label        {}
	named @Month        {}
	named @Note         {}
	named @Number       {}
	named @Organization {}
	named @Page         {}
	named @Pages        {}
	named @Pinpoint     {}
	named @Publisher    {}
	named @Title        {}
	named @TitleNote    {}
	named @TRType       {}
	named @Volume       {}
	named @Year         {}
				{  @RefNum	} # citation items
    named @RefNumbers		{  Arabic	} # reference numbers

    named @RefListFormat	{  Labels	} # NoLabels, Labels,
						  # DropLabels, IntegrateLabels
    named @RefListLabels
	named @RefNum       {}
	named @Tag          {}
	named @Type         {}
	named @Abstract     {}
	named @Address      {}
	named @Annote       {}
	named @Author       {}
	named @Day          {}
	named @Edition      {}
	named @HowPublished {}
	named @InAuthor     {}
	named @InTitle      {}
	named @Institution  {}
	named @Journal      {}
	named @Keywords     {}
	named @Label        {}
	named @Month        {}
	named @Note         {}
	named @Number       {}
	named @Organization {}
	named @Page         {}
	named @Pages        {}
	named @Pinpoint     {}
	named @Publisher    {}
	named @Title        {}
	named @TitleNote    {}
	named @TRType       {}
	named @Volume       {}
	named @Year         {}
				{  [@RefNum]	} # ref list label format
    named @RefListTitle		{  references	} # title of reference list
    named @ChapRefListTitle	{  references	} # title of chapter ref list
    named @RefListIndent	{  0c		} # indent to left of labels
    named @RefListRightIndent	{  0c		} # indent to right of items
    named @RefListGap		{  1.00v	} # gap between ref list items
    named @RefListFont		{        	} # font used in reference list
    named @RefListBreak		{        	} # break style of ref list
    named @RefListLabelWidth 	{  2.00f	} # numeric labels column width
    named @RefListSortKey
	named @Tag          {}
	named @Type         {}
	named @Abstract     {}
	named @Address      {}
	named @Annote       {}
	named @Author       {}
	named @Day          {}
	named @Edition      {}
	named @HowPublished {}
	named @InAuthor     {}
	named @InTitle      {}
	named @Institution  {}
	named @Journal      {}
	named @Keywords     {}
	named @Label        {}
	named @Month        {}
	named @Note         {}
	named @Number       {}
	named @Organization {}
	named @Page         {}
	named @Pages        {}
	named @Pinpoint     {}
	named @Publisher    {}
	named @Title        {}
	named @TitleNote    {}
	named @TRType       {}
	named @Volume       {}
	named @Year         {}
				{  @Tag		} # sorting key

    named @MakeIndex		{  No		} # make index? Yes or No
    named @IndexFont		{		} # index entries font
    named @IndexBreak		{ outdent 1.2fx	} # index entries break
    named @IndexColumnNumber	{  2		} # index columns (1 to 10)
    named @IndexColumnGap	{  1.00c	} # index column gap
    named @MakeIndexA		{  No		} # make index A? Yes or No
    named @IndexAFont		{		} # index A entries font
    named @IndexABreak		{ outdent 1.2fx	} # index A entries break
    named @IndexAColumnNumber	{  2		} # index A columns (1 to 10)
    named @IndexAColumnGap	{  1.00c	} # index A column gap
    named @MakeIndexB		{  No		} # make index B? Yes or No
    named @IndexBFont		{		} # index B entries font
    named @IndexBBreak		{ outdent 1.2fx	} # index B entries break
    named @IndexBColumnNumber	{  2		} # index B columns (1 to 10)
    named @IndexBColumnGap	{  1.00c	} # index B column gap
    named @TopGap		{  0.75c	} # gap between figures
    named @MidGap		{  0.75c	} # gap above/below body text

    named @FootNoteThrough	{  No		} # numbered through chapter?
    named @FootNoteLocation	{  ColFoot	} # where the footnote appears
    named @FootNoteNumbers	{  Arabic	} # footnote numbers
    named @FootNoteFont		{  0.80f	} # font for footnotes
    named @FootNoteBreak	{  1.20fx	} # break for footnotes
    named @FootLen		{  2.00c	} # length of footnote line
    named @FootAboveGap		{  1.00v	} # gap above footnote line
    named @FootGap		{  0.20c	} # gap between footnotes

    named @MarginNoteFont	{  0.80f	} # font of margin notes
    named @MarginNoteBreak	{  ragged 1.10fx} # break style of margin notes
    named @MarginNoteHGap	{  0.5c   	} # horizontal gap to notes
    named @MarginNoteVGap	{  1.00v  	} # min vertical gap between
    named @MarginNoteWidth	{  1.50c  	} # width of margin notes

    named @EndNoteNumbers	{  Arabic	} # endnote numbers
    named @EndNoteFont		{  0.80f	} # font of endnotes
    named @EndNoteBreak		{  1.20fx	} # break for endnotes
    named @EndNoteGap		{  0.20c	} # gap between endnotes

    named @TheoremWord		{  theorem	} # "Theorem" word, etc.
    named @DefinitionWord	{  definition	} # "Definition" word, etc.
    named @ClaimWord		{  claim	} # "Claim" word, etc.
    named @PropositionWord	{  proposition	} # "Proposition" word, etc.
    named @LemmaWord		{  lemma	} # "Lemma" word, etc.
    named @CorollaryWord	{  corollary	} # "Corollary" word, etc.
    named @ExampleWord		{  example	} # "Example" word, etc.
    named @ProofWord		{  proof	} # "Proof" word, etc.

    named @PageHeaders		{  Simple	} # None Simple Titles NoTitles
    named @PageNumbers		{  Arabic	} # page numbers
    named @FirstPageNumber	{  1		} # number of first page 
    named @IntroPageNumbers	{  Roman	} # intro page numbers
    named @IntroFirstPageNumber	{  1		} # number of first intro page 

    named @OddTop	      right @PageNum { @Centre { - @PageNum - }	}
    named @OddFoot	      right @PageNum { @Null                    }
    named @EvenTop	      right @PageNum { @Centre { - @PageNum - }	}
    named @EvenFoot	      right @PageNum { @Null                    }
    named @StartOddTop	      right @PageNum { @Null                    }
    named @StartOddFoot	      right @PageNum { @Null                    }
    named @StartEvenTop	      right @PageNum { @Null                    }
    named @StartEvenFoot      right @PageNum { @Null                    }

    named @IntroOddTop	      right @PageNum { @Null                    }
    named @IntroOddFoot	      right @PageNum { @Null                    }
    named @IntroEvenTop	      right @PageNum { @Null                    }
    named @IntroEvenFoot      right @PageNum { @Null                    }
    named @IntroStartOddTop   right @PageNum { @Null                    }
    named @IntroStartOddFoot  right @PageNum { @Null                    }
    named @IntroStartEvenTop  right @PageNum { @Null                    }
    named @IntroStartEvenFoot right @PageNum { @Null                    }

    named @RunningOddTop
	named @MajorNum {} named @MajorTitle {}
	named @MinorNum {} named @MinorTitle {} right @PageNum
    { @I { @MinorNum @DotSep @MinorTitle } @Right @B @PageNum }

    named @RunningOddFoot
	named @MajorNum {} named @MajorTitle {}
	named @MinorNum {} named @MinorTitle {} right @PageNum
    { @Null }

    named @RunningEvenTop
	named @MajorNum {} named @MajorTitle {}
	named @MinorNum {} named @MinorTitle {} right @PageNum
    { @B @PageNum @Right @I { @MajorNum @DotSep @MajorTitle } }

    named @RunningEvenFoot
	named @MajorNum {} named @MajorTitle {}
	named @MinorNum {} named @MinorTitle {} right @PageNum
    { @Null }

    named @RunningStartOddTop
	named @MajorNum {} named @MajorTitle {}
	named @MinorNum {} named @MinorTitle {} right @PageNum
    { @Null }

    named @RunningStartOddFoot
	named @MajorNum {} named @MajorTitle {}
	named @MinorNum {} named @MinorTitle {} right @PageNum
    { @Centre { Bold 0.8f } @Font @PageNum }

    named @RunningStartEvenTop
	named @MajorNum {} named @MajorTitle {}
	named @MinorNum {} named @MinorTitle {} right @PageNum
    { @Null }

    named @RunningStartEvenFoot
	named @MajorNum {} named @MajorTitle {}
	named @MinorNum {} named @MinorTitle {} right @PageNum
    { @Centre { Bold 0.8f } @Font @PageNum }


    named @RunningIntroOddTop
	named @MajorNum {} named @MajorTitle {}
	named @MinorNum {} named @MinorTitle {} right @PageNum
    { @Null }

    named @RunningIntroOddFoot
	named @MajorNum {} named @MajorTitle {}
	named @MinorNum {} named @MinorTitle {} right @PageNum
    { @Right @PageNum  }

    named @RunningIntroEvenTop
	named @MajorNum {} named @MajorTitle {}
	named @MinorNum {} named @MinorTitle {} right @PageNum
    { @Null }

    named @RunningIntroEvenFoot
	named @MajorNum {} named @MajorTitle {}
	named @MinorNum {} named @MinorTitle {} right @PageNum
    { @PageNum }

    named @RunningIntroStartOddTop
	named @MajorNum {} named @MajorTitle {}
	named @MinorNum {} named @MinorTitle {} right @PageNum
    { @Null }

    named @RunningIntroStartOddFoot
	named @MajorNum {} named @MajorTitle {}
	named @MinorNum {} named @MinorTitle {} right @PageNum
    { @Null }

    named @RunningIntroStartEvenTop
	named @MajorNum {} named @MajorTitle {}
	named @MinorNum {} named @MinorTitle {} right @PageNum
    { @Null }

    named @RunningIntroStartEvenFoot
	named @MajorNum {} named @MajorTitle {}
	named @MinorNum {} named @MinorTitle {} right @PageNum
    { @Null }


@Begin


    ###########################################################################
    #                                                                         #
    #  @Protect x                                                             #
    #                                                                         #
    #  Like @CNP, this reserves space on the current page or else makes sure  #
    #  x appears on the following page.  Lookahead is proportional to font    #
    #  size.                                                                  #
    #                                                                         #
    ###########################################################################

    def @Protect right x { 3.0f @High //0io // x }


    ###########################################################################
    #                                                                         #
    #   @HLine                                                                #
    #                                                                         #
    #   Draws a horizontal line to fill available space.                      #
    #                                                                         #
    ###########################################################################

    def @HLine
    {
	def @HHH { "-"@HHH }
    
	@BackEnd @Case {
	   PlainText @Yield @HHH
	   PostScript @Yield { {0 0 moveto xsize 0 lineto stroke} @Graphic {} }
	}
    }


    ###########################################################################
    #                                                                         #
    #  Miscellaneous.                                                         #
    #                                                                         #
    ###########################################################################

    def @Heading       right x { ragged @Break @HeadingFont      @Font x }
    def "^"		       { {} ^& {}				 }
    def "&-"  left x   right y { x &0ch y				 }


    ###########################################################################
    #                                                                         #
    #  x @WordVal y                                                           #
    #                                                                         #
    #  Returns @Word&&x if x == y, otherwise y.                               #
    #                                                                         #
    ###########################################################################

    def @WordVal
	left x
	right y
    {
	y @Case {
	    x    @Yield @Word&&x
	    else @Yield y
	}
    }

    ###########################################################################
    #                                                                         #
    #  @If @Not @And @Or @True                                                #
    #                                                                         #
    #  Used in databases to make optional fields format nicely.               #
    #                                                                         #
    ###########################################################################

    def @If
	precedence 97
	left x
	right y
    {
	y @Case {
	    {} @Yield @Null
	    else @Yield { @Null{x} }
	}
    }

    def @Not
	precedence 100
	right y
    {
	y @Case {
	    {} @Yield "*"
	    else @Yield ""
	}
    }

    def @And
	precedence 99
	left x
	right y
    {
	x @Case {
	   {} @Yield {}
	   else @Yield y
	}
    }

    def @Or
	precedence 98
	left x
	right y
    {
	x @Case {
	   {} @Yield y
	   else @Yield x
	}
    }

    def @True { "*" }

    ###########################################################################
    #                                                                         #
    #  x @Dft y                                                               #
    #                                                                         #
    #  This returns x unless its value is "dft", in which case it returns y.  #
    #  Useful for defaulting the value of one parameter to another.           #
    #                                                                         #
    ###########################################################################

    def @Dft
	left x
	right y
    {
	x @Case {
	    dft  @Yield y
	    else @Yield x
	}
    }


    ###########################################################################
    #                                                                         #
    #  x @Do y                                                                #
    #                                                                         #
    #  This returns @Null if x is No or None, otherwise y.                    #
    #                                                                         #
    ###########################################################################

    def @Do
	left x
	right y
    {
	x @Case {
	    { No None } @Yield @Null
	    else        @Yield y
	}
    }


    ###########################################################################
    #                                                                         #
    #  x @NoDo y                                                              #
    #                                                                         #
    #  Negation of @Do: This returns y if x is No or None, otherwise @Null.   #
    #                                                                         #
    ###########################################################################

    def @NoDo
	left x
	right y
    {
	x @Case {
	    { No None } @Yield y
	    else        @Yield @Null
	}
    }


    ###########################################################################
    #                                                                         #
    #  x @Then y                                                              #
    #                                                                         #
    #  This returns the empty object if x is No or None, otherwise y.         #
    #                                                                         #
    ###########################################################################

    def @Then
	left x
	right y
    {
	x @Case {
	    { No None } @Yield {}
	    else        @Yield y
	}
    }


    ###########################################################################
    #                                                                         #
    #  x @NoThen y                                                            #
    #                                                                         #
    #  Negation of @Then: returns y if x is No or None, otherwise empty.      #
    #                                                                         #
    ###########################################################################

    def @NoThen
	left x
	right y
    {
	x @Case {
	    { No None } @Yield y
	    else        @Yield {}
	}
    }


    ###########################################################################
    #                                                                         #
    #  Number markers.                                                        #
    #                                                                         #
    ###########################################################################

    def @Num
	left numtype
	right num
    {
	numtype @Case {
	    None    @Yield {}
	    Arabic  @Yield num
	    Roman   @Yield @Roman&&num
	    UCRoman @Yield @UCRoman&&num
	    Alpha   @Yield @Alpha&&num
	    UCAlpha @Yield @UCAlpha&&num
	}
    }


    export @Tag @Value
    def @NumberMarker
	named @Tag {}
	named @Value { "??" }
    {
	@Null
    }

    def @NumberOf
	right x
    {
	@NumberMarker&&x @Open { @Value }
    }


    ###########################################################################
    #                                                                         #
    #  Paragraphs.                                                            #
    #                                                                         #
    ###########################################################################

    macro @PP	{ //@ParaGap @ParaIndent @Wide &0i }
    macro @LP	{ //@ParaGap			   }
    macro @LLP	{ //1vx				   }
    macro @DP	{ //@DisplayGap			   }
    macro @NP	{ //1.1b			   }
    macro @CNP	{ // 3.2v @High //0io //           }


    ###########################################################################
    #                                                                         #
    #  Beginning and ending of aligned displays.                              #
    #                                                                         #
    ###########################################################################

    def @APlace            { @Galley }
    def @EndAlignedPlace   { @Galley }
    def @AlignedPlace      { @Galley }

    def @BAligned into { @APlace&&preceding }
    {
	def @AlignedList { @AlignedPlace /1.1b @AlignedList }

	//1.1b @AlignedList
	//     @EndAlignedPlace
    }

    macro @BAD { // @APlace | @BAligned }
    def   @EAD force into { @EndAlignedPlace&&preceding } {}

    macro @BeginAlignedDisplays { @BAD }
    macro @EndAlignedDisplays   { @EAD }


    ###########################################################################
    #                                                                         #
    #  Beginning and ending of numbered displays.                             #
    #                                                                         #
    ###########################################################################

    #    def @BeginNumberedPlace { @Galley }
    #    def @EndNumberedPlace   { @Galley }
    #    def @NextNumberPlace    { @Galley }
    #
    #    def @NNumber into { @NextNumberPlace&&following } {}
    #    macro @NN { @NNumber @BeginNumberedPlace }
    #
    #    def @BNumbered into { @BeginNumberedPlace&&preceding }
    #	named style right num { (num) }
    #	named start { 1 }
    #    {
    #	def @NList right num
    #	{
    #	    |1rt style num & @NumberMarker @Value {num} & @NextNumberPlace
    #	    // @NList @Next num
    #	}
    #
    #	//  @NList start
    #	//  @EndNumberedPlace
    #    }
    #
    #    macro @BND { // @BeginNumberedPlace // @BNumbered }
    #    def   @END force into { @EndNumberedPlace&&preceding } {}
    #    
    #    macro @BeginNumberedDisplays { @BND }
    #    macro @EndNumberedDisplays   { @END }


    ###########################################################################
    #                                                                         #
    #  New code for numbered displays that will cross section boundaries      #
    #                                                                         #
    ###########################################################################

    export @Tag val
    def @NumDispCounterMarker
	named @Tag {}
	named val {}
    {
	@Null
    }

    def @NumDispNum right tag
    {
	@NumDispCounterMarker&&tag @Open { @Next val }
    }

    def @NumDispCounterIncrement
	right tag
    {
	@NumDispCounterMarker&&preceding @Tagged tag
	@NumDispCounterMarker val { @NumDispNum tag }
	@NumberMarker @Tag { tag } @Value { @NumDispNum tag }
    }

    def @NN
    {
	@NumDispCounterMarker&&preceding @Open { @DisplayNumStyle val }
    }

    def @BeginDisplayCounter
	left condition
	right prefix
    {
	condition @Then @NumDispCounterMarker val { prefix @DotJoin 0 }
    }


    ###########################################################################
    #                                                                         #
    #  Galleys that carry displays to their places.                           #
    #                                                                         #
    ###########################################################################

    def @DispPlace { @Galley }

    def @Disp into { @DispPlace&&preceding }
	right x
    {
	x
    }

    def @NDisp into { @DispPlace&&preceding }
	named @Tag {}
	right x
    {
	@OneRow {
	   @NumDispCounterIncrement @Tag
	   @PageMarker&&preceding @Tagged @Tag
	   ^//
	   @OneRow x
	}
    }

    def @ADisp into { @AlignedPlace&&preceding }
	right x
    {
	x
    }

    def @ANDisp into { @AlignedPlace&&preceding }
	named @Tag {}
	right x
    {
	@OneRow {
	   @NumDispCounterIncrement @Tag
	   @PageMarker&&preceding @Tagged @Tag
	   ^/
	   @OneRow x
	}
    }


    ###########################################################################
    #                                                                         #
    #  Displays and raw displays.                                             #
    #                                                                         #
    ###########################################################################

    macro @G  { |@DefaultIndent      }
    macro @LG { |                    }
    macro @IG { |@DisplayIndent      }
    macro @CG { |0.5rt               }
    macro @RG { |1.0rt               }
    macro @QR { @DisplayIndent @Wide }

    macro @D     { @DP @G   @DispPlace  |                   @DP // @Disp   }
    macro @LD    { @DP @LG  @DispPlace  |                   @DP // @Disp   }
    macro @ID    { @DP @IG  @DispPlace  |                   @DP // @Disp   }
    macro @QD    { @DP @IG  @DispPlace  @IG                 @DP // @Disp   }
    macro @CD    { @DP @CG  @DispPlace  |                   @DP // @Disp   }
    macro @RightDisplay
		 { @DP @RG  @DispPlace  |                   @DP // @Disp   }

    macro @AD    { @DP @G   @APlace     |                   @DP // @ADisp  }
    macro @LAD   { @DP @LG  @APlace     |                   @DP // @ADisp  }
    macro @IAD   { @DP @IG  @APlace     |                   @DP // @ADisp  }
    macro @QAD   { @DP @IG  @APlace     @IG                 @DP // @ADisp  }
    macro @CAD   { @DP @CG  @APlace     |                   @DP // @ADisp  }
    macro @RightAlignedDisplay
		 { @DP @RG  @APlace     |                   @DP // @ADisp  }

    macro @ND    { @DP @G   @DispPlace  |1rt @NN            @DP // @NDisp  }
    macro @LND   { @DP @LG  @DispPlace  |1rt @NN            @DP // @NDisp  }
    macro @IND   { @DP @IG  @DispPlace  |1rt @NN            @DP // @NDisp  }
    macro @QND   { @DP @IG  @DispPlace  |1rt @QR {|1rt @NN} @DP // @NDisp  }
    macro @CND   { @DP @CG  @DispPlace  |1rt @NN            @DP // @NDisp  }
    macro @RightNumberedDisplay
		 { @DP @RG  @DispPlace  |1rt @NN            @DP // @NDisp  }

    macro @AND   { @DP @G   @APlace     |1rt @NN            @DP // @ANDisp }
    macro @LAND  { @DP @LG  @APlace     |1rt @NN            @DP // @ANDisp }
    macro @IAND  { @DP @IG  @APlace     |1rt @NN            @DP // @ANDisp }
    macro @QAND  { @DP @IG  @APlace     |1rt @QR {|1rt @NN} @DP // @ANDisp }
    macro @CAND  { @DP @CG  @APlace     |1rt @NN            @DP // @ANDisp }
    macro @RightAlignedNumberedDisplay
		 { @DP @RG  @APlace     |1rt @NN            @DP // @ANDisp }


    macro @RD    {     @G   @DispPlace  |                          @Disp   }
    macro @RLD   {     @LG  @DispPlace  |                          @Disp   }
    macro @RID   {     @IG  @DispPlace  |                          @Disp   }
    macro @RQD   {     @IG  @DispPlace  @IG |                      @Disp   }
    macro @RCD   {     @CG  @DispPlace  |                          @Disp   }
    macro @RRD   {     @RG  @DispPlace  |                          @Disp   }

    macro @RAD   {     @G   @APlace     |                          @ADisp  }
    macro @RLAD  {     @LG  @APlace     |                          @ADisp  }
    macro @RIAD  {     @IG  @APlace     |                          @ADisp  }
    macro @RQAD  {     @IG  @APlace     @IG |                      @ADisp  }
    macro @RCAD  {     @CG  @APlace     |                          @ADisp  }
    macro @RRAD  {     @RG  @APlace     |                          @ADisp  }

    macro @RND   {     @G   @DispPlace  |1rt @NN                   @NDisp  }
    macro @RLND  {     @LG  @DispPlace  |1rt @NN                   @NDisp  }
    macro @RIND  {     @IG  @DispPlace  |1rt @NN                   @NDisp  }
    macro @RQND  {     @IG  @DispPlace  |1rt @QR {|1rt @NN}        @NDisp  }
    macro @RCND  {     @CG  @DispPlace  |1rt @NN                   @NDisp  }
    macro @RRND  {     @RG  @DispPlace  |1rt @NN                   @NDisp  }

    macro @RAND  {     @G   @APlace     |1rt @NN                   @ANDisp }
    macro @RLAND {     @LG  @APlace     |1rt @NN                   @ANDisp }
    macro @RIAND {     @IG  @APlace     |1rt @NN                   @ANDisp }
    macro @RQAND {     @IG  @APlace     |1rt @QR {|1rt @NN}        @ANDisp }
    macro @RCAND {     @CG  @APlace     |1rt @NN                   @ANDisp }
    macro @RRAND {     @RG  @APlace     |1rt @NN                   @ANDisp }


    macro @Display                            { @D     }
    macro @LeftDisplay                        { @LD    }
    macro @IndentedDisplay                    { @ID    }
    macro @QuotedDisplay                      { @QD    }
    macro @CentredDisplay                     { @CD    }
    macro @CenteredDisplay                    { @CD    }

    macro @AlignedDisplay                     { @AD    }
    macro @LeftAlignedDisplay                 { @LAD   }
    macro @IndentedAlignedDisplay             { @IAD   }
    macro @QuotedAlignedDisplay               { @QAD   }
    macro @CentredAlignedDisplay              { @CAD   }
    macro @CenteredAlignedDisplay             { @CAD   }

    macro @NumberedDisplay                    { @ND    }
    macro @LeftNumberedDisplay                { @LND   }
    macro @IndentedNumberedDisplay            { @IND   }
    macro @QuotedNumberedDisplay              { @QND   }
    macro @CentredNumberedDisplay             { @CND   }
    macro @CenteredNumberedDisplay            { @CND   }

    macro @AlignedNumberedDisplay             { @AND   }
    macro @LeftAlignedNumberedDisplay         { @LAND  }
    macro @IndentedAlignedNumberedDisplay     { @IAND  }
    macro @QuotedAlignedNumberedDisplay       { @QAND  }
    macro @CentredAlignedNumberedDisplay      { @CAND  }
    macro @CenteredAlignedNumberedDisplay     { @CAND  }


    macro @RawDisplay                         { @RD    }
    macro @RawLeftDisplay                     { @RLD   }
    macro @RawIndentedDisplay                 { @RID   }
    macro @RawQuotedDisplay                   { @RQD   }
    macro @RawCentredDisplay                  { @RCD   }
    macro @RawCenteredDisplay                 { @RCD   }
    macro @RawRightDisplay                    { @RRD   }

    macro @RawAlignedDisplay                  { @RAD   }
    macro @RawLeftAlignedDisplay              { @RLAD  }
    macro @RawIndentedAlignedDisplay          { @RIAD  }
    macro @RawQuotedAlignedDisplay            { @RQAD  }
    macro @RawCentredAlignedDisplay           { @RCAD  }
    macro @RawCenteredAlignedDisplay          { @RCAD  }
    macro @RawRightAlignedDisplay             { @RRAD  }

    macro @RawNumberedDisplay                 { @RND   }
    macro @RawLeftNumberedDisplay             { @RLND  }
    macro @RawIndentedNumberedDisplay         { @RIND  }
    macro @RawQuotedNumberedDisplay           { @RQND  }
    macro @RawCentredNumberedDisplay          { @RCND  }
    macro @RawCenteredNumberedDisplay         { @RCND  }
    macro @RawRightNumberedDisplay            { @RRND  }

    macro @RawAlignedNumberedDisplay          { @RAND  }
    macro @RawLeftAlignedNumberedDisplay      { @RLAND }
    macro @RawIndentedAlignedNumberedDisplay  { @RIAND }
    macro @RawQuotedAlignedNumberedDisplay    { @RQAND }
    macro @RawCentredAlignedNumberedDisplay   { @RCAND }
    macro @RawCenteredAlignedNumberedDisplay  { @RCAND }
    macro @RawRightAlignedNumberedDisplay     { @RRAND }


    ###########################################################################
    #                                                                         #
    #  Lists and raw lists.                                                   #
    #                                                                         #
    ###########################################################################


    def @ItemPlace     { @Galley }
    def @TagPlace      { @Galley }
    def @EndListPlace  { @Galley }

    def @RawList
	named style right num {                  }
	named gap             { @ListGap         }
	named indent          { @ListIndent      }
	named itemindent      { 0c		 }
	named rightindent     { @ListRightIndent }
	named labelwidth      { @ListLabelWidth  }
	named start           { 1                }
    {
        def @MakeList right num
	{
	    |indent
	    labelwidth @Wide { @NumberMarker @Value {style num} {style num} &0io }
	    |itemindent  @ItemPlace  |rightindent
	    //gap @MakeList @Next num
	}

	def @ListGalleyPlace { @Galley }

	def @ListGalley into { @ListGalleyPlace&&preceding }
	{
	    @MakeList start // @EndListPlace
	}

	@ListGalleyPlace
	//
	@ListGalley
    }

    def listitem into { @ItemPlace&&preceding }
	named @Tag {}
	right x
    {
	   @NumberMarker&&preceding @Tagged @Tag
	// @PageMarker&&preceding @Tagged @Tag
	// x
    }

    def droplistitem into { @ItemPlace&&preceding }
	named @Tag {}
	right x
    {
	   @NumberMarker&&preceding @Tagged @Tag
	// @PageMarker&&preceding @Tagged @Tag
	//
	//1vx x
    }

    def tagitem into { @ItemPlace&&preceding }
	named tag {}
	right x
    {
	def sendtag into { @TagPlace&&preceding } { tag }

	sendtag | x
    }

    def droptagitem into { @ItemPlace&&preceding }
	named tag {}
	right x
    {
	def sendtag into { @TagPlace&&preceding } { tag }

	sendtag | { //1vx x }
    }

    def endlist force into { @EndListPlace&&preceding } {}

    macro @ListItem     { // listitem		}
    macro @DropListItem { // droplistitem	}
    macro @TagItem      { // tagitem tag	}
    macro @DropTagItem  { // droptagitem tag	}
    macro @RawEndList   { // & endlist // 	}
    macro @EndList      { // & endlist @DP	}

    macro @LI           { @ListItem		}
    macro @DLI          { @DropListItem		}
    macro @TI           { @TagItem 		}
    macro @DTI          { @DropTagItem		}
    macro @REL		{ @RawEndList		}
    macro @EL		{ @EndList		}


    macro @RawLeftList		{ @RawList labelwidth { 0c }                 }
    macro @RawIndentedList	{ @RawList                                   }
    macro @RawQuotedList	{ @RawList rightindent { @DisplayIndent }    }
    macro @RawCentredList	{ @RawList labelwidth {0c} itemindent {0.5rt}}
    macro @RawCenteredList	{ @RawCentredList                            }
    macro @RawNumberedList      { @RawList style { num.	                   } }
    macro @RawParenNumberedList { @RawList style { (num)	           } }
    macro @RawRomanList	        { @RawList style { {@Roman&&num}.          } }
    macro @RawParenRomanList    { @RawList style { ({@Roman&&num})         } }
    macro @RawUCRomanList       { @RawList style { {@UCRoman&&num}.        } }
    macro @RawParenUCRomanList  { @RawList style { ({@UCRoman&&num})       } }
    macro @RawAlphaList	        { @RawList style { {@Alpha&&num}.          } }
    macro @RawParenAlphaList    { @RawList style { ({@Alpha&&num})         } }
    macro @RawUCAlphaList       { @RawList style { {@UCAlpha&&num}.        } }
    macro @RawParenUCAlphaList  { @RawList style { ({@UCAlpha&&num})       } }
    macro @RawBulletList        { @RawList style { @Bullet	           } }
    macro @RawStarList	        { @RawList style { @Star		   } }
    macro @RawDashList	        { @RawList style { --	 	           } }
    macro @RawTaggedList        { @RawList style { @TagPlace               } }
    macro @RawWideTaggedList    { @RawList style { @TagPlace               }
					   labelwidth { @WideIndent }        }
    macro @RawVeryWideTaggedList{ @RawList style { @TagPlace               }
					   labelwidth { @VeryWideIndent }    }


    macro @List			{ @DP @RawList			}
    macro @LeftList		{ @DP @RawLeftList		}
    macro @IndentedList		{ @DP @RawIndentedList		}
    macro @QuotedList		{ @DP @RawQuotedList		}
    macro @CentredList		{ @DP @RawCentredList		}
    macro @CenteredList		{ @DP @RawCenteredList		}
    macro @NumberedList		{ @DP @RawNumberedList		}
    macro @ParenNumberedList	{ @DP @RawParenNumberedList	}
    macro @RomanList		{ @DP @RawRomanList		}
    macro @ParenRomanList	{ @DP @RawParenRomanList	}
    macro @UCRomanList		{ @DP @RawUCRomanList		}
    macro @ParenUCRomanList	{ @DP @RawParenUCRomanList	}
    macro @AlphaList		{ @DP @RawAlphaList		}
    macro @ParenAlphaList	{ @DP @RawParenAlphaList	}
    macro @UCAlphaList		{ @DP @RawUCAlphaList		}
    macro @ParenUCAlphaList	{ @DP @RawParenUCAlphaList	}
    macro @BulletList		{ @DP @RawBulletList		}
    macro @StarList		{ @DP @RawStarList		}
    macro @DashList		{ @DP @RawDashList		}
    macro @TaggedList		{ @DP @RawTaggedList		}
    macro @WideTaggedList	{ @DP @RawWideTaggedList	}
    macro @VeryWideTaggedList	{ @DP @RawVeryWideTaggedList	}

    macro @RLL		{ @RawLeftList          }
    macro @RIL		{ @RawIndentedList	}
    macro @RQL		{ @RawQuotedList	}
    macro @RCL		{ @RawCentredList       }
    macro @RNL		{ @RawNumberedList	}
    macro @RPNL		{ @RawParenNumberedList	}
    macro @RRL		{ @RawRomanList		}
    macro @RPRL		{ @RawParenRomanList	}
    macro @RUCRL	{ @RawUCRomanList	}
    macro @RPUCRL	{ @RawParenUCRomanList	}
    macro @RAL		{ @RawAlphaList		}
    macro @RPAL		{ @RawParenAlphaList	}
    macro @RUCAL	{ @RawUCAlphaList	}
    macro @RPUCAL	{ @RawParenUCAlphaList	}
    macro @RBL		{ @RawBulletList	}
    macro @RSL		{ @RawStarList		}
    macro @RDL		{ @RawDashList		}
    macro @RTL		{ @RawTaggedList	}
    macro @RWTL		{ @RawWideTaggedList	}
    macro @RVWTL	{ @RawVeryWideTaggedList}

    macro @L		{ @List                 }
    macro @LL		{ @LeftList             }
    macro @IL		{ @IndentedList		}
    macro @QL		{ @QuotedList		}
    macro @CL		{ @CentredList          }
    macro @NL		{ @NumberedList		}
    macro @PNL		{ @ParenNumberedList	}
    macro @RL		{ @RomanList		}
    macro @PRL		{ @ParenRomanList	}
    macro @UCRL		{ @UCRomanList		}
    macro @PUCRL	{ @ParenUCRomanList	}
    macro @AL		{ @AlphaList		}
    macro @PAL		{ @ParenAlphaList	}
    macro @UCAL		{ @UCAlphaList		}
    macro @PUCAL	{ @ParenUCAlphaList	}
    macro @BL		{ @BulletList		}
    macro @SL		{ @StarList		}
    macro @DL		{ @DashList		}
    macro @TL		{ @TaggedList		}
    macro @WTL		{ @WideTaggedList	}
    macro @VWTL		{ @VeryWideTaggedList	}


    ###########################################################################
    #                                                                         #
    #  Page size, margins, and boxes.  This code culminates in @OddPage x     #
    #  and @EvenPage x, which produce one odd or even page containing x.      #
    #                                                                         #
    ###########################################################################

    def @Width
    {
	@PageType @Case {
	    Letter      @Yield  612p
	    Tabloid     @Yield  792p
	    Ledger      @Yield 1224p
	    Legal       @Yield  612p
	    Statement   @Yield  396p
	    Executive   @Yield  540p
	    A3          @Yield  842p
	    A4          @Yield  595p
	    A5          @Yield  420p
	    B4          @Yield  729p
	    B5          @Yield  516p
	    Folio       @Yield  612p
	    Quarto      @Yield  610p
	    10x14       @Yield  720p
	    Other	@Yield @PageWidth
	}
    }

    def @Height
    {
	@PageType @Case {
	    Letter      @Yield  792p
	    Tabloid     @Yield 1224p
	    Ledger      @Yield  792p
	    Legal       @Yield 1008p
	    Statement   @Yield  612p
	    Executive   @Yield  720p
	    A3          @Yield 1190p
	    A4          @Yield  842p
	    A5          @Yield  595p
	    B4          @Yield 1032p
	    B5          @Yield  729p
	    Folio       @Yield  936p
	    Quarto      @Yield  780p
	    10x14       @Yield 1008p
	    Other       @Yield @PageHeight
	}
    }

    def @OrientedWidth
    {
	@PageOrientation @Case {
	    { Portrait ReversePortrait }   @Yield @Width
	    { Landscape ReverseLandscape } @Yield @Height
	}
    }

    def @OrientedHeight
    {
	@PageOrientation @Case {
	    { Portrait ReversePortrait }   @Yield @Height
	    { Landscape ReverseLandscape } @Yield @Width
	}
    }

    def @OrientationAngle
    {
	@PageOrientation @Case {
	    Portrait         @Yield 0d
	    Landscape        @Yield 90d
	    ReversePortrait  @Yield 180d
	    ReverseLandscape @Yield 270d
	}
    }

    def @PageBox right x
    {
	@PageBoxType @Case {
	    None      @Yield x
	    Box       @Yield @Box
			margin { @PageBoxMargin }
			paint { @PageBoxPaint }
			linewidth { @PageBoxLineWidth } x
	    CurveBox  @Yield @CurveBox
			margin { @PageBoxMargin }
			paint { @PageBoxPaint }
			linewidth { @PageBoxLineWidth } x
	    ShadowBox @Yield @ShadowBox
			margin { @PageBoxMargin }
			paint { @PageBoxPaint }
			linewidth { @PageBoxLineWidth }
			shadow { @PageBoxShadow } x
	}
    }

    def @Background
    {	
      "LoutPageSet" @Graphic
      {
	@OrientationAngle @Rotate
	@OrientedWidth @Wide @OrientedHeight @High
	{   //@TopMargin ||@OddLeftMargin
	        @HExpand @VExpand @PageBackground
	    ||@OddRightMargin //@FootMargin
	}
      }
    }

    def @MargSet
	left parity
	right x
    {
	{ parity "LoutMargSet" } @Graphic x
    }

    def @OddPage left extra right x
    {
	@Background ||0io
	@OrientationAngle @Rotate
	@OrientedWidth @Wide @OrientedHeight @High
	{   //@TopMargin ||@OddLeftMargin
	        1 @MargSet @PageBox @HExpand { extra // @VExpand x }
	    ||@OddRightMargin //@FootMargin
	}
    }

    def @EvenPage left extra right x
    {
	@Background ||0io
	@OrientationAngle @Rotate
	@OrientedWidth @Wide @OrientedHeight @High
	{   //@TopMargin ||@EvenLeftMargin
	        0 @MargSet @PageBox @HExpand { extra // @VExpand x }
	    ||@EvenRightMargin //@FootMargin
	}
    }


    ###########################################################################
    #                                                                         #
    #  Definitions for page headers and footers.  There are 16 symbols here,  #
    #  in the following pattern:                                              #
    #                                                                         #
    #     @(- | Running)(- | Intro)(Odd | Even)(Top | Foot)Header             #
    #                                                                         #
    #  Running means that running headers are to be used.                     #
    #  Intro means that the header is destined for an introductory page.      #
    #  Odd or Even means whether the page number will be odd or even.         #
    #  Top or Foot means whether the header is for the top or foot of page.   #
    #                                                                         #
    ###########################################################################

    export @Start @MajorNum @MajorTitle @MinorNum @MinorTitle
    def @Runner
	left  @Start
	named @MajorNum   {}
	named @MajorTitle {}
	named @MinorNum   {}
	named @MinorTitle {}
	named @Tag        {}
    { @Null
    }

    def @OddTopHeader
	left @PageHeadersAndStart
	right @PageNum
    {
	@PageHeadersAndStart @Case {
	    None.Start      @Yield @Null
	    None.NonStart   @Yield @Null
	    None.None       @Yield @Null
	    Simple.Start    @Yield @StartOddTop @PageNum
	    Simple.NonStart @Yield @OddTop @PageNum
	    Simple.None     @Yield @Null
	}
    }

    def @OddFootHeader
	left @PageHeadersAndStart
	right @PageNum
    {
	@PageHeadersAndStart @Case {
	    None.Start      @Yield @Null
	    None.NonStart   @Yield @Null
	    None.None       @Yield @Null
	    Simple.Start    @Yield @StartOddFoot @PageNum
	    Simple.NonStart @Yield @OddFoot @PageNum
	    Simple.None     @Yield @Null
	}
    }

    def @EvenTopHeader
	left @PageHeadersAndStart
	right @PageNum
    {
	@PageHeadersAndStart @Case {
	    None.Start      @Yield @Null
	    None.NonStart   @Yield @Null
	    None.None       @Yield @Null
	    Simple.Start    @Yield @StartEvenTop @PageNum
	    Simple.NonStart @Yield @EvenTop @PageNum
	    Simple.None     @Yield @Null
	}
    }

    def @EvenFootHeader
	left @PageHeadersAndStart
	right @PageNum
    {
	@PageHeadersAndStart @Case {
	    None.Start      @Yield @Null
	    None.NonStart   @Yield @Null
	    None.None       @Yield @Null
	    Simple.Start    @Yield @StartEvenFoot @PageNum
	    Simple.NonStart @Yield @EvenFoot @PageNum
	    Simple.None     @Yield @Null
	}
    }

    def @IntroOddTopHeader
	left @PageHeadersAndStart
	right @PageNum
    {
	@PageHeadersAndStart @Case {
	    None.Start      @Yield @Null
	    None.NonStart   @Yield @Null
	    None.None       @Yield @Null
	    Simple.Start    @Yield @IntroStartOddTop @PageNum
	    Simple.NonStart @Yield @IntroOddTop @PageNum
	    Simple.None     @Yield @Null
	}
    }

    def @IntroOddFootHeader
	left @PageHeadersAndStart
	right @PageNum
    {
	@PageHeadersAndStart @Case {
	    None.Start      @Yield @Null
	    None.NonStart   @Yield @Null
	    None.None       @Yield @Null
	    Simple.Start    @Yield @IntroStartOddFoot @PageNum
	    Simple.NonStart @Yield @IntroOddFoot @PageNum
	    Simple.None     @Yield @Null
	}
    }

    def @IntroEvenTopHeader
	left @PageHeadersAndStart
	right @PageNum
    {
	@PageHeadersAndStart @Case {
	    None.Start      @Yield @Null
	    None.NonStart   @Yield @Null
	    None.None       @Yield @Null
	    Simple.Start    @Yield @IntroStartEvenTop @PageNum
	    Simple.NonStart @Yield @IntroEvenTop @PageNum
	    Simple.None     @Yield @Null
	}
    }

    def @IntroEvenFootHeader
	left @PageHeadersAndStart
	right @PageNum
    {
	@PageHeadersAndStart @Case {
	    None.Start      @Yield @Null
	    None.NonStart   @Yield @Null
	    None.None       @Yield @Null
	    Simple.Start    @Yield @IntroStartEvenFoot @PageNum
	    Simple.NonStart @Yield @IntroEvenFoot @PageNum
	    Simple.None     @Yield @Null
	}
    }


    def @RunningOddTopHeader
	left @PageHeadersAndStart
	named @MajorNum   {}
	named @MajorTitle {}
	named @MinorNum   {}
	named @MinorTitle {}
	right @PageNum
    {
	@PageHeadersAndStart @Case {
	    NoTitles.??       @Yield ??
	    NoTitles.Start    @Yield @RunningStartOddTop @PageNum
	    NoTitles.NonStart @Yield @RunningOddTop @PageNum
	    NoTitles.None     @Yield @Null
	    Titles.??         @Yield ??
	    Titles.Start      @Yield @RunningStartOddTop
		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
		    @PageNum
	    Titles.NonStart   @Yield @RunningOddTop
		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
		    @PageNum
	    Titles.None	      @Yield @Null
	}
    }

    def @RunningOddFootHeader
	left @PageHeadersAndStart
	named @MajorNum   {}
	named @MajorTitle {}
	named @MinorNum   {}
	named @MinorTitle {}
	right @PageNum
    {
	@PageHeadersAndStart @Case {
	    NoTitles.??       @Yield @Null
	    NoTitles.Start    @Yield @RunningStartOddFoot @PageNum
	    NoTitles.NonStart @Yield @RunningOddFoot @PageNum
	    NoTitles.None     @Yield @Null
	    Titles.??         @Yield @Null
	    Titles.Start      @Yield @RunningStartOddFoot
		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
		    @PageNum
	    Titles.NonStart   @Yield @RunningOddFoot
		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
		    @PageNum
	    Titles.None	      @Yield @Null
	}
    }

    def @RunningEvenTopHeader
	left @PageHeadersAndStart
	named @MajorNum   {}
	named @MajorTitle {}
	named @MinorNum   {}
	named @MinorTitle {}
	right @PageNum
    {
	@PageHeadersAndStart @Case {
	    NoTitles.??       @Yield ??
	    NoTitles.Start    @Yield @RunningStartEvenTop @PageNum
	    NoTitles.NonStart @Yield @RunningEvenTop @PageNum
	    NoTitles.None     @Yield @Null
	    Titles.??         @Yield ??
	    Titles.Start      @Yield @RunningStartEvenTop
		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
		    @PageNum
	    Titles.NonStart   @Yield @RunningEvenTop
		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
		    @PageNum
	    Titles.None	      @Yield @Null
	}
    }

    def @RunningEvenFootHeader
	left @PageHeadersAndStart
	named @MajorNum   {}
	named @MajorTitle {}
	named @MinorNum   {}
	named @MinorTitle {}
	right @PageNum
    {
	@PageHeadersAndStart @Case {
	    NoTitles.??       @Yield @Null
	    NoTitles.Start    @Yield @RunningStartEvenFoot @PageNum
	    NoTitles.NonStart @Yield @RunningEvenFoot @PageNum
	    NoTitles.None     @Yield @Null
	    Titles.??         @Yield @Null
	    Titles.Start      @Yield @RunningStartEvenFoot
		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
		    @PageNum
	    Titles.NonStart   @Yield @RunningEvenFoot
		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
		    @PageNum
	    Titles.None	      @Yield @Null
	}
    }

    def @RunningIntroOddTopHeader
	left @PageHeadersAndStart
	named @MajorNum   {}
	named @MajorTitle {}
	named @MinorNum   {}
	named @MinorTitle {}
	right @PageNum
    {
	@PageHeadersAndStart @Case {
	    NoTitles.??       @Yield ??
	    NoTitles.Start    @Yield @RunningIntroStartOddTop @PageNum
	    NoTitles.NonStart @Yield @RunningIntroOddTop @PageNum
	    NoTitles.None     @Yield @Null
	    Titles.??         @Yield ??
	    Titles.Start      @Yield @RunningIntroStartOddTop
		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
		    @PageNum
	    Titles.NonStart   @Yield @RunningIntroOddTop
		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
		    @PageNum
	    Titles.None	      @Yield @Null
	}
    }

    def @RunningIntroOddFootHeader
	left @PageHeadersAndStart
	named @MajorNum   {}
	named @MajorTitle {}
	named @MinorNum   {}
	named @MinorTitle {}
	right @PageNum
    {
	@PageHeadersAndStart @Case {
	    NoTitles.??       @Yield @Null
	    NoTitles.Start    @Yield @RunningIntroStartOddFoot @PageNum
	    NoTitles.NonStart @Yield @RunningIntroOddFoot @PageNum
	    NoTitles.None     @Yield @Null
	    Titles.??         @Yield @Null
	    Titles.Start      @Yield @RunningIntroStartOddFoot
		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
		    @PageNum
	    Titles.NonStart   @Yield @RunningIntroOddFoot
		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
		    @PageNum
	    Titles.None	      @Yield @Null
	}
    }

    def @RunningIntroEvenTopHeader
	left @PageHeadersAndStart
	named @MajorNum   {}
	named @MajorTitle {}
	named @MinorNum   {}
	named @MinorTitle {}
	right @PageNum
    {
	@PageHeadersAndStart @Case {
	    NoTitles.??       @Yield ??
	    NoTitles.Start    @Yield @RunningIntroStartEvenTop @PageNum
	    NoTitles.NonStart @Yield @RunningIntroEvenTop @PageNum
	    NoTitles.None     @Yield @Null
	    Titles.??         @Yield ??
	    Titles.Start      @Yield @RunningIntroStartEvenTop
		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
		    @PageNum
	    Titles.NonStart   @Yield @RunningIntroEvenTop
		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
		    @PageNum
	    Titles.None	      @Yield @Null
	}
    }

    def @RunningIntroEvenFootHeader
	left @PageHeadersAndStart
	named @MajorNum   {}
	named @MajorTitle {}
	named @MinorNum   {}
	named @MinorTitle {}
	right @PageNum
    {
	@PageHeadersAndStart @Case {
	    NoTitles.??       @Yield @Null
	    NoTitles.Start    @Yield @RunningIntroStartEvenFoot @PageNum
	    NoTitles.NonStart @Yield @RunningIntroEvenFoot @PageNum
	    NoTitles.None     @Yield @Null
	    Titles.??         @Yield @Null
	    Titles.Start      @Yield @RunningIntroStartEvenFoot
		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
		    @PageNum
	    Titles.NonStart   @Yield @RunningIntroEvenFoot
		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
		    @PageNum
	    Titles.None	      @Yield @Null
	}
    }


    ###########################################################################
    #                                                                         #
    #  Helper definitions for laying out pages.                               #
    #                                                                         #
    ###########################################################################

    def @PageTopPlace		{ @Galley }
    def @PageFootAndTopPlace	{ @Galley }
    def @PageFootNotePlace	{ @Galley }
    def @FullPlace		{ @Galley }
    def @OddFullPlace		{ @Galley }
    def @EvenFullPlace		{ @Galley }
    def @ColTopPlace		{ @Galley }
    def @ColFootAndTopPlace	{ @Galley }
    def @ColPlace		{ @Galley }
    def @ColFootNotePlace	{ @Galley }
    def @IntroFullPlace		{ @Galley }
    def @IntroOddFullPlace	{ @Galley }
    def @IntroEvenFullPlace	{ @Galley }
    def @IntroColPlace		{ @Galley }
    def @IndexPlace		{ @Galley }
    def @IndexAPlace		{ @Galley }
    def @IndexBPlace		{ @Galley }
    def @AfterLinePlace		{ @Galley }

    def @TryAfterLinePlace right x
    {
	x @Case {
	    noforce @Yield @Galley
	    force   @Yield @ForceGalley
	}
    }

    def @PageTopSect
    {
		  @PageTopPlace
	//@MidGap @PageFootAndTopPlace
	//@MidGap @PageTopSect
    }

    def @PageOddTopSection
    {
	@PageTopSect ||@OrientedWidth @FullPlace ||@OrientedWidth @OddFullPlace
    }

    def @PageEvenTopSection
    {
	@PageTopSect ||@OrientedWidth @FullPlace ||@OrientedWidth @EvenFullPlace
    }

    def @PageIntroOddTopSection
    {
	@PageTopSect
	||@OrientedWidth @IntroFullPlace ||@OrientedWidth @IntroOddFullPlace
    }

    def @PageIntroEvenTopSection
    {
	@PageTopSect
	||@OrientedWidth @IntroFullPlace ||@OrientedWidth @IntroEvenFullPlace
    }

    def @PageFootNoteList
    {
		    @PageFootNotePlace
	//@FootGap  @PageFootNoteList
    }

    def @PageFootNoteSection
    {
	            @FootLen @Wide @HLine
	//@FootGap  @PageFootNoteList
    }

    def @PageFootAndTopSect
    {
		  @PageFootAndTopPlace
	//@MidGap @PageFootAndTopSect
    }

    def @PageFootSection
    {
	//@MidGap       @PageFootAndTopSect
	//@FootAboveGap @PageFootNoteSection
    }

    def @ColTopSection
    {
		  @ColTopPlace
	//@MidGap @ColFootAndTopPlace
	//@MidGap @TryAfterLinePlace noforce
	//@MidGap @ColTopSection
    }

    def @RestOfColSection
    {
	          @AfterLinePlace
	//@MidGap @TryAfterLinePlace force
	//@MidGap @ColPlace @NotRevealed
	//@MidGap @RestOfColSection
    }

    def @IntroRestOfColSection
    {
	          @AfterLinePlace
	//@MidGap @TryAfterLinePlace force
	//@MidGap @IntroColPlace @NotRevealed
	//@MidGap @IntroRestOfColSection
    }

    def @ColFootAndTopList { @ColFootAndTopPlace //@TopGap @ColFootAndTopList }

    def @ColFootNoteList
    {
		    @ColFootNotePlace
	//@FootGap  @ColFootNoteList
    }

    def @ColFootNoteSection
    {
	           @FootLen @Wide @HLine
	//@FootGap @ColFootNoteList
    }

    def @ColFootSection
    {
	//@TopGap       @ColFootAndTopList
	//@FootAboveGap @ColFootNoteSection
    }

    def @ColsOf
	left num
	named gap { @ColumnGap }
	right x
    {
	def @Two { x ||gap x }
	def @Four { @Two ||gap @Two }
	def @Eight { @Four ||gap @Four }

	num @Case {
	    1  @Yield { x				}
	    2  @Yield { @Two				}
	    3  @Yield { @Two  ||gap x			}
	    4  @Yield { @Four				}
	    5  @Yield { @Four ||gap x			}
	    6  @Yield { @Four ||gap @Two		}
	    7  @Yield { @Four ||gap @Two  ||gap x	}
	    8  @Yield { @Four ||gap @Four		}
	    9  @Yield { @Four ||gap @Four ||gap x	}
	   10  @Yield { @Four ||gap @Four ||gap @Two	}
	}
    }

    def @EqualWidth right x { 50c @Wide x }	# believe it or not

    def @ColList right num
    {
	@HExpand num @ColsOf @EqualWidth @VExpand
	{
	    @ColTopSection //@TopGap
	    @ColPlace //@MidGap @RestOfColSection // //1rt
	    @OneRow { @ColFootSection }

	}
    }
    
    def @IntroColList right num
    {
	@HExpand num @ColsOf @EqualWidth @VExpand
	{
	    @ColTopSection //@TopGap
	    @IntroColPlace //@MidGap @IntroRestOfColSection // //1rt
	    @OneRow { @ColFootSection }
	}
    }
    
    def @ZeroColList right num
    {
	@HExpand num @ColsOf @EqualWidth 0c @High @ColPlace
    }
    
    def @ZeroIntroColList right num
    {
	@HExpand num @ColsOf @EqualWidth 0c @High @IntroColPlace
    }
    
    def @IndexColList right num
    {
	@HExpand num @ColsOf gap { @IndexColumnGap } @EqualWidth @VExpand @IndexPlace
    }
    
    def @IndexAColList right num
    {
	@HExpand num @ColsOf gap { @IndexAColumnGap } @EqualWidth @VExpand @IndexAPlace
    }
    
    def @IndexBColList right num
    {
	@HExpand num @ColsOf gap { @IndexBColumnGap } @EqualWidth @VExpand @IndexBPlace
    }


    ###########################################################################
    #                                                                         #
    #  Footnotes.                                                             #
    #                                                                         #
    ###########################################################################

    export @Tag count
    def @FootNoteCounterMarker
	named @Tag {}
	named count {}
    {
	@Null
    }

    def @FootNoteNum right tag
    {
	@FootNoteCounterMarker&&tag @Open { @Next count }
    }

    def @FootNoteCounterIncrement
	right tag
    {
	   @FootNoteCounterMarker&&preceding @Tagged tag
	// @FootNoteCounterMarker count { @FootNoteNum tag }
	// @NumberMarker @Tag { tag }
		@Value { @FootNoteNumbers @Num @FootNoteNum tag }
    }

    def @BeginFootNoteCounter
    {
	@FootNoteCounterMarker count { 0 }
    }

    def @FootNote
	named @Tag {}
	named @Location { @FootNoteLocation }
	right x
    {
	def @FootLabel
	{
            @BackEnd @Case {
	        PlainText @Yield { ({@NumberOf @Tag}) }
	        PostScript @Yield @FootNoteFont @Font @FootNoteBreak @Break {
		    +0.3v @VShift { Base 0.8f } @Font @NumberOf @Tag
		}
            }
	}

	def @FootVal
	{
	    @FootNoteFont @Font @FootNoteBreak @Break {
	      { @FootNoteCounterIncrement @Tag & @FootLabel &0.05f } @Insert x
	    }
	}

	def @PageFootNote into { @PageFootNotePlace&&following } { @FootVal }
	def @ColFootNote  into { @ColFootNotePlace&&following  } { @FootVal }

	@Location @Case {
	    ColFoot  @Yield { @Null & @FootLabel & @ColFootNote  }
	    PageFoot @Yield { @Null & @FootLabel & @PageFootNote }
	}
    }


    ###########################################################################
    #                                                                         #
    #  Definitions for page lists.  There are four symbols here, in the       #
    #  following pattern:                                                     #
    #                                                                         #
    #    @(Simple | Running)(- | Intro)PageList                               #
    #                                                                         #
    #  Running means that the page list is to support running headers.        #
    #  Intro means that the page list is an introductory page list.           #
    #  These are then packaged into @PageList and @IntroPageList.             #
    #                                                                         #
    ###########################################################################

    def @SStart right @PageNum
    {
	@PageNum @Case {
	    { 1 0 } @Yield Start
	    else    @Yield NonStart
	}
    }

    def @SimplePageList
	named @ColumnNumber {}
	named @PageHeaders {}
	named extra { No }
	named @AtTop { @Null }
	right @PageNum
    {
        def @SimpleEvenPageList
	    named @ColumnNumber {}
	    named @PageHeaders {}
	    named extra { No }
	    right @PageNum
        {
	        @PageMarker num { @PageNumbers @Num @PageNum }
	    //  @FootNoteThrough @NoDo @BeginFootNoteCounter
	    //  {} @EvenPage
	        {
		    @PageHeaders.NonStart @EvenTopHeader { @PageNumbers @Num @PageNum }
		    //@MidGap @PageEvenTopSection
		    //@MidGap @ColList @ColumnNumber
		    //@MidGap @IndexAColList @IndexAColumnNumber
		    //@MidGap @IndexBColList @IndexBColumnNumber
		    //@MidGap @IndexColList  @IndexColumnNumber
		    // //1rt @OneRow
		    {  //        @PageFootSection
		       //@MidGap @PageHeaders.NonStart @EvenFootHeader { @PageNumbers @Num @PageNum }
		    }
	        }
	    //  @SimplePageList
		    @ColumnNumber { @ColumnNumber }
		    @PageHeaders { @PageHeaders }
		@Next @PageNum
        }

	    @PageMarker num { @PageNumbers @Num @PageNum }
	//  @FootNoteThrough @NoDo @BeginFootNoteCounter
	//  { extra @Then @ZeroColList @ColumnNumber } @OddPage
	    {
		{@PageHeaders.{@SStart @PageNum}} @OddTopHeader
		    { @PageNumbers @Num @PageNum }
		//@MidGap @AtTop
		//@MidGap @PageOddTopSection
		//@MidGap @ColList @ColumnNumber
		//@MidGap @IndexAColList @IndexAColumnNumber
		//@MidGap @IndexBColList @IndexBColumnNumber
		//@MidGap @IndexColList  @IndexColumnNumber
		// //1rt @OneRow
		{  //        @PageFootSection
		   //@MidGap {@PageHeaders.{@SStart @PageNum}} @OddFootHeader
				 { @PageNumbers @Num @PageNum }
		}
	    }
	//  @SimpleEvenPageList
		@ColumnNumber { @ColumnNumber }
		@PageHeaders { @PageHeaders }
	    @Next @PageNum
    }

    def @SimpleIntroPageList
	named @ColumnNumber {}
	named @PageHeaders {}
	named extra { No }
	named @AtTop { @Null }
	right @PageNum
    {
	    @PageMarker num { @IntroPageNumbers @Num @PageNum }
	//  @FootNoteThrough @NoDo @BeginFootNoteCounter
	//  { extra @Then @ZeroIntroColList @ColumnNumber } @OddPage
	    {
		{@PageHeaders.{@SStart @PageNum}} @IntroOddTopHeader
		    { @IntroPageNumbers @Num @PageNum }
		//@MidGap @AtTop
		//@MidGap @PageIntroOddTopSection
		//@MidGap @IntroColList @ColumnNumber
		//@MidGap @IndexAColList @IndexAColumnNumber
		//@MidGap @IndexBColList @IndexBColumnNumber
		//@MidGap @IndexColList  @IndexColumnNumber
		// //1rt @OneRow
		{  //        @PageFootSection
		   //@MidGap
		       {@PageHeaders.{@SStart @PageNum}} @IntroOddFootHeader
			   { @IntroPageNumbers @Num @PageNum }
		}
	    }
	//  @PageMarker num { @IntroPageNumbers @Num @Next @PageNum }
	//  @FootNoteThrough @NoDo @BeginFootNoteCounter
	//  {} @EvenPage @Runner&&following @Open
	    {
		@PageHeaders.NonStart @IntroEvenTopHeader { @IntroPageNumbers @Num @Next @PageNum }
		//@MidGap @PageIntroEvenTopSection
		//@MidGap @IntroColList @ColumnNumber
		//@MidGap @IndexAColList @IndexAColumnNumber
		//@MidGap @IndexBColList @IndexBColumnNumber
		//@MidGap @IndexColList  @IndexColumnNumber
		// //1rt @OneRow
		{  //        @PageFootSection
		   //@MidGap @PageHeaders.NonStart @IntroEvenFootHeader
				{ @IntroPageNumbers @Num @Next @PageNum }
		}
	    }
	//  @SimpleIntroPageList
		@ColumnNumber { @ColumnNumber }
		@PageHeaders { @PageHeaders }
	    @Next @Next @PageNum
    }

    def @RunningPageList
	named @ColumnNumber {}
	named @PageHeaders {}
	named extra { No }
	named @AtTop { @Null }
	right @PageNum
    {
        def @RunningEvenPageList
	    named @ColumnNumber {}
	    named @PageHeaders {}
	    right @PageNum
        {
	        @PageMarker num { @PageNumbers @Num @PageNum }
	    //  @FootNoteThrough @NoDo @BeginFootNoteCounter
	    //  {} @EvenPage @Runner&&following @Open
	        {
		    @PageHeaders.@Start @RunningEvenTopHeader
			@MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
			@MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
			{ @PageNumbers @Num @PageNum }
		    //@MidGap @PageEvenTopSection
		    //@MidGap @ColList @ColumnNumber
		    //@MidGap @IndexAColList @IndexAColumnNumber
		    //@MidGap @IndexBColList @IndexBColumnNumber
		    //@MidGap @IndexColList  @IndexColumnNumber
		    // //1rt @OneRow
		    {  //        @PageFootSection
		       //@MidGap @PageHeaders.@Start @RunningEvenFootHeader
			   @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
			   @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
			   { @PageNumbers @Num @PageNum }
		    }
	        }
	    //  @RunningPageList
		    @ColumnNumber { @ColumnNumber }
		    @PageHeaders { @PageHeaders }
		@Next @PageNum
        }

	    @PageMarker num { @PageNumbers @Num @PageNum }
	//  @FootNoteThrough @NoDo @BeginFootNoteCounter
	//  { extra @Then @ZeroColList @ColumnNumber } @OddPage @Runner&&following @Open
	    {
		@PageHeaders.@Start @RunningOddTopHeader
		    @MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
		    @MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
		    { @PageNumbers @Num @PageNum }
		//@MidGap @AtTop
		//@MidGap @PageOddTopSection
		//@MidGap @ColList @ColumnNumber
		//@MidGap @IndexAColList @IndexAColumnNumber
		//@MidGap @IndexBColList @IndexBColumnNumber
		//@MidGap @IndexColList  @IndexColumnNumber
		// //1rt @OneRow
		{  //        @PageFootSection
		   //@MidGap @PageHeaders.@Start @RunningOddFootHeader
			@MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
			@MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
			{ @PageNumbers @Num @PageNum }
		}
	    }
	//  @RunningEvenPageList
		@ColumnNumber { @ColumnNumber }
		@PageHeaders { @PageHeaders }
	    @Next @PageNum
    }

    def @RunningIntroPageList
	named @ColumnNumber {}
	named @PageHeaders {}
	named @AtTop { @Null }
	named extra { No }
	right @PageNum
    {
	    @PageMarker num { @IntroPageNumbers @Num @PageNum }
	//  @FootNoteThrough @NoDo @BeginFootNoteCounter
	//  { extra @Then @ZeroIntroColList @ColumnNumber } @OddPage @Runner&&following @Open
	    {
		@PageHeaders.@Start @RunningIntroOddTopHeader
			@MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
			@MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
			{ @IntroPageNumbers @Num @PageNum }
		//@MidGap @AtTop
		//@MidGap @PageIntroOddTopSection
		//@MidGap @IntroColList @ColumnNumber
		// //1rt @OneRow
		{  //        @PageFootSection
		   //@MidGap @PageHeaders.@Start @RunningIntroOddFootHeader
			@MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
			@MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
			{ @IntroPageNumbers @Num @PageNum }
		}
	    }
	//  @PageMarker num { @IntroPageNumbers @Num @Next @PageNum }
	//  @FootNoteThrough @NoDo @BeginFootNoteCounter
	//  {} @EvenPage @Runner&&following @Open
	    {
		@PageHeaders.@Start @RunningIntroEvenTopHeader
			@MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
			@MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
			{ @IntroPageNumbers @Num @Next @PageNum }
		//@MidGap @PageIntroEvenTopSection
		//@MidGap @IntroColList @ColumnNumber
		//@MidGap @IndexAColList @IndexAColumnNumber
		//@MidGap @IndexBColList @IndexBColumnNumber
		//@MidGap @IndexColList  @IndexColumnNumber
		// //1rt @OneRow
		{  //        @PageFootSection
		   //@MidGap @PageHeaders.@Start @RunningIntroEvenFootHeader
			@MajorNum { @MajorNum } @MajorTitle { @MajorTitle }
			@MinorNum { @MinorNum } @MinorTitle { @MinorTitle }
			{ @IntroPageNumbers @Num @Next @PageNum }
		}
	    }
	//  @RunningIntroPageList
		@PageHeaders { @PageHeaders }
		@ColumnNumber { @ColumnNumber }
	    @Next @Next @PageNum
    }

    def @PageList
	named @ColumnNumber {}
	named @PageHeaders {}
	named extra { No }
	named @AtTop { @Null }
	right @FirstPageNum
    {
	@PageHeaders @Case {
	    { None Simple } @Yield @SimplePageList
		  @ColumnNumber { @ColumnNumber }
		  @PageHeaders { @PageHeaders }
		  extra { extra }
		  @AtTop { @AtTop }
		  @FirstPageNum
	    { Running Titles } @Yield @RunningPageList
		  @ColumnNumber { @ColumnNumber }
		  @PageHeaders { @PageHeaders }
		  extra { extra }
		  @AtTop { @AtTop }
		  @FirstPageNum
	}
	//
	@PageMarker&&preceding @Tagged last.page
    }

    def @IntroPageList
	named @ColumnNumber {}
	named @PageHeaders {}
	named extra { No }
	named @AtTop { @Null }
	right @FirstPageNum
    {
	@PageHeaders @Case {
	    { None Simple } @Yield @SimpleIntroPageList
		  @ColumnNumber { @ColumnNumber }
		  @PageHeaders { @PageHeaders }
		  extra { extra }
		  @AtTop { @AtTop }
		  @FirstPageNum
	    { Running Titles } @Yield @RunningIntroPageList
		  @ColumnNumber { @ColumnNumber }
		  @PageHeaders { @PageHeaders }
		  extra { extra }
		  @AtTop { @AtTop }
		  @FirstPageNum
	}
    }


    ###########################################################################
    #                                                                         #
    #  Table of contents (including lists of figures and tables).             #
    #                                                                         #
    ###########################################################################

    def @ContentsItem
	named indent { 0f }
	named number {}
	named title {}
	named pagenum {}
	named pregap { @ContentsGap }
	named postgap { 0c }
	named protect { No }
    {
	def @Leaders { @ContentsLeader &@ContentsLeaderGap @Leaders }

	def @RightPart
	{
	    @ContentsRightWidth @Wide {
		# &@ContentsLeaderGap @Leaders &@ContentsLeaderGap
		&1rt { pagenum //0.5vx }
	    }
	}

	def @Item
	{
	    |indent number @DotSep @HExpand {
	        title & @ContentsLeaderGap @Wide &1rt @OneCol {
		    @Leaders & @RightPart &0io
	        }
	    }
	    |@ContentsRightWidth
	}

	//pregap
	//0.5vx
	protect @Case {
	    No    @Yield @Item
	    Yes   @Yield @Protect @Item
	}
	//postgap
    }

    def @ContentsPlace { @Galley }
    def @FigureContentsPlace { @Galley }
    def @TableContentsPlace { @Galley }

    def @SendContents into { @ContentsPlace&&preceding }
	right x
    {
	x
    }

    def @SendFigureContents into { @FigureContentsPlace&&preceding }
	right x
    {
	x
    }

    def @SendTableContents into { @TableContentsPlace&&preceding }
	right x
    {
	x
    }

    def @ContentsEntry
	left  wanted
	named indent { 0f }
	named number {}
	named title {}
	named pagenum {}
	named pregap { @ContentsGap }
	named postgap { 0c }
    {
	@MakeContents.wanted @Case {
	    Yes.Yes   @Yield { @SendContents @ContentsItem
				   indent { indent }
				   number { number }
				   title { title }
				   pagenum { pagenum }
				   pregap { pregap }
				   postgap { postgap }
			     }
	    else      @Yield @Null
	}
    }

    def @FigureContentsEntry
	left  wanted
	named indent { 0f }
	named number {}
	named title {}
	named pagenum {}
	named pregap { @ContentsGap }
	named postgap { 0c }
    {
	@MakeFigureContents.wanted @Case {
	    Yes.Yes   @Yield { @SendFigureContents @ContentsItem
				   indent { indent }
				   number { number }
				   title { title }
				   pagenum { pagenum }
				   pregap { pregap }
				   postgap { postgap }
			     }
	    else      @Yield @Null
	}
    }

    def @TableContentsEntry
	left  wanted
	named indent { 0f }
	named number {}
	named title {}
	named pagenum {}
	named pregap { @ContentsGap }
	named postgap { 0c }
    {
	@MakeTableContents.wanted @Case {
	    Yes.Yes   @Yield { @SendTableContents @ContentsItem
				   indent { indent }
				   number { number }
				   title { title }
				   pagenum { pagenum }
				   pregap { pregap }
				   postgap { postgap }
			     }
	    else      @Yield @Null
	}
    }

    def @MajorContentsEntry
	left  wanted
	named indent { 0f }
	named number {}
	named title {}
	named pagenum {}
	named pregap { @ContentsGapAbove }
	named postgap { @ContentsGapBelow }
    {
	@MakeContents.wanted @Case {
	    Yes.Yes   @Yield { @SendContents @ContentsItem
				   indent { indent }
				   number { @B number }
				   title { @B title }
				   pagenum { pagenum }
				   pregap { pregap }
				   postgap { postgap }
			     }
	    else      @Yield @Null
	}
    }

    def @VeryMajorContentsEntry
	left  wanted
	named indent { 0.5rt }
	named title {}
	named pregap { @ContentsGapAbove }
	named postgap { @ContentsGapBelow }
    {
	def item
	{
	    //pregap
	    //0.5vx
	    |indent @B @OneCol title |
	    //0.5vx
	    //postgap
	}

	@MakeContents.wanted @Case {
	    Yes.Yes   @Yield @SendContents item
	    else      @Yield @Null
	}

    }

    def @ContentsSection
    {
	def @ContentsList { @ContentsPlace // @ContentsList }

	@MakeContents @Case {
	    { Yes Bypass }  @Yield @ContentsList
	    else	    @Yield @Null
	}
    }

    def @FigureContentsSection
    {
	def @FigureContentsList { @FigureContentsPlace // @FigureContentsList }

	@MakeFigureContents @Case {
	    { Yes Bypass }  @Yield @FigureContentsList
	    else	    @Yield @Null
	}
    }

    def @TableContentsSection
    {
	def @TableContentsList { @TableContentsPlace // @TableContentsList }

	@MakeTableContents @Case {
	    { Yes Bypass }  @Yield @TableContentsList
	    else	    @Yield @Null
	}
    }

    ###########################################################################
    #                                                                         #
    #  Bypass table of contents.                                              #
    #                                                                         #
    ###########################################################################

    def @BypassContentsEntry into { @ContentsPlace&&preceding }
	named indent { 0f }
	named number {}
	named title {}
	named pagenum {}
    {
	@MakeContents @Case {
	    Bypass @Yield { @ContentsItem
				indent { indent }
				number { number }
				title { title }
				pagenum { pagenum }
				pregap { @ContentsGap }
				postgap { 0c }
			  }
	    else  @Yield  @Null
	}
    }

    def @BypassFigureContentsEntry into { @FigureContentsPlace&&preceding }
	named indent { 0f }
	named number {}
	named title {}
	named pagenum {}
    {
	@MakeFigureContents @Case {
	    Bypass @Yield { @ContentsItem
				indent { indent }
				number { number }
				title { title }
				pagenum { pagenum }
				pregap { @ContentsGap }
				postgap { 0c }
			  }
	    else  @Yield  @Null
	}
    }

    def @BypassTableContentsEntry into { @TableContentsPlace&&preceding }
	named indent { 0f }
	named number {}
	named title {}
	named pagenum {}
    {
	@MakeTableContents @Case {
	    Bypass @Yield { @ContentsItem
				indent { indent }
				number { number }
				title { title }
				pagenum { pagenum }
				pregap { @ContentsGap }
				postgap { 0c }
			  }
	    else  @Yield  @Null
	}
    }

    def @BypassMajorContentsEntry into { @ContentsPlace&&preceding }
	named indent { 0f }
	named number {}
	named title {}
	named pagenum {}
    {
	@MakeContents @Case {
	    Bypass @Yield { @ContentsItem
				indent { indent }
				number { @B number }
				title { @B title }
				pagenum { pagenum }
				pregap { @ContentsGapAbove }
				postgap { @ContentsGapBelow }
			  }
	    else  @Yield  @Null
	}
    }


    ###########################################################################
    #                                                                         #
    #  Endnotes.                                                              #
    #                                                                         #
    ###########################################################################

    export num
    def @EndNoteList
	named @Tag {}
	right num
    {
	@Galley //@EndNoteGap @EndNoteList @Next num
    }

    def endtag right num
    {
        @BackEnd @Case {
	    PlainText @Yield {
	        ({@EndNoteNumbers @Num num})
	    }
	    PostScript @Yield {
	        +0.3v @VShift 0.8f @Font @EndNoteNumbers @Num num
	    }
        }
    }

    def @EndNote
	named @Tag {}
	right x
    {
	def ftag
	{
	    @EndNoteFont @Font @EndNoteList&&@Tag @Open { endtag num }
	}

	def @ENote into { @EndNoteList&&following }
	{
	    @EndNoteFont @Font @EndNoteBreak @Break
	    { @EndNoteList&&preceding @Tagged @Tag  ftag & x }
	}

	@Null & @EndNoteFont @Font ftag & @ENote
    }


    ###########################################################################
    #                                                                         #
    #  Margin Notes.                                                          #
    #                                                                         #
    ###########################################################################

    def @ZeroSize right x
    {
	@HContract @VContract { ^/0io |0io @OneCol @OneRow x |0io /0io }
    }

    def @MargPut
	left parity
	right x
    {
	@MarginNoteFont @Font @MarginNoteBreak @Break @ZeroSize
	{
	    { parity "LoutMargShift gsave" // "grestore" } @Graphic
	    {
		|@MarginNoteHGap @MarginNoteWidth @Wide @OneRow x
		|@MarginNoteHGap //@MarginNoteVGap
	    }
	}
    }

    def @LeftNote  right x { @Null & 0 @MargPut x }
    def @RightNote right x { @Null & 1 @MargPut x }
    def @OuterNote right x { @Null & 2 @MargPut x }
    def @InnerNote right x { @Null & 3 @MargPut x }


    ###########################################################################
    #                                                                         #
    #  @Place: places an object at an arbitrary point on the page.            #
    #                                                                         #
    ###########################################################################

    def @Place
      named x
	named "+" precedence 96 associativity left left a right b { a b "add" }
	named "-" precedence 96 associativity left left a right b { a b "sub" }
	named "/" precedence 97 associativity left left a right b { a b "div" }
	named "*" precedence 98 associativity left left a right b { a b "mul" }
	named c   precedence 99                    left a         { a "cm"    }
	named i   precedence 99                    left a         { a "in"    }
	named e   precedence 99                    left a         { a "em"    }
	named p   precedence 99                    left a         { a "pt"    }
	named f   precedence 99                    left a         { a "ft"    }
	named s   precedence 99                    left a         { a "sp"    }
	named v   precedence 99                    left a         { a "vs"    }
	named cm  precedence 99                    left a         { a "cm"    }
	named in  precedence 99                    left a         { a "in"    }
	named em  precedence 99                    left a         { a "em"    }
	named pt  precedence 99                    left a         { a "pt"    }
	named ft  precedence 99                    left a         { a "ft"    }
	named sp  precedence 99                    left a         { a "sp"    }
	named vs  precedence 99                    left a         { a "vs"    }
	{ 0 }
      named y
	named "+" precedence 96 associativity left left a right b { a b "add" }
	named "-" precedence 96 associativity left left a right b { a b "sub" }
	named "/" precedence 97 associativity left left a right b { a b "div" }
	named "*" precedence 98 associativity left left a right b { a b "mul" }
	named c   precedence 99                    left a         { a "cm"    }
	named i   precedence 99                    left a         { a "in"    }
	named e   precedence 99                    left a         { a "em"    }
	named p   precedence 99                    left a         { a "pt"    }
	named f   precedence 99                    left a         { a "ft"    }
	named s   precedence 99                    left a         { a "sp"    }
	named v   precedence 99                    left a         { a "vs"    }
	named cm  precedence 99                    left a         { a "cm"    }
	named in  precedence 99                    left a         { a "in"    }
	named em  precedence 99                    left a         { a "em"    }
	named pt  precedence 99                    left a         { a "pt"    }
	named ft  precedence 99                    left a         { a "ft"    }
	named sp  precedence 99                    left a         { a "sp"    }
	named vs  precedence 99                    left a         { a "vs"    }
	{ 0 }
      right val
    {
	@ZeroSize {
	    { "LoutPageDict begin matr setmatrix" x y "translate end gsave"
	      // "grestore" } @Graphic val
	}
    }


    ###########################################################################
    #                                                                         #
    #   @Theorem, @Proof, and @EndProof                                       #
    #                                                                         #
    ###########################################################################

    export @Tag val
    def @TheoremCounterMarker
	named @Tag {}
	named val {}
    {
	@Null
    }

    def @BeginTheoremCounter
	right prefix
    {
	@TheoremCounterMarker val { prefix @DotJoin 0 }
    }

    def @TheoremNum right tag
    {
	@TheoremCounterMarker&&tag @Open { @Next val }
    }

    def @TheoremCounterIncrement
	right tag
    {
	@TheoremCounterMarker&&preceding @Tagged tag
	@TheoremCounterMarker val { @TheoremNum tag }
	@NumberMarker @Tag { tag } @Value { @TheoremNum tag }
    }

    def @Theorem
       named @Tag {}
       named @Title {}
       right x
    {
	def @TheoremTitle
	{
	   @Title @Case {
		""   @Yield @Null
		else @Yield (@Title)
	   }
	}

	{
	    @PageMarker&&preceding @Tagged @Tag
	    @TheoremCounterIncrement @Tag
	    @B { theorem @WordVal @TheoremWord @TheoremNum @Tag @TheoremTitle: } &2s
	} @Insert x
    }

    macro @Proof { @B { {proof @WordVal @ProofWord}: } &2s }

    macro @EndProof { &1rt @Box {} }


    ###########################################################################
    #                                                                         #
    #   @Definition                                                           #
    #                                                                         #
    ###########################################################################

    export @Tag val
    def @DefinitionCounterMarker
	named @Tag {}
	named val {}
    {
	@Null
    }

    def @BeginDefinitionCounter
	right prefix
    {
	@DefinitionCounterMarker val { prefix @DotJoin 0 }
    }

    def @DefinitionNum right tag
    {
	@DefinitionCounterMarker&&tag @Open { @Next val }
    }

    def @DefinitionCounterIncrement
	right tag
    {
	@DefinitionCounterMarker&&preceding @Tagged tag
	@DefinitionCounterMarker val { @DefinitionNum tag }
	@NumberMarker @Tag { tag } @Value { @DefinitionNum tag }
    }

    def @Definition
       named @Tag {}
       named @Title {}
       right x
    {
	def @DefinitionTitle
	{
	   @Title @Case {
		""   @Yield @Null
		else @Yield (@Title)
	   }
	}

	{
	    @PageMarker&&preceding @Tagged @Tag
	    @DefinitionCounterIncrement @Tag
	    @B { definition @WordVal @DefinitionWord @DefinitionNum
		  @Tag @DefinitionTitle: } &2s
	} @Insert x
    }


    ###########################################################################
    #                                                                         #
    #   @Claim                                                                #
    #                                                                         #
    ###########################################################################

    export @Tag val
    def @ClaimCounterMarker
	named @Tag {}
	named val {}
    {
	@Null
    }

    def @BeginClaimCounter
	right prefix
    {
	@ClaimCounterMarker val { prefix @DotJoin 0 }
    }

    def @ClaimNum right tag
    {
	@ClaimCounterMarker&&tag @Open { @Next val }
    }

    def @ClaimCounterIncrement
	right tag
    {
	@ClaimCounterMarker&&preceding @Tagged tag
	@ClaimCounterMarker val { @ClaimNum tag }
	@NumberMarker @Tag { tag } @Value { @ClaimNum tag }
    }

    def @Claim
       named @Tag {}
       named @Title {}
       right x
    {
	def @ClaimTitle
	{
	   @Title @Case {
		""   @Yield @Null
		else @Yield (@Title)
	   }
	}

	{
	    @PageMarker&&preceding @Tagged @Tag
	    @ClaimCounterIncrement @Tag
	    @B { claim @WordVal @ClaimWord @ClaimNum @Tag @ClaimTitle: } &2s
	} @Insert x
    }


    ###########################################################################
    #                                                                         #
    #   @Proposition                                                          #
    #                                                                         #
    ###########################################################################

    export @Tag val
    def @PropositionCounterMarker
	named @Tag {}
	named val {}
    {
	@Null
    }

    def @BeginPropositionCounter
	right prefix
    {
	@PropositionCounterMarker val { prefix @DotJoin 0 }
    }

    def @PropositionNum right tag
    {
	@PropositionCounterMarker&&tag @Open { @Next val }
    }

    def @PropositionCounterIncrement
	right tag
    {
	@PropositionCounterMarker&&preceding @Tagged tag
	@PropositionCounterMarker val { @PropositionNum tag }
	@NumberMarker @Tag { tag } @Value { @PropositionNum tag }
    }

    def @Proposition
       named @Tag {}
       named @Title {}
       right x
    {
	def @PropositionTitle
	{
	   @Title @Case {
		""   @Yield @Null
		else @Yield (@Title)
	   }
	}

	{
	    @PageMarker&&preceding @Tagged @Tag
	    @PropositionCounterIncrement @Tag
	    @B { proposition @WordVal @PropositionWord @PropositionNum
				 @Tag @PropositionTitle: } &2s
	} @Insert x
    }


    ###########################################################################
    #                                                                         #
    #   @Lemma                                                                #
    #                                                                         #
    ###########################################################################

    export @Tag val
    def @LemmaCounterMarker
	named @Tag {}
	named val {}
    {
	@Null
    }

    def @BeginLemmaCounter
	right prefix
    {
	@LemmaCounterMarker val { prefix @DotJoin 0 }
    }

    def @LemmaNum right tag
    {
	@LemmaCounterMarker&&tag @Open { @Next val }
    }

    def @LemmaCounterIncrement
	right tag
    {
	@LemmaCounterMarker&&preceding @Tagged tag
	@LemmaCounterMarker val { @LemmaNum tag }
	@NumberMarker @Tag { tag } @Value { @LemmaNum tag }
    }

    def @Lemma
       named @Tag {}
       named @Title {}
       right x
    {
	def @LemmaTitle
	{
	   @Title @Case {
		""   @Yield @Null
		else @Yield (@Title)
	   }
	}

	{
	    @PageMarker&&preceding @Tagged @Tag
	    @LemmaCounterIncrement @Tag
	    @B { lemma @WordVal @LemmaWord @LemmaNum @Tag @LemmaTitle: } &2s
	} @Insert x
    }


    ###########################################################################
    #                                                                         #
    #   @Corollary                                                            #
    #                                                                         #
    ###########################################################################

    export @Tag val
    def @CorollaryCounterMarker
	named @Tag {}
	named val {}
    {
	@Null
    }

    def @BeginCorollaryCounter
	right prefix
    {
	@CorollaryCounterMarker val { prefix @DotJoin 0 }
    }

    def @CorollaryNum right tag
    {
	@CorollaryCounterMarker&&tag @Open { @Next val }
    }

    def @CorollaryCounterIncrement
	right tag
    {
	@CorollaryCounterMarker&&preceding @Tagged tag
	@CorollaryCounterMarker val { @CorollaryNum tag }
	@NumberMarker @Tag { tag } @Value { @CorollaryNum tag }
    }

    def @Corollary
       named @Tag {}
       named @Title {}
       right x
    {
	def @CorollaryTitle
	{
	   @Title @Case {
		""   @Yield @Null
		else @Yield (@Title)
	   }
	}

	{
	    @PageMarker&&preceding @Tagged @Tag
	    @CorollaryCounterIncrement @Tag
	    @B { corollary @WordVal @CorollaryWord @CorollaryNum
			     @Tag @CorollaryTitle: } &2s
	} @Insert x
    }


    ###########################################################################
    #                                                                         #
    #   @Example                                                              #
    #                                                                         #
    ###########################################################################

    export @Tag val
    def @ExampleCounterMarker
	named @Tag {}
	named val {}
    {
	@Null
    }

    def @BeginExampleCounter
	right prefix
    {
	@ExampleCounterMarker val { prefix @DotJoin 0 }
    }

    def @ExampleNum right tag
    {
	@ExampleCounterMarker&&tag @Open { @Next val }
    }

    def @ExampleCounterIncrement
	right tag
    {
	@ExampleCounterMarker&&preceding @Tagged tag
	@ExampleCounterMarker val { @ExampleNum tag }
	@NumberMarker @Tag { tag } @Value { @ExampleNum tag }
    }

    def @Example
       named @Tag {}
       named @Title {}
       right x
    {
	def @ExampleTitle
	{
	   @Title @Case {
		""   @Yield @Null
		else @Yield (@Title)
	   }
	}

	{
	    @PageMarker&&preceding @Tagged @Tag
	    @ExampleCounterIncrement @Tag
	    @B { example @WordVal @ExampleWord @ExampleNum @Tag @ExampleTitle: } &2s
	} @Insert x
    }

    ###########################################################################
    #                                                                         #
    #  @BeginAllCounters - begin all counters                                 #
    #                                                                         #
    ###########################################################################

    def @BeginAllCounters
	left condition
	right prefix
    {
	condition @Then {
	    @BeginTheoremCounter prefix
	    @BeginDefinitionCounter prefix
	    @BeginClaimCounter prefix
	    @BeginPropositionCounter prefix
	    @BeginLemmaCounter prefix
	    @BeginCorollaryCounter prefix
	    @BeginExampleCounter prefix
	}
    }


    ###########################################################################
    #                                                                         #
    #  @Reference - a reference.                                              #
    #                                                                         #
    ###########################################################################

    export @Tag @Type @Abstract @Address @Annote @Author @Day @Edition
	   @HowPublished @InAuthor @InTitle @Institution @Journal @Keywords
	   @Label @Month @Note @Number @Organization @Page @Pages @Pinpoint
	   @Publisher @Title @TitleNote @TRType @URL @Volume @Year

    def @Reference
	named @Tag			{}
	named @Type			{}
	named @Abstract			{}
	named @Address			{}
	named @Annote			{}
	named @Author			{}
	named @Day			{}
	named @Edition			{}
	named @HowPublished		{}
	named @InAuthor			{}
	named @InTitle			{}
	named @Institution		{}
	named @Journal			{}
	named @Keywords			{}
	named @Label			{}
	named @Month			{}
	named @Note			{}
	named @Number			{}
	named @Organization		{}
	named @Page			{}
	named @Pages			{}
	named @Pinpoint			{}
	named @Publisher		{}
	named @Title			{}
	named @TitleNote		{}
	named @TRType			{}
	named @URL
	  named "/"  { "/"  &0.1p }
	  named "//" { "//" &0.1p }	{}
	named @Volume			{}
	named @Year			{}
    { @Null }


    ###########################################################################
    #                                                                         #
    #  @CiteLabel - the value of the label of a reference within a citation.  #
    #                                                                         #
    ###########################################################################

    def @CiteLabel
	left label
	right tag 
    {
	@RefCiteLabels
	    @RefNum       { @NumberOf tag				}
	    @Tag          { tag						}
	    @Type         { @Reference&&tag @Open { @Type }		}
	    @Abstract     { @Reference&&tag @Open { @Abstract }		}
	    @Address      { @Reference&&tag @Open { @Address }		}
	    @Annote       { @Reference&&tag @Open { @Annote }		}
	    @Author       { @Reference&&tag @Open { @Author }		}
	    @Day          { @Reference&&tag @Open { @Day }		}
	    @Edition      { @Reference&&tag @Open { @Edition }		}
	    @HowPublished { @Reference&&tag @Open { @HowPublished }	}
	    @InAuthor     { @Reference&&tag @Open { @InAuthor }		}
	    @InTitle      { @Reference&&tag @Open { @InTitle }		}
	    @Institution  { @Reference&&tag @Open { @Institution }	}
	    @Journal      { @Reference&&tag @Open { @Journal }		}
	    @Keywords     { @Reference&&tag @Open { @Keywords }		}

	    @Label        { label @Case {
			      "" @Yield {@Reference&&tag @Open {@Label}}
			      else @Yield label
			    }						}

	    @Month        { @Reference&&tag @Open { @Month }		}
	    @Note         { @Reference&&tag @Open { @Note }		}
	    @Number       { @Reference&&tag @Open { @Number }		}
	    @Organization { @Reference&&tag @Open { @Organization }	}
	    @Page         { @Reference&&tag @Open { @Page }		}
	    @Pages        { @Reference&&tag @Open { @Pages }		}
	    @Pinpoint     { @Reference&&tag @Open { @Pinpoint }		}
	    @Publisher    { @Reference&&tag @Open { @Publisher }	}
	    @Title        { @Reference&&tag @Open { @Title }		}
	    @TitleNote    { @Reference&&tag @Open { @TitleNote }	}
	    @TRType       { @Reference&&tag @Open { @TRType }		}
	    @Volume       { @Reference&&tag @Open { @Volume }		}
	    @Year         { @Reference&&tag @Open { @Year }		}
    }


    ###########################################################################
    #                                                                         #
    #  @ListLabel - the value of the label of a reference within a ref list.  #
    #                                                                         #
    ###########################################################################

    def @ListLabel
	left label
	right tag 
    {
	@RefListLabels
	    @RefNum       { @NumberOf tag				}
	    @Tag          { tag						}
	    @Type         { @Reference&&tag @Open { @Type }		}
	    @Abstract     { @Reference&&tag @Open { @Abstract }		}
	    @Address      { @Reference&&tag @Open { @Address }		}
	    @Annote       { @Reference&&tag @Open { @Annote }		}
	    @Author       { @Reference&&tag @Open { @Author }		}
	    @Day          { @Reference&&tag @Open { @Day }		}
	    @Edition      { @Reference&&tag @Open { @Edition }		}
	    @HowPublished { @Reference&&tag @Open { @HowPublished }	}
	    @InAuthor     { @Reference&&tag @Open { @InAuthor }		}
	    @InTitle      { @Reference&&tag @Open { @InTitle }		}
	    @Institution  { @Reference&&tag @Open { @Institution }	}
	    @Journal      { @Reference&&tag @Open { @Journal }		}
	    @Keywords     { @Reference&&tag @Open { @Keywords }		}

	    @Label        { label @Case {
			      "" @Yield {@Reference&&tag @Open {@Label}}
			      else @Yield label
			    }						}

	    @Month        { @Reference&&tag @Open { @Month }		}
	    @Note         { @Reference&&tag @Open { @Note }		}
	    @Number       { @Reference&&tag @Open { @Number }		}
	    @Organization { @Reference&&tag @Open { @Organization }	}
	    @Page         { @Reference&&tag @Open { @Page }		}
	    @Pages        { @Reference&&tag @Open { @Pages }		}
	    @Pinpoint     { @Reference&&tag @Open { @Pinpoint }		}
	    @Publisher    { @Reference&&tag @Open { @Publisher }	}
	    @Title        { @Reference&&tag @Open { @Title }		}
	    @TitleNote    { @Reference&&tag @Open { @TitleNote }	}
	    @TRType       { @Reference&&tag @Open { @TRType }		}
	    @Volume       { @Reference&&tag @Open { @Volume }		}
	    @Year         { @Reference&&tag @Open { @Year }		}
    }


    ###########################################################################
    #                                                                         #
    #  @SortKey - the value of the sort key of a reference.                   #
    #                                                                         #
    ###########################################################################

    def @SortKey
	left label
	right tag 
    {
	@RefListSortKey
	    @Tag          { tag						}
	    @Type         { @Reference&&tag @Open { @Type }		}
	    @Abstract     { @Reference&&tag @Open { @Abstract }		}
	    @Address      { @Reference&&tag @Open { @Address }		}
	    @Annote       { @Reference&&tag @Open { @Annote }		}
	    @Author       { @Reference&&tag @Open { @Author }		}
	    @Day          { @Reference&&tag @Open { @Day }		}
	    @Edition      { @Reference&&tag @Open { @Edition }		}
	    @HowPublished { @Reference&&tag @Open { @HowPublished }	}
	    @InAuthor     { @Reference&&tag @Open { @InAuthor }		}
	    @InTitle      { @Reference&&tag @Open { @InTitle }		}
	    @Institution  { @Reference&&tag @Open { @Institution }	}
	    @Journal      { @Reference&&tag @Open { @Journal }		}
	    @Keywords     { @Reference&&tag @Open { @Keywords }		}

	    @Label        { label @Case {
			      "" @Yield {@Reference&&tag @Open {@Label}}
			      else @Yield label
			    }						}

	    @Month        { @Reference&&tag @Open { @Month }		}
	    @Note         { @Reference&&tag @Open { @Note }		}
	    @Number       { @Reference&&tag @Open { @Number }		}
	    @Organization { @Reference&&tag @Open { @Organization }	}
	    @Page         { @Reference&&tag @Open { @Page }		}
	    @Pages        { @Reference&&tag @Open { @Pages }		}
	    @Pinpoint     { @Reference&&tag @Open { @Pinpoint }		}
	    @Publisher    { @Reference&&tag @Open { @Publisher }	}
	    @Title        { @Reference&&tag @Open { @Title }		}
	    @TitleNote    { @Reference&&tag @Open { @TitleNote }	}
	    @TRType       { @Reference&&tag @Open { @TRType }		}
	    @Volume       { @Reference&&tag @Open { @Volume }		}
	    @Year         { @Reference&&tag @Open { @Year }		}
    }


    ###########################################################################
    #                                                                         #
    #  @RefStyle - a reference printing style.                                #
    #                                                                         #
    ###########################################################################

    export @Style
    def @RefStyle
	left @Tag
	named @Style right reftag {}
    {}


    ###########################################################################
    #                                                                         #
    #  @RefPrint - prints reference with tag reftag in appropriate style.     #
    #                                                                         #
    ###########################################################################

    def @RefPrint right reftag
    {	& @RefStyle&&{ @Reference&&reftag @Open { @Type } }
	@Open { @Style reftag } &
    }


    ###########################################################################
    #                                                                         #
    #  @ReferencesSection and @ChapReferencesSection - a list of references.  #
    #                                                                         #
    ###########################################################################

    def @RefPlace { @Galley }
    def @ChapRefPlace { @Galley }

    def @BypassRefPlace { @Galley }
    def @BypassChapRefPlace { @Galley }

    def @ReferencesSection
    {
	def @RefList right num
	{
	    @NumberMarker @Value { @RefNumbers @Num num } & | @RefPlace
	    //@RefListGap @RefList @Next num
	}

	def @BypassRefList
	{
	    @BypassRefPlace //@RefListGap @BypassRefList
	}

	@RefList 1
	//@RefListGap
	@BypassRefList
    }

    def @ChapReferencesSection
    {
	def @ChapRefList right num
	{
	    @NumberMarker @Value { @RefNumbers @Num num } & | @ChapRefPlace
	    //@RefListGap @ChapRefList @Next num
	}

	def @BypassChapRefList
	{
	    @BypassChapRefPlace //@RefListGap @BypassChapRefList
	}

	@ChapRefList 1
	//@RefListGap
	@BypassChapRefList
    }


    ###########################################################################
    #                                                                         #
    #   @RefHeading - heading for reference lists.                            #
    #                                                                         #
    ###########################################################################

    def @RefHeading right x
    {	x @Case {
	    references @Yield @Word&&references
	    bibliography @Yield @Word&&bibliography
	    else @Yield x
	}
    }


    ###########################################################################
    #                                                                         #
    #  @SendRef and @ChapSendRef - send one reference to the reference list.  #
    #                                                                         #
    ###########################################################################

    def @RefItem
	left lab
	right ref
    {
	def @ZeroWidth right x { &0io @OneCol x &0io }

	@RefListFormat @Case {
	    NoLabels   @Yield {					   ref	}
	    Labels     @Yield { @ZeroWidth lab |@RefListLabelWidth ref	}
	    DropLabels @Yield { lab //1vx      |@RefListLabelWidth ref	}
	    InLabels   @Yield { lab & 2s @Wide &		   ref	}
	}
    }


    def @RefListItem
	left label
	right tag
    {
	@RefListFont @Font @RefListBreak @Break {
	    @NumberMarker&&preceding @Tagged tag &
	    @PageMarker&&preceding @Tagged tag
	    |@RefListIndent {label @ListLabel tag} @RefItem {@RefPrint tag}
	    |@RefListRightIndent
	}
    }


    def @SendRef into { @RefPlace&&foll_or_prec }
	left label
	right tag
    {
	def @Key { label @SortKey tag }

	# no @Merge i.e. omit duplicates

	label @RefListItem tag
    }


    def @ChapSendRef into { @ChapRefPlace&&foll_or_prec }
	left label
	right tag
    {
	def @Key { label @SortKey tag }

	# no @Merge i.e. omit duplicates

	label @RefListItem tag
    }


    ###########################################################################
    #                                                                         #
    #  @Ref (bare citation) and its variants.                                 #
    #                                                                         #
    ###########################################################################

    def @Ref
	named label {}
	right tag
    {
	@MakeReferences @Case {
	    Yes	  @Yield { label @CiteLabel tag & label @SendRef tag }
	    else  @Yield @Null
	}
    }

    def @NoRef
	named label {}
	right tag
    {
	@MakeReferences @Case {
	    Yes  @Yield { label @SendRef tag }
	    else @Yield @Null
	}
    }

    def @ChapRef
	named label {}
	right tag
    {
	@MakeReferences @Case {
	    Yes  @Yield { label @CiteLabel tag & label @ChapSendRef tag }
	    else @Yield @Null
	}
    }

    def @NoChapRef
	named label {}
	right tag
    {
	@MakeReferences @Case {
	    Yes  @Yield { label @ChapSendRef tag }
	    else @Yield @Null
	}
    }


    ###########################################################################
    #                                                                         #
    #  Bypass references.                                                     #
    #                                                                         #
    ###########################################################################

    def @BypassReference into { @BypassRefPlace&&preceding }
	named label {}
	named value {}
    {
	@MakeReferences @Case {
	    Bypass @Yield { label @RefItem value }
	    else   @Yield @Null
	}
    }

    def @BypassChapReference into { @BypassChapRefPlace&&preceding }
	named label {}
	named value {}
    {
	@MakeReferences @Case {
	    Bypass @Yield { label @RefItem value }
	    else   @Yield @Null
	}
    }


    ###########################################################################
    #                                                                         #
    #  @Cite (citation) and its variants.                                     #
    #                                                                         #
    ###########################################################################

    export "$" "," ";"
    def @Cite body cite
    {
	macro "$" { @Ref }
	def "," precedence 90 left x { x"," }
	def ";" precedence 90 left x { x";" }

	@MakeReferences @Case {
	    Yes  @Yield { @RefCiteStyle cite }
	    else @Yield @Null
	}
    }

    export "$" "," ";"
    def @NoCite body cite
    {
	macro "$" { @NoRef }
	def "," precedence 90 left x { x }
	def ";" precedence 90 left x { x";" }

	@MakeReferences @Case {
	    Yes  @Yield { cite }
	    else @Yield @Null
	}
    }

    export "$" "," ";"
    def @ChapCite body cite
    {
	macro "$" { @ChapRef }
	def "," precedence 90 left x { x"," }
	def ";" precedence 90 left x { x";" }

	@MakeReferences @Case {
	    Yes  @Yield { @RefCiteStyle cite }
	    else @Yield @Null
	}
    }

    export "$" "," ";"
    def @NoChapCite body cite
    {
	macro "$" { @NoChapRef }
	def "," precedence 90 left x { x }
	def ";" precedence 90 left x { x";" }

	@MakeReferences @Case {
	    Yes  @Yield { cite }
	    else @Yield @Null
	}
    }


    ###########################################################################
    #                                                                         #
    #  Floating figures.                                                      #
    #                                                                         #
    ###########################################################################

    export @Tag prefix
    def @FigurePrefixMarker
	named @Tag {}
	named prefix {}
    {
	@Null
    }

    export @Tag count
    def @FigureCounterMarker
	named @Tag {}
	named count {}
    {
	@Null
    }

    def @RawFigureNum right tag
    {
	@FigureCounterMarker&&tag @Open { @Next count }
    }

    def @FigureCounterIncrement
	right tag
    {
	   @FigureCounterMarker&&preceding @Tagged tag
	// @FigurePrefixMarker&&preceding @Tagged tag
	// @FigureCounterMarker count { @RawFigureNum tag }
	// @NumberMarker @Tag { tag }
		@Value { { @FigurePrefixMarker&&tag @Open { prefix } }
		    @DotJoin {@FigureNumbers @Num @RawFigureNum tag}
		}
    }

    def @BeginFigureCounter
	left condition
	right prefix
    {
	condition @Then {
	    @FigurePrefixMarker prefix { prefix }
	    @FigureCounterMarker count { 0 }
	}
    }

    def @EndFigureList { @Galley //@MidGap @EndFigureList }

    def @Figure
	named @Tag {}
	named @Caption { dft }
	named @ShortCaption { dft }
	named @CaptionPos { @FigureCaptionPos }
	named @Format right @Body { |0.5rt @Body | }
	named @InitialLanguage { @InitialLanguage }
	named @BypassNumber { dft }
	named @FullPage { No }
	named @OnePage { dft }
	named @Location { @FigureLocation }
	right @Body
    {
	def @FigureNumber
	{
	    @BypassNumber @Dft @NumberOf @Tag
	}

	def @FigureLabel
	{
	    @FigureNumbers @Case {
		No   @Yield @Null
		else @Yield @B {figure @WordVal @FigureWord @FigureNumber. &2s}
	    }
	}

	def @ContentsCaption
	{
	    @ShortCaption @Dft @Caption
	}

	def @FullPageGap
	{
	    @FullPage @Case {
		No  @Yield { 0i  }
		Yes @Yield { 1rt }
	    }
	}

	def @OnePageSym right x
	{
	    @OnePage @Case {
		No  @Yield x
		Yes @Yield @OneRow x
		dft @Yield { @Location @Case {
				PageTop		@Yield x
				PageFoot	@Yield @OneRow x
				ColTop		@Yield x
				ColFoot		@Yield @OneRow x
				ColEnd		@Yield x
				Display		@Yield @OneRow x
				AfterLine	@Yield @OneRow x
				TryAfterLine	@Yield @OneRow x
				Raw		@Yield x
			     }
			   }
	    }
	}

	def @ShowCaption right where
	{
	    @CaptionPos @Case {
		where @Yield {
		    @CaptionFont @Font @CaptionBreak @Break
		    @Caption @Case {
		        dft  @Yield @Null
		        else @Yield { ||0.5rt @FigureLabel @Insert @Caption }
		    }
		}
		else @Yield @Null
	    }
	}

	def @FigureValue
	{
	    @InitialLanguage @Language
	    {
		@OnePageSym
		{
		    @MakeFigureContents @FigureContentsEntry
			indent { 0f }
			number { @FigureNumber }
			title { @InitialLanguage @Language @ContentsCaption }
			pagenum { @PageOf @Tag }
		    // @FigureCounterIncrement @Tag
		    // @ShowCaption { above Above }
		    // @PageMarker&&preceding @Tagged @Tag
		    //@DisplayGap @Format @Body
		    //@DisplayGap @ShowCaption { below Below }
		}
		//@FullPageGap
		//
	    }
	}

	def @PageTopFigure into { @PageTopPlace&&following }
	{ @FigureValue }

	def @PageFootFigure into { @PageFootAndTopPlace&&following }
	{ @FigureValue }

	def @ColTopFigure into { @ColTopPlace&&following }
	{ @FigureValue }

	def @ColFootFigure into { @ColFootAndTopPlace&&following }
	{ @FigureValue }

	def @ColEndFigure into { @EndFigureList&&following}
	{ @FigureValue }

	def @AfterLineFigure force into { @AfterLinePlace&&following }
	{ @FigureValue }

	def @TryAfterLineFigure into { @TryAfterLinePlace&&following }
	{ @FigureValue }

	@Location @Case {
	    PageTop	 @Yield @PageTopFigure
	    PageFoot	 @Yield @PageFootFigure
	    ColTop	 @Yield @ColTopFigure
	    ColFoot	 @Yield @ColFootFigure
	    ColEnd	 @Yield @ColEndFigure
	    Display	 @Yield { @AfterLineFigure &1rt }
	    AfterLine	 @Yield @AfterLineFigure
	    TryAfterLine @Yield @TryAfterLineFigure
	    Raw		 @Yield @FigureValue
	}
    }


    ###########################################################################
    #                                                                         #
    #  Floating tables (exact clone of figure code immediately above).        #
    #                                                                         #
    ###########################################################################

    export @Tag prefix
    def @TablePrefixMarker
	named @Tag {}
	named prefix {}
    {
	@Null
    }

    export @Tag count
    def @TableCounterMarker
	named @Tag {}
	named count {}
    {
	@Null
    }

    def @RawTableNum right tag
    {
	@TableCounterMarker&&tag @Open { @Next count }
    }

    def @TableCounterIncrement
	right tag
    {
	   @TableCounterMarker&&preceding @Tagged tag
	// @TablePrefixMarker&&preceding @Tagged tag
	// @TableCounterMarker count { @RawTableNum tag }
	// @NumberMarker @Tag { tag }
		@Value { { @TablePrefixMarker&&tag @Open { prefix } }
		    @DotJoin {@TableNumbers @Num @RawTableNum tag}
		}
    }

    def @BeginTableCounter
	left condition
	right prefix
    {
	condition @Then {
	    @TablePrefixMarker prefix { prefix }
	    @TableCounterMarker count { 0 }
	}
    }

    def @EndTableList { @Galley //@MidGap @EndTableList }

    def @Table
	named @Tag {}
	named @Caption { dft }
	named @ShortCaption { dft }
	named @CaptionPos { @TableCaptionPos }
	named @Format right @Body { |0.5rt @Body | }
	named @InitialLanguage { @InitialLanguage }
	named @BypassNumber { dft }
	named @FullPage { No }
	named @OnePage { dft }
	named @Location { @TableLocation }
	right @Body
    {
	def @TableNumber
	{
	    @BypassNumber @Dft @NumberOf @Tag
	}

	def @TableLabel
	{
	    @TableNumbers @Case {
		No   @Yield @Null
		else @Yield @B {@TableWord @WordVal figure @TableNumber. &2s}
	    }
	}

	def @ContentsCaption
	{
	    @ShortCaption @Dft @Caption
	}

	def @FullPageGap
	{
	    @FullPage @Case {
		No  @Yield { 0i  }
		Yes @Yield { 1rt }
	    }
	}

	def @OnePageSym right x
	{
	    @OnePage @Case {
		No  @Yield x
		Yes @Yield @OneRow x
		dft @Yield { @Location @Case {
				PageTop		@Yield x
				PageFoot	@Yield @OneRow x
				ColTop		@Yield x
				ColFoot		@Yield @OneRow x
				ColEnd		@Yield x
				Display		@Yield @OneRow x
				AfterLine	@Yield @OneRow x
				TryAfterLine	@Yield @OneRow x
				Raw		@Yield x
			     }
			   }
	    }
	}

	def @ShowCaption right where
	{
	    @CaptionPos @Case {
		where @Yield {
		    @CaptionFont @Font @CaptionBreak @Break
		    @Caption @Case {
		        dft  @Yield @Null
		        else @Yield { ||0.5rt @TableLabel @Insert @Caption }
		    }
		}
		else @Yield @Null
	    }
	}

	def @TableValue
	{
	    @InitialLanguage @Language
	    {
		@OnePageSym
		{
		    @MakeTableContents @TableContentsEntry
			indent { 0f }
			number { @TableNumber }
			title { @InitialLanguage @Language @ContentsCaption }
			pagenum { @PageOf @Tag }
		    // @TableCounterIncrement @Tag
		    // @ShowCaption { above Above }
		    // @PageMarker&&preceding @Tagged @Tag
		    //@DisplayGap @Format @Body
		    //@DisplayGap @ShowCaption { below Below }
		}
		//@FullPageGap
		//
	    }
	}

	def @PageTopTable into { @PageTopPlace&&following }
	{ @TableValue }

	def @PageFootTable into { @PageFootAndTopPlace&&following }
	{ @TableValue }

	def @ColTopTable into { @ColTopPlace&&following }
	{ @TableValue }

	def @ColFootTable into { @ColFootAndTopPlace&&following }
	{ @TableValue }

	def @ColEndTable into { @EndTableList&&following}
	{ @TableValue }

	def @AfterLineTable force into { @AfterLinePlace&&following }
	{ @TableValue }

	def @TryAfterLineTable into { @TryAfterLinePlace&&following }
	{ @TableValue }

	@Location @Case {
	    PageTop	 @Yield @PageTopTable
	    PageFoot	 @Yield @PageFootTable
	    ColTop	 @Yield @ColTopTable
	    ColFoot	 @Yield @ColFootTable
	    ColEnd	 @Yield @ColEndTable
	    Display	 @Yield { @AfterLineTable &1rt }
	    AfterLine	 @Yield @AfterLineTable
	    TryAfterLine @Yield @TryAfterLineTable
	    Raw		 @Yield @TableValue
	}
    }


    ###########################################################################
    #                                                                         #
    #  Index.                                                                 #
    #                                                                         #
    ###########################################################################

    def @IndexList { @Galley //1vx @IndexList }
    def @BypassIndexList { @Galley //1vx @BypassIndexList }

    def @IndexSection into { @IndexPlace&&following }
	right etc
    {
	// @IndexList // @BypassIndexList // etc
    }

    def @DoIndex into { @IndexList&&following }
	left @Key
	named indent { 0f }
	right @Body
    {
	def @Merge left x right y
	{
	    {x @Rump y} @Case
	    {
		""	@Yield	x
		else	@Yield	{
				 { {x @Rump y} @Common "," } @Case
				 {
				   ","	@Yield { x &0.03f x @Rump y }
				   else	@Yield { x &0.03f , x @Rump y }
				 }
				}
	    }
	}

	@IndexFont @Font @IndexBreak @Break { indent @Wide & @Body }
    }

    def @RawIndex
	left x
	named @Tag {}
	named indent { 0f }
	right y
    {
	@MakeIndex @Case {
	    Yes  @Yield { {@PageMark @Tag} x @DoIndex indent { indent } y }
	    else @Yield @Null
	}
    }

    macro @RawSubIndex    { @RawIndex indent { 1f } }
    macro @RawSubSubIndex { @RawIndex indent { 2f } }

    def @Index
	left x
	named @Tag {}
	named indent { 0f }
	named to {}
	right y
    {
	def numval
	{
	    to @Case
	    {
		""    @Yield @PageOf @Tag
		else  @Yield {
		    { @PageOf @Tag } @Case
		    {
			{ @PageOf to } @Yield { @PageOf @Tag }
			else	       @Yield { {@PageOf @Tag}--{@PageOf to} }
		    }
		}
	    }
	}

	@MakeIndex @Case {
	    Yes  @Yield { @PageMark @Tag
			  x @DoIndex indent { indent } { y &0.03f , numval }
			}
	    else @Yield @Null
	}
    }

    macro @SubIndex { @Index indent { 1f } }
    macro @SubSubIndex { @Index indent { 2f } }

    def @IndexBlanks
    {
	b @RawIndex {} c @RawIndex {} d @RawIndex {} e @RawIndex {}
	f @RawIndex {} g @RawIndex {} h @RawIndex {} i @RawIndex {}
	j @RawIndex {} k @RawIndex {} l @RawIndex {} m @RawIndex {}
	n @RawIndex {} o @RawIndex {} p @RawIndex {} q @RawIndex {}
	r @RawIndex {} s @RawIndex {} t @RawIndex {} u @RawIndex {}
	v @RawIndex {} w @RawIndex {} x @RawIndex {} y @RawIndex {}
	z @RawIndex {}
    }

    def @BypassBeginIndexPlace { @Galley }

    def @BypassBeginIndex force into { @BypassBeginIndexPlace&&preceding } {}

    def @BypassRawIndex force into { @BypassIndexList&&preceding }
	named indent { 0f }
	right x
    {
	&indent x
    }

    def @BypassEndIndex { @Null }


    ###########################################################################
    #                                                                         #
    #  IndexA.                                                                #
    #                                                                         #
    ###########################################################################

    def @IndexAList { @Galley //1vx @IndexAList }
    def @BypassIndexAList { @Galley //1vx @BypassIndexAList }

    def @IndexASection into { @IndexAPlace&&following }
	right etc
    {
	// @IndexAList // @BypassIndexAList // etc
    }

    def @DoIndexA into { @IndexAList&&following }
	left @Key
	named indent { 0f }
	right @Body
    {
	def @Merge left x right y
	{
	    {x @Rump y} @Case
	    {
		""	@Yield	x
		else	@Yield	{
				 { {x @Rump y} @Common "," } @Case
				 {
				   ","	@Yield { x &0.03f x @Rump y }
				   else	@Yield { x &0.03f , x @Rump y }
				 }
				}
	    }
	}

	@IndexAFont @Font @IndexABreak @Break { indent @Wide & @Body }
    }

    def @RawIndexA
	left x
	named @Tag {}
	named indent { 0f }
	right y
    {
	@MakeIndexA @Case {
	    Yes  @Yield { {@PageMark @Tag} x @DoIndexA indent { indent } y }
	    else @Yield @Null
	}
    }

    macro @RawSubIndexA    { @RawIndexA indent { 1f } }
    macro @RawSubSubIndexA { @RawIndexA indent { 2f } }

    def @IndexA
	left x
	named @Tag {}
	named indent { 0f }
	named to {}
	right y
    {
	def numval
	{
	    to @Case
	    {
		""    @Yield @PageOf @Tag
		else  @Yield {
		    { @PageOf @Tag } @Case
		    {
			{ @PageOf to } @Yield { @PageOf @Tag }
			else	       @Yield { {@PageOf @Tag}--{@PageOf to} }
		    }
		}
	    }
	}

	@MakeIndexA @Case {
	    Yes  @Yield { @PageMark @Tag
			  x @DoIndexA indent { indent } { y &0.03f , numval }
			}
	    else @Yield @Null
	}
    }

    macro @SubIndexA { @IndexA indent { 1f } }
    macro @SubSubIndexA { @IndexA indent { 2f } }

    def @IndexABlanks
    {
	b @RawIndexA {} c @RawIndexA {} d @RawIndexA {} e @RawIndexA {}
	f @RawIndexA {} g @RawIndexA {} h @RawIndexA {} i @RawIndexA {}
	j @RawIndexA {} k @RawIndexA {} l @RawIndexA {} m @RawIndexA {}
	n @RawIndexA {} o @RawIndexA {} p @RawIndexA {} q @RawIndexA {}
	r @RawIndexA {} s @RawIndexA {} t @RawIndexA {} u @RawIndexA {}
	v @RawIndexA {} w @RawIndexA {} x @RawIndexA {} y @RawIndexA {}
	z @RawIndexA {}
    }

    def @BypassBeginIndexAPlace { @Galley }

    def @BypassBeginIndexA force into { @BypassBeginIndexAPlace&&preceding } {}

    def @BypassRawIndexA force into { @BypassIndexAList&&preceding }
	named indent { 0f }
	right x
    {
	&indent x
    }

    def @BypassEndIndexA { @Null }


    ###########################################################################
    #                                                                         #
    #  IndexB.                                                                #
    #                                                                         #
    ###########################################################################

    def @IndexBList { @Galley //1vx @IndexBList }
    def @BypassIndexBList { @Galley //1vx @BypassIndexBList }

    def @IndexBSection into { @IndexBPlace&&following }
	right etc
    {
	// @IndexBList // @BypassIndexBList // etc
    }

    def @DoIndexB into { @IndexBList&&following }
	left @Key
	named indent { 0f }
	right @Body
    {
	def @Merge left x right y
	{
	    {x @Rump y} @Case
	    {
		""	@Yield	x
		else	@Yield	{
				 { {x @Rump y} @Common "," } @Case
				 {
				   ","	@Yield { x &0.03f x @Rump y }
				   else	@Yield { x &0.03f , x @Rump y }
				 }
				}
	    }
	}

	@IndexBFont @Font @IndexBBreak @Break { indent @Wide & @Body }
    }

    def @RawIndexB
	left x
	named @Tag {}
	named indent { 0f }
	right y
    {
	@MakeIndexB @Case {
	    Yes  @Yield { {@PageMark @Tag} x @DoIndexB indent { indent } y }
	    else @Yield @Null
	}
    }

    macro @RawSubIndexB    { @RawIndexB indent { 1f } }
    macro @RawSubSubIndexB { @RawIndexB indent { 2f } }

    def @IndexB
	left x
	named @Tag {}
	named indent { 0f }
	named to {}
	right y
    {
	def numval
	{
	    to @Case
	    {
		""    @Yield @PageOf @Tag
		else  @Yield {
		    { @PageOf @Tag } @Case
		    {
			{ @PageOf to } @Yield { @PageOf @Tag }
			else	       @Yield { {@PageOf @Tag}--{@PageOf to} }
		    }
		}
	    }
	}

	@MakeIndexB @Case {
	    Yes  @Yield { @PageMark @Tag
			  x @DoIndexB indent { indent } { y &0.03f , numval }
			}
	    else @Yield @Null
	}
    }

    macro @SubIndexB { @IndexB indent { 1f } }
    macro @SubSubIndexB { @IndexB indent { 2f } }

    def @IndexBBlanks
    {
	b @RawIndexB {} c @RawIndexB {} d @RawIndexB {} e @RawIndexB {}
	f @RawIndexB {} g @RawIndexB {} h @RawIndexB {} i @RawIndexB {}
	j @RawIndexB {} k @RawIndexB {} l @RawIndexB {} m @RawIndexB {}
	n @RawIndexB {} o @RawIndexB {} p @RawIndexB {} q @RawIndexB {}
	r @RawIndexB {} s @RawIndexB {} t @RawIndexB {} u @RawIndexB {}
	v @RawIndexB {} w @RawIndexB {} x @RawIndexB {} y @RawIndexB {}
	z @RawIndexB {}
    }

    def @BypassBeginIndexBPlace { @Galley }

    def @BypassBeginIndexB force into { @BypassBeginIndexBPlace&&preceding } {}

    def @BypassRawIndexB force into { @BypassIndexBList&&preceding }
	named indent { 0f }
	right x
    {
	&indent x
    }

    def @BypassEndIndexB { @Null }

@End @DocumentLayout
