aboutsummaryrefslogtreecommitdiffstats
path: root/include/save_bsf
diff options
context:
space:
mode:
Diffstat (limited to 'include/save_bsf')
-rw-r--r--include/save_bsf1826
1 files changed, 1826 insertions, 0 deletions
diff --git a/include/save_bsf b/include/save_bsf
new file mode 100644
index 0000000..40e15f7
--- /dev/null
+++ b/include/save_bsf
@@ -0,0 +1,1826 @@
+
+###############################################################################
+# #
+# Lout @BasicSetup package #
+# #
+# Jeffrey H. Kingston #
+# #
+# This package contains basic symbols used widely throughout many #
+# documents, for font changes, particular characters, standard words in #
+# the current language, date and time, paragraphs, lists, colours, #
+# rules, and boxes. #
+# #
+###############################################################################
+
+@SysInclude { lengths } # @PSLengths
+@SysInclude { coltex } # @ColourCommand and @TextureCommand
+@SysPrependGraphic { bsf.lpg } # rules, boxes, margin note setup
+
+
+###############################################################################
+# #
+# The following symbols are defined outside @BasicSetup so that #
+# they can be invoked when setting its parameters in the @Use clause. #
+# #
+###############################################################################
+
+def @OrIfPlain
+ precedence 80
+ left x
+ right y
+{
+ @BackEnd @Case {
+ PlainText @Yield y
+ else @Yield x
+ }
+}
+
+###########################################################################
+# #
+# @Colour, @Color #
+# #
+###########################################################################
+
+def @Colour @Color left col right y { {@ColourCommand col} @SetColour y }
+
+
+###########################################################################
+# #
+# @ColouredUnderline, @ColoredUnderline #
+# #
+###########################################################################
+
+def @ColouredUnderline @ColoredUnderline left col right y {
+ {@ColourCommand col} @SetUnderlineColour @Underline y
+}
+
+
+###########################################################################
+# #
+# @Texture #
+# #
+###########################################################################
+
+
+def @Texture
+ left type
+ named scale { 1 }
+ named hscale { 1 }
+ named vscale { 1 }
+ import @PSLengths named angle { 0d }
+ import @PSLengths named hshift { 0i }
+ import @PSLengths named vshift { 0i }
+ import @PSLengths named width { "dft" }
+ import @PSLengths named height { "dft" }
+ import @PSLengths named gap { "dft" }
+ import @PSLengths named radius { "dft" }
+ import @PSLengths named linewidth { "dft" }
+ named font { "dft" }
+ import @PSLengths named size { "dft" }
+ named value { "dft" }
+ right x
+{
+ { type @TextureCommand
+ scale { scale }
+ hscale { hscale }
+ vscale { vscale }
+ angle { angle }
+ hshift { hshift }
+ vshift { vshift }
+ width { width }
+ height { height }
+ gap { gap }
+ radius { radius }
+ linewidth { linewidth }
+ font { font }
+ size { size }
+ value { value }
+ } @SetTexture x
+}
+
+
+###############################################################################
+# #
+# Symbols exported by @BasicSetup. #
+# #
+###############################################################################
+
+export
+
+ @InitialFont @InitialBreak @InitialOutdent @InitialSpace @InitialLanguage
+ @InitialColour @OptimizePages @HeadingFont
+ @ParaGap @ParaIndent @DisplayGap @DisplayIndent @DefaultIndent
+ @DisplayNumStyle @WideIndent @VeryWideIndent
+ @ListGap @ListIndent @ListRightIndent
+ @ListLabelWidth @ListLabelRight @ListLabelRightGap @ListFont @ListBreak
+ @NumberSeparator
+
+ @Pipe @PipeVerbatim @PipeRawVerbatim
+
+ @Word @Roman @UCRoman @Alpha @UCAlpha @FnBullets @FnSymbols
+ @Months @ShortMonths @WeekDays @ShortWeekDays
+ @TwelveHours @ShortHours @MeriDiems @ShortMeriDiems
+
+ @Sym @Ding @R @I @B @BI @S @F @II
+ "~" "~~" "``" "''" ",," "--" "---" "..."
+
+ @Bullet @ParSym @SectSym @Dagger @DaggerDbl @CDot @Sterling @Yen @Florin
+ @Star @Degree @Minute @Second @Multiply @Divide @Lozenge @Register
+ @CopyRight @TradeMark @Euro
+
+ @Date @Time @DateTimeFormat @DropCapTwo @DropCapThree @Centre @Right
+ @NoDotSep @NoDotJoin @Join @Sep @DotSep @ColonSep @DotJoin @DashJoin
+ @NumSep @VStrut @ZeroWidth @ZeroHeight @OverStrike @Sup @Sub @HClip @VClip
+ @FullWidthRule @LocalWidthRule @Box @CurveBox @ShadowBox @BoundaryMarks
+ @NumberMarker @NumberOf @TitleMarker @TitleOf
+ @PageMarker @PageMark @NoLinkPageMark @PageOf @CrossLink @ExternalLink
+
+ @BeginDisplayCounter
+
+ @Heading "^" "&-" @If @Not @And @Or @True
+ @PP @LP @LLP @DP @LOP @NP @CNP
+
+ @BeginAlignedDisplays
+ @EndAlignedDisplays
+
+ @Display
+ @LeftDisplay
+ @IndentedDisplay
+ @QuotedDisplay
+ @CentredDisplay
+ @RightDisplay
+ @AlignedDisplay
+ @LeftAlignedDisplay
+ @IndentedAlignedDisplay
+ @QuotedAlignedDisplay
+ @CentredAlignedDisplay
+ @RightAlignedDisplay
+ @NumberedDisplay
+ @LeftNumberedDisplay
+ @IndentedNumberedDisplay
+ @QuotedNumberedDisplay
+ @CentredNumberedDisplay
+ @RightNumberedDisplay
+ @AlignedNumberedDisplay
+ @LeftAlignedNumberedDisplay
+ @IndentedAlignedNumberedDisplay
+ @QuotedAlignedNumberedDisplay
+ @CentredAlignedNumberedDisplay
+ @RightAlignedNumberedDisplay
+
+ @RawDisplay
+ @RawLeftDisplay
+ @RawIndentedDisplay
+ @RawQuotedDisplay
+ @RawCentredDisplay
+ @RawRightDisplay
+ @RawAlignedDisplay
+ @RawLeftAlignedDisplay
+ @RawIndentedAlignedDisplay
+ @RawQuotedAlignedDisplay
+ @RawCentredAlignedDisplay
+ @RawRightAlignedDisplay
+ @RawNumberedDisplay
+ @RawLeftNumberedDisplay
+ @RawIndentedNumberedDisplay
+ @RawQuotedNumberedDisplay
+ @RawCentredNumberedDisplay
+ @RawRightNumberedDisplay
+ @RawAlignedNumberedDisplay
+ @RawLeftAlignedNumberedDisplay
+ @RawIndentedAlignedNumberedDisplay
+ @RawQuotedAlignedNumberedDisplay
+ @RawCentredAlignedNumberedDisplay
+ @RawRightAlignedNumberedDisplay
+
+ @ListItem
+ @ParagraphItem
+ @ListInterruptItem
+ @ListNewPage
+ @DropListItem
+ @TagItem
+ @DropTagItem
+
+ @EndList
+ @RawEndList
+
+ @RawList
+ @RawLeftList
+ @RawIndentedList
+ @RawQuotedList
+ @RawCentredList @RawCenteredList
+ @RawNumberedList
+ @RawParenNumberedList
+ @RawRomanList
+ @RawParenRomanList
+ @RawUCRomanList
+ @RawParenUCRomanList
+ @RawAlphaList
+ @RawParenAlphaList
+ @RawUCAlphaList
+ @RawParenUCAlphaList
+ @RawBulletList
+ @RawStarList
+ @RawDashList
+ @RawTaggedList
+ @RawWideTaggedList
+ @RawVeryWideTaggedList
+
+ @List
+ @LeftList
+ @IndentedList
+ @QuotedList
+ @CentredList @CenteredList
+ @NumberedList
+ @ParenNumberedList
+ @RomanList
+ @ParenRomanList
+ @UCRomanList
+ @ParenUCRomanList
+ @AlphaList
+ @ParenAlphaList
+ @UCAlphaList
+ @ParenUCAlphaList
+ @BulletList
+ @StarList
+ @DashList
+ @TaggedList
+ @WideTaggedList
+ @VeryWideTaggedList
+
+
+###############################################################################
+# #
+# The @BasicSetup package. #
+# #
+###############################################################################
+
+def @BasicSetup
+ named @InitialFont { Times Base 12p } # initial font
+ named @InitialBreak { {adjust 1.20fx hyphen} @OrIfPlain
+ {ragged 1fx nohyphen} } # initial break
+ named @InitialOutdent { 2f @OrIfPlain 4s } # initial outdent
+ 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 @FixedWidthFont { Courier Base -1p } # font for @F
+ named @ParaGap { 1.3vx @OrIfPlain 1f } # gap between paragraphs
+ named @ParaIndent { 2.0f @OrIfPlain 5s } # first-line indent for @PP
+ named @DisplayGap { 1.0v @OrIfPlain 1f } # gap above, below displays
+ named @DisplayIndent { 2.0f @OrIfPlain 5s } # @IndentedDisplay indent
+ named @DefaultIndent { 0.5rt } # @Display indent
+ named @DisplayNumStyle
+ right num { (num) } # display number style
+ named @WideIndent { 4.0f @OrIfPlain 10s } # @WideTaggedList indent
+ named @VeryWideIndent { 8.0f @OrIfPlain 20s } # @VeryWideTaggedList indent
+ named @ListOuterGap { 1.0v @OrIfPlain 1f } # gap before, after list
+ named @ListGap { 1.0v @OrIfPlain 1f } # gap between list items
+ named @ListIndent { 0s } # indent of list items
+ named @ListRightIndent{ 0s } # right indent of list items
+ named @ListLabelWidth { 2.0f @OrIfPlain 5s } # width allowed for list tags
+ named @ListLabelRight { No } # right align label
+ named @ListLabelRightGap { 2s } # right align gap
+ named @ListFont { } # font style of list item
+ named @ListBreak { } # break style of list item
+ named @NumberSeparator{ . } # separates numbers like 2.3.7
+ import @BasicSetup
+ named @CrossLinkFormat
+ right @Body { @Body } # format for cross links
+ import @BasicSetup
+ named @ExternalLinkFormat
+ right @Body { @Body } # format for external links
+@Begin
+
+ ###########################################################################
+ # #
+ # 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
+ }
+ }
+
+
+ ###########################################################################
+ # #
+ # @Pipe, @PipeVerbatim, and @PipeRawVerbatim #
+ # #
+ ###########################################################################
+
+ def @Pipe
+ left command
+ right x
+ {
+ def @Filter { "cat" @FilterIn "|" command ">" @FilterOut }
+
+ x
+ }
+
+ def @PipeVerbatim
+ left command
+ right x
+ {
+ def @Filter {
+ "(echo @Verbatim @Begin ; (cat" @FilterIn "|" command "); echo @End @Verbatim ) >" @FilterOut }
+
+ x
+ }
+
+ def @PipeRawVerbatim
+ left command
+ right x
+ {
+ def @Filter {
+ "(echo @RawVerbatim @Begin ; (cat" @FilterIn "|" command "); echo @End @Verbatim ) >" @FilterOut }
+
+ x
+ }
+
+
+ ###########################################################################
+ # #
+ # @Sym, @Ding font symbols, and miscellaneous special characters. #
+ # #
+ ###########################################################################
+
+ def @Sym right x { { Symbol Base } @Font @Char x }
+ def @Ding right x { { Dingbats 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 { @FixedWidthFont @Font x }
+
+ def @II
+ right x
+ {
+ { @CurrFace @Case {
+ Bold @Yield BoldSlope
+ else @Yield Slope
+ } } @Font x
+ }
+
+ def "~" left x right y { x &1su y }
+ def "~~" left x right y { x &2s y }
+
+ def "``" { @Char "quotedblleft" @OrIfPlain "``" }
+ def "''" { @Char "quotedblright" @OrIfPlain "''" }
+ def ",," { @Char "quotedblbase" @OrIfPlain ",," }
+ def "--" { @Char "endash" @OrIfPlain "--" }
+ def "---" { @Char "emdash" @OrIfPlain "---"}
+ def "..." { @Char "ellipsis" @OrIfPlain "..."}
+ def @Bullet { @Char "bullet" @OrIfPlain "o" }
+ def @ParSym { @Char "paragraph" @OrIfPlain "P" }
+ def @SectSym { @Char "section" @OrIfPlain "$" }
+ def @Dagger { @Char "dagger" @OrIfPlain "+" }
+ def @DaggerDbl { @Char "daggerdbl" @OrIfPlain "++" }
+ def @CDot { @Char "periodcentered" @OrIfPlain "." }
+ def @Sterling { @Char "sterling" @OrIfPlain "&" }
+ def @Yen { @Char "yen" @OrIfPlain "Y" }
+ def @Florin { @Char "florin" @OrIfPlain "f" }
+
+ def @Star { @Sym "asteriskmath" @OrIfPlain "*" }
+ def @Degree { @Sym "degree" @OrIfPlain "o" }
+ def @Minute { @Sym "minute" @OrIfPlain "'" }
+ def @Second { @Sym "second" @OrIfPlain "''" }
+ def @Multiply { @Sym "multiply" @OrIfPlain "x" }
+ def @Divide { @Sym "divide" @OrIfPlain "/" }
+ def @Lozenge { @Sym "lozenge" @OrIfPlain "O" }
+ def @Register { @Sym "registersans" @OrIfPlain "R" }
+ def @CopyRight { @Sym "copyrightsans" @OrIfPlain "C" }
+ def @TradeMark { @Sym "trademarksans" @OrIfPlain "TM" }
+
+ def @Euro
+ {
+ @BackEnd @Case {
+
+ PostScript @Yield {
+ 0.65w @VShift @VContract @HContract
+ "xsize ysize ysize 0.07 mul louteuro" @Graphic {
+ 0.7f @High 0.735f @Wide
+ }
+ }
+
+ PDF @Yield { EUR }
+
+ PlainText @Yield { EUR }
+ }
+ }
+
+
+ ###########################################################################
+ # #
+ # 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 #
+ # @FnBullets bullets as footnote markers #
+ # @FnSymbols traditional footnote symbols asterisk, dagger, etc. #
+ # @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 @FnBullets left @Tag right @Val { @Val }
+ def @FnSymbols 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 @FnBullets @FnSymbols
+ @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, @NoDotSep, @NoDotJoin, @DotSep, #
+ # @ColonSep, @DotJoin, @DashJoin, @NumSep #
+ # #
+ ###########################################################################
+
+ macro @Centre @Center { |0.5rt @HContract }
+
+ def @Right
+ precedence 50
+ left x
+ right y
+ { x |1.0rt @OneCol { 2f @Wide {} | y } }
+
+ def @NoDotSep left x right y
+ {
+ x @Case {
+ {} @Yield y
+ else @Yield {
+ y @Case {
+ {} @Yield x
+ else @Yield { x |2s y }
+ }
+ }
+ }
+ }
+
+ def @NoDotJoin left x right y
+ {
+ x @Case {
+ {} @Yield y
+ else @Yield {
+ y @Case {
+ {} @Yield x
+ else @Yield { x{y} }
+ }
+ }
+ }
+ }
+
+ def @DotSep left x right y
+ {
+ x @Case {
+ {} @Yield y
+ else @Yield {
+ y @Case {
+ {} @Yield x
+ else @Yield { x. |2s y }
+ }
+ }
+ }
+ }
+
+ def @ColonSep 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 @DashJoin left x right y
+ {
+ x @Case {
+ {} @Yield y
+ else @Yield {
+ y @Case {
+ {} @Yield x
+ else @Yield { x--y }
+ }
+ }
+ }
+ }
+
+ def @NumSep left x right y
+ {
+ x @Case {
+ {} @Yield y
+ else @Yield {
+ y @Case {
+ {} @Yield x
+ else @Yield {
+ @CurrLang @Case {
+ Hungarian @Yield { y. x }
+ else @Yield { x y }
+ }
+ }
+ }
+ }
+ }
+ }
+
+
+ ###########################################################################
+ # #
+ # @VStrut, @ZeroWidth, @ZeroHeight #
+ # #
+ ###########################################################################
+
+
+ def @VStrut
+ named above { 0.5f }
+ named below { 0.5f }
+ right x
+ {
+ x &0iu @VContract { above @High ^/ below @High }
+ }
+
+
+ def @ZeroWidth right x { @HContract { |0io x |0io } }
+
+ def @ZeroHeight right x { @VContract { /0io x /0io } }
+
+
+ ###########################################################################
+ # #
+ # @OverStrike, @Sup and @Sub #
+ # #
+ ###########################################################################
+
+ def @OverStrike left x right y
+ {
+ @OneRow { @HContract @VContract x /0io @HContract @VContract y }
+ }
+
+ 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
+ }
+ }
+
+
+ ###########################################################################
+ # #
+ # @HClip and @VClip #
+ # #
+ ###########################################################################
+
+ def @HClip
+ named shift { 0.0 }
+ right x
+ {
+ { "newpath 0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto"
+ "closepath clip gsave" // "grestore" } @Graphic
+ {
+ |{{shift}"rt"} @ZeroWidth {{shift}"w"} @HShift x |
+ }
+ }
+
+ def @VClip
+ named shift { 0.0 }
+ right x
+ {
+ { "newpath 0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto"
+ "closepath clip gsave" // "grestore" } @Graphic
+ {
+ /{{shift}"rt"} @ZeroHeight {{shift}"w"} @VShift x /
+ }
+ }
+
+
+ ###########################################################################
+ # #
+ # @AddPaint, @StrokeCommand #
+ # #
+ ###########################################################################
+
+ def @AddPaint
+ left col
+ right texture
+ {
+ col @Case {
+ none @Yield ""
+ nochange @Yield {
+ @BackEnd @Case {
+ PostScript @Yield { "gsave" texture "fill grestore" }
+ PDF @Yield { "q f Q" }
+ PlainText @Yield { "" }
+ }
+ }
+ else @Yield {
+ @BackEnd @Case {
+ PostScript @Yield {"gsave" @ColourCommand col texture "fill grestore"}
+ PDF @Yield { "q" @ColourCommand col "f Q" }
+ PlainText @Yield { "" }
+ }
+ }
+ }
+ }
+
+ def @StrokeCommand right linewidth
+ {
+ @BackEnd @Case {
+ PostScript @Yield {
+ linewidth @Case {
+ "" @Yield { "stroke" }
+ none @Yield { }
+ else @Yield { linewidth "setlinewidth stroke" }
+ }
+ }
+ PDF @Yield {
+ linewidth @Case {
+ "" @Yield { "S" }
+ none @Yield { }
+ else @Yield { linewidth "w S" }
+ }
+ }
+ else @Yield ""
+ }
+ }
+
+
+
+ ###########################################################################
+ # #
+ # @FullWidthRule, @Box, @CurveBox, and @ShadowBox #
+ # #
+ ###########################################################################
+
+ def @FullWidthRule
+ import @PSLengths named linewidth {}
+ {
+ @BackEnd @Case {
+
+ PostScript @Yield @HExpand {
+ { "LoutRule" @StrokeCommand linewidth } @Graphic { 0.5p @High }
+ }
+
+ PDF @Yield @HExpand {
+ { "0 0 m __xsize 0 l" @StrokeCommand linewidth } @Graphic { 0.5p @High }
+ }
+
+ PlainText @Yield { "-" @PlainGraphic 1f @High }
+ }
+ }
+
+ def @LocalWidthRule
+ import @PSLengths named linewidth {}
+ {
+ @BackEnd @Case {
+
+ PostScript @Yield {
+ { "LoutRule" @StrokeCommand linewidth } @Graphic { 0.5p @High }
+ }
+
+ PDF @Yield {
+ { "0 0 m __xsize 0 l" @StrokeCommand linewidth } @Graphic { 0.5p @High }
+ }
+
+ PlainText @Yield { "-" @PlainGraphic 1f @High }
+ }
+ }
+
+ def @Box
+ named margin { 0.3f }
+ import @PSLengths named linewidth {}
+ named paint { none }
+ import @TextureImport named texture {}
+ right x
+ {
+ @BackEnd @Case {
+
+ PostScript @Yield @VContract @HContract 0c @HShift {
+ {"LoutBox" paint @AddPaint texture @StrokeCommand linewidth }
+ @Graphic
+ { ^/margin ^|margin 0c @HShift @OneRow x |margin /margin }
+ }
+
+ PDF @Yield @VContract @HContract 0c @HShift {
+ { "0 0 m __xsize 0 l __xsize __ysize l 0 __ysize l h"
+ paint @AddPaint texture @StrokeCommand linewidth } @Graphic
+ { ^/margin ^|margin 0c @HShift @OneRow x |margin /margin }
+ }
+
+ PlainText @Yield @VContract @HContract 0c @HShift {
+ ^/margin ^|margin 0c @HShift @OneRow x |margin /margin
+ }
+ }
+ }
+
+ def @CurveBox
+ named margin { 0.3f }
+ import @PSLengths named linewidth {}
+ named paint { none }
+ import @TextureImport named texture {}
+ right x
+ {
+ def @PDFStuff
+ {
+ "__xmark 0 m"
+ "__sub(__xsize, __xmark) 0 l"
+ "__sub(__xsize, __div(__mul(11, __xmark), 24)) 0"
+ "__xsize __div(__mul(11, __xmark), 24)"
+ "__xsize __xmark c"
+ "__xsize __sub(__ysize, __xmark) l"
+ "__xsize __sub(__ysize, __div(__mul(11, __xmark), 24))"
+ "__sub(__xsize, __div(__mul(11, __xmark), 24)) __ysize"
+ "__sub(__xsize, __xmark) __ysize c"
+ "__xmark __ysize l"
+ "__div(__mul(11, __xmark), 24) __ysize"
+ "0 __sub(__ysize, __div(__mul(11, __xmark), 24))"
+ "0 __sub(__ysize, __xmark) c"
+ "0 __xmark l"
+ "0 __div(__mul(11, __xmark), 24)"
+ "__div(__mul(11, __xmark), 24) 0"
+ "__xmark 0 c"
+ "h"
+ paint @AddPaint texture @StrokeCommand linewidth
+ }
+
+ @VContract @HContract 0c @HShift @BackEnd @Case {
+
+ PostScript @Yield {
+ {"LoutCurveBox" paint @AddPaint texture @StrokeCommand linewidth }
+ @Graphic
+ { ^/margin ^|margin 0c @HShift @OneRow x |margin /margin }
+ }
+
+ PlainText @Yield {
+ ^/margin ^|margin 0c @HShift @OneRow x |margin /margin
+ }
+
+ PDF @Yield {
+ @PDFStuff @Graphic
+ { ^/margin ^|margin 0c @HShift @OneRow x |margin /margin }
+ }
+ }
+ }
+
+ def @ShadowBox
+ named margin { 0.3f }
+ import @PSLengths named linewidth {}
+ named paint { none }
+ import @TextureImport named texture {}
+ named shadow { 0.2f }
+ right x
+ {
+ @VContract @HContract 0c @HShift @BackEnd @Case {
+
+ PostScript @Yield {
+ "LoutShadowBox fill" @Graphic
+ { ^/shadow ^|shadow 0c @HShift
+ @Box
+ margin {margin}
+ paint {paint}
+ texture { texture }
+ linewidth {linewidth} x
+ |shadow /shadow
+ }
+ }
+
+ PlainText @Yield {
+ ^/shadow ^|shadow 0c @HShift
+ @Box
+ margin { margin }
+ paint { paint }
+ texture { texture }
+ linewidth {linewidth} x
+ |shadow /shadow
+ }
+
+ PDF @Yield {
+ {
+ "__mul(__xmark, 2) 0 m __xsize 0 l"
+ "__xsize __sub(__ysize, __mul(__xmark, 2)) l"
+ "__sub(__xsize, __xmark) __sub(__ysize, __mul(__xmark, 2)) l"
+ "__sub(__xsize, __xmark) __xmark l"
+ "__mul(__xmark, 2) __xmark l h f"
+ }
+ @Graphic
+ { ^/shadow ^|shadow 0c @HShift
+ @Box
+ margin { margin }
+ paint { paint }
+ texture { texture }
+ linewidth { linewidth } x
+ |shadow /shadow
+ }
+ }
+ }
+ }
+
+
+ ###########################################################################
+ # #
+ # @BoundaryMarks #
+ # #
+ ###########################################################################
+
+ def @BoundaryMarks
+ import @PSLengths named linewidth { 0.2p }
+ import @PSLengths named length { 0.5c }
+ import @PSLengths named gap { 0.5c }
+ import @PSLengths named lout { 0c }
+ import @PSLengths named rout { 0c }
+ import @PSLengths named uout { 0c }
+ import @PSLengths named dout { 0c }
+ {
+ def @UpStroke { "0" gap "rmoveto" "0" length "rlineto" }
+ def @DownStroke { "0" gap "neg" "rmoveto" "0" length "neg rlineto" }
+ def @LeftStroke { gap "neg" "0" "rmoveto" length "neg" "0 rlineto" }
+ def @RightStroke { gap "0" "rmoveto" length "0 rlineto" }
+
+ def @LLSpot { lout "neg" dout "neg" moveto }
+ def @LRSpot { xsize rout "add" dout "neg" moveto }
+ def @ULSpot { lout "neg" ysize uout "add" moveto }
+ def @URSpot { xsize rout "add" ysize uout "add" moveto }
+
+ def @PDFStuff {
+ "__sub(-"gap", "lout") __sub(0, "dout") m "
+ "__sub(__sub(-"gap", "lout"), "length") __sub(0, "dout") l"
+ "__sub(0, "lout") __sub(-"gap", "dout") m "
+ "__sub(0, "lout") __sub(__sub(-"gap", "dout"), "length") l"
+ "__add(__xsize,"rout") __sub(-"gap", "dout") m "
+ "__add(__xsize,"rout") __sub(__sub(-"gap", "dout"), "length") l"
+ "__add(__add(__xsize,"rout"),"gap") __sub(0, "dout") m "
+ "__add(__add(__add(__xsize,"rout"),"gap"),"length") __sub(0, "dout") l"
+ " __sub(__sub(0, "lout"), "gap") __add(__ysize, "uout") m "
+ "__sub(__sub(__sub(0, "lout"), "gap"), "length") __add(__ysize, "uout") l"
+ "__sub(0, "lout") __add(__add(__ysize, "uout"), "gap") m "
+ "__sub(0, "lout") __add(__add(__add(__ysize, "uout"), "gap"), "length") l"
+ " __add(__add(__xsize, "rout"), "gap") __add(__ysize, "uout") m "
+ "__add(__add(__add(__xsize, "rout"), "gap"), "length") __add(__ysize, "uout") l"
+ "__add(__xsize, "rout") __add(__add(__ysize, "uout"), "gap") m "
+ "__add(__xsize, "rout") __add(__add(__add(__ysize, "uout"), "gap"), "length") l"
+
+ linewidth "w S"
+ }
+
+ @BackEnd @Case {
+
+ PostScript @Yield {
+ {
+ @LLSpot @LeftStroke
+ @LLSpot @DownStroke
+ @LRSpot @DownStroke
+ @LRSpot @RightStroke
+ @ULSpot @LeftStroke
+ @ULSpot @UpStroke
+ @URSpot @RightStroke
+ @URSpot @UpStroke
+
+ linewidth "setlinewidth stroke"
+ } @Graphic {}
+ }
+
+ PlainText @Yield ""
+
+ PDF @Yield { @PDFStuff @Graphic {} }
+ }
+ }
+
+ ##########################################################################
+ # #
+ # @NumberMarker, @NumberOf, @TitleMarker, @TitleOf, #
+ # @PageMark, @PageOf, @CrossLink, @ExternalLink #
+ # #
+ # NB the default value ?? is desperately important for unsorted #
+ # reference lists numbered by first appearance (@NumberOf @Tag), #
+ # because it is the special sort key value that prevents merging, #
+ # hence allowing all the references to be printed even though #
+ # their sort keys are all ?? initially. #
+ # #
+ ##########################################################################
+
+ export @Tag @Value
+ def @NumberMarker
+ named @Tag {}
+ named @Value { "??" }
+ {
+ @Null
+ }
+
+ def @NumberOf
+ right tag
+ {
+ @NumberMarker&&tag @Open { @Value }
+ }
+
+
+ export @Tag @Value
+ def @TitleMarker
+ named @Tag {}
+ named @Value { "??" }
+ {
+ @Null
+ }
+
+ def @TitleOf
+ right tag
+ {
+ @TitleMarker&&tag @Open { @Value }
+ }
+
+
+ export num rawnum @Tag
+ def @PageMarker
+ named @Tag {}
+ named num {}
+ named rawnum {}
+ {
+ @PageLabel num
+ }
+
+ def @PageMark
+ right tag
+ {
+ tag @LinkDest @Null & @PageMarker&&preceding @Tagged tag
+ }
+
+ def @NoLinkPageMark
+ right tag
+ {
+ @PageMarker&&preceding @Tagged tag
+ }
+
+ def @PageOf
+ right tag
+ {
+ @PageMarker&&tag @Open { num }
+ }
+
+ def @CrossLink
+ left tag
+ named @Format right @Body { @CrossLinkFormat @Body }
+ right obj
+ {
+ @HContract @VContract {
+ tag @LinkSource @Format obj
+ }
+ }
+
+ def @ExternalLink
+ left tag
+ named @Format right @Body { @ExternalLinkFormat @Body }
+ right obj
+ {
+ @HContract @VContract {
+ tag @URLLink @Format obj
+ }
+ }
+
+
+ ###########################################################################
+ # #
+ # @Join and @Sep #
+ # #
+ # Join two objects together with @NumberSeparator, unless one is #
+ # empty in which case just return the other. #
+ # #
+ ###########################################################################
+
+ def @Join left x right y
+ {
+ x @Case {
+ {} @Yield y
+ else @Yield {
+ y @Case {
+ {} @Yield x
+ else @Yield { x{@NumberSeparator}y }
+ }
+ }
+ }
+ }
+
+ def @Sep left x right y
+ {
+ x @Case {
+ {} @Yield y
+ else @Yield {
+ y @Case {
+ {} @Yield x
+ else @Yield { x{@NumberSeparator} |2s y }
+ }
+ }
+ }
+ }
+
+
+ ###########################################################################
+ # #
+ # Miscellaneous. #
+ # #
+ ###########################################################################
+
+ def @Heading right x { ragged @Break @HeadingFont @Font x }
+ def "^" { {} ^& {} }
+ def "&-" left x right y { x &0ch 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 { "*" }
+
+
+ ###########################################################################
+ # #
+ # Paragraphs. #
+ # #
+ ###########################################################################
+
+ macro @PP { //@ParaGap @ParaIndent @Wide &{0i} }
+ macro @LP { //{@ParaGap} }
+ macro @LLP { //{1vx} }
+ macro @DP { //{@DisplayGap} }
+ macro @LOP { //{@ListOuterGap} }
+ 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 @BeginAlignedDisplays { // @APlace | @BAligned }
+ def @EAD @EndAlignedDisplays force into { @EndAlignedPlace&&preceding } {}
+
+
+ ###########################################################################
+ # #
+ # 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
+ named @BypassNumber { "dft" }
+ right tag
+ {
+ def @DisplayNumber
+ {
+ @BypassNumber @Dft { @NumDispNum tag }
+ }
+
+ @NumDispCounterMarker&&preceding @Tagged tag
+ # @NumDispCounterMarker val { @NumDispNum tag }
+ # @NumberMarker @Tag { tag } @Value { @NumDispNum tag }
+ @NumDispCounterMarker val { @DisplayNumber }
+ @NumberMarker @Tag { tag } @Value { @DisplayNumber }
+ }
+
+ def @NN
+ {
+ @NumDispCounterMarker&&preceding @Open { @DisplayNumStyle val }
+ }
+
+ def @Do
+ left x
+ right y
+ {
+ x @Case {
+ { No None } @Yield @Null
+ else @Yield y
+ }
+ }
+
+ def @BeginDisplayCounter
+ left condition
+ right prefix
+ {
+ condition @Do @NumDispCounterMarker val { prefix @Join 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 {}
+ named @BypassNumber { "dft" }
+ right x
+ {
+ @OneRow {
+ @NumDispCounterIncrement @Tag
+ # @NumDispCounterIncrement @BypassNumber { @BypassNumber } @Tag
+ @PageMark @Tag
+ ^//
+ @OneRow x
+ }
+ }
+
+ def @ADisp into { @AlignedPlace&&preceding }
+ right x
+ {
+ x
+ }
+
+ def @ANDisp into { @AlignedPlace&&preceding }
+ named @Tag {}
+ named @BypassNumber { "dft" }
+ right x
+ {
+ @OneRow {
+ @NumDispCounterIncrement @Tag
+ # @NumDispCounterIncrement @BypassNumber { @BypassNumber } @Tag
+ @PageMark @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 { |1rt @NN } }
+ macro @DX { @DispPlace }
+ macro @DY { @Disp }
+ macro @AX { @APlace }
+ macro @AY { @ADisp }
+ macro @NY { @NDisp }
+ macro @MY { @ANDisp }
+
+ macro @D @Display { @DP @G @DX | @DP // @DY }
+ macro @LD @LeftDisplay { @DP @LG @DX | @DP // @DY }
+ macro @ID @IndentedDisplay { @DP @IG @DX | @DP // @DY }
+ macro @QD @QuotedDisplay { @DP @IG @DX @IG @DP // @DY }
+ macro @CD @CentredDisplay
+ @CenteredDisplay { @DP @CG @DX | @DP // @DY }
+ macro @RightDisplay { @DP @RG @DX | @DP // @DY }
+
+
+ macro @AD @AlignedDisplay { @DP @G @AX | @DP // @AY }
+ macro @LAD @LeftAlignedDisplay { @DP @LG @AX | @DP // @AY }
+ macro @IAD @IndentedAlignedDisplay { @DP @IG @AX | @DP // @AY }
+ macro @QAD @QuotedAlignedDisplay { @DP @IG @AX @IG @DP // @AY }
+ macro @CAD @CentredAlignedDisplay
+ @CenteredAlignedDisplay { @DP @CG @AX | @DP // @AY }
+ macro @RightAlignedDisplay { @DP @RG @AX | @DP // @AY }
+
+ macro @ND @NumberedDisplay { @DP @G @DX |1rt @NN @DP // @NY }
+ macro @LND @LeftNumberedDisplay { @DP @LG @DX |1rt @NN @DP // @NY }
+ macro @IND @IndentedNumberedDisplay { @DP @IG @DX |1rt @NN @DP // @NY }
+ macro @QND @QuotedNumberedDisplay { @DP @IG @DX |1rt @QR @DP // @NY }
+ macro @CND @CentredNumberedDisplay
+ @CenteredNumberedDisplay { @DP @CG @DX |1rt @NN @DP // @NY }
+ macro @RightNumberedDisplay { @DP @RG @DX |1rt @NN @DP // @NY }
+
+ macro @AND @AlignedNumberedDisplay { @DP @G @AX |1rt @NN @DP // @MY }
+ macro @LAND @LeftAlignedNumberedDisplay { @DP @LG @AX |1rt @NN @DP // @MY }
+ macro @IAND @IndentedAlignedNumberedDisplay{ @DP @IG @AX |1rt @NN @DP // @MY }
+ macro @QAND @QuotedAlignedNumberedDisplay { @DP @IG @AX |1rt @QR @DP // @MY }
+ macro @CAND @CentredAlignedNumberedDisplay
+ @CenteredAlignedNumberedDisplay{ @DP @CG @AX |1rt @NN @DP // @MY }
+ macro @RightAlignedNumberedDisplay { @DP @RG @AX |1rt @NN @DP // @MY }
+
+
+ macro @RD @RawDisplay { @G @DX | // @DY }
+ macro @RLD @RawLeftDisplay { @LG @DX | // @DY }
+ macro @RID @RawIndentedDisplay { @IG @DX | // @DY }
+ macro @RQD @RawQuotedDisplay { @IG @DX @IG | // @DY }
+ macro @RCD @RawCentredDisplay
+ @RawCenteredDisplay { @CG @DX | | // @DY }
+ macro @RRD @RawRightDisplay { @RG @DX | // @DY }
+
+
+ macro @RAD @RawAlignedDisplay { @G @AX | // @AY }
+ macro @RLAD @RawLeftAlignedDisplay { @LG @AX | // @AY }
+ macro @RIAD @RawIndentedAlignedDisplay { @IG @AX | // @AY }
+ macro @RQAD @RawQuotedAlignedDisplay { @IG @AX @IG | // @AY }
+ macro @RCAD @RawCentredAlignedDisplay
+ @RawCenteredAlignedDisplay { @CG @AX | // @AY }
+ macro @RRAD @RawRightAlignedDisplay { @RG @AX | // @AY }
+
+ macro @RND @RawNumberedDisplay { @G @DX |1rt @NN // @NY }
+ macro @RLND @RawLeftNumberedDisplay { @LG @DX |1rt @NN // @NY }
+ macro @RIND @RawIndentedNumberedDisplay { @IG @DX |1rt @NN // @NY }
+ macro @RQND @RawQuotedNumberedDisplay { @IG @DX |1rt @QR // @NY }
+ macro @RCND @RawCentredNumberedDisplay
+ @RawCenteredNumberedDisplay { @CG @DX |1rt @NN // @NY }
+ macro @RRND @RawRightNumberedDisplay { @RG @DX |1rt @NN // @NY }
+
+ macro @RAND @RawAlignedNumberedDisplay { @G @AX |1rt @NN // @MY }
+ macro @RLAND @RawLeftAlignedNumberedDisplay { @LG @AX |1rt @NN // @MY }
+ macro @RIAND @RawIndentedAlignedNumberedDisplay { @IG @AX |1rt @NN // @MY }
+ macro @RQAND @RawQuotedAlignedNumberedDisplay { @IG @AX |1rt @QR // @MY }
+ macro @RCAND @RawCentredAlignedNumberedDisplay
+ @RawCenteredAlignedNumberedDisplay { @CG @AX |1rt @NN // @MY }
+ macro @RRAND @RawRightAlignedNumberedDisplay{ @RG @AX |1rt @NN // @MY }
+
+
+ ###########################################################################
+ # #
+ # Lists and raw lists. #
+ # #
+ ###########################################################################
+
+
+ def @ItemPlace { @Galley }
+ def @ParagraphItemPlace { @Galley }
+ def @InterruptItemPlace { @Galley }
+ def @NewPageItemPlace { @Galley }
+ def @TagPlace { @Galley }
+ def @EndListPlace { @Galley }
+
+ def @RawList
+ named style right num { num }
+ named type right num { num }
+ named gap { @ListGap }
+ named indent { @ListIndent }
+ named itemindent { 0c }
+ named rightindent { @ListRightIndent }
+ named labelwidth { @ListLabelWidth }
+ named labelright { @ListLabelRight }
+ named labelrightgap { @ListLabelRightGap }
+ named start { 1 }
+ named font { @ListFont }
+ named break { @ListBreak }
+ named colnum { 1 }
+ named colgap { 1.0c }
+ named colheight { 5.0c }
+ {
+ def @MakeList right num
+ {
+ def @NormalItem
+ {
+ def @Align right x
+ {
+ labelright @Case {
+ { Yes yes } @Yield { labelwidth @Wide { |1rt @OneCol { x |labelrightgap } } }
+ else @Yield x
+ }
+ }
+
+ |indent
+ labelwidth @Wide {
+ # @NumberMarker @Value {style num} {style num} &0io
+ # @NumberMarker @Value {num} {style type num} &0io
+ @NumberMarker @Value {type num} {@Align style type num} &0io
+ }
+ |itemindent break @Break font @Font @ItemPlace |rightindent
+ //gap @MakeList @NotRevealed @Next num
+ }
+
+ def @ParagraphItem
+ {
+ @NumberMarker @Value {num} {style type num} &0io
+ |indent break @Break font @Font @ParagraphItemPlace |rightindent
+ //gap @MakeList @NotRevealed @Next num
+ }
+
+ def @InterruptItem
+ {
+ @InterruptItemPlace
+ //gap @MakeList @NotRevealed num
+ }
+
+ def @NewPageItem
+ {
+ @NewPageItemPlace
+ //1.1b @MakeList @NotRevealed num
+ }
+
+ @OneOf
+ {
+ @NormalItem
+ @ParagraphItem
+ @InterruptItem
+ @NewPageItem
+ }
+ }
+
+ def @ListGalleyPlace { @Galley }
+
+ def @ListGalley into { @ListGalleyPlace&&preceding }
+ {
+ @MakeList start // @EndListPlace
+ }
+
+ def @ColPieceTwo
+ {
+ colheight @High 500c @Wide @ListGalleyPlace ||colgap
+ colheight @High 500c @Wide @ListGalleyPlace @NotRevealed
+ }
+
+ def @ColPieceThree
+ {
+ colheight @High 500c @Wide @ListGalleyPlace ||colgap
+ colheight @High 500c @Wide @ListGalleyPlace @NotRevealed ||colgap
+ colheight @High 500c @Wide @ListGalleyPlace @NotRevealed
+ }
+
+ def @ColPieceFour
+ {
+ colheight @High 500c @Wide @ListGalleyPlace ||colgap
+ colheight @High 500c @Wide @ListGalleyPlace @NotRevealed ||colgap
+ colheight @High 500c @Wide @ListGalleyPlace @NotRevealed ||colgap
+ colheight @High 500c @Wide @ListGalleyPlace @NotRevealed
+ }
+
+ def @ColPieceFive
+ {
+ colheight @High 500c @Wide @ListGalleyPlace ||colgap
+ colheight @High 500c @Wide @ListGalleyPlace @NotRevealed ||colgap
+ colheight @High 500c @Wide @ListGalleyPlace @NotRevealed ||colgap
+ colheight @High 500c @Wide @ListGalleyPlace @NotRevealed ||colgap
+ colheight @High 500c @Wide @ListGalleyPlace @NotRevealed
+ }
+
+ colnum @Case
+ {
+ 1 @Yield @ListGalleyPlace
+ 2 @Yield @ColPieceTwo
+ 3 @Yield @ColPieceThree
+ 4 @Yield @ColPieceFour
+ 5 @Yield @ColPieceFive
+ else @Yield @ListGalleyPlace
+ }
+ //
+ @ListGalley
+ }
+
+ def listitem into { @ItemPlace&&preceding }
+ named @Tag {}
+ right x
+ {
+ @NumberMarker&&preceding @Tagged @Tag
+ // x
+ // @PageMark @Tag # weird placement, but @PageMark is definite now
+ }
+
+ def paragraphitem
+ named @Tag {}
+ named style right tag { @ParaIndent @Wide & tag. &2s }
+ right x
+ {
+
+ def sendparagraphitem into { @ParagraphItemPlace&&preceding }
+ named tag { @Tag }
+ {
+ @NumberMarker&&preceding @Tagged @Tag
+ // { style @NumberMarker&&@Tag @Open { @Value } } @Insert x
+ // @PageMark @Tag
+ }
+
+ sendparagraphitem
+ }
+
+ def droplistitem into { @ItemPlace&&preceding }
+ named @Tag {}
+ right x
+ {
+ @NumberMarker&&preceding @Tagged @Tag
+ // @PageMark @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 // //1vxu x
+ }
+
+ def endlist force into { @EndListPlace&&preceding } {}
+
+ def listnewpage into { @NewPageItemPlace&&preceding } {}
+
+ def listinterruptitem into { @InterruptItemPlace&&preceding }
+ right x
+ {
+ x
+ }
+
+
+ macro @LI @ListItem { // listitem }
+ macro @PI @ParagraphItem { // paragraphitem }
+ macro @LII @ListInterruptItem { // listinterruptitem }
+ macro @LNP @ListNewPage { // listnewpage }
+ macro @DLI @DropListItem { // droplistitem }
+ macro @TI @TagItem { // tagitem tag }
+ macro @DTI @DropTagItem { // droptagitem tag }
+ macro @REL @RawEndList { // & endlist // }
+ macro @EL @EndList { // & endlist @LOP }
+
+
+ macro @RLL @RawLeftList { @RawList style {}
+ labelwidth { 0c } }
+ macro @RIL @RawIndentedList { @RawList style {} }
+ macro @RQL @RawQuotedList { @RawList style {}
+ rightindent {@DisplayIndent}}
+ macro @RCL @RawCentredList { @RawList style {}
+ labelwidth {0c}
+ itemindent {0.5rt} }
+ macro @RawCenteredList { @RawCentredList }
+ macro @RNL @RawNumberedList { @RawList style { num. } }
+ macro @RPNL @RawParenNumberedList { @RawList style { (num) } }
+ macro @RRL @RawRomanList { @RawList type { @Roman&&num }
+ style { num. } }
+ macro @RPRL @RawParenRomanList { @RawList type { @Roman&&num }
+ style { (num) } }
+ macro @RUCRL @RawUCRomanList { @RawList type { @UCRoman&&num }
+ style { num. } }
+ macro @RPUCRL @RawParenUCRomanList { @RawList type { @UCRoman&&num }
+ style { (num) } }
+ macro @RAL @RawAlphaList { @RawList type { @Alpha&&num }
+ style { num. } }
+ macro @RPAL @RawParenAlphaList { @RawList type { @Alpha&&num }
+ style { (num) } }
+ macro @RUCAL @RawUCAlphaList { @RawList type { @UCAlpha&&num }
+ style { num. } }
+ macro @RPUCAL @RawParenUCAlphaList { @RawList type { @UCAlpha&&num }
+ style { (num) } }
+ macro @RBL @RawBulletList { @RawList style { @Bullet } }
+ macro @RSL @RawStarList { @RawList style { @Star } }
+ macro @RDL @RawDashList { @RawList style { -- } }
+ macro @RTL @RawTaggedList { @RawList type { @TagPlace } }
+ macro @RWTL @RawWideTaggedList { @RawList type { @TagPlace }
+ labelwidth { @WideIndent } }
+ macro @RVWTL @RawVeryWideTaggedList{ @RawList type { @TagPlace }
+ labelwidth { @VeryWideIndent } }
+
+
+ macro @L @List { @LOP @RawList }
+ macro @LL @LeftList { @LOP @RawLeftList }
+ macro @IL @IndentedList { @LOP @RawIndentedList }
+ macro @QL @QuotedList { @LOP @RawQuotedList }
+ macro @CL @CentredList { @LOP @RawCentredList }
+ macro @CenteredList { @LOP @RawCenteredList }
+ macro @NL @NumberedList { @LOP @RawNumberedList }
+ macro @PNL @ParenNumberedList { @LOP @RawParenNumberedList }
+ macro @RL @RomanList { @LOP @RawRomanList }
+ macro @PRL @ParenRomanList { @LOP @RawParenRomanList }
+ macro @UCRL @UCRomanList { @LOP @RawUCRomanList }
+ macro @PUCRL @ParenUCRomanList { @LOP @RawParenUCRomanList }
+ macro @AL @AlphaList { @LOP @RawAlphaList }
+ macro @PAL @ParenAlphaList { @LOP @RawParenAlphaList }
+ macro @UCAL @UCAlphaList { @LOP @RawUCAlphaList }
+ macro @PUCAL @ParenUCAlphaList { @LOP @RawParenUCAlphaList }
+ macro @BL @BulletList { @LOP @RawBulletList }
+ macro @SL @StarList { @LOP @RawStarList }
+ macro @DL @DashList { @LOP @RawDashList }
+ macro @TL @TaggedList { @LOP @RawTaggedList }
+ macro @WTL @WideTaggedList { @LOP @RawWideTaggedList }
+ macro @VWTL @VeryWideTaggedList { @LOP @RawVeryWideTaggedList }
+
+@End @BasicSetup