diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/README | 73 | ||||
-rw-r--r-- | include/book | 376 | ||||
-rw-r--r-- | include/bookf | 1263 | ||||
-rw-r--r-- | include/bsf | 1563 | ||||
-rw-r--r-- | include/bsf.lpg | 140 | ||||
-rw-r--r-- | include/cprint | 70 | ||||
-rw-r--r-- | include/cprintf | 383 | ||||
-rw-r--r-- | include/diag | 193 | ||||
-rw-r--r-- | include/diagf | 3845 | ||||
-rw-r--r-- | include/diagf.etc | 627 | ||||
-rw-r--r-- | include/diagf.lpg | 2706 | ||||
-rw-r--r-- | include/doc | 353 | ||||
-rw-r--r-- | include/docf | 779 | ||||
-rw-r--r-- | include/dsf | 4644 | ||||
-rw-r--r-- | include/eq | 27 | ||||
-rw-r--r-- | include/eqf | 1643 | ||||
-rw-r--r-- | include/fig | 27 | ||||
-rw-r--r-- | include/figf | 909 | ||||
-rw-r--r-- | include/figf.lpg | 1003 | ||||
-rw-r--r-- | include/fontdefs | 156 | ||||
-rw-r--r-- | include/graph | 27 | ||||
-rw-r--r-- | include/graphf | 1084 | ||||
-rw-r--r-- | include/graphf.etc | 295 | ||||
-rw-r--r-- | include/graphf.lpg | 768 | ||||
-rw-r--r-- | include/init | 34 | ||||
-rw-r--r-- | include/langdefs | 16 | ||||
-rw-r--r-- | include/latin2 | 9 | ||||
-rw-r--r-- | include/latin2.fd | 143 | ||||
-rw-r--r-- | include/modula | 27 | ||||
-rw-r--r-- | include/modulaf | 137 | ||||
-rw-r--r-- | include/mydefs | 9 | ||||
-rw-r--r-- | include/pas | 27 | ||||
-rw-r--r-- | include/pasf | 110 | ||||
-rw-r--r-- | include/picture | 254 | ||||
-rw-r--r-- | include/picturef | 37 | ||||
-rw-r--r-- | include/report | 372 | ||||
-rw-r--r-- | include/reportf | 895 | ||||
-rw-r--r-- | include/russian | 10 | ||||
-rw-r--r-- | include/russian.fd | 38 | ||||
-rw-r--r-- | include/slides | 299 | ||||
-rw-r--r-- | include/slidesf | 371 | ||||
-rw-r--r-- | include/tab | 29 | ||||
-rw-r--r-- | include/tabf | 936 | ||||
-rw-r--r-- | include/tabf.lpg | 115 | ||||
-rw-r--r-- | include/tbl | 79 | ||||
-rw-r--r-- | include/tblf | 3127 | ||||
-rw-r--r-- | include/tblf.lpg | 41 | ||||
-rw-r--r-- | include/ts | 105 |
48 files changed, 30174 insertions, 0 deletions
diff --git a/include/README b/include/README new file mode 100644 index 0000000..0204b0c --- /dev/null +++ b/include/README @@ -0,0 +1,73 @@ +Directory lout/include + +This directory contains Lout source files for the standard packages. +The following listing classifies them into types of files. + +Setup files (containing mainly lists of options settable by the user) +--------------------------------------------------------------------- + + Setup files for basic document types (choose one): + + doc The OrdinarySetup package + report The ReportSetup package + book The BookSetup package + slides The OverheadsSetup package + picture The IllustrationSetup package + + Setup files for special-purpose packages (choose any combination): + + tbl The Tbl table formatting package + tab The Tab table formatting package (OBSOLETE, use tbl) + eq The Eq equation formatting package + diag The Diag diagram drawing package + fig The Fig advanced graphics package (OBSOLETE, use diag) + graph The Graph graph drawing package + cprint The cprint C and C++ program printing package + pas The Pas Pascal progam printing package + modula The Modula Modula-2 progam printing package + latin2 The Latin2 (Eastern European characters) package + russian The Russian language package + +Source files (containing Lout and PostScript source code for the packages) +-------------------------------------------------------------------------- + + bsf The BasicSetup package + bsf.lpg A PostScript prepend file needed by BasicSetup + dsf The DocumentSetup package + docf The OrdinarySetup package + reportf The ReportSetup package + bookf The BookSetup package + slidesf The OverheadsSetup package + picturef The IllustrationSetup package + + tabf The Tab table formatting package (OBSOLETE) + tabf.lpg A PostScript prepend file needed by tabf (OBSOLETE) + tblf The Tbl table formatting package + tblf.lpg A PostScript prepend file needed by tblf + eqf The Eq equation formatting package + figf The Fig advanced graphics package (OBSOLETE) + figf.lpg A PostScript prepend file needed by figf (OBSOLETE) + diagf The Diag diagram drawing package + diagf.etc A file included by diagf + diagf.lpg A PostScript prepend file needed by diagf + graphf The Graph graph drawing package + graphf.etc A file included by graphf + graphf.lpg A PostScript prepend file needed by graphf + cprintf The cprint C and C++ program printing package + pasf The Pas Pascal progam printing package + modulaf The Modula Modula-2 progam printing package + latin2.fd Latin2 font definitions file (placeholder file) + russian.fd Russian font definitions file (placeholder file) + +Miscellaneous +------------- + + fontdefs Standard font definitions file + langdefs Standard language definitions file + mydefs Empty file for if the user doesn't have one + ts The ToySetup package (an expert users' intro. example) + init A Lout source file used during installation (lout -x) + + +Jeffrey H. Kingston +26 May 1999 diff --git a/include/book b/include/book new file mode 100644 index 0000000..2d28f62 --- /dev/null +++ b/include/book @@ -0,0 +1,376 @@ +############################################################################### +# # +# Lout setup file for books # +# # +# Jeffrey H. Kingston # +# 17 September 1999 # +# # +############################################################################### + + +############################################################################### +# # +# @SysInclude commands for standard packages. # +# # +############################################################################### + + @SysInclude { fontdefs } # font definitions + @SysInclude { langdefs } # language definitions + @SysInclude { bsf } # BasicSetup package + @SysInclude { dsf } # DocumentSetup package + @SysInclude { bookf } # BookSetup extension + + +############################################################################### +# # +# @Include command for reading personal definitions from current directory. # +# # +############################################################################### + + @Include { mydefs } + +############################################################################### +# # +# The @BasicSetup @Use clause - basics, lists, paragraphs, displays. # +# # +# To change the default value of any option, delete the # at the start of # +# its line and change the value between braces. # +# # +############################################################################### + +@Use { @BasicSetup + # @InitialFont { Times Base 12p } # initial font + # @InitialBreak {{adjust 1.2fx hyphen} @OrIfPlain {ragged 1fx nohyphen}} + # @InitialSpace { lout } # initial space style + # @InitialLanguage { English } # initial language + # @InitialColour { black } # initial colour + # @OptimizePages { No } # optimize page breaks? + # @HeadingFont { Bold } # font for @Heading + # @ParaGap { 1.3vx @OrIfPlain 1f } # gap between paragraphs + # @ParaIndent { 2.00f @OrIfPlain 5s } # first-line indent for @PP + # @DisplayGap { 1.00v @OrIfPlain 1f } # gap above, below displays + # @DisplayIndent { 2.00f @OrIfPlain 5s } # @IndentedDisplay indent + # @DefaultIndent { 0.5rt } # @Display indent + # @DisplayNumStyle { (num) } # style of display numbers + # @WideIndent { 4.00f @OrIfPlain 10s } # @WideTaggedList indent + # @VeryWideIndent { 8.00f @OrIfPlain 20s } # @VeryWideTaggedList indent + # @ListOuterGap { 1.00v @OrIfPlain 1f } # gap before, after lists + # @ListGap { 1.00v @OrIfPlain 1f } # gap between list items + # @ListIndent { 0s } # indent of list items + # @ListRightIndent { 0s } # right indent of list items + # @ListLabelWidth { 2.00f @OrIfPlain 5s } # width allowed for list tags + # @NumberSeparator { . } # separates nums like 2.3.7 +} + + +############################################################################### +# # +# The @DocumentSetup @Use clause - page layout plus figures, tables, etc. # +# # +# To change the default value of any option, delete the # at the start of # +# its line and change the value between braces. # +# # +############################################################################### + +@Use { @DocumentSetup + # @PageType { A4 @OrIfPlain Other} # page type (width, height) + # @PageWidth { 80s } # page width if type Other + # @PageHeight { 66f } # page height if type Other + # @PageOrientation { Portrait } # Portrait, Landscape, etc. + # @PageBackground { } # background of each page + # @TopMargin { 2.5c @OrIfPlain 6f } # top margin of all pages + # @FootMargin { 2.5c @OrIfPlain 6f } # bottom margin of all pages + # @OddLeftMargin { 2.5c @OrIfPlain 10s } # left margin of odd pages + # @OddRightMargin { 2.5c @OrIfPlain 10s } # right margin of odd pages + # @EvenLeftMargin { 2.5c @OrIfPlain 10s } # left margin of even pages + # @EvenRightMargin { 2.5c @OrIfPlain 10s } # right margin of even pages + # @PageBoxType { None } # None Box CurveBox ShadowBox + # @PageBoxMargin { 1.00c } # page box margin + # @PageBoxLineWidth { } # page box line thickness + # @PageBoxPaint { none } # page box paint + # @PageBoxShadow { 0.60c } # shadow margin if ShadowBox + # @ColumnNumber { 1 } # number of columns (1 to 10) + # @ColumnGap { 1.00c @OrIfPlain 6s } # column gap + # @FigureLocation { PageTop } # default figure location + # @TableLocation { PageTop } # default table location + # @FigureFormat { @CC @Body } # default figure format + # @TableFormat { @CC @Body } # default table format + # @FigureWord { figure } # "Figure" word else anything + # @TableWord { table } # "Table" word else anything + # @FigureNumbers { Arabic } # method of numbering figures + # @TableNumbers { Arabic } # method of numbering tables + # @FigureCaptionPos { Below } # Above or Below + # @TableCaptionPos { Below } # Above or Below + # @CaptionFont { } # figure, table caption font + # @CaptionBreak { } # figure, table caption break + # @CaptionFormat { @B { number @DotSep @OneCol } } # figure, table caption format + # @MakeFigureContents { No } # list of figures at start + # @MakeTableContents { No } # list of tables at start + # @MakeContents { No } # make contents? Yes or No + @MakeContents { Yes } # make contents? Yes or No + # @ContentsGap { 0.20v @OrIfPlain 0f } # extra gap above minor entry + # @ContentsGapAbove { 0.80v @OrIfPlain 1f } # extra gap above major entry + # @ContentsGapBelow { 0.00v @OrIfPlain 0f } # extra gap below major entry + # @ContentsFont { Bold } # font for major entry + # @ContentsPartGapAbove { 1.00v @OrIfPlain 1f } # extra gap above `part' entry + # @ContentsPartGapBelow { 0.00v @OrIfPlain 0f } # extra gap below `part' entry + # @ContentsFormat { number @DotSep title } # contents entry format + # @ContentsLeader { .. } # leader symbol in contents + # @ContentsLeaderGap { 4s @OrIfPlain 2s } # gap between leaders + # @ContentsRightWidth { 3f @OrIfPlain 6s } # page numbers column width + # @MakeReferences { Yes } # make references? Yes or No + # @RefCiteStyle { [cite] } # citation style + # @RefCiteLabels { @RefNum } # citation items + # @RefNumbers { Arabic } # reference numbers + # @RefListFormat { Labels } # NoLabels, Labels, etc. + # @RefListLabels { [@RefNum] } # ref list label format + # @RefListTitle { references } # title of reference list + # @ChapRefListTitle { references } # title of chapter ref list + # @RefListIndent { 0s } # indent to left of labels + # @RefListRightIndent { 0s } # indent to right of items + # @RefListGap { @ListGap } # gap between ref list items + # @RefListFont { } # font used in reference list + # @RefListBreak { } # break style of ref list + # @RefListLabelWidth { @ListLabelWidth } # Labels column width + # @RefListSortKey { @Tag } # sorting key + # @MakeIndex { No } # make index? Yes or No + @MakeIndex { Yes } # make index? Yes or No + # @IndexFont { } # index entries font + # @IndexBreak { {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break + # @IndexColumnNumber { 2 } # index columns (1 to 10) + # @IndexColumnGap { 1.00c @OrIfPlain 6s } # index column gap + # @MakeIndexA { No } # make index A? Yes or No + # @IndexAFont { } # index A entries font + # @IndexABreak { {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break + # @IndexAColumnNumber { 2 } # index A columns (1 to 10) + # @IndexAColumnGap { 1.00c @OrIfPlain 6s } # index A column gap + # @MakeIndexB { No } # make index B? Yes or No + # @IndexBFont { } # index B entries font + # @IndexBBreak { {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break + # @IndexBColumnNumber { 2 } # index B columns (1 to 10) + # @IndexBColumnGap { 1.00c @OrIfPlain 6s } # index B column gap + # @TopGap { 0.75c @OrIfPlain 2f } # gap between figures + # @MidGap { 0.75c @OrIfPlain 2f } # gap above/below body text + # @FootNoteNumbers { Arabic } # footnote numbers + # @FootNoteThrough { No } # numbered through chapter? + # @FootNoteLocation { ColFoot } # where the footnote appears + # @FootNoteFont { 0.80f } # font for footnotes + # @FootNoteBreak { 1.2fx @OrIfPlain 1fx } # break for footnotes + # @FootNoteFormat { { number &0.05f } @Insert body } # footnote format + # @FootLen { 2.00c @OrIfPlain 10s } # length of footnote line + # @FootAboveGap { @DisplayGap } # gap above footnote line + # @FootGap { 0.20c @OrIfPlain 1fx } # gap between footnotes + # @MarginNoteFont { 0.80f } # font of margin notes + # @MarginNoteBreak { ragged 1.10fx } # break style of margin notes + # @MarginNoteHGap { 0.5c } # horizontal gap to notes + # @MarginNoteVGap { @DisplayGap } # min vertical gap between + # @MarginNoteWidth { 1.50c } # width of margin notes + # @EndNoteNumbers { Arabic } # endnote numbers + # @EndNoteFont { 0.80f } # font of endnotes + # @EndNoteBreak { 1.2fx @OrIfPlain 1fx } # break for endnotes + # @EndNoteFormat { { number &0.05f } @Insert body } # endnote format + # @EndNoteGap { 0.20c @OrIfPlain 1f } # gap between endnotes + # @TheoremWord { theorem } # "Theorem" word, etc. + # @TheoremTitleFormat { (title) } # only if title present + # @TheoremFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @DefinitionWord { definition } # "Definition" word, etc. + # @DefinitionTitleFormat { (title) } # only if title present + # @DefinitionFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @ClaimWord { claim } # "Claim" word, etc. + # @ClaimTitleFormat { (title) } # only if title present + # @ClaimFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @PropositionWord { proposition } # "Proposition" word, etc. + # @PropositionTitleFormat { (title) } # only if title present + # @PropositionFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @LemmaWord { lemma } # "Lemma" word, etc. + # @LemmaTitleFormat { (title) } # only if title present + # @LemmaFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @CorollaryWord { corollary } # "Corollary" word, etc. + # @CorollaryTitleFormat { (title) } # only if title present + # @CorollaryFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @ExampleWord { example } # "Example" word, etc. + # @ExampleTitleFormat { (title) } # only if title present + # @ExampleFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @ProofWord { proof } # "Proof" word, etc. + # @PageHeaders { Simple } # None Simple Titles NoTitles + @PageHeaders { Titles } # None Simple Titles NoTitles + # @PageNumbers { Arabic } # page numbers + # @FirstPageNumber { 1 } # number of first page + # @IntroPageNumbers { Roman } # intro page numbers + # @IntroFirstPageNumber{ 1 } # number of first intro page + # @StructPageNums { No } # make structured page numbers + + # @OddTop { @Centre{- @PageNum -} } # Simple page headers + # @OddFoot { @Null } + # @EvenTop { @Centre{- @PageNum -} } + # @EvenFoot { @Null } + # @StartOddTop { @Null } + # @StartOddFoot { @Null } + # @StartEvenTop { @Null } + # @StartEvenFoot { @Null } + # @IntroOddTop { @Null } + # @IntroOddFoot { @Centre @PageNum } + # @IntroEvenTop { @Null } + # @IntroEvenFoot { @Centre @PageNum } + # @IntroStartOddTop { @Null } + # @IntroStartOddFoot { @Null } + # @IntroStartEvenTop { @Null } + # @IntroStartEvenFoot { @Null } + + # Titles, NoTitles headers + # @RunningOddTop { @I {@MinorNum @DotSep @MinorTitle} @Right @B @PageNum } + # @RunningOddFoot { @Null } + # @RunningEvenTop { @B @PageNum @Right @I {@MajorNum @DotSep @MajorTitle} } + # @RunningEvenFoot { @Null } + # @RunningStartOddTop { @Null } + # @RunningStartOddFoot { @Centre { Bold 0.8f } @Font @PageNum } + # @RunningStartEvenTop { @Null } + # @RunningStartEvenFoot { @Centre { Bold 0.8f } @Font @PageNum } + # @RunningIntroOddTop { @Null } + # @RunningIntroOddFoot { @Right @PageNum } + # @RunningIntroEvenTop { @Null } + # @RunningIntroEvenFoot { @PageNum } + # @RunningIntroStartOddTop { @Null } + # @RunningIntroStartOddFoot { @Null } + # @RunningIntroStartEvenTop { @Null } + # @RunningIntroStartEvenFoot { @Null } +} + + +############################################################################### +# # +# The @BookSetup @Use clause - options specific to books. # +# # +############################################################################### + +@Use { @BookSetup + # @TitlePageFont { Helvetica Base} # title page font (not size) + # @SeparateIntroNumbering { Yes } # separate intro page numbers + # @PrefaceAfterContents { No } # Yes or No + # @ChapterStartPages { Any } # Any, Odd, or Even + # @ReferencesBeforeAppendices { No } # references before appendices + # @PrefaceWord { preface } # word for "Preface" + # @ContentsWord { contents } # word for "Contents" + # @FigureListWord { figurelist } # word for "List of Figures" + # @TableListWord { tablelist } # word for "List of Tables" + # @IntroductionWord { introduction } # word for "Introduction" + # @ChapterWord { chapter } # word for "Chapter" + # @AppendixWord { appendix } # word for "Appendix" + # @IndexWord { index } # word for "Index" + # @IndexAWord { index } # word for "Index" (A) + # @IndexBWord { index } # word for "Index" (B) + # @ChapterNumbers { Arabic } # kind of chapter numbers + # @FirstChapterNumber { 1 } # first chapter number (Arabic) + # @SectionNumbers { Arabic } # kind of section numbers + # @FirstSectionNumber { 1 } # first section number (Arabic) + # @SubSectionNumbers { Arabic } # kind of subsection numbers + # @FirstSubSectionNumber { 1 } # first subsect number (Arabic) + # @SubSubSectionNumbers { Arabic } # kind of sub-subs. numbers + # @FirstSubSubSectionNumber { 1 } # first sub-sub number (Arabic) + # @AppendixNumbers { UCAlpha } # kind of appendix numbers + # @FirstAppendixNumber { 1 } # first appendix num (Arabic) + # @SubAppendixNumbers { Arabic } # kind of subappendix numbers + # @FirstSubAppendixNumber { 1 } # first sub-app num (Arabic) + # @SubSubAppendixNumbers { Arabic } # kind of sub-subapp. numbers + # @FirstSubSubAppendixNumber { 1 } # first sub-sub num (Arabic) + # @PartHeadingFont { Helvetica Base 2.50f } # part head font + # @PartHeadingBreak { clines 1.2fx nohyphen } # part head break + # @PartHeadingFormat { @CD number @DP @CD title } # part head format + # @ChapterHeadingFont { Bold 2.00f } # chapter head font + # @ChapterHeadingBreak { ragged 1.2fx nohyphen } # chapter head break + # @ChapterHeadingFormat { number @DotSep title } # format of chap. head + # @SectionHeadingFont { Bold } # section head font + # @SectionHeadingBreak { ragged 1.2fx nohyphen } # section head break + # @SectionHeadingFormat { number @DotSep title } # section head fmt + # @SubSectionHeadingFont { Bold } # subs. head font + # @SubSectionHeadingBreak { ragged 1.2fx nohyphen } # subs. head break + # @SubSectionHeadingFormat { number @DotSep title } # subs. head fmt + # @SubSubSectionHeadingFont { Slope } # sub-subs. head font + # @SubSubSectionHeadingBreak { ragged 1.2fx nohyphen } # sub-subs. head break + # @SubSubSectionHeadingFormat { number @DotSep title } # sub-subs. head fmt + # @AppendixHeadingFont { Bold 2.00f } # appendix head font + # @AppendixHeadingBreak { ragged 1.2fx nohyphen } # appendix head break + # @AppendixHeadingFormat { number @DotSep title } # appendix head fmt + # @SubAppendixHeadingFont { Bold } # subapp. head font + # @SubAppendixHeadingBreak { ragged 1.2fx nohyphen } # subapp. head break + # @SubAppendixHeadingFormat { number @DotSep title } # subapp. head fmt + # @SubSubAppendixHeadingFont { Slope } # sub-suba. head font + # @SubSubAppendixHeadingBreak { ragged 1.2fx nohyphen } # sub-suba. head break + # @SubSubAppendixHeadingFormat{ number @DotSep title } # sub-suba. head fmt + # @AbovePartGap { 4.00f } # gap above part title + # @AboveChapterGap { 3.00f } # above major titles + # @SectionGap { 2.0v @OrIfPlain 3f } # between sections + # @SubSectionGap { 1.5v @OrIfPlain 2f } # between subsects + # @SubSubSectionGap { 1.5v @OrIfPlain 2f } # between sub-subs. + # @SubAppendixGap { 2.0v @OrIfPlain 3f } # between subappendices + # @SubSubAppendixGap { 1.5v @OrIfPlain 2f } # between sub-subapps + # @AbbreviationsInContents { Yes } # add abbreviations to contents + # @IntroductionInContents { Yes } # add introduction to contents + # @PartInContents { Yes } # add parts to contents + # @ChapterInContents { Yes } # add chapters to contents + # @SectionInContents { Yes } # add sections to contents + # @SubSectionInContents { Yes } # add subsections to contents + # @SubSubSectionInContents { No } # add sub-subsects to contents + # @AppendixInContents { Yes } # add appendices to contents + # @SubAppendixInContents { Yes } # add subappendices to contents + # @SubSubAppendixInContents { No } # add sub-subapps to contents + # @ReferencesInContents { Yes } # add ref. section to contents + # @IndexInContents { Yes } # add index to contents + # @IndexAInContents { Yes } # add index A to contents + # @IndexBInContents { Yes } # add index B to contents + # @PartContentsIndent { 0.5rt } # indent of part contents entry + # @ChapterNumInTheorems { Yes } # theorem num has chapter num + # @SectionNumInTheorems { No } # theorem num has section num + # @SubSectionNumInTheorems { No } # theorem num has subsect num + # @SubSubSectionNumInTheorems { No } # theorem num has sub-ss. num + # @AppendixNumInTheorems { Yes } # theorem num has appendix num + # @SubAppendixNumInTheorems { No } # theorem num has sub-app num + # @SubSubAppendixNumInTheorems{ No } # theorem num has sub-sa. num + # @ChapterNumInDisplays { Yes } # display num has chapter num + # @SectionNumInDisplays { Yes } # display num has section num + # @SubSectionNumInDisplays { No } # display num has subsect num + # @SubSubSectionNumInDisplays { No } # display num has sub-ss. num + # @AppendixNumInDisplays { Yes } # display num has appendix num + # @SubAppendixNumInDisplays { Yes } # display num has sub-app num + # @SubSubAppendixNumInDisplays{ No } # display num has sub-sa. num + # @ChapterNumInFigures { Yes } # figure num has chapter num + # @SectionNumInFigures { No } # figure num has section num + # @SubSectionNumInFigures { No } # figure num has subsect num + # @SubSubSectionNumInFigures { No } # figure num has sub-ss. num + # @AppendixNumInFigures { Yes } # figure num has appendix num + # @SubAppendixNumInFigures { No } # figure num has sub-app num + # @SubSubAppendixNumInFigures { No } # figure num has sub-sa. num + # @ChapterNumInTables { Yes } # table num has chapter num + # @SectionNumInTables { No } # table num has section num + # @SubSectionNumInTables { No } # table num has subsect num + # @SubSubSectionNumInTables { No } # table num has sub-ss. num + # @AppendixNumInTables { Yes } # table num has appendix num + # @SubAppendixNumInTables { No } # table num has sub-app num + # @SubSubAppendixNumInTables { No } # table num has sub-sa. num + # @SectionNumInRunners { Yes } # runners have section num + # @SubSectionNumInRunners { No } # runners have subsect num + # @SubSubSectionNumInRunners { No } # runners have sub-ss. num + # @SubAppendixNumInRunners { Yes } # runners have sub-app num + # @SubSubAppendixNumInRunners { No } # runners have sub-sa. num + # @PrefacePrefix { } # for structured page nums + # @ContentsPrefix { } # for structured page nums + # @FigureContentsPrefix { } # for structured page nums + # @TableContentsPrefix { } # for structured page nums + # @AbbreviationsPrefix { } # for structured page nums + # @IntroductionPrefix { } # for structured page nums + # @ChapterPrefix { } # for structured page nums + # @AppendixPrefix { } # for structured page nums + # @ReferencesPrefix { } # for structured page nums + # @IndexPrefix { } # for structured page nums + # @IndexAPrefix { } # for structured page nums + # @IndexBPrefix { } # for structured page nums +} + + +############################################################################### +# # +# @Database (and @SysDatabase) clauses go here. # +# # +############################################################################### + +@SysDatabase @RefStyle { refstyle } # reference printing styles diff --git a/include/bookf b/include/bookf new file mode 100644 index 0000000..fe5ab72 --- /dev/null +++ b/include/bookf @@ -0,0 +1,1263 @@ + +########################################################################### +# # +# @BookSetup extension to @DocumentSetup. # +# # +# Jeffrey H. Kingston # +# 17 September 1999 # +# # +# This package extends DocumentSetup with definitions for books. # +# # +########################################################################### + +extend @BasicSetup @DocumentSetup +export @Book @Preface @Abbreviations @Introduction @Chapter @Appendix +def @BookSetup + named @TitlePageFont { Helvetica Base } + named @SeparateIntroNumbering { Yes } + named @PrefaceAfterContents { No } + named @ChapterStartPages { Any } + named @ReferencesBeforeAppendices { No } + + named @PrefaceWord { preface } + named @ContentsWord { contents } + named @FigureListWord { figurelist } + named @TableListWord { tablelist } + named @IntroductionWord { introduction } + named @AbbreviationsWord { abbreviations } + named @ChapterWord { chapter } + named @AppendixWord { appendix } + named @IndexWord { index } + named @IndexAWord { index } + named @IndexBWord { index } + + named @ChapterNumbers { Arabic } + named @FirstChapterNumber { 1 } + named @SectionNumbers { Arabic } + named @FirstSectionNumber { 1 } + named @SubSectionNumbers { Arabic } + named @FirstSubSectionNumber { 1 } + named @SubSubSectionNumbers { Arabic } + named @FirstSubSubSectionNumber { 1 } + named @AppendixNumbers { UCAlpha } + named @FirstAppendixNumber { 1 } + named @SubAppendixNumbers { Arabic } + named @FirstSubAppendixNumber { 1 } + named @SubSubAppendixNumbers { Arabic } + named @FirstSubSubAppendixNumber { 1 } + + named @PartHeadingFont { Helvetica Base 2.50f } + named @PartHeadingBreak { clines 1.2fx nohyphen } + named @PartHeadingFormat + left number right title { @CD number @DP @CD title } + + named @ChapterHeadingFont { Bold 2.00f } + named @ChapterHeadingBreak { ragged 1.2fx nohyphen } + named @ChapterHeadingFormat + left number right title { number @DotSep title } + + named @SectionHeadingFont { Bold } + named @SectionHeadingBreak { ragged 1.2fx nohyphen } + named @SectionHeadingFormat + left number right title { number @DotSep title } + + named @SubSectionHeadingFont { Bold } + named @SubSectionHeadingBreak { ragged 1.2fx nohyphen } + named @SubSectionHeadingFormat + left number right title { number @DotSep title } + + named @SubSubSectionHeadingFont { Slope } + named @SubSubSectionHeadingBreak { ragged 1.2fx nohyphen } + named @SubSubSectionHeadingFormat + left number right title { number @DotSep title } + + named @AppendixHeadingFont { Bold 2.00f } + named @AppendixHeadingBreak { ragged 1.2fx nohyphen } + named @AppendixHeadingFormat + left number right title { number @DotSep title } + + named @SubAppendixHeadingFont { Bold } + named @SubAppendixHeadingBreak { ragged 1.2fx nohyphen } + named @SubAppendixHeadingFormat + left number right title { number @DotSep title } + + named @SubSubAppendixHeadingFont { Slope } + named @SubSubAppendixHeadingBreak { ragged 1.2fx nohyphen } + named @SubSubAppendixHeadingFormat + left number right title { number @DotSep title } + + named @AbovePartGap { 4.00f } + named @AboveChapterGap { 3.00f } + named @SectionGap { 2.0v @OrIfPlain 3f } + named @SubSectionGap { 1.5v @OrIfPlain 2f } + named @SubSubSectionGap { 1.5v @OrIfPlain 2f } + named @SubAppendixGap { 2.0v @OrIfPlain 3f } + named @SubSubAppendixGap { 1.5v @OrIfPlain 2f } + + named @PrefaceInContents { No } + named @AbbreviationsInContents { Yes } + named @IntroductionInContents { Yes } + named @PartInContents { Yes } + named @ChapterInContents { Yes } + named @SectionInContents { Yes } + named @SubSectionInContents { Yes } + named @SubSubSectionInContents { No } + named @AppendixInContents { Yes } + named @SubAppendixInContents { Yes } + named @SubSubAppendixInContents { No } + named @ReferencesInContents { Yes } + named @IndexInContents { Yes } + named @IndexAInContents { Yes } + named @IndexBInContents { Yes } + named @PartContentsIndent { 0.5rt } + + named @ChapterNumInTheorems { Yes } + named @SectionNumInTheorems { No } + named @SubSectionNumInTheorems { No } + named @SubSubSectionNumInTheorems { No } + named @AppendixNumInTheorems { Yes } + named @SubAppendixNumInTheorems { No } + named @SubSubAppendixNumInTheorems { No } + + named @ChapterNumInDisplays { Yes } + named @SectionNumInDisplays { Yes } + named @SubSectionNumInDisplays { No } + named @SubSubSectionNumInDisplays { No } + named @AppendixNumInDisplays { Yes } + named @SubAppendixNumInDisplays { Yes } + named @SubSubAppendixNumInDisplays { No } + + named @ChapterNumInFigures { Yes } + named @SectionNumInFigures { No } + named @SubSectionNumInFigures { No } + named @SubSubSectionNumInFigures { No } + named @AppendixNumInFigures { Yes } + named @SubAppendixNumInFigures { No } + named @SubSubAppendixNumInFigures { No } + + named @ChapterNumInTables { Yes } + named @SectionNumInTables { No } + named @SubSectionNumInTables { No } + named @SubSubSectionNumInTables { No } + named @AppendixNumInTables { Yes } + named @SubAppendixNumInTables { No } + named @SubSubAppendixNumInTables { No } + + named @SectionNumInRunners { Yes } + named @SubSectionNumInRunners { No } + named @SubSubSectionNumInRunners { No } + named @SubAppendixNumInRunners { Yes } + named @SubSubAppendixNumInRunners { No } + + named @PrefacePrefix { } + named @ContentsPrefix { } + named @FigureContentsPrefix { } + named @TableContentsPrefix { } + named @AbbreviationsPrefix { } + named @IntroductionPrefix { } + named @ChapterPrefix { } + named @AppendixPrefix { } + named @ReferencesPrefix { } + named @IndexPrefix { } + named @IndexAPrefix { } + named @IndexBPrefix { } + +@Begin + + ####################################################################### + # # + # Lists of chapters, sections, sub(-sub)sections, and appendices. # + # # + ####################################################################### + + export num + def @ChapterList named @Tag {} right num + { + @Galley + // @ChapterList @Next num + } + + export num + def @SectionList named @Tag {} right num + { + @Galley + //@SectionGap @SectionList @Next num + } + + export num + def @SubSectionList named @Tag {} right num + { + @Galley + //@SubSectionGap @SubSectionList @Next num + } + + export num + def @SubSubSectionList named @Tag {} right num + { + @Galley + //@SubSubSectionGap @SubSubSectionList @Next num + } + + export num + def @AppendixList named @Tag {} right num + { + @Galley + // @AppendixList @Next num + } + + export num + def @SubAppendixList named @Tag {} right num + { + @Galley + //@SubAppendixGap @SubAppendixList @Next num + } + + export num + def @SubSubAppendixList named @Tag {} right num + { + @Galley + //@SubSubAppendixGap @SubSubAppendixList @Next num + } + + def @PrefacePlace { @Galley } + def @AbbreviationsPlace { @Galley } + def @IntroductionPlace { @Galley } + + + ####################################################################### + # # + # @Full - this sends text to a full-width place. # + # # + ####################################################################### + + def @Full right x + { + def @Any force into { @FullPlace&&following } right x { x } + def @Odd force into { @OddFullPlace&&following } right x { x } + def @Even force into { @EvenFullPlace&&following } right x { x } + + @ChapterStartPages @Case { + Any @Yield @Any x + Odd @Yield @Odd x + Even @Yield @Even x + } + } + + + ####################################################################### + # # + # @NoForceFull - this sends text to a full-width place. # + # # + ####################################################################### + + def @NoForceFull right x + { + def @Any into { @FullPlace&&following } right x { x } + def @Odd into { @OddFullPlace&&following } right x { x } + def @Even into { @EvenFullPlace&&following } right x { x } + + @ChapterStartPages @Case { + Any @Yield @Any x + Odd @Yield @Odd x + Even @Yield @Even x + } + } + + + ####################################################################### + # # + # @IntroFull - this sends text to a full-width intro place. # + # # + ####################################################################### + + def @IntroFull right x + { + def @Any force into { @IntroFullPlace&&following } right x { x } + def @Odd force into { @IntroOddFullPlace&&following } right x { x } + def @Even force into { @IntroEvenFullPlace&&following } right x { x } + + @ChapterStartPages @Case { + Any @Yield @Any x + Odd @Yield @Odd x + Even @Yield @Even x + } + } + + + ####################################################################### + # # + # @ChooseFull - this sends either to introfull or ordinary full # + # # + ####################################################################### + + def @ChooseFull right x + { + @SeparateIntroNumbering @Case { + No @Yield @Full x + Yes @Yield @IntroFull x + } + } + + + ####################################################################### + # # + # Book. # + # # + ####################################################################### + + def @Book + named @Tag {} + named @Title {} + named @Author {} + named @Edition {} + named @Publisher {} + named @BeforeTitlePage {} + named @OnTitlePage {} + named @AfterTitlePage {} + named @AtEnd { dft } + named @AtAfter { dft } + named @InitialFont { @InitialFont } + named @InitialBreak { @InitialBreak } + named @InitialSpace { @InitialSpace } + named @InitialLanguage { @InitialLanguage } + named @PageOrientation { @PageOrientation } + named @PageHeaders { @PageHeaders } + named @ColumnNumber { @ColumnNumber } + named @FirstPageNumber { @FirstPageNumber } + named @IntroFirstPageNumber { @IntroFirstPageNumber } + named @OptimizePages { @OptimizePages } + { + def @Before + { + @BeforeTitlePage @Case { + "" @Yield @Null + else @Yield @BeforeTitlePage + } + } + + def @On + { + @OnTitlePage @Case { + "" @Yield { + //1i |0.5rt 2.5f @Font {1.2fx clines} @Break @Title | + //2i |0.5rt clines @Break @Author | + //1i |0.5rt clines @Break @Edition | + //1rt @OneRow @Publisher + } + else @Yield @OnTitlePage + } + } + + def @After + { + @AfterTitlePage @Case { + "" @Yield @Null + else @Yield { @AfterTitlePage // None @Runner } + } + } + + def @ContentsPart + named @Tag {} + { + + @LargeScaleStructure + tag { @Tag } + type { ExtraMajorIntro } + initiallanguage { @InitialLanguage } + title { contents @WordVal @ContentsWord } + aboveheadinggap { @AboveChapterGap } + headingfont { @ChapterHeadingFont } + headingbreak { @ChapterHeadingBreak } + headingformat { @Num @ChapterHeadingFormat @Body } + incontents { No } + pnprefix { @ContentsPrefix } + inrunners { Yes } + majortitle { contents @WordVal @ContentsWord } + sendheader { @ChooseFull @Body } + innergap { @SectionGap } + @ContentsSection + } + + def @FigureContentsPart + named @Tag {} + { + @LargeScaleStructure + tag { @Tag } + type { ExtraMajorIntro } + initiallanguage { @InitialLanguage } + title { figurelist @WordVal @FigureListWord } + aboveheadinggap { @AboveChapterGap } + headingfont { @ChapterHeadingFont } + headingbreak { @ChapterHeadingBreak } + headingformat { @Num @ChapterHeadingFormat @Body } + incontents { No } + pnprefix { @FigureContentsPrefix } + inrunners { Yes } + majortitle { figurelist @WordVal @FigureListWord } + sendheader { @ChooseFull @Body } + innergap { @SectionGap } + @FigureContentsSection + } + + def @TableContentsPart + named @Tag {} + { + @LargeScaleStructure + tag { @Tag } + type { ExtraMajorIntro } + initiallanguage { @InitialLanguage } + title { tablelist @WordVal @TableListWord } + aboveheadinggap { @AboveChapterGap } + headingfont { @ChapterHeadingFont } + headingbreak { @ChapterHeadingBreak } + headingformat { @Num @ChapterHeadingFormat @Body } + incontents { No } + pnprefix { @TableContentsPrefix } + inrunners { Yes } + majortitle { tablelist @WordVal @TableListWord } + sendheader { @ChooseFull @Body } + innergap { @SectionGap } + @TableContentsSection + } + + def @ReferencesPart + named @Tag {} + { + @LargeScaleStructure + tag { @Tag } + type { ExtraMajor } + initiallanguage { @InitialLanguage } + title { @RefHeading @RefListTitle } + majortitle { @RefHeading @RefListTitle } + aboveheadinggap { @AboveChapterGap } + headingfont { @ChapterHeadingFont } + headingbreak { @ChapterHeadingBreak } + headingformat { @Num @ChapterHeadingFormat @Body } + incontents { @ReferencesInContents } + pnprefix { @ReferencesPrefix } + inrunners { Yes } + sendheader { @Full @Body } + innergap { @SectionGap } + @ReferencesSection + + } + + def @IndexPart + named @Tag {} + { + def @Run + { + NonStart @Runner + @MajorNum {} + @MajorTitle { index @WordVal @IndexWord } + @MinorNum {} + @MinorTitle { index @WordVal @IndexWord } + @Owner { @Tag } + @Prefix { @IndexPrefix } + } + + @LargeScaleStructure + tag { @Tag } + type { Major } + initiallanguage { @InitialLanguage } + title { index @WordVal @IndexWord } + aboveheadinggap { @AboveChapterGap } + headingfont { @ChapterHeadingFont } + headingbreak { @ChapterHeadingBreak } + headingformat { @Num @ChapterHeadingFormat @Body } + incontents { @IndexInContents } + pnprefix { @IndexPrefix } + inrunners { Yes } + sendheader { @Full @Body } + innergap { @SectionGap } + wantindefinite { Yes } + @IndexSection @Run + } + + def @IndexAPart + named @Tag {} + { + def @RunA + { + NonStart @Runner + @MajorNum {} + @MajorTitle { index @WordVal @IndexAWord } + @MinorNum {} + @MinorTitle { index @WordVal @IndexAWord } + @Owner { @Tag } + @Prefix { @IndexAPrefix } + } + + @LargeScaleStructure + tag { @Tag } + type { Major } + initiallanguage { @InitialLanguage } + title { index @WordVal @IndexAWord } + aboveheadinggap { @AboveChapterGap } + headingfont { @ChapterHeadingFont } + headingbreak { @ChapterHeadingBreak } + headingformat { @Num @ChapterHeadingFormat @Body } + incontents { @IndexAInContents } + pnprefix { @IndexAPrefix } + inrunners { Yes } + sendheader { @Full @Body } + innergap { @SectionGap } + wantindefinite { Yes } + @IndexASection @RunA + } + + def @IndexBPart + named @Tag {} + { + def @RunB + { + NonStart @Runner + @MajorNum {} + @MajorTitle { index @WordVal @IndexBWord } + @MinorNum {} + @MinorTitle { index @WordVal @IndexBWord } + @Owner { @Tag } + @Prefix { @IndexBPrefix } + } + + @LargeScaleStructure + tag { @Tag } + type { Major } + initiallanguage { @InitialLanguage } + title { index @WordVal @IndexBWord } + aboveheadinggap { @AboveChapterGap } + headingfont { @ChapterHeadingFont } + headingbreak { @ChapterHeadingBreak } + headingformat { @Num @ChapterHeadingFormat @Body } + incontents { @IndexBInContents } + pnprefix { @IndexBPrefix } + inrunners { Yes } + sendheader { @Full @Body } + innergap { @SectionGap } + wantindefinite { Yes } + @IndexBSection @RunB + } + + def @BookIntro force into { @IntroColPlace&&preceding } + named @Optimize { @OptimizePages } + { + @PageMark @Tag + // @Before + //1.1b @TitlePageFont @Font @On + //1.1b @After + // Start @Runner @Owner { @Tag } + //1.1b @PrefaceAfterContents @NoDo @PrefacePlace + // @MakeContents @Case { + { Yes Bypass } @Yield @ContentsPart + else @Yield @Null + } + // @MakeFigureContents @Case { + { Yes Bypass } @Yield @FigureContentsPart + else @Yield @Null + } + // @MakeTableContents @Case { + { Yes Bypass } @Yield @TableContentsPart + else @Yield @Null + } + //1.1b @PrefaceAfterContents @Do @PrefacePlace + } + + def @BookBody force into { @ColPlace&&preceding } + named @Optimize { @OptimizePages } + { + # The first component of @BookBody must be indefinite, so that + # its flushing is delayed until we reach the body galleys, either + # @Introduction or @Chapter. If not, @BookBody will free up + # @PrefacePlace etc. too soon, producing a "no @PrefacePlace + # precedes this @PrefacePLace&&preceding" error message. + + @AbbreviationsPlace + // @IntroductionPlace + // @ChapterList @FirstChapterNumber + // @ReferencesBeforeAppendices @Do { + @MakeReferences @Do @ReferencesPart + } + // @AppendixList @FirstAppendixNumber + // @ReferencesBeforeAppendices @NoDo { + @MakeReferences @Do @ReferencesPart + } + // @MakeIndexA @Do @IndexAPart + // @MakeIndexA @Case { + Bypass @Yield @BypassBeginIndexAPlace + else @Yield @Null + } + // @MakeIndexB @Do @IndexBPart + // @MakeIndexB @Case { + Bypass @Yield @BypassBeginIndexBPlace + else @Yield @Null + } + // @MakeIndex @Do @IndexPart + // @MakeIndex @Case { + Bypass @Yield @BypassBeginIndexPlace + else @Yield @Null + } + } + + def @BookCombined force into { @ColPlace&&preceding } + named @Optimize { @OptimizePages } + { + @PageMark @Tag + // @Before + //1.1b @TitlePageFont @Font @On + //1.1b @After + // Start @Runner @Owner { @Tag } + //1.1b @PrefaceAfterContents @NoDo @PrefacePlace + // @MakeContents @Case { + { Yes Bypass } @Yield @ContentsPart + else @Yield @Null + } + // @MakeFigureContents @Case { + { Yes Bypass } @Yield @FigureContentsPart + else @Yield @Null + } + // @MakeTableContents @Case { + { Yes Bypass } @Yield @TableContentsPart + else @Yield @Null + } + //1.1b @PrefaceAfterContents @Do @PrefacePlace + // @AbbreviationsPlace + // @IntroductionPlace + // @ChapterList @FirstChapterNumber + // @ReferencesBeforeAppendices @Do { + @MakeReferences @Do @ReferencesPart + } + // @AppendixList @FirstAppendixNumber + // @ReferencesBeforeAppendices @NoDo { + @MakeReferences @Do @ReferencesPart + } + // @MakeIndexA @Do @IndexAPart + // @MakeIndexA @Case { + Bypass @Yield @BypassBeginIndexAPlace + else @Yield @Null + } + // @MakeIndexB @Do @IndexBPart + // @MakeIndexB @Case { + Bypass @Yield @BypassBeginIndexBPlace + else @Yield @Null + } + // @MakeIndex @Do @IndexPart + // @MakeIndex @Case { + Bypass @Yield @BypassBeginIndexPlace + else @Yield @Null + } + } + + @InitialFont @Font @InitialBreak @Break @InitialLanguage @Language + @InitialSpace @Space { @ColourCommand @InitialColour } @SetColour + { + + @SeparateIntroNumbering @Case { + + No @Yield { + Yes @BeginAllCounters {} + Yes @BeginDisplayCounter {} + Yes @BeginFigureCounter {} + Yes @BeginTableCounter {} + // @PageList + @ColumnNumber { @ColumnNumber } + @PageHeaders { @PageHeaders } + @Orient { @PageOrientation } + @FirstPageNumber + // @BookCombined + // NonStart @Runner @Owner { @Tag } + // @AtEnd @Case { + dft @Yield @Null + else @Yield + @EvenPage @Orient { @PageOrientation } @AtEnd + } + } + + Yes @Yield { + Yes @BeginAllCounters {} + Yes @BeginDisplayCounter {} + Yes @BeginFigureCounter {} + Yes @BeginTableCounter {} + // @IntroPageList + @ColumnNumber { 1 } + @PageHeaders { @PageHeaders } + @Orient { @PageOrientation } + @IntroFirstPageNumber + // NonStart @Runner @Owner { @Tag } + // @PageList + @ColumnNumber { @ColumnNumber } + @PageHeaders { @PageHeaders } + @Orient { @PageOrientation } + extra { Yes } + @FirstPageNumber + // @BookIntro + // @BookBody + // NonStart @Runner @Owner { @Tag } + // @AtEnd @Case { + dft @Yield @Null + else @Yield + @EvenPage @Orient { @PageOrientation } @AtEnd + } + } + } + } + } + + + ####################################################################### + # # + # Preface. # + # # + ####################################################################### + + def @Preface force into { @PrefacePlace&&preceding } + named @Tag {} + named @Title { preface @WordVal @PrefaceWord } + named @RunningTitle { dft } + named @InitialLanguage {} + body @Body + { + + @LargeScaleStructure + tag { @Tag } + type { ExtraMajorIntro } + initiallanguage { @InitialLanguage } + title { @Title } + runningtitle { @RunningTitle } + aboveheadinggap { @AboveChapterGap } + headingfont { @ChapterHeadingFont } + headingbreak { @ChapterHeadingBreak } + headingformat { @Num @ChapterHeadingFormat @Body } + incontents { @PrefaceInContents } + pnprefix { @PrefacePrefix } + sendheader { @ChooseFull @Body } + innergap { @SectionGap } + inrunners { Yes } + @Body + + } + + + ####################################################################### + # # + # Abbreviations. # + # # + ####################################################################### + + def @Abbreviations force into { @AbbreviationsPlace&&preceding } + named @Tag {} + named @Title { abbreviations @WordVal @AbbreviationsWord } + named @RunningTitle { dft } + named @InitialLanguage {} + body @Body + { + + @LargeScaleStructure + tag { @Tag } + type { Major } + initiallanguage { @InitialLanguage } + title { @Title } + runningtitle { @RunningTitle } + aboveheadinggap { @AboveChapterGap } + headingfont { @ChapterHeadingFont } + headingbreak { @ChapterHeadingBreak } + headingformat { @Num @ChapterHeadingFormat @Body } + incontents { @AbbreviationsInContents } + pnprefix { @AbbreviationsPrefix } + sendheader { @Full @Body } + innergap { @SectionGap } + inrunners { Yes } + @Body + + } + + + ####################################################################### + # # + # Introduction. # + # # + ####################################################################### + + def @Introduction force into { @IntroductionPlace&&preceding } + named @Tag {} + named @Title { introduction @WordVal @IntroductionWord } + named @RunningTitle { dft } + named @InitialLanguage {} + body @Body + { + + @LargeScaleStructure + tag { @Tag } + type { Major } + initiallanguage { @InitialLanguage } + title { @Title } + runningtitle { @RunningTitle } + aboveheadinggap { @AboveChapterGap } + headingfont { @ChapterHeadingFont } + headingbreak { @ChapterHeadingBreak } + headingformat { @Num @ChapterHeadingFormat @Body } + incontents { @IntroductionInContents } + pnprefix { @IntroductionPrefix } + sendheader { @Full @Body } + innergap { @SectionGap } + inrunners { Yes } + @Body + + } + + + ####################################################################### + # # + # Chapters containing sections and subsections. # + # # + ####################################################################### + + export @BeginSections @EndSections @Section + def @Chapter force into { @ChapterList&&preceding } + named @Tag {} + named @Title {} + named @RunningTitle { dft } + named @InitialLanguage {} + named @PartNumber {} + named @PartTitle {} + named @PartText {} + named @BypassNumber { dft } + body @Body + { + + def @EndSectionsPlace { @Galley } + + def @EndSections force into { @EndSectionsPlace&&preceding } + {} + + macro @BeginSections + { //@SectionGap @SectionList @FirstSectionNumber + // @EndSectionsPlace // + } + + def @ChapterShortNum + { + @ChapterNumbers @Then { + @BypassNumber @Dft { + @ChapterNumbers @Num @ChapterList&&@Tag @Open { num } + } + } + } + + def @MajorNum + { + @ChapterNumbers @Then @InitialLanguage @Language { + chapter @WordVal @ChapterWord @ChapterShortNum + } + } + + def @MajorTitle + { + @InitialLanguage @Language { + @RunningTitle @Dft @Title + } + } + + export @BeginSubSections @EndSubSections @SubSection + def @Section force into { @SectionList&&preceding } + named @Tag {} + named @Title {} + named @RunningTitle { dft } + named @InitialLanguage { @InitialLanguage } + named @BypassNumber { dft } + body @Body + { + + def @EndSubSectionsPlace { @Galley } + + def @EndSubSections force into { @EndSubSectionsPlace&&preceding } + {} + + macro @BeginSubSections + { //@SubSectionGap @SubSectionList @FirstSubSectionNumber + // @EndSubSectionsPlace // + } + + def @SectionShortNum + { + @SectionNumbers @Then { + @BypassNumber @Dft { + @ChapterShortNum @Join @SectionNumbers @Num + { @SectionList&&@Tag @Open { num } } + } + } + } + + export @BeginSubSubSections @EndSubSubSections @SubSubSection + def @SubSection force into { @SubSectionList&&preceding } + named @Tag {} + named @Title {} + named @RunningTitle { dft } + named @InitialLanguage { @InitialLanguage } + named @BypassNumber { dft } + body @Body + { + + def @EndSubSubSectionsPlace { @Galley } + + def @EndSubSubSections force into + { @EndSubSubSectionsPlace&&preceding } + {} + + macro @BeginSubSubSections + { //@SubSubSectionGap @SubSubSectionList @FirstSubSubSectionNumber + // @EndSubSubSectionsPlace // + } + + def @SubSectionShortNum + { + @SubSectionNumbers @Then { + @BypassNumber @Dft { + @SectionShortNum @Join @SubSectionNumbers @Num + { @SubSectionList&&@Tag @Open { num } } + } + } + } + + def @SubSubSection force into { @SubSubSectionList&&preceding } + named @Tag {} + named @Title {} + named @RunningTitle { dft } + named @InitialLanguage { @InitialLanguage } + named @BypassNumber { dft } + body @Body + { + + @LargeScaleStructure + tag { @Tag } + type { Minor } + initiallanguage { @InitialLanguage } + title { @Title } + runningtitle { @RunningTitle } + headingfont { @SubSubSectionHeadingFont } + headingbreak { @SubSubSectionHeadingBreak } + headingformat { @Num @SubSubSectionHeadingFormat @Body } + incontents { @SubSubSectionInContents } + contentsindent { 9f } + numbers { @SubSubSectionNumbers } + attachnum { @SubSubSectionList&&preceding @Tagged @Tag } + retrievenum { @SubSubSectionList&&@Tag @Open { num } } + bypassnumber { @BypassNumber } + prefix { @SubSectionShortNum } + majornum { @MajorNum } + majortitle { @MajorTitle } + intheorems { @SubSubSectionNumInTheorems } + indisplays { @SubSubSectionNumInDisplays } + infigures { @SubSubSectionNumInFigures } + intables { @SubSubSectionNumInTables } + inrunners { @SubSubSectionNumInRunners } + @Body + } + + @LargeScaleStructure + tag { @Tag } + type { Minor } + initiallanguage { @InitialLanguage } + title { @Title } + runningtitle { @RunningTitle } + headingfont { @SubSectionHeadingFont } + headingbreak { @SubSectionHeadingBreak } + headingformat { @Num @SubSectionHeadingFormat @Body } + incontents { @SubSectionInContents } + contentsindent { 6f } + numbers { @SubSectionNumbers } + attachnum { @SubSectionList&&preceding @Tagged @Tag } + retrievenum { @SubSectionList&&@Tag @Open { num } } + bypassnumber { @BypassNumber } + prefix { @SectionShortNum } + majornum { @MajorNum } + majortitle { @MajorTitle } + intheorems { @SubSectionNumInTheorems } + indisplays { @SubSectionNumInDisplays } + infigures { @SubSectionNumInFigures } + intables { @SubSectionNumInTables } + inrunners { @SubSectionNumInRunners } + @Body + + } + + @LargeScaleStructure + tag { @Tag } + type { Minor } + initiallanguage { @InitialLanguage } + title { @Title } + runningtitle { @RunningTitle } + headingfont { @SectionHeadingFont } + headingbreak { @SectionHeadingBreak } + headingformat { @Num @SectionHeadingFormat @Body } + incontents { @SectionInContents } + contentsindent { 3f } + numbers { @SectionNumbers } + attachnum { @SectionList&&preceding @Tagged @Tag } + retrievenum { @SectionList&&@Tag @Open { num } } + bypassnumber { @BypassNumber } + prefix { @ChapterShortNum } + majornum { @MajorNum } + majortitle { @MajorTitle } + intheorems { @SectionNumInTheorems } + indisplays { @SectionNumInDisplays } + infigures { @SectionNumInFigures } + intables { @SectionNumInTables } + inrunners { @SectionNumInRunners } + @Body + + } + + def @Part + named @Tag {} + { + @LargeScaleStructure + type { VeryMajor } + initiallanguage { @InitialLanguage } + title { @PartTitle } + aboveheadinggap { @AbovePartGap } + headingfont { @PartHeadingFont } + headingbreak { @PartHeadingBreak } + headingformat { @Num @PartHeadingFormat @Body } + bypassnumber { @PartNumber } + incontents { @PartInContents } + sendheader { @Full @Body } + inrunners { Yes } + tag { @Tag } + @PartText + } + + @PartNumber @Case { + "" @Yield @Null + else @Yield @Part + } + // + @LargeScaleStructure + tag { @Tag } + type { Major } + initiallanguage { @InitialLanguage } + title { @Title } + runningtitle { @RunningTitle } + aboveheadinggap { @AboveChapterGap } + headingfont { @ChapterHeadingFont } + headingbreak { @ChapterHeadingBreak } + headingformat { @Num @ChapterHeadingFormat @Body } + incontents { @ChapterInContents } + contentsindent { 0f } + word { chapter @WordVal @ChapterWord } + numbers { @ChapterNumbers } + attachnum { @ChapterList&&preceding @Tagged @Tag } + retrievenum { @ChapterList&&@Tag @Open { num } } + bypassnumber { @BypassNumber } + pnprefix { @ChapterPrefix } + intheorems { @ChapterNumInTheorems } + indisplays { @ChapterNumInDisplays } + infigures { @ChapterNumInFigures } + intables { @ChapterNumInTables } + sendheader { @Full @Body } + innergap { @SectionGap } + inrunners { Yes } + @Body + + } + + + ####################################################################### + # # + # Appendices. # + # # + ####################################################################### + + export @BeginSubAppendices @EndSubAppendices @SubAppendix + def @Appendix force into { @AppendixList&&preceding } + named @Tag {} + named @Title {} + named @RunningTitle { dft } + named @InitialLanguage {} + named @PartNumber {} + named @PartTitle {} + named @PartText {} + named @BypassNumber { dft } + body @Body + { + + def @EndSubAppendicesPlace { @Galley } + + def @EndSubAppendices force into { @EndSubAppendicesPlace&&preceding } + {} + + macro @BeginSubAppendices + { //@SubAppendixGap @SubAppendixList @FirstSubAppendixNumber + // @EndSubAppendicesPlace // + } + + def @AppendixShortNum + { + @AppendixNumbers @Then { + @BypassNumber @Dft { + @AppendixNumbers @Num @AppendixList&&@Tag @Open { num } + } + } + } + + def @MajorNum + { + @AppendixNumbers @Then @InitialLanguage @Language { + appendix @WordVal @AppendixWord @AppendixShortNum + } + } + + def @MajorTitle + { + @InitialLanguage @Language { + @RunningTitle @Dft @Title + } + } + + export @BeginSubSubAppendices @EndSubSubAppendices @SubSubAppendix + def @SubAppendix force into { @SubAppendixList&&preceding } + named @Tag {} + named @Title {} + named @RunningTitle { dft } + named @InitialLanguage { @InitialLanguage } + named @BypassNumber { dft } + body @Body + { + + def @EndSubSubAppendicesPlace { @Galley } + + def @EndSubSubAppendices force into { @EndSubSubAppendicesPlace&&preceding } + {} + + macro @BeginSubSubAppendices + { //@SubSubAppendixGap @SubSubAppendixList @FirstSubSubAppendixNumber + // @EndSubSubAppendicesPlace // + } + + def @SubAppendixShortNum + { + @SubAppendixNumbers @Then { + @BypassNumber @Dft { + @AppendixShortNum @Join @SubAppendixNumbers @Num + { @SubAppendixList&&@Tag @Open { num } } + } + } + } + + def @SubSubAppendix force into { @SubSubAppendixList&&preceding } + named @Tag {} + named @Title {} + named @RunningTitle { dft } + named @InitialLanguage { @InitialLanguage } + named @BypassNumber { dft } + body @Body + { + + @LargeScaleStructure + tag { @Tag } + type { Minor } + initiallanguage { @InitialLanguage } + title { @Title } + runningtitle { @RunningTitle } + headingfont { @SubSubAppendixHeadingFont } + headingbreak { @SubSubAppendixHeadingBreak } + headingformat { @Num @SubSubAppendixHeadingFormat @Body } + incontents { @SubSubAppendixInContents } + contentsindent { 6f } + numbers { @SubSubAppendixNumbers } + attachnum { @SubSubAppendixList&&preceding @Tagged @Tag } + retrievenum { @SubSubAppendixList&&@Tag @Open { num } } + bypassnumber { @BypassNumber } + prefix { @SubAppendixShortNum } + majornum { @MajorNum } + majortitle { @MajorTitle } + intheorems { @SubSubAppendixNumInTheorems } + indisplays { @SubSubAppendixNumInDisplays } + infigures { @SubSubAppendixNumInFigures } + intables { @SubSubAppendixNumInTables } + inrunners { @SubSubAppendixNumInRunners } + @Body + + } + + @LargeScaleStructure + tag { @Tag } + type { Minor } + initiallanguage { @InitialLanguage } + title { @Title } + runningtitle { @RunningTitle } + headingfont { @SubAppendixHeadingFont } + headingbreak { @SubAppendixHeadingBreak } + headingformat { @Num @SubAppendixHeadingFormat @Body } + incontents { @SubAppendixInContents } + contentsindent { 3f } + numbers { @SubAppendixNumbers } + attachnum { @SubAppendixList&&preceding @Tagged @Tag } + retrievenum { @SubAppendixList&&@Tag @Open { num } } + bypassnumber { @BypassNumber } + prefix { @AppendixShortNum } + majornum { @MajorNum } + majortitle { @MajorTitle } + intheorems { @SubAppendixNumInTheorems } + indisplays { @SubAppendixNumInDisplays } + infigures { @SubAppendixNumInFigures } + intables { @SubAppendixNumInTables } + inrunners { @SubAppendixNumInRunners } + @Body + + } + + def @Part + named @Tag {} + { + @LargeScaleStructure + type { VeryMajor } + initiallanguage { @InitialLanguage } + title { @PartTitle } + aboveheadinggap { @AbovePartGap } + headingfont { @PartHeadingFont } + headingbreak { @PartHeadingBreak } + headingformat { @Num @PartHeadingFormat @Body } + bypassnumber { @PartNumber } + incontents { @PartInContents } + sendheader { @Full @Body } + inrunners { Yes } + tag { @Tag } + @PartText + } + + @PartNumber @Case { + "" @Yield @Null + else @Yield @Part + } + // + @LargeScaleStructure + tag { @Tag } + type { Major } + initiallanguage { @InitialLanguage } + title { @Title } + runningtitle { @RunningTitle } + aboveheadinggap { @AboveChapterGap } + headingfont { @AppendixHeadingFont } + headingbreak { @AppendixHeadingBreak } + headingformat { @Num @AppendixHeadingFormat @Body } + incontents { @AppendixInContents } + contentsindent { 0f } + word { appendix @WordVal @AppendixWord } + numbers { @AppendixNumbers } + attachnum { @AppendixList&&preceding @Tagged @Tag } + retrievenum { @AppendixList&&@Tag @Open { num } } + bypassnumber { @BypassNumber } + pnprefix { @AppendixPrefix } + intheorems { @AppendixNumInTheorems } + indisplays { @AppendixNumInDisplays } + infigures { @AppendixNumInFigures } + intables { @AppendixNumInTables } + sendheader { @Full @Body } + innergap { @SubAppendixGap } + inrunners { Yes } + @Body + + } + + +@End @BookSetup diff --git a/include/bsf b/include/bsf new file mode 100644 index 0000000..726058f --- /dev/null +++ b/include/bsf @@ -0,0 +1,1563 @@ + +############################################################################### +# # +# Lout @BasicSetup package (Version 3.13) # +# # +# Jeffrey H. Kingston # +# 5 February 1999 # +# # +# Based on the first part of the @DocumentLayout package, version 3.11. # +# # +# 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. # +# # +############################################################################### + +@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 + } +} + + export i c p m s v f + def @LengthUnits + { + def i left x { + @BackEnd @Case { + PostScript @Yield { x" in" } + PDF @Yield { "__mul(__in, "x")" } + PlainText @Yield "" + } + } + + def c left x { + @BackEnd @Case { + PostScript @Yield { x" cm" } + PDF @Yield { "__mul(__cm, "x")" } + PlainText @Yield "" + } + } + + def p left x { + @BackEnd @Case { + PostScript @Yield { x" pt" } + PDF @Yield { "__mul(__pt, "x")" } + PlainText @Yield "" + } + } + + def m left x { + @BackEnd @Case { + PostScript @Yield { x" em" } + PDF @Yield { "__mul(__em, "x")" } + PlainText @Yield "" + } + } + + def s left x { + @BackEnd @Case { + PostScript @Yield { x" sp" } + PDF @Yield { "__mul(__louts, "x")" } + PlainText @Yield "" + } + } + + def v left x { + @BackEnd @Case { + PostScript @Yield { x" vs" } + PDF @Yield { "__mul(__loutv, "x")" } + PlainText @Yield "" + } + } + + def f left x { + @BackEnd @Case { + PostScript @Yield { x" ft" } + PDF @Yield { "__mul(__loutf, "x")" } + PlainText @Yield "" + } + } + } + + +############################################################################### +# # +# Symbols exported by @BasicSetup. # +# # +############################################################################### + +export + + @InitialFont @InitialBreak @InitialSpace @InitialLanguage @InitialColour + @OptimizePages @HeadingFont + @ParaGap @ParaIndent @DisplayGap @DisplayIndent @DefaultIndent + @DisplayNumStyle @WideIndent @VeryWideIndent + @ListGap @ListIndent @ListRightIndent @ListLabelWidth + @NumberSeparator + + @Word @Roman @UCRoman @Alpha @UCAlpha @Months @ShortMonths @WeekDays + @ShortWeekDays @TwelveHours @ShortHours @MeriDiems @ShortMeriDiems + + @Sym @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 @DotJoin @DashJoin @NumSep + @OverStrike @Sup @Sub @Colour @FullWidthRule @LocalWidthRule + @Box @CurveBox @ShadowBox @BoundaryMarks @NumberMarker @NumberOf + @PageMarker @PageMark @PageOf + + @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 + @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 @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.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 @NumberSeparator{ . } # separates numbers like 2.3.7 +@Begin + + ########################################################################### + # # + # @Sym, font symbols, and miscellaneous special characters. # + # # + ########################################################################### + + 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 @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 # + # @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, @NoDotSep, @NoDotJoin, @DotSep, # + # @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 @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 } + } + } + } + } + } + } + + + ########################################################################### + # # + # @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 + } + } + + + ########################################################################### + # # + # @Colour, @Color, @AddPaint, @LineWidth # + # # + ########################################################################### + + def @ColourCommand right col + { + def @ColourCoords + { + col @Case { + darkblue @Yield { 0.0 0.0 0.5 } + blue @Yield { 0.0 0.0 1.0 } + lightblue @Yield { 0.5 0.5 1.0 } + darkgreen @Yield { 0.0 0.5 0.0 } + green @Yield { 0.0 1.0 0.0 } + lightgreen @Yield { 0.5 1.0 0.5 } + darkred @Yield { 0.5 0.0 0.0 } + red @Yield { 1.0 0.0 0.0 } + lightred @Yield { 1.0 0.5 0.5 } + darkcyan @Yield { 0.0 0.5 0.5 } + cyan @Yield { 0.0 1.0 1.0 } + lightcyan @Yield { 0.5 1.0 1.0 } + darkmagenta @Yield { 0.5 0.0 0.5 } + magenta @Yield { 1.0 0.0 1.0 } + lightmagenta @Yield { 1.0 0.5 1.0 } + darkyellow @Yield { 0.5 0.5 0.0 } + yellow @Yield { 1.0 1.0 0.0 } + lightyellow @Yield { 1.0 1.0 0.5 } + darkgray @Yield { 0.2 0.2 0.2 } + gray @Yield { 0.5 0.5 0.5 } + lightgray @Yield { 0.8 0.8 0.8 } + darkgrey @Yield { 0.2 0.2 0.2 } + grey @Yield { 0.5 0.5 0.5 } + lightgrey @Yield { 0.8 0.8 0.8 } + black @Yield { 0.0 0.0 0.0 } + white @Yield { 1.0 1.0 1.0 } + } + } + + col @Case { + nochange @Yield { nochange } + else @Yield { @BackEnd @Case { + PostScript @Yield { @ColourCoords setrgbcolor } + PDF @Yield { @ColourCoords rg @ColourCoords RG } + PlainText @Yield "" + } } + } + } + + def @Colour @Color left col right y { {@ColourCommand col} @SetColour y } + + def @AddPaint right col + { + col @Case { + none @Yield "" + nochange @Yield { + @BackEnd @Case { + PostScript @Yield "gsave fill grestore" + PDF @Yield "q f Q" + PlainText @Yield "" + } + } + else @Yield { + @BackEnd @Case { + PostScript @Yield {"gsave" @ColourCommand col "fill grestore"} + PDF @Yield { "q" @ColourCommand col "f Q" } + PlainText @Yield "" + } + } + } + } + + def @LineWidth right lw + { + lw @Case { + "" @Yield "" + else @Yield { + @BackEnd @Case { + PostScript @Yield { lw "setlinewidth" } + PDF @Yield { lw "w" } + PlainText @Yield "" + } + } + } + } + + + ########################################################################### + # # + # @FullWidthRule, @Box, @CurveBox, and @ShadowBox # + # # + ########################################################################### + + def @FullWidthRule + import @LengthUnits named linewidth {} + { + @BackEnd @Case { + + PostScript @Yield @HExpand { + { "LoutRule" @LineWidth linewidth "stroke" } @Graphic { 0.5p @High } + } + + PDF @Yield @HExpand { + { "0 0 m __xsize 0 l" @LineWidth linewidth "S" } @Graphic { 0.5p @High } + } + + PlainText @Yield { "-" @PlainGraphic 1f @High } + } + } + + def @LocalWidthRule + import @LengthUnits named linewidth {} + { + @BackEnd @Case { + + PostScript @Yield { + { "LoutRule" @LineWidth linewidth "stroke" } @Graphic { 0.5p @High } + } + + PDF @Yield { + { "0 0 m __xsize 0 l" @LineWidth linewidth "S" } @Graphic { 0.5p @High } + } + + PlainText @Yield { "-" @PlainGraphic 1f @High } + } + } + + def @Box + named margin { 0.3f } + import @LengthUnits named linewidth {} + named paint { none } + right x + { + @BackEnd @Case { + + PostScript @Yield @VContract @HContract 0c @HShift { + {"LoutBox" @AddPaint paint @LineWidth linewidth "stroke"} + @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" + @AddPaint paint @LineWidth linewidth "S" } @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 @LengthUnits named linewidth {} + named paint { none } + 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" + @AddPaint paint @LineWidth linewidth "S" + } + + @VContract @HContract 0c @HShift @BackEnd @Case { + + PostScript @Yield { + {"LoutCurveBox" @AddPaint paint @LineWidth linewidth "stroke"} + @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 @LengthUnits named linewidth {} + named paint { none } + 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} linewidth {linewidth} x + |shadow /shadow + } + } + + PlainText @Yield { + ^/shadow ^|shadow 0c @HShift + @Box margin {margin} paint {paint} 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} linewidth {linewidth} x + |shadow /shadow + } + } + } + } + + + ########################################################################### + # # + # @BoundaryMarks # + # # + ########################################################################### + + def @BoundaryMarks + import @LengthUnits named linewidth { 0.2p } + import @LengthUnits named length { 0.5c } + import @LengthUnits named gap { 0.5c } + import @LengthUnits named lout { 0c } + import @LengthUnits named rout { 0c } + import @LengthUnits named uout { 0c } + import @LengthUnits 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, @PageMarker, @PageMark, and @PageOf # + # # + ########################################################################## + + export @Tag @Value + def @NumberMarker + named @Tag {} + named @Value { "??" } + { + @Null + } + + def @NumberOf + right x + { + @NumberMarker&&x @Open { @Value } + } + + + export num rawnum @Tag + def @PageMarker + named @Tag {} + named num {} + named rawnum {} + { + @PageLabel num + } + + def @PageMark + right x + { + @PageMarker&&preceding @Tagged x + } + + def @PageOf + right x + { + @PageMarker&&x @Open { num } + } + + + ########################################################################### + # # + # @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 + right tag + { + @NumDispCounterMarker&&preceding @Tagged tag + @NumDispCounterMarker val { @NumDispNum tag } + @NumberMarker @Tag { tag } @Value { @NumDispNum tag } + } + + 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 {} + right x + { + @OneRow { + @NumDispCounterIncrement @Tag + @PageMark @Tag + ^// + @OneRow x + } + } + + def @ADisp into { @AlignedPlace&&preceding } + right x + { + x + } + + def @ANDisp into { @AlignedPlace&&preceding } + named @Tag {} + right x + { + @OneRow { + @NumDispCounterIncrement @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 @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 start { 1 } + { + def @MakeList right num + { + def @NormalItem + { + |indent + labelwidth @Wide { + # @NumberMarker @Value {style num} {style num} &0io + @NumberMarker @Value {num} {style type num} &0io + } + |itemindent @ItemPlace |rightindent + //gap @MakeList @NotRevealed @Next num + } + + def @InterruptItem + { + @InterruptItemPlace + //gap @MakeList @NotRevealed num + } + + def @NewPageItem + { + @NewPageItemPlace + //1.1b @MakeList @NotRevealed num + } + + @OneOf + { + @NormalItem + @InterruptItem + @NewPageItem + } + } + + 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 + // @PageMark @Tag + // x + } + + 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 // //1vx 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 @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 diff --git a/include/bsf.lpg b/include/bsf.lpg new file mode 100644 index 0000000..8eb6c02 --- /dev/null +++ b/include/bsf.lpg @@ -0,0 +1,140 @@ +%%BeginResource: procset LoutBasicSetup + +% width height linethickness louteuro - +% draw a Euro symbol of this width and height with this line thickness +% Author: Jeff Kingston, based on code from Andrew Beardsley +/louteuro { + 20 dict begin + /eurothick exch def + /euroheight exch def + /eurowidth exch def + /eurostrokewidth euroheight 0.8 mul def + /eurostep eurothick 60 cos mul 60 sin div def + /eurotheta 40 def + + % llx lly width thickness louteurobox - + % draw angled box starting at (llx, lly) with given width and thickness + /louteurobox + { + /euroboxthick exch def + /euroboxwidth exch def + newpath moveto euroboxwidth 0 rlineto + eurostep euroboxthick rlineto + euroboxwidth neg 0 rlineto closepath fill + } def + + % lower cross stroke + 0 euroheight 2 div eurothick 1.5 mul sub + eurostrokewidth eurothick louteurobox + + % upper cross stroke + 0 euroheight 2 div eurothick 0.5 mul add + eurostrokewidth eurostep 2 mul add eurothick louteurobox + + % circular part + /eurohctr eurowidth euroheight 2 div eurotheta cos mul sub def + /eurovctr euroheight 2 div def + newpath + eurohctr eurovctr eurovctr eurotheta 350 eurotheta sub arc + eurohctr eurovctr eurovctr eurothick sub 365 eurotheta sub eurotheta arcn + closepath fill + end +} def + +% path for @FullWidthRule symbol +/LoutRule +{ 0 0 moveto xsize 0 lineto +} def + +% path for @Box symbol +/LoutBox +{ 0 0 moveto xsize 0 lineto + xsize ysize lineto 0 ysize lineto + closepath +} def + +% path for @CurveBox symbol +/LoutCurveBox +{ xmark 0 moveto + xsize xmark sub xmark xmark 270 360 arc + xsize xmark sub ysize xmark sub xmark 0 90 arc + xmark ysize xmark sub xmark 90 180 arc + xmark xmark xmark 180 270 arc + closepath +} def + +% path for @ShadowBox symbol +/LoutShadowBox +{ xmark 2 mul 0 moveto xsize 0 lineto + xsize ysize xmark 2 mul sub lineto + xsize xmark sub ysize xmark 2 mul sub lineto + xsize xmark sub xmark lineto + xmark 2 mul xmark lineto + closepath +} def + +% set up dictionary containing margin note data: parity LoutMargSet - +/LoutMargSet +{ /LoutMargDict 12 dict def + LoutMargDict begin + /parity exch def + /matr matrix currentmatrix def + /rightx xsize def + /lefty ysize def % highest allowable point for top of next left note + /righty ysize def % highest allowable point for top of next right note + /max { 2 copy gt { pop } { exch pop } ifelse } def + /min { 2 copy lt { pop } { exch pop } ifelse } def + end +} def + +%translate coordinate system for marginal notes: type LoutMargShift - +% where type 0 is left margin, 1 is right margin, 2 is outer, 3 is inner +/LoutMargShift +{ LoutMargDict begin + + % y coordinate of top of note, in margin coords, before vertical adjust + 0 ysize transform matr itransform exch pop + + % decide whether left or right margin based on type and parity + exch [ 0 1 parity 1 parity sub ] exch get 0 eq + { + % left margin: adjust top of note downwards if overlaps previous note + lefty min + + % bottom of note is new lefty position and also translate position + ysize sub dup /lefty exch def + + % want right edge of note at coordinate zero + xsize neg exch + } + { + % right margin: adjust top of note downwards if overlaps previous note + righty min + + % bottom of note is new righty position and also translate position + ysize sub dup /righty exch def + + % want left edge of note at coordinate rightx + rightx exch + } ifelse + + % stack now contains coord of bottom left corner in margin coordinates + matr setmatrix translate + end +} def + +% create LoutPageDict with left, right, foot, top for @Place symbol users +/LoutPageSet +{ + /LoutPageDict 5 dict def + LoutPageDict begin + /matr matrix currentmatrix def + /left 0 def + /right xsize def + /foot 0 def + /top ysize def + end + +} def + +%%EndResource diff --git a/include/cprint b/include/cprint new file mode 100644 index 0000000..d7acb06 --- /dev/null +++ b/include/cprint @@ -0,0 +1,70 @@ +############################################################################### +# # +# Lout setup file for C and C++ program printing # +# # +# Jeffrey H. Kingston # +# 5 February 1999 # +# # +############################################################################### + + +############################################################################### +# # +# The @SysInclude { cprintf } line # +# # +# This line causes Lout to read the definitions for C printing, and should # +# not be touched. # +# # +############################################################################### + +@SysInclude { cprintf } + + +############################################################################### +# # +# The @CPSetup @Use clause # +# # +# To change the default value of any option, delete the # at the start of # +# its line and change the value between braces. # +# # +############################################################################### + +@Use { @CPSetup + # style { fixed } # fixed, varying, or symbol + + # fixedfont { Courier } # font family if fixed + # fixedstrings { Base } # string face if fixed + # fixedidentifiers { Base } # identifier face if fixed + # fixedcomments { Base } # comment face if fixed + # fixedkeywords { Base } # keyword face if fixed + # fixednumbers { Base } # number face if fixed + # fixedoperators { Base } # operator face if fixed + # fixedsize { -1.0p } # font size if fixed + # fixedline { 1.0vx } # line-space if fixed + # fixedtabin { 8 } # tab interval if fixed + # fixedtabout { 8s } # tab width if fixed + + # varyingfont { } # font family if varying + # varyingstrings { Slope } # string face if varying + # varyingidentifiers { Slope } # identifier face if varying + # varyingcomments { Base } # comment face if varying + # varyingkeywords { Bold } # keyword face if varying + # varyingnumbers { Base } # number face if varying + # varyingoperators { Base } # operator face if varying + # varyingsize { 1.0f } # font size if varying + # varyingline { 1.0vx } # line-space if varying + # varyingtabin { 8 } # tab interval if varying + # varyingtabout { 3f } # tab width if varying + + # symbolfont { } # font family if symbol + # symbolstrings { Slope } # string face if symbol + # symbolidentifiers { Slope } # identifier face if symbol + # symbolcomments { Base } # comment face if symbol + # symbolkeywords { Bold } # keyword face if symbol + # symbolnumbers { Base } # number face if symbol + # symboloperators { Base } # operator face if symbol + # symbolsize { 1.0f } # font size if symbol + # symbolline { 1.0vx } # line-space if symbol + # symboltabin { 8 } # tab interval if symbol + # symboltabout { 3f } # tab width if symbol +} diff --git a/include/cprintf b/include/cprintf new file mode 100644 index 0000000..fca806e --- /dev/null +++ b/include/cprintf @@ -0,0 +1,383 @@ + +############################################################################### +# # +# Lout @CPSetup package for formatting C and C++ programs (Version 1.1) # +# # +# Version 1.0 by Jeffrey H. Kingston, March 1994. # +# Version 1.1 by Jeffrey H. Kingston, November 1998 (name change only) # +# # +# This package uses a filtered body parameter to convert C and C++ source # +# code into Lout source. The filter program is c2lout which is distributed # +# with Basser Lout Version 3. The list of keywords and tokens is from # +# Stroustrup, 2nd Edition. See "User's Guide to the Lout Document # +# Formatting System" for user information. # +# # +############################################################################### + +export @CP +def @CPSetup + named style { fixed } # print style + + named fixedfont { Courier } # font family if fixed + named fixedstrings { Base } # string face if fixed + named fixedidentifiers { Base } # identifier face if fixed + named fixedcomments { Base } # comment face if fixed + named fixedkeywords { Base } # keyword face if fixed + named fixednumbers { Base } # number face if fixed + named fixedoperators { Base } # operator face if fixed + named fixedsize { -1.0p } # font size if fixed + named fixedline { 1.0vx } # line-space if fixed + named fixedtabin { 8 } # tab interval if fixed + named fixedtabout { 8s } # tab width if fixed + + named varyingfont { } # font family if varying + named varyingstrings { Slope } # string face if varying + named varyingidentifiers { Slope } # identifier face if varying + named varyingcomments { Base } # comment face if varying + named varyingkeywords { Bold } # keyword face if varying + named varyingnumbers { Base } # number face if varying + named varyingoperators { Base } # operator face if varying + named varyingsize { 1.0f } # font size if varying + named varyingline { 1.0vx } # line-space if varying + named varyingtabin { 8 } # tab interval if varying + named varyingtabout { 3f } # tab width if varying + + named symbolfont { } # font family if symbol + named symbolstrings { Slope } # string face if symbol + named symbolidentifiers { Slope } # identifier face if symbol + named symbolcomments { Base } # comment face if symbol + named symbolkeywords { Bold } # keyword face if symbol + named symbolnumbers { Base } # number face if symbol + named symboloperators { Base } # operator face if symbol + named symbolsize { 1.0f } # font size if symbol + named symbolline { 1.0vx } # line-space if symbol + named symboltabin { 8 } # tab interval if symbol + named symboltabout { 3f } # tab width if symbol + +@Begin + + export + + "$$" "$>" "`" @L @S @C + + "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" + + "!" "%" "^" "&" "*" "(" ")" "-" "+" "=" "${" "$}" "|" "~" + "[" "]" ";" "'" ":" "<" ">" "?" "," "." "/" + + "->" "++" "--" ".*" "->*" "<<" ">>" "<=" ">=" "==" "!=" "&&" + "||" "*=" "/=" "%=" "+=" "-=" "<<=" ">>=" "&=" "^=" "|=" "::" + + asm continue float new signed try + auto default for operator sizeof typedef + break delete friend private static union + case do goto protected struct unsigned + catch double if public switch virtual + char else inline register template void + class enum int return this volatile + const extern long short throw while + + @EvaluateCp + + def @CP + named style { style } # style + named font { dft } # font family + named strings { dft } # string font + named identifiers { dft } # ident. font + named comments { dft } # comment font + named keywords { dft } # keyword font + named numbers { dft } # number font + named operators { dft } # operator font + named size { dft } # font size + named line { dft } # line-space + named tabin { dft } # tab interval + named tabout { dft } # tab width + body @Body # filtered, see below + @Begin + + def @Test # returns x unless x is dft + left x + named iffixed {} + named ifvarying {} + named ifsymbol {} + { + x @Case { + dft @Yield { + style @Case { + fixed @Yield { iffixed } + varying @Yield { ifvarying } + symbol @Yield { ifsymbol } + } + } + else @Yield x + } + } + + def @InitTab + { + tabin @Test + iffixed { fixedtabin } + ifvarying { varyingtabin } + ifsymbol { symboltabin } + } + + def @InitTabWidth + { + tabout @Test + iffixed { fixedtabout } + ifvarying { varyingtabout } + ifsymbol { symboltabout } + } + + def @Filter + { + c2lout -r -i{@FilterIn} -o{@FilterOut} -e{@FilterErr} + -t{@InitTab} -T{@InitTabWidth} + } + + def @InitFontFamily + { + font @Test + iffixed { fixedfont } + ifvarying { varyingfont } + ifsymbol { symbolfont } + } + + def @InitSize + { + size @Test + iffixed { fixedsize } + ifvarying { varyingsize } + ifsymbol { symbolsize } + } + + def @InitLine + { + line @Test + iffixed { fixedline } + ifvarying { varyingline } + ifsymbol { symbolline } + } + + def @S # for formatting C strings + right x + { + "\"" & + strings @Test + iffixed { fixedstrings } + ifvarying { varyingstrings } + ifsymbol { symbolstrings } + @Font x + & "\"" + } + + def "`" + { + style @Case { + symbol @Yield { "`" } + else @Yield { "'" } + } + } + + def @L # for formatting C character literals + right x + { + ` & + strings @Test + iffixed { fixedstrings } + ifvarying { varyingstrings } + ifsymbol { symbolstrings } + @Font x + & ' + } + + def @Ident # for formatting C identifiers + { + identifiers @Test + iffixed { fixedidentifiers } + ifvarying { varyingidentifiers } + ifsymbol { symbolidentifiers } + } + + def @C # for formatting C comments + right x + { + comments @Test + iffixed { fixedcomments } + ifvarying { varyingcomments } + ifsymbol { symbolcomments } + @Font x + } + + def @K # for formatting C keywords + right x + { + keywords @Test + iffixed { fixedkeywords } + ifvarying { varyingkeywords } + ifsymbol { symbolkeywords } + @Font x + } + + def @N # for formatting C numbers + right x + { + numbers @Test + iffixed { fixednumbers } + ifvarying { varyingnumbers } + ifsymbol { symbolnumbers } + @Font x + } + + def @O # for formatting C operators + right x + { + operators @Test + iffixed { fixedoperators } + ifvarying { varyingoperators } + ifsymbol { symboloperators } + @Font x + } + + def @A # get characters from the Adobe Symbol font + left sym + right x + { + style @Case { + symbol @Yield { { Symbol Base } @Font @Char sym } + else @Yield { x } + } + } + + macro "$>" { {} & } + + def "$$" { "#" } + + def "0" { @N "0" } + def "1" { @N "1" } + def "2" { @N "2" } + def "3" { @N "3" } + def "4" { @N "4" } + def "5" { @N "5" } + def "6" { @N "6" } + def "7" { @N "7" } + def "8" { @N "8" } + def "9" { @N "9" } + + def "!" { @O "!" } + def "%" { @O "%" } + def "^" { @O "^" } + def "&" { @O "&" } + def "*" { asteriskmath @A @O "*" } + def "(" { @O "(" } + def ")" { @O ")" } + def "-" { minus @A @O "-" } + def "+" { plus @A @O "+" } + def "=" { equal @A @O "=" } + def "${" { @O "{" } + def "$}" { @O "}" } + def "|" { @O "|" } + def "~" { @O "~" } + def "[" { @O "[" } + def "]" { @O "]" } + def ";" { @O ";" } + def "'" { @O "'" } + def ":" { @O ":" } + def "<" { less @A @O "<" } + def ">" { greater @A @O ">" } + def "?" { @O "?" } + def "," { @O "," } + def "." { @O "." } + def "/" { @O "/" } + def "->" { arrowright @A @O "->" } + def "++" { { + }{ + } } + def "--" { { - }{ - } } + def ".*" { { . }{ * } } + def "->*" { { ->}{ * } } + def "<<" { { < }{ < } } + def ">>" { { > }{ > } } + def "<=" { lessequal @A @O "<=" } + def ">=" { greaterequal @A @O ">=" } + def "==" { { = }{ = } } + def "!=" { notequal @A @O "!=" } + def "&&" { { & }{ & } } + def "||" { { | }{ | } } + def "*=" { { * }{ = } } + def "/=" { { / }{ = } } + def "%=" { { % }{ = } } + def "+=" { { + }{ = } } + def "-=" { { - }{ = } } + def "<<=" { { <<}{ = } } + def ">>=" { { >>}{ = } } + def "&=" { { & }{ = } } + def "^=" { { ^ }{ = } } + def "|=" { { | }{ = } } + def "::" { { : }{ : } } + + def asm { @K "asm" } + def auto { @K "auto" } + def break { @K "break" } + def case { @K "case" } + def catch { @K "catch" } + def char { @K "char" } + def class { @K "class" } + def const { @K "const" } + + def continue { @K "continue" } + def default { @K "default" } + def delete { @K "delete" } + def do { @K "do" } + def double { @K "double" } + def else { @K "else" } + def enum { @K "enum" } + def extern { @K "extern" } + + def float { @K "float" } + def for { @K "for" } + def friend { @K "friend" } + def goto { @K "goto" } + def if { @K "if" } + def inline { @K "inline" } + def int { @K "int" } + def long { @K "long" } + + def new { @K "new" } + def operator { @K "operator" } + def private { @K "private" } + def protected { @K "protected" } + def public { @K "public" } + def register { @K "register" } + def return { @K "return" } + def short { @K "short" } + + def signed { @K "signed" } + def sizeof { @K "sizeof" } + def static { @K "static" } + def struct { @K "struct" } + def switch { @K "switch" } + def template { @K "template" } + def this { @K "this" } + def throw { @K "throw" } + + def try { @K "try" } + def typedef { @K "typedef" } + def union { @K "union" } + def unsigned { @K "unsigned" } + def virtual { @K "virtual" } + def void { @K "void" } + def volatile { @K "volatile" } + def while { @K "while" } + + def @EvaluateCp right x + { + { @InitFontFamily Base } @Font + { @Ident @InitSize } @Font + { @InitLine lines } @Break x + } + + { @InitFontFamily Base } @Font { @Ident @InitSize } @Font + { @InitLine lines } @Break @Body + + @End @CP + +@End @CPSetup diff --git a/include/diag b/include/diag new file mode 100644 index 0000000..b4ffdb2 --- /dev/null +++ b/include/diag @@ -0,0 +1,193 @@ +############################################################################### +# # +# Lout setup file for diagram printing # +# # +# Jeffrey H. Kingston # +# 5 February 1999 # +# # +############################################################################### + + +############################################################################### +# # +# The @SysInclude { diagf } line # +# # +# This line causes Lout to read the definitions for diagrams, and should # +# not be touched. # +# # +############################################################################### + +@SysInclude { diagf } + + +############################################################################### +# # +# The @DiagSetup @Use clause # +# # +# To change the default value of any option, delete the # at the start of # +# its line and change the value between braces. # +# # +############################################################################### + +@Use { @DiagSetup + # save { no } + # maxlabels { 200 } + # outline { box } + # margin { 0.6f } + # shadow { 0.4f } + # sides { 3 } + # angle { "dup 180 exch div" } # 180d / sides + # translate { } + # outlinestyle { solid } + # outlinedashlength { 0.2f } + # outlinewidth { 0.02f } + # paint { nopaint } + # font { } + # break { } + # format { @Body } + # valign { ctr } + # vsize { } + # vindent { ctr } + # vstrut { no } + # vmargin { } + # topmargin { } + # footmargin { } + # halign { ctr } + # hsize { } + # hindent { ctr } + # hstrut { no } + # hmargin { } + # leftmargin { } + # rightmargin { } + # nodelabel { } + # nodelabelmargin { 0.2f } + # nodelabelfont { "-2p" } + # nodelabelbreak { ragged nohyphen } + # nodelabelformat { @Body } + # nodelabelpos { } + # nodelabelprox { outside } + # nodelabelangle { horizontal } + # nodelabelctr { no } + # nodelabeladjust { 0 0 } + # alabel { } + # alabelmargin { } + # alabelfont { } + # alabelbreak { } + # alabelformat { } + # alabelpos { NE } + # alabelprox { } + # alabelangle { } + # alabelctr { } + # alabeladjust { } + # blabel { } + # blabelmargin { } + # blabelfont { } + # blabelbreak { } + # blabelformat { } + # blabelpos { NW } + # blabelprox { } + # blabelangle { } + # blabelctr { } + # blabeladjust { } + # clabel { } + # clabelmargin { } + # clabelfont { } + # clabelbreak { } + # clabelformat { } + # clabelpos { SW } + # clabelprox { } + # clabelangle { } + # clabelctr { } + # clabeladjust { } + # dlabel { } + # dlabelmargin { } + # dlabelfont { } + # dlabelbreak { } + # dlabelformat { } + # dlabelpos { SE } + # dlabelprox { } + # dlabelangle { } + # dlabelctr { } + # dlabeladjust { } + # path { line } + # from { 0, 0 } + # to { 1, 1 } + # bias { 2.0f } + # fbias { 2.0f } + # tbias { 2.0f } + # radius { 1.0f } + # xindent { 0.8f } + # zindent { 0.8f } + # pathstyle { solid } + # pathdashlength { 0.2f } + # pathwidth { 0.02f } + # pathgap { 0.04f } + # arrow { no } + # arrowstyle { solid } + # arrowwidth { 0.45f } + # arrowlength { 0.6f } + # linklabel { } + # linklabelmargin { 0.2f } + # linklabelfont { "-2p" } + # linklabelbreak { ragged nohyphen } + # linklabelformat { @Body } + # linklabelpos { } + # linklabelprox { above } + # linklabelangle { horizontal } + # linklabelctr { no } + # linklabeladjust { 0 0 } + # xlabel { } + # xlabelmargin { } + # xlabelfont { } + # xlabelbreak { } + # xlabelformat { } + # xlabelpos { LFROM } + # xlabelprox { } + # xlabelangle { } + # xlabelctr { } + # xlabeladjust { } + # ylabel { } + # ylabelmargin { } + # ylabelfont { } + # ylabelbreak { } + # ylabelformat { } + # ylabelpos { LMID } + # ylabelprox { } + # ylabelangle { } + # ylabelctr { yes } + # ylabeladjust { } + # zlabel { } + # zlabelmargin { } + # zlabelfont { } + # zlabelbreak { } + # zlabelformat { } + # zlabelpos { LTO } + # zlabelprox { } + # zlabelangle { } + # zlabelctr { } + # zlabeladjust { } + # fromlabel { } + # fromlabelmargin { 0f } + # fromlabelfont { "-2p" } + # fromlabelbreak { ragged nohyphen } + # fromlabelformat { @Body } + # fromlabelpos { FROM } + # fromlabelprox { E } + # fromlabelangle { antiparallel } + # fromlabelctr { no } + # fromlabeladjust { 0 0 } + # tolabel { } + # tolabelmargin { 0f } + # tolabelfont { "-2p" } + # tolabelbreak { ragged nohyphen } + # tolabelformat { @Body } + # tolabelpos { TO } + # tolabelprox { E } + # tolabelangle { parallel } + # tolabelctr { no } + # tolabeladjust { 0 0 } + # treehsep { 0.5f } + # treevsep { 0.5f } + # treehindent { ctr } + # treevindent { ctr } +} diff --git a/include/diagf b/include/diagf new file mode 100644 index 0000000..18b888a --- /dev/null +++ b/include/diagf @@ -0,0 +1,3845 @@ + +############################################################################### +# # +# Lout @Diag package for drawing diagrams # +# Version 1.0 (July 1996) # +# Jeffrey H. Kingston # +# # +# Based on Version 2.0 of the @Fig package (Jeffrey H. Kingston, Dec 1992). # +# # +############################################################################### + +@SysPrependGraphic { diagf.lpg } +@SysInclude { diagf.etc } + +export @Diag +def @DiagSetup + named save { no } + named maxlabels { 200 } + + import @Geometry named outline + named margin {} + named shadow {} + named sides {} + named angle {} + { box } + named margin { 0.6f } + import @Geometry named shadow { 0.4f } + import @Geometry named sides { 3 } + import @Geometry named angle { "dup 180 exch div" } + named translate { } + named outlinestyle + named solid { "/ldiagsolid" } + named dashed { "/ldiagdashed" } + named cdashed { "/ldiagcdashed" } + named dotted { "/ldiagdotted" } + named noline { "/ldiagnoline" } + { solid } + import @Geometry named outlinedashlength { 0.2f } + import @Geometry named outlinewidth + named thin { 0.04 ft } + named medium { 0.08 ft } + named thick { 0.12 ft } + { thin } + named paint { nopaint } + named font { } + named break { } + named format right @Body { @Body } + + named valign { ctr } + named vsize { } + named vindent { ctr } + named vstrut + named no { 0.0f } + named yes { 1.0f } + { no } + named vmargin { } + named topmargin { } + named footmargin { } + + named halign { ctr } + named hsize { } + named hindent { ctr } + named hstrut + named no { 0.0f } + named yes { 1.0f } + { no } + named hmargin { } + named leftmargin { } + named rightmargin { } + + named nodelabel { } + named nodelabelmargin { 0.2f } + named nodelabelfont { -2p } + named nodelabelbreak { ragged nohyphen } + named nodelabelformat right @Body { @Body } + import @Geometry named nodelabelpos { } + named nodelabelprox { outside } + import @Geometry named nodelabelangle { horizontal } + named nodelabelctr { no } + import @Geometry named nodelabeladjust { 0 0 } + + named alabel { } + named alabelmargin { } + named alabelfont { } + named alabelbreak { } + named alabelformat right @Body { } + import @Geometry named alabelpos { NE } + named alabelprox { } + import @Geometry named alabelangle { } + named alabelctr { } + import @Geometry named alabeladjust { } + + named blabel { } + named blabelmargin { } + named blabelfont { } + named blabelbreak { } + named blabelformat right @Body { } + import @Geometry named blabelpos { NW } + named blabelprox { } + import @Geometry named blabelangle { } + named blabelctr { } + import @Geometry named blabeladjust { } + + named clabel { } + named clabelmargin { } + named clabelfont { } + named clabelbreak { } + named clabelformat right @Body { } + import @Geometry named clabelpos { SW } + named clabelprox { } + import @Geometry named clabelangle { } + named clabelctr { } + import @Geometry named clabeladjust { } + + named dlabel { } + named dlabelmargin { } + named dlabelfont { } + named dlabelbreak { } + named dlabelformat right @Body { } + import @Geometry named dlabelpos { SE } + named dlabelprox { } + import @Geometry named dlabelangle { } + named dlabelctr { } + import @Geometry named dlabeladjust { } + + import @Geometry named path + named from {} + named to {} + named bias {} + named fbias {} + named tbias {} + named radius {} + named xindent {} + named zindent {} + named frompt {} + named topt {} + named arrow {} + named arrowlength {} + { line } + import @Geometry named from { 0,0 } + import @Geometry named to { 1,1 } + import @Geometry named bias { 2.0f } + import @Geometry named fbias { 2.0f } + import @Geometry named tbias { 2.0f } + import @Geometry named radius { 1.0f } + import @Geometry named xindent { 0.8f } + import @Geometry named zindent { 0.8f } + import @Geometry named frompt { 0 0 } + import @Geometry named topt { 0 0 } + named pathstyle + named solid { "/ldiagsolid" } + named dashed { "/ldiagdashed" } + named cdashed { "/ldiagcdashed" } + named dotted { "/ldiagdotted" } + named noline { "/ldiagnoline" } + { solid } + import @Geometry named pathdashlength { 0.2f } + import @Geometry named pathwidth + named thin { 0.04 ft } + named medium { 0.08 ft } + named thick { 0.12 ft } + { thin } + import @Geometry named pathgap + named thin { 0.08 ft } + named medium { 0.16 ft } + named thick { 0.24 ft } + { thin } + named arrow { no } + named arrowstyle { solid } + named arrowwidth { 0.3f } + named arrowlength { 0.5f } + + named linklabel { } + named linklabelmargin { 0.2f } + named linklabelfont { -2p } + named linklabelbreak { ragged nohyphen } + named linklabelformat right @Body { @Body } + import @Geometry named linklabelpos { } + named linklabelprox { above } + import @Geometry named linklabelangle { horizontal } + named linklabelctr { no } + import @Geometry named linklabeladjust { 0 0 } + + named xlabel { } + named xlabelmargin { } + named xlabelfont { } + named xlabelbreak { } + named xlabelformat right @Body { } + import @Geometry named xlabelpos { LFROM } + named xlabelprox { } + import @Geometry named xlabelangle { } + named xlabelctr { } + import @Geometry named xlabeladjust { } + + named ylabel { } + named ylabelmargin { } + named ylabelfont { } + named ylabelbreak { } + named ylabelformat right @Body { } + import @Geometry named ylabelpos { LMID } + named ylabelprox { } + import @Geometry named ylabelangle { } + named ylabelctr { yes } + import @Geometry named ylabeladjust { } + + named zlabel { } + named zlabelmargin { } + named zlabelfont { } + named zlabelbreak { } + named zlabelformat right @Body { } + import @Geometry named zlabelpos { LTO } + named zlabelprox { } + import @Geometry named zlabelangle { } + named zlabelctr { } + import @Geometry named zlabeladjust { } + + named fromlabel { } + named fromlabelmargin { 0f } + named fromlabelfont { } + named fromlabelbreak { ragged nohyphen } + named fromlabelformat right @Body { @Body } + import @Geometry named fromlabelpos { FROM } + named fromlabelprox { W } + import @Geometry named fromlabelangle { antiparallel } + named fromlabelctr { no } + import @Geometry named fromlabeladjust { 0 0 } + + named tolabel { } + named tolabelmargin { 0f } + named tolabelfont { } + named tolabelbreak { ragged nohyphen } + named tolabelformat right @Body { @Body } + import @Geometry named tolabelpos { TO } + named tolabelprox { W } + import @Geometry named tolabelangle { parallel } + named tolabelctr { no } + import @Geometry named tolabeladjust { 0 0 } + + named treehsep { 0.5f } + named treevsep { 0.5f } + named treehindent + named left { 0.0rt } + named ctr { 0.5rt } + named right { 1.0rt } + { ctr } + named treevindent + named top { 0.0rt } + named ctr { 0.5rt } + named foot { 1.0rt } + { ctr } + +{ + + export "::" @ShowPoints @ShowTags @ShowDirections @CatchTags @Transform + + @Tree @HTree + + @Node + @Box @CurveBox @ShadowBox @Square @Diamond @Polygon + @Isosceles @Ellipse @Circle + @ArrowHead @SolidArrowHead @OpenArrowHead @HalfOpenArrowHead + @SolidCurvedArrowHead @OpenCurvedArrowHead @HalfOpenCurvedArrowHead + @CircleArrowHead @BoxArrowHead + + @Link + @Line @DoubleLine @Arrow @DoubleArrow @Curve @CurveArrow + @ACurve @ACurveArrow @CCurve @CCurveArrow + @Bezier @BezierArrow + @HVLine @HVArrow @VHLine @VHArrow + @HVCurve @HVCurveArrow @VHCurve @VHCurveArrow + @LVRLine @LVRArrow @RVLLine @RVLArrow + @LVRCurve @LVRCurveArrow @RVLCurve @RVLCurveArrow + @DWrapLine @DWrapArrow @UWrapLine @UWrapArrow + @DWrapCurve @DWrapCurveArrow @UWrapCurve @UWrapCurveArrow + + def @Diag + named save { save } + named maxlabels { maxlabels } + + import @Geometry named outline + named margin {} + named shadow {} + named sides {} + named angle {} + { outline + margin { margin } + shadow { shadow } + sides { sides } + angle { angle } + } + named margin { margin } + import @Geometry named shadow { shadow } + import @Geometry named sides { sides } + import @Geometry named angle { angle } + named translate { translate } + named nodetag { } + named outlinestyle + named solid { "/ldiagsolid" } + named dashed { "/ldiagdashed" } + named cdashed { "/ldiagcdashed" } + named dotted { "/ldiagdotted" } + named noline { "/ldiagnoline" } + { outlinestyle } + import @Geometry named outlinedashlength{ outlinedashlength } + import @Geometry named outlinewidth + named thin { 0.04 ft } + named medium { 0.08 ft } + named thick { 0.12 ft } + { outlinewidth } + named paint { paint } + named font { font } + named break { break } + named format right @Body { format @Body } + named valign { valign } + named vsize { vsize } + named vindent { vindent } + named vstrut + named no { 0.0f } + named yes { 1.0f } + { vstrut } + named vmargin { vmargin } + named topmargin { topmargin } + named footmargin { footmargin } + named halign { halign } + named hsize { hsize } + named hindent { hindent } + named hstrut + named no { 0.0f } + named yes { 1.0f } + { hstrut } + named hmargin { hmargin } + named leftmargin { leftmargin } + named rightmargin { rightmargin } + + import @Geometry named path + named from {} + named to {} + named bias {} + named fbias {} + named tbias {} + named radius {} + named xindent {} + named zindent {} + named frompt {} + named topt {} + named arrow {} + named arrowlength {} + { path + from { from } + to { to } + bias { bias } + fbias { fbias } + tbias { tbias } + radius { radius } + xindent { xindent } + zindent { zindent } + frompt { frompt } + topt { topt } + arrow { arrow } + arrowlength { arrowlength } + } + import @Geometry named from { from } + import @Geometry named to { to } + import @Geometry named bias { bias } + import @Geometry named fbias { fbias } + import @Geometry named tbias { tbias } + import @Geometry named radius { radius } + import @Geometry named xindent { xindent } + import @Geometry named zindent { zindent } + import @Geometry named frompt { frompt } + import @Geometry named topt { topt } + named pathstyle + named solid { "/ldiagsolid" } + named dashed { "/ldiagdashed" } + named cdashed { "/ldiagcdashed" } + named dotted { "/ldiagdotted" } + named noline { "/ldiagnoline" } + { pathstyle } + import @Geometry named pathdashlength { pathdashlength } + import @Geometry named pathwidth + named thin { 0.04 ft } + named medium { 0.08 ft } + named thick { 0.12 ft } + { pathwidth } + import @Geometry named pathgap + named thin { 0.08 ft } + named medium { 0.16 ft } + named thick { 0.24 ft } + { pathgap } + named arrow { arrow } + named arrowstyle { arrowstyle } + named arrowwidth { arrowwidth } + named arrowlength { arrowlength } + + named nodelabel { nodelabel } + named nodelabelmargin { nodelabelmargin } + named nodelabelfont { nodelabelfont } + named nodelabelbreak { nodelabelbreak } + named nodelabelformat right @Body { nodelabelformat @Body } + import @Geometry named nodelabelpos { nodelabelpos } + named nodelabelprox { nodelabelprox } + import @Geometry named nodelabelangle { nodelabelangle } + named nodelabelctr { nodelabelctr } + import @Geometry named nodelabeladjust { nodelabeladjust } + + named alabel { alabel } + named alabelmargin { alabelmargin } + named alabelfont { alabelfont } + named alabelbreak { alabelbreak } + named alabelformat right @Body { alabelformat @Body } + import @Geometry named alabelpos { alabelpos } + named alabelprox { alabelprox } + import @Geometry named alabelangle { alabelangle } + named alabelctr { alabelctr } + import @Geometry named alabeladjust { alabeladjust } + + named blabel { blabel } + named blabelmargin { blabelmargin } + named blabelfont { blabelfont } + named blabelbreak { blabelbreak } + named blabelformat right @Body { blabelformat @Body } + import @Geometry named blabelpos { blabelpos } + named blabelprox { blabelprox } + import @Geometry named blabelangle { blabelangle } + named blabelctr { blabelctr } + import @Geometry named blabeladjust { blabeladjust } + + named clabel { clabel } + named clabelmargin { clabelmargin } + named clabelfont { clabelfont } + named clabelbreak { clabelbreak } + named clabelformat right @Body { clabelformat @Body } + import @Geometry named clabelpos { clabelpos } + named clabelprox { clabelprox } + import @Geometry named clabelangle { clabelangle } + named clabelctr { clabelctr } + import @Geometry named clabeladjust { clabeladjust } + + named dlabel { dlabel } + named dlabelmargin { dlabelmargin } + named dlabelfont { dlabelfont } + named dlabelbreak { dlabelbreak } + named dlabelformat right @Body { dlabelformat @Body } + import @Geometry named dlabelpos { dlabelpos } + named dlabelprox { dlabelprox } + import @Geometry named dlabelangle { dlabelangle } + named dlabelctr { dlabelctr } + import @Geometry named dlabeladjust { dlabeladjust } + + named fromlabel { fromlabel } + named fromlabelmargin { fromlabelmargin } + named fromlabelfont { fromlabelfont } + named fromlabelbreak { fromlabelbreak } + named fromlabelformat right @Body { fromlabelformat @Body } + import @Geometry named fromlabelpos { fromlabelpos } + named fromlabelprox { fromlabelprox } + import @Geometry named fromlabelangle { fromlabelangle } + named fromlabelctr { fromlabelctr } + import @Geometry named fromlabeladjust { fromlabeladjust } + + named linklabel { linklabel } + named linklabelmargin { linklabelmargin } + named linklabelfont { linklabelfont } + named linklabelbreak { linklabelbreak } + named linklabelformat right @Body { linklabelformat @Body } + import @Geometry named linklabelpos { linklabelpos } + named linklabelprox { linklabelprox } + import @Geometry named linklabelangle { linklabelangle } + named linklabelctr { linklabelctr } + import @Geometry named linklabeladjust { linklabeladjust } + + named xlabel { xlabel } + named xlabelmargin { xlabelmargin } + named xlabelfont { xlabelfont } + named xlabelbreak { xlabelbreak } + named xlabelformat right @Body { xlabelformat @Body } + import @Geometry named xlabelpos { xlabelpos } + named xlabelprox { xlabelprox } + import @Geometry named xlabelangle { xlabelangle } + named xlabelctr { xlabelctr } + import @Geometry named xlabeladjust { xlabeladjust } + + named ylabel { ylabel } + named ylabelmargin { ylabelmargin } + named ylabelfont { ylabelfont } + named ylabelbreak { ylabelbreak } + named ylabelformat right @Body { ylabelformat @Body } + import @Geometry named ylabelpos { ylabelpos } + named ylabelprox { ylabelprox } + import @Geometry named ylabelangle { ylabelangle } + named ylabelctr { ylabelctr } + import @Geometry named ylabeladjust { ylabeladjust } + + named zlabel { zlabel } + named zlabelmargin { zlabelmargin } + named zlabelfont { zlabelfont } + named zlabelbreak { zlabelbreak } + named zlabelformat right @Body { zlabelformat @Body } + import @Geometry named zlabelpos { zlabelpos } + named zlabelprox { zlabelprox } + import @Geometry named zlabelangle { zlabelangle } + named zlabelctr { zlabelctr } + import @Geometry named zlabeladjust { zlabeladjust } + + named tolabel { tolabel } + named tolabelmargin { tolabelmargin } + named tolabelfont { tolabelfont } + named tolabelbreak { tolabelbreak } + named tolabelformat right @Body { tolabelformat @Body } + import @Geometry named tolabelpos { tolabelpos } + named tolabelprox { tolabelprox } + import @Geometry named tolabelangle { tolabelangle } + named tolabelctr { tolabelctr } + import @Geometry named tolabeladjust { tolabeladjust } + + named treehsep { treehsep } + named treevsep { treevsep } + named treehindent + named left { 0.0rt } + named ctr { 0.5rt } + named right { 1.0rt } + { treehindent } + named treevindent + named top { 0.0rt } + named ctr { 0.5rt } + named foot { 1.0rt } + { treevindent } + body @Body + @Begin + + # Like @Graphic, but affects the graphics state of right parameter + def @InnerGraphic + left ps + right x + { + @BackEnd @Case { + PostScript @Yield { + { ps gsave // grestore } @Graphic x + } + PDF @Yield { + { ps q // Q } @Graphic x + } + } + } + + def @BoxLabels right x + { + @BackEnd @Case { + PostScript @Yield { + "[ ldiagbox ] pop" @Graphic x + } + PDF @Yield {} + } + } + + def @IfNonEmpty + left x + right y + { + x @Case { + "" @Yield @Null + else @Yield y + } + } + + def @Else + precedence 20 + associativity right + left x + right y + { + x @Case { + "" @Yield y + else @Yield x + } + } + + def @ShowTags + right x + { + @BackEnd @Case { + PostScript @Yield { + { + "() ldiagpushtagdict" + // "ldiagshowtags ldiagpopuptagdict" + } @Graphic x + } + PDF @Yield {} + } + } + + def @ShowPoints + right x + { + @BackEnd @Case { + PostScript @Yield { + { + "() ldiagpushtagdict" + // "ldiagshowpoints ldiagpopuptagdict" + } @Graphic x + } + PDF @Yield {} + } + } + + def @ShowDirections + right x + { + @BackEnd @Case { + PostScript @Yield { + { "() ldiagpushtagdict" + // "ldiagshowangles ldiagpopuptagdict" } @Graphic x + } + PDF @Yield {} + } + } + + def "::" + precedence 33 + associativity right + left name + right x + { + @BackEnd @Case { + PostScript @Yield { + { "("name") ldiagpushtagdict" + // "ldiagpopuptagdict" } @Graphic x + } + PDF @Yield {} + } + } + + def @CatchTags + precedence 33 + associativity right + right x + { + @BackEnd @Case { + PostScript @Yield { + { + "() ldiagpushtagdict" + // "ldiagpoptagdict" + } + @Graphic x + } + PDF @Yield {} + } + } + + def @ZeroWidth right x + { + @HContract @VContract { + ^|0io @HContract @VContract x |0io + } + } + + def @ZeroSize right x + { + @HContract @VContract { + ^/0io ^|0io @HContract @VContract x |0io /0io + } + } + + def @FromArrowLength + left arrow + right arrowlength + { + @BackEnd @Case { + PostScript @Yield { + arrow @Case { + { no yes forward } @Yield 0 + { back both } @Yield {"("arrowlength") ldiagdecodelength"} + } + } + PDF @Yield {} + } + } + + def @ToArrowLength + left arrow + right arrowlength + { + @BackEnd @Case { + PostScript @Yield { + arrow @Case { + { no back } @Yield 0 + { yes forward both } @Yield {"("arrowlength") ldiagdecodelength"} + } + } + PDF @Yield {} + } + } + + def @AddMargins + named mtop {} + named mfoot {} + named mleft {} + named mright {} + right x + { + + @HContract @VContract { + ^|mleft |mright + ^/mtop | x | + /mfoot | | + } + } + + def @Transform + precedence 32 + import @Geometry named translate +# named to precedence 10 left x right y { x y "ldiagpsub" } + named to precedence 10 left x right y { + @BackEnd @Case { + PostScript @Yield { x y "ldiagpsub" } + PDF @Yield {""} + } + } + {} + import @Geometry named rotate { 0d } + named scale { 1 1 } + right x + { + @BackEnd @Case { + + PostScript @Yield { + { rotate "rotate" scale "scale newpath clip" } + @InnerGraphic + { + @ZeroSize x + } + // + # { rotate "rotate" scale "scale" translate "translate" } + { translate "translate" rotate "rotate" scale "scale" } + @InnerGraphic + { + @ZeroSize x + } + } + + PDF @Yield { # presume that "rotate", "scale" and "translate" are not matrices + { "__cos("rotate") __sin("rotate") __sub(0, __sin("rotate")) __cos("rotate") 0 0 cm" + "__pick(1, "scale") 0 0 __pick(2, "scale") 0 0 cm n W" } + @InnerGraphic + { + @ZeroSize x + } + // + # { rotate "rotate" scale "scale" translate "translate" } + { "1 0 0 1 "translate" cm" + "__cos("rotate") __sin("rotate") __sub(0, __sin("rotate")) __cos("rotate") 0 0 cm" + "__pick(1, "scale") 0 0 __pick(2, "scale") 0 0 cm" } + @InnerGraphic + { + @ZeroSize x + } + } + + } + } + + def @DoLabel + named which {} + named labeltag { LABEL } + named label {} + named labelmargin {} + named labelfont {} + named labelbreak {} + named labelformat right @Body {} + named labelpos {} + named labelprox {} + named labelangle {} + named labelctr {} + named labeladjust {} + { + + import @Geometry + def alignedangle + { + labelpos??"ANGLE" quadcase + 0 { labelpos??"ANGLE" } + 0-90 { labelpos??"ANGLE" } + 90 { labelpos??"ANGLE" } + 90-180 { labelpos??"ANGLE" + 180d } + 180 { labelpos??"ANGLE" + 180d } + 180-270 { labelpos??"ANGLE" + 180d } + 270 { labelpos??"ANGLE" + 180d } + 270-360 { labelpos??"ANGLE" } + } + + import @Geometry + def perpalignedangle + { + labelpos??"ANGLE" quadcase + 0 { labelpos??"ANGLE" - 90d } + 0-90 { labelpos??"ANGLE" - 90d } + 90 { labelpos??"ANGLE" - 90d } + 90-180 { labelpos??"ANGLE" - 90d } + 180 { labelpos??"ANGLE" + 90d } + 180-270 { labelpos??"ANGLE" + 90d } + 270 { labelpos??"ANGLE" + 90d } + 270-360 { labelpos??"ANGLE" + 90d } + + } + + import @Geometry + def finalangle + { + labelangle @Case { + + "horizontal" @Yield { 0d } + "aligned" @Yield { alignedangle } + "perpendicular" @Yield { perpalignedangle } + "parallel" @Yield { labelpos??"ANGLE" } + "antiparallel" @Yield { labelpos??"ANGLE" + 180d } + else @Yield labelangle + } + } + + import @Geometry + def @AlignedAboveProximity + { + which @Case { + { x f } @Yield { labelpos??ANGLE quadcase + 0 { (SW) } + 0-90 { (SW) } + 90 { (SW) } + 90-180 { (SE) } + 180 { (SE) } + 180-270 { (SE) } + 270 { (SE) } + 270-360 { (SW) } + } + { z t } @Yield { labelpos??ANGLE quadcase + 0 { (SE) } + 0-90 { (SE) } + 90 { (SE) } + 90-180 { (SW) } + 180 { (SW) } + 180-270 { (SW) } + 270 { (SW) } + 270-360 { (SE) } + } + else @Yield (S) + } + } + + import @Geometry + def @AlignedBelowProximity + { + which @Case { + { x f } @Yield { labelpos??ANGLE quadcase + 0 { (NW) } + 0-90 { (NW) } + 90 { (NW) } + 90-180 { (NE) } + 180 { (NE) } + 180-270 { (NE) } + 270 { (NE) } + 270-360 { (NW) } + } + { z t } @Yield { labelpos??ANGLE quadcase + 0 { (NE) } + 0-90 { (NE) } + 90 { (NE) } + 90-180 { (NW) } + 180 { (NW) } + 180-270 { (NW) } + 270 { (NW) } + 270-360 { (NE) } + } + else @Yield (N) + } + } + + import @Geometry + def @AlignedLeftProximity + { + which @Case { + { x f } @Yield { labelpos??ANGLE quadcase + 0 { (SW) } + 0-90 { (SW) } + 90 { (SW) } + 90-180 { (NE) } + 180 { (SE) } + 180-270 { (SE) } + 270 { (SE) } + 270-360 { (NW) } + } + { z t } @Yield { labelpos??ANGLE quadcase + 0 { (SE) } + 0-90 { (SE) } + 90 { (SE) } + 90-180 { (NW) } + 180 { (SW) } + 180-270 { (SW) } + 270 { (SW) } + 270-360 { (NE) } + } + else @Yield { labelpos??ANGLE quadcase + 0 { (S) } + 0-90 { (S) } + 90 { (S) } + 90-180 { (N) } + 180 { (S) } + 180-270 { (S) } + 270 { (S) } + 270-360 { (N) } + } + } + } + + import @Geometry + def @AlignedRightProximity + { + which @Case { + { x f } @Yield { labelpos??ANGLE quadcase + 0 { (SW) } + 0-90 { (NW) } + 90 { (NW) } + 90-180 { (SE) } + 180 { (SE) } + 180-270 { (NE) } + 270 { (NE) } + 270-360 { (SW) } + } + { z t } @Yield { labelpos??ANGLE quadcase + 0 { (SE) } + 0-90 { (NE) } + 90 { (NE) } + 90-180 { (SW) } + 180 { (SW) } + 180-270 { (NW) } + 270 { (NW) } + 270-360 { (SE) } + } + else @Yield { labelpos??ANGLE quadcase + 0 { (S) } + 0-90 { (N) } + 90 { (N) } + 90-180 { (S) } + 180 { (S) } + 180-270 { (N) } + 270 { (N) } + 270-360 { (S) } + } + } + } + + import @Geometry + def @AlignedInsideProximity + { + which @Case { + { x f } @Yield { labelpos??ANGLE quadcase + 0 { (SW) } + 0-90 { (SW) } + 90 { (SW) } + 90-180 { (NE) } + 180 { (NE) } + 180-270 { (NE) } + 270 { (NE) } + 270-360 { (SW) } + } + { z t } @Yield { labelpos??ANGLE quadcase + 0 { (SE) } + 0-90 { (SE) } + 90 { (SE) } + 90-180 { (NW) } + 180 { (NW) } + 180-270 { (NW) } + 270 { (NW) } + 270-360 { (SE) } + } + else @Yield { labelpos??ANGLE quadcase + 0 { (S) } + 0-90 { (S) } + 90 { (S) } + 90-180 { (N) } + 180 { (N) } + 180-270 { (N) } + 270 { (N) } + 270-360 { (S) } + } + } + } + + import @Geometry + def @AlignedOutsideProximity + { + which @Case { + { x f } @Yield { labelpos??ANGLE quadcase + 0 { (NW) } + 0-90 { (NW) } + 90 { (NW) } + 90-180 { (SE) } + 180 { (SE) } + 180-270 { (SE) } + 270 { (SE) } + 270-360 { (NW) } + } + { z t } @Yield { labelpos??ANGLE quadcase + 0 { (NE) } + 0-90 { (NE) } + 90 { (NE) } + 90-180 { (SW) } + 180 { (SW) } + 180-270 { (SW) } + 270 { (SW) } + 270-360 { (NE) } + } + else @Yield { labelpos??ANGLE quadcase + 0 { (N) } + 0-90 { (N) } + 90 { (N) } + 90-180 { (S) } + 180 { (S) } + 180-270 { (S) } + 270 { (S) } + 270-360 { (N) } + } + } + } + + + import @Geometry + def @PerpendicularAboveProximity + { + which @Case { + { x f } @Yield { labelpos??ANGLE quadcase + 0 { (SE) } + 0-90 { (SE) } + 90 { (SE) } + 90-180 { (SW) } + 180 { (NE) } + 180-270 { (NE) } + 270 { (NE) } + 270-360 { (NW) } + } + { z t } @Yield { labelpos??ANGLE quadcase + 0 { (NE) } + 0-90 { (NE) } + 90 { (NE) } + 90-180 { (NW) } + 180 { (SE) } + 180-270 { (SE) } + 270 { (SE) } + 270-360 { (SW) } + } + else @Yield { labelpos??ANGLE quadcase + 0 { (E) } + 0-90 { (E) } + 90 { (E) } + 90-180 { (W) } + 180 { (E) } + 180-270 { (E) } + 270 { (E) } + 270-360 { (W) } + } + } + } + + import @Geometry + def @PerpendicularBelowProximity + { + which @Case { + { x f } @Yield { labelpos??ANGLE quadcase + 0 { (SW) } + 0-90 { (SW) } + 90 { (SW) } + 90-180 { (SE) } + 180 { (NW) } + 180-270 { (NW) } + 270 { (NW) } + 270-360 { (NE) } + } + { z t } @Yield { labelpos??ANGLE quadcase + 0 { (NW) } + 0-90 { (NW) } + 90 { (NW) } + 90-180 { (NE) } + 180 { (SW) } + 180-270 { (SW) } + 270 { (SW) } + 270-360 { (SE) } + } + else @Yield { labelpos??ANGLE quadcase + 0 { (W) } + 0-90 { (W) } + 90 { (W) } + 90-180 { (E) } + 180 { (W) } + 180-270 { (W) } + 270 { (W) } + 270-360 { (E) } + } + } + } + + import @Geometry + def @PerpendicularLeftProximity + { + which @Case { + { x f } @Yield { labelpos??ANGLE quadcase + 0 { (SE) } + 0-90 { (SE) } + 90 { (SE) } + 90-180 { (SE) } + 180 { (NE) } + 180-270 { (NE) } + 270 { (NE) } + 270-360 { (NE) } + } + { z t } @Yield { labelpos??ANGLE quadcase + 0 { (NE) } + 0-90 { (NE) } + 90 { (NE) } + 90-180 { (NE) } + 180 { (SE) } + 180-270 { (SE) } + 270 { (SE) } + 270-360 { (SE) } + } + else @Yield (E) + } + } + + import @Geometry + def @PerpendicularRightProximity + { + which @Case { + { x f } @Yield { labelpos??ANGLE quadcase + 0 { (SW) } + 0-90 { (SW) } + 90 { (SW) } + 90-180 { (SW) } + 180 { (NW) } + 180-270 { (NW) } + 270 { (NW) } + 270-360 { (NW) } + } + { z t } @Yield { labelpos??ANGLE quadcase + 0 { (NW) } + 0-90 { (NW) } + 90 { (NW) } + 90-180 { (NW) } + 180 { (SW) } + 180-270 { (SW) } + 270 { (SW) } + 270-360 { (SW) } + } + else @Yield (W) + } + } + + import @Geometry + def @PerpendicularInsideProximity + { + which @Case { + { x f } @Yield { labelpos??ANGLE quadcase + 0 { (SE) } + 0-90 { (SE) } + 90 { (SE) } + 90-180 { (SE) } + 180 { (NW) } + 180-270 { (NW) } + 270 { (NW) } + 270-360 { (NW) } + } + { z t } @Yield { labelpos??ANGLE quadcase + 0 { (NE) } + 0-90 { (NE) } + 90 { (NE) } + 90-180 { (NE) } + 180 { (SW) } + 180-270 { (SW) } + 270 { (SW) } + 270-360 { (SW) } + } + else @Yield { labelpos??ANGLE quadcase + 0 { (E) } + 0-90 { (E) } + 90 { (E) } + 90-180 { (E) } + 180 { (W) } + 180-270 { (W) } + 270 { (W) } + 270-360 { (W) } + } + } + } + + import @Geometry + def @PerpendicularOutsideProximity + { + which @Case { + { x f } @Yield { labelpos??ANGLE quadcase + 0 { (SW) } + 0-90 { (SW) } + 90 { (SW) } + 90-180 { (SW) } + 180 { (NE) } + 180-270 { (NE) } + 270 { (NE) } + 270-360 { (NE) } + } + { z t } @Yield { labelpos??ANGLE quadcase + 0 { (NW) } + 0-90 { (NW) } + 90 { (NW) } + 90-180 { (NW) } + 180 { (SE) } + 180-270 { (SE) } + 270 { (SE) } + 270-360 { (SE) } + } + else @Yield { labelpos??ANGLE quadcase + 0 { (W) } + 0-90 { (W) } + 90 { (W) } + 90-180 { (W) } + 180 { (E) } + 180-270 { (E) } + 270 { (E) } + 270-360 { (E) } + } + } + } + + + import @Geometry + def @OtherAboveProximity + { + which @Case { + { x f } @Yield { labelpos??ANGLE quadcase + 0 { (SW) } + 0-90 { (SE) } + 90 { (SW) } + 90-180 { (SW) } + 180 { (SE) } + 180-270 { (SE) } + 270 { (NW) } + 270-360 { (SW) } + } + { z t } @Yield { labelpos??ANGLE quadcase + 0 { (SE) } + 0-90 { (SE) } + 90 { (NW) } + 90-180 { (SW) } + 180 { (SW) } + 180-270 { (SE) } + 270 { (SW) } + 270-360 { (SW) } + } + else @Yield { labelpos??ANGLE quadcase + 0 { (S) } + 0-90 { (SE) } + 90 { (W) } + 90-180 { (SW) } + 180 { (S) } + 180-270 { (SE) } + 270 { (W) } + 270-360 { (SW) } + } + } + } + + import @Geometry + def @OtherBelowProximity + { + which @Case { + { x f } @Yield { labelpos??ANGLE quadcase + 0 { (NW) } + 0-90 { (NW) } + 90 { (SW) } + 90-180 { (NE) } + 180 { (NE) } + 180-270 { (NW) } + 270 { (NW) } + 270-360 { (NE) } + } + { z t } @Yield { labelpos??ANGLE quadcase + 0 { (NE) } + 0-90 { (NW) } + 90 { (NW) } + 90-180 { (NE) } + 180 { (NW) } + 180-270 { (NW) } + 270 { (SW) } + 270-360 { (NE) } + } + else @Yield { labelpos??ANGLE quadcase + 0 { (N) } + 0-90 { (NW) } + 90 { (W) } + 90-180 { (NE) } + 180 { (N) } + 180-270 { (NW) } + 270 { (W) } + 270-360 { (NE) } + } + } + } + + import @Geometry + def @OtherLeftProximity + { + which @Case { + { x f } @Yield { labelpos??ANGLE quadcase + 0 { (SW) } + 0-90 { (SE) } + 90 { (SE) } + 90-180 { (NE) } + 180 { (SE) } + 180-270 { (SE) } + 270 { (NE) } + 270-360 { (NE) } + } + { z t } @Yield { labelpos??ANGLE quadcase + 0 { (SE) } + 0-90 { (SE) } + 90 { (NE) } + 90-180 { (NE) } + 180 { (SW) } + 180-270 { (SE) } + 270 { (SE) } + 270-360 { (NE) } + } + else @Yield { labelpos??ANGLE quadcase + 0 { (S) } + 0-90 { (SE) } + 90 { (E) } + 90-180 { (NE) } + 180 { (S) } + 180-270 { (SE) } + 270 { (E) } + 270-360 { (NE) } + } + } + } + + import @Geometry + def @OtherRightProximity + { + which @Case { + { x f } @Yield { labelpos??ANGLE quadcase + 0 { (SW) } + 0-90 { (NW) } + 90 { (SW) } + 90-180 { (SW) } + 180 { (SE) } + 180-270 { (NW) } + 270 { (NW) } + 270-360 { (SW) } + } + { z t } @Yield { labelpos??ANGLE quadcase + 0 { (SE) } + 0-90 { (NW) } + 90 { (NW) } + 90-180 { (SW) } + 180 { (SW) } + 180-270 { (NW) } + 270 { (SW) } + 270-360 { (SW) } + } + else @Yield { labelpos??ANGLE quadcase + 0 { (S) } + 0-90 { (NW) } + 90 { (W) } + 90-180 { (SW) } + 180 { (S) } + 180-270 { (NW) } + 270 { (W) } + 270-360 { (SW) } + } + } + } + + import @Geometry + def @OtherInsideProximity + { + which @Case { + { x f } @Yield { labelpos??ANGLE quadcase + 0 { (SW) } + 0-90 { (SE) } + 90 { (SE) } + 90-180 { (NE) } + 180 { (NE) } + 180-270 { (NW) } + 270 { (NW) } + 270-360 { (SW) } + } + { z t } @Yield { labelpos??ANGLE quadcase + 0 { (SE) } + 0-90 { (SE) } + 90 { (NE) } + 90-180 { (NE) } + 180 { (NW) } + 180-270 { (NW) } + 270 { (SW) } + 270-360 { (SW) } + } + else @Yield { labelpos??ANGLE quadcase + 0 { (S) } + 0-90 { (SE) } + 90 { (E) } + 90-180 { (NE) } + 180 { (N) } + 180-270 { (NW) } + 270 { (W) } + 270-360 { (SW) } + } + } + } + + import @Geometry + def @OtherOutsideProximity + { + which @Case { + { x f } @Yield { labelpos??ANGLE quadcase + 0 { (NW) } + 0-90 { (NW) } + 90 { (SW) } + 90-180 { (SW) } + 180 { (SE) } + 180-270 { (SE) } + 270 { (NE) } + 270-360 { (NE) } + } + { z t } @Yield { labelpos??ANGLE quadcase + 0 { (NE) } + 0-90 { (NW) } + 90 { (NW) } + 90-180 { (SW) } + 180 { (SW) } + 180-270 { (SE) } + 270 { (SE) } + 270-360 { (NE) } + } + else @Yield { labelpos??ANGLE quadcase + 0 { (N) } + 0-90 { (NW) } + 90 { (W) } + 90-180 { (SW) } + 180 { (S) } + 180-270 { (SE) } + 270 { (E) } + 270-360 { (NE) } + } + } + } + + + import @Geometry + def @AboveProximity + { + labelangle @Case { + "aligned" @Yield @AlignedAboveProximity + "perpendicular" @Yield @PerpendicularAboveProximity + else @Yield @OtherAboveProximity + } + } + + import @Geometry + def @BelowProximity + { + labelangle @Case { + "aligned" @Yield @AlignedBelowProximity + "perpendicular" @Yield @PerpendicularBelowProximity + else @Yield @OtherBelowProximity + } + } + + import @Geometry + def @LeftProximity + { + labelangle @Case { + "aligned" @Yield @AlignedLeftProximity + "perpendicular" @Yield @PerpendicularLeftProximity + else @Yield @OtherLeftProximity + } + } + + import @Geometry + def @RightProximity + { + labelangle @Case { + "aligned" @Yield @AlignedRightProximity + "perpendicular" @Yield @PerpendicularRightProximity + else @Yield @OtherRightProximity + } + } + + import @Geometry + def @InsideProximity + { + labelangle @Case { + "aligned" @Yield @AlignedInsideProximity + "perpendicular" @Yield @PerpendicularInsideProximity + else @Yield @OtherInsideProximity + } + } + + import @Geometry + def @OutsideProximity + { + labelangle @Case { + "aligned" @Yield @AlignedOutsideProximity + "perpendicular" @Yield @PerpendicularOutsideProximity + else @Yield @OtherOutsideProximity + } + } + + import @Geometry + def proximity + { + labelprox @Case { + above @Yield @AboveProximity + below @Yield @BelowProximity + left @Yield @LeftProximity + right @Yield @RightProximity + inside @Yield @InsideProximity + outside @Yield @OutsideProximity + else @Yield { "("labelprox")" } + } + } + + import @Geometry + def dorotate + left point + right angle + { + { {0 0} distance point } atangle { {0 0} angleto point + angle } + } + + import @Geometry + def translation + { + labelctr @Case { + { no No } @Yield { + labelpos -- labeltag?!?proximity + } + { yes Yes } @Yield { + #P0 := labelpos + #P1 := labeltag?!?proximity -- P0 + #P2 := labeltag??CTR -- P0 + #TH := labelpos??ANGLE + #P1A := P1 dorotate { 0 - TH } + #P2A := P2 dorotate { 0 - TH } + #PRA := { 0 - xcoord P2A 0 - ycoord P1A } + #PRA dorotate TH ++ P0 + XP1 := labeltag?!?proximity + XP2 := labeltag??CTR + XANG := labelpos??ANGLE + XTH := XANG - 90d - { XP1 angleto XP2 } + XDIST := { XP1 distance XP2 } * sin XTH + labelpos -- XP1 ++ XDIST atangle XANG + } + } + } + + @CatchTags @ZeroSize @Transform + translate { translation ++ labeladjust } + rotate { finalangle } + scale { 1 1 } + labeltag:: @BoxLabels @CatchTags @AddMargins + mtop { labelmargin } + mfoot { labelmargin } + mleft { labelmargin } + mright { labelmargin } + labelfont @Font labelbreak @Break labelformat label + } + + + def @Node + import @Geometry named translate +# named to precedence 10 left x right y { x y "ldiagpsub" } + named to precedence 10 left x right y { + @BackEnd @Case { + PostScript @Yield { x y "ldiagpsub" } + PDF @Yield {""} + } + } + {} + import @Geometry named rotate { 0d } + import @Geometry named outline + named margin {} + named shadow {} + named sides {} + named angle {} + { outline + margin { margin } + shadow { shadow } + sides { sides } + angle { angle } + } + named margin { margin } + import @Geometry named shadow { shadow } + import @Geometry named sides { sides } + import @Geometry named angle { angle } + named nodetag { nodetag } + named outlinestyle + named solid { "/ldiagsolid" } + named dashed { "/ldiagdashed" } + named cdashed { "/ldiagcdashed" } + named dotted { "/ldiagdotted" } + named noline { "/ldiagnoline" } + { outlinestyle } + import @Geometry named outlinedashlength { outlinedashlength} + import @Geometry named outlinewidth + named thin { 0.04 ft } + named medium { 0.08 ft } + named thick { 0.12 ft } + { outlinewidth } + named paint { paint } + named font { font } + named break { break } + named format right @Body { format @Body } + named valign { valign } + named vsize { vsize } + named vindent { vindent } + named vstrut + named no { 0.0f } + named yes { 1.0f } + { vstrut } + named vmargin { vmargin } + named topmargin { topmargin } + named footmargin { footmargin } + + named halign { halign } + named hsize { hsize } + named hindent { hindent } + named hstrut + named no { 0.0f } + named yes { 1.0f } + { hstrut } + named hmargin { hmargin } + named leftmargin { leftmargin } + named rightmargin { rightmargin } + + named nodelabel { nodelabel } + named nodelabelmargin { nodelabelmargin } + named nodelabelfont { nodelabelfont } + named nodelabelbreak { nodelabelbreak } + named nodelabelformat right @Body { nodelabelformat @Body } + import @Geometry named nodelabelpos { nodelabelpos } + named nodelabelprox { nodelabelprox } + import @Geometry named nodelabelangle { nodelabelangle } + named nodelabelctr { nodelabelctr } + import @Geometry named nodelabeladjust { nodelabeladjust } + + named alabel { alabel } + named alabelmargin { alabelmargin } + named alabelfont { alabelfont } + named alabelbreak { alabelbreak } + named alabelformat right @Body { alabelformat @Body } + import @Geometry named alabelpos { alabelpos } + named alabelprox { alabelprox } + import @Geometry named alabelangle { alabelangle } + named alabelctr { alabelctr } + import @Geometry named alabeladjust { alabeladjust } + + named blabel { blabel } + named blabelmargin { blabelmargin } + named blabelfont { blabelfont } + named blabelbreak { blabelbreak } + named blabelformat right @Body { blabelformat @Body } + import @Geometry named blabelpos { blabelpos } + named blabelprox { blabelprox } + import @Geometry named blabelangle { blabelangle } + named blabelctr { blabelctr } + import @Geometry named blabeladjust { blabeladjust } + + named clabel { clabel } + named clabelmargin { clabelmargin } + named clabelfont { clabelfont } + named clabelbreak { clabelbreak } + named clabelformat right @Body { clabelformat @Body } + import @Geometry named clabelpos { clabelpos } + named clabelprox { clabelprox } + import @Geometry named clabelangle { clabelangle } + named clabelctr { clabelctr } + import @Geometry named clabeladjust { clabeladjust } + + named dlabel { dlabel } + named dlabelmargin { dlabelmargin } + named dlabelfont { dlabelfont } + named dlabelbreak { dlabelbreak } + named dlabelformat right @Body { dlabelformat @Body } + import @Geometry named dlabelpos { dlabelpos } + named dlabelprox { dlabelprox } + import @Geometry named dlabelangle { dlabelangle } + named dlabelctr { dlabelctr } + import @Geometry named dlabeladjust { dlabeladjust } + + right @Body + { + + def @LabelPos + left x + right y + { + nodelabelpos @Case { + x @Yield y + else @Yield "" + } + } + + def @If + left cond + right x + { + cond @Case { + { yes Yes } @Yield x + else @Yield "" + } + } + + + def @Strut right x + { + def vs { 0.5w @VShift { vstrut @High } } + def hs { hstrut @Wide } + + @HContract @VContract { + @HContract @VContract x | vs / hs | + } + } + + def @Indent right x + { + x @Case { + { top left } @Yield 0.0rt + { ctr } @Yield 0.5rt + { foot right } @Yield 1.0rt + { mctr } @Yield 0.5bx + else @Yield x + } + } + + def @VSize right x + { + vsize @Case { + "" @Yield x + else @Yield { vsize @High { /{@Indent vindent} x / } } + } + } + + def @HSize right x + { + hsize @Case { + "" @Yield x + else @Yield { hsize @Wide { |{@Indent hindent} x | } } + } + } + + def @Align right x + { + x @Case { + { top left } @Yield 0.0w + { ctr } @Yield 0.5w + { foot right } @Yield 1.0w + { mark } @Yield "+0i" + else @Yield x + } + } + + def @ALabel + { + @DoLabel + which { "a" } + label { alabel @Else nodelabel } + labelmargin { alabelmargin @Else nodelabelmargin } + labelfont { alabelfont @Else nodelabelfont } + labelbreak { alabelbreak @Else nodelabelbreak } + labelformat { alabelformat @Body @Else nodelabelformat @Body} + labelpos { alabelpos @Else nodelabelpos } + labelprox { alabelprox @Else nodelabelprox } + labelangle { alabelangle @Else nodelabelangle } + labelctr { alabelctr @Else nodelabelctr } + labeladjust { alabeladjust @Else nodelabeladjust } + } + + def @BLabel + { + @DoLabel + which { "b" } + label { blabel @Else nodelabel } + labelmargin { blabelmargin @Else nodelabelmargin } + labelfont { blabelfont @Else nodelabelfont } + labelbreak { blabelbreak @Else nodelabelbreak } + labelformat { blabelformat @Body @Else nodelabelformat @Body} + labelpos { blabelpos @Else nodelabelpos } + labelprox { blabelprox @Else nodelabelprox } + labelangle { blabelangle @Else nodelabelangle } + labelctr { blabelctr @Else nodelabelctr } + labeladjust { blabeladjust @Else nodelabeladjust } + } + + def @CLabel + { + @DoLabel + which { "c" } + label { clabel @Else nodelabel } + labelmargin { clabelmargin @Else nodelabelmargin } + labelfont { clabelfont @Else nodelabelfont } + labelbreak { clabelbreak @Else nodelabelbreak } + labelformat { clabelformat @Body @Else nodelabelformat @Body} + labelpos { clabelpos @Else nodelabelpos } + labelprox { clabelprox @Else nodelabelprox } + labelangle { clabelangle @Else nodelabelangle } + labelctr { clabelctr @Else nodelabelctr } + labeladjust { clabeladjust @Else nodelabeladjust } + } + + def @DLabel + { + @DoLabel + which { "d" } + label { dlabel @Else nodelabel } + labelmargin { dlabelmargin @Else nodelabelmargin } + labelfont { dlabelfont @Else nodelabelfont } + labelbreak { dlabelbreak @Else nodelabelbreak } + labelformat { dlabelformat @Body @Else nodelabelformat @Body} + labelpos { dlabelpos @Else nodelabelpos } + labelprox { dlabelprox @Else nodelabelprox } + labelangle { dlabelangle @Else nodelabelangle } + labelctr { dlabelctr @Else nodelabelctr } + labeladjust { dlabeladjust @Else nodelabeladjust } + } + + import @Geometry + def @OutLine + { + @BackEnd @Case { + PostScript @Yield { + outline @Case { + box @Yield { "ldiagbox" } + curvebox @Yield { "("margin") ldiagcurvebox" } + shadowbox @Yield { shadow "ldiagshadow ldiagbox" } + square @Yield { "ldiagsquare" } + diamond @Yield { "ldiagdiamond" } + polygon @Yield { sides angle "ldiagpolygon" } + isosceles @Yield { "ldiagisosceles" } + ellipse @Yield { "ldiagellipse" } + circle @Yield { "ldiagcircle" } + else @Yield { + outline + margin { "("margin") ldiagdecodelength" } + shadow { shadow } + sides { sides } + angle { angle } + } + } + } + PDF @Yield {} + } + } + + def @Value + { + @BackEnd @Case { + PostScript @Yield { + @HContract @VContract + { + { + "ldiagnodebegin [" @OutLine "]" + outlinedashlength "[" outlinestyle "]" + outlinewidth "/ldiag"paint "ldiagnodeend" + "(IN) ldiagpushtagdict" + // + "ldiagpopuptagdict" + } + @Graphic + { + {@Align valign} @VShift {@Align halign} @HShift + @AddMargins + mtop { topmargin @Else vmargin @Else margin } + mfoot { footmargin @Else vmargin @Else margin } + mleft { leftmargin @Else hmargin @Else margin } + mright { rightmargin @Else hmargin @Else margin } + @HSize @VSize @HContract @VContract + font @Font break @Break format @Strut @Body + } + / {alabel @Else nodelabel} @IfNonEmpty @ALabel + / {blabel @Else nodelabel} @IfNonEmpty @BLabel + / {clabel @Else nodelabel} @IfNonEmpty @CLabel + / {dlabel @Else nodelabel} @IfNonEmpty @DLabel + } + } + PDF @Yield {} + } + } + + def @TValue + { + nodetag @Case { + "" @Yield @Value + else @Yield { nodetag:: @Value } + } + } + + translate @Case { + "" @Yield @TValue + else @Yield { + @Null & # so that preceding space gets chewed up + @Transform translate { translate } rotate { rotate } @TValue + } + } + } + + macro @@Node { @Node } + macro @Box { @Node outline { box } } + macro @CurveBox { @Node outline { curvebox } } + macro @ShadowBox { @Node outline { shadowbox } } + macro @Square { @Node outline { square } } + macro @Diamond { @Node outline { diamond } } + macro @Polygon { @Node outline { polygon } } + macro @Isosceles { @Node outline { isosceles } } + macro @Ellipse { @Node outline { ellipse } } + macro @Circle { @Node outline { circle } } + + + macro @InsulatedNode { + @Node + topmargin { 0i } + footmargin { 0i } + leftmargin { 0i } + rightmargin { 0i } + alabel {} + blabel {} + clabel {} + dlabel {} + hsize {} + vsize {} + vstrut { no } + hstrut { no } + } + + def @SolidArrowHead + named width { arrowwidth } + named length { arrowlength } + named pathwidth { pathwidth } + { + @InsulatedNode + paint { nochange } + outlinestyle { noline } + outlinewidth { pathwidth } + outline { + @BackEnd @Case { + PostScript @Yield { + "ldiagsolidarrowhead" + # 0 0 xsize ysize * 0.5 0 ysize + } + PDF @Yield {} + } + } + { + length @Wide width @High + } + } + + def @OpenArrowHead + named width { arrowwidth } + named length { arrowlength } + named pathwidth { pathwidth } + { + @InsulatedNode + outlinewidth { pathwidth } + outlinestyle { noline } + paint { nochange } + outline { + @BackEnd @Case { + PostScript @Yield { + pathwidth "ldiagopenarrowhead" + + # PSW := { 0 0 } + # PNW := { 0 ysize } + # PE := { xsize ysize*0.5 } + # REL := pathwidth atangle { PE angleto PNW + 90d } + # PNA := { 0 ysize*0.5 + pathwidth*0.5 } + # PSA := { 0 ysize*0.5 - pathwidth*0.5 } + # PNI := { + # PNA PNA ++ { xsize 0 } + # PNW ++ REL PE ++ REL ldiaglineintersect + # } + # PSI := PNI -- { 0 pathwidth } + # + # PSW PE PNW PNI PNA PSA PSI PSW + } + PDF @Yield {} + } + } + { + length @Wide width @High + } + } + + def @HalfOpenArrowHead + named width { arrowwidth } + named length { arrowlength } + named pathwidth { pathwidth } + { + @InsulatedNode + paint { nochange } + outlinestyle { noline } + outlinewidth { pathwidth } + outline { + @BackEnd @Case { + PostScript @Yield { + pathwidth "ldiaghalfopenarrowhead" + + # 0 0 + # xsize ysize * 0.5 + # 0 ysize + # xsize*0.3 ysize*0.5 + pathwidth*0.5 + # 0 ysize*0.5 + pathwidth*0.5 + # 0 ysize*0.5 - pathwidth*0.5 + # xsize*0.3 ysize*0.5 - pathwidth*0.5 + # 0 0 + } + PDF @Yield {} + } + } + { + length @Wide width @High + } + } + + def @SolidCurvedArrowHead + named width { arrowwidth } + named length { arrowlength } + named pathwidth { pathwidth } + { + @InsulatedNode + outlinestyle { noline } + paint { nochange } + outlinewidth { pathwidth } + outline { + @BackEnd @Case { + PostScript @Yield { + "ldiagsolidcurvedarrowhead" + # 0 0 + # [0 0 xsize ysize * 0.5 "ldiaglinebetween" + # xsize 0 xsize ysize "ldiaglineintersect" clockwise] + # xsize ysize * 0.5 + # [xsize ysize * 0.5 0 ysize "ldiaglinebetween" + # xsize 0 xsize ysize "ldiaglineintersect" clockwise] + # 0 ysize + } + PDF @Yield {} + } + } + { + length @Wide width @High + } + } + + def @OpenCurvedArrowHead + named width { arrowwidth } + named length { arrowlength } + named pathwidth { pathwidth } + { + @InsulatedNode + outlinestyle { noline } + paint { nochange } + outlinewidth { pathwidth } + outline { + @BackEnd @Case { + PostScript @Yield { + pathwidth "ldiagopencurvedarrowhead" + # LR:= { 0 0 xsize ysize * 0.5 "ldiaglinebetween" + # xsize 0 xsize ysize "ldiaglineintersect" } + # UR:= { xsize ysize * 0.5 0 ysize "ldiaglinebetween" + # xsize 0 xsize ysize "ldiaglineintersect" } + # PW2 := pathwidth * 0.5 + # UMID := { + # 0 ysize * 0.5 + PW2 xsize ysize * 0.5 + PW2 + # {0 ysize} ++ 1f atangle { UR angleto {0 ysize} + 90d } + # { 0 ysize } ldiaglineintersect + # } + # LMID := UMID -- { 0 pathwidth } + # 0 0 + # [LR clockwise] + # xsize ysize * 0.5 + # [UR clockwise] + # 0 ysize + # UMID + # 0 ysize * 0.5 + PW2 + # 0 ysize * 0.5 - PW2 + # LMID + # 0 0 + } + PDF @Yield {} + } + } + { + length @Wide width @High + } + } + + def @HalfOpenCurvedArrowHead + named width { arrowwidth } + named length { arrowlength } + named pathwidth { pathwidth } + { + @InsulatedNode + outlinestyle { noline } + paint { nochange } + outlinewidth { pathwidth } + outline { + @BackEnd @Case { + PostScript @Yield { + pathwidth "ldiaghalfopencurvedarrowhead" + # LR:= { 0 0 xsize ysize * 0.5 "ldiaglinebetween" + # xsize 0 xsize ysize "ldiaglineintersect" } + # UR:= { xsize ysize * 0.5 0 ysize "ldiaglinebetween" + # xsize 0 xsize ysize "ldiaglineintersect" } + # BR:= { 0 0 LR 0 ysize UR "ldiaglineintersect" } + # BRAD := { 0 0 } distance BR + # PW2 := pathwidth * 0.5 + # XDIST := sqrt { BRAD*BRAD - PW2*PW2 } + # UMID := BR ++ { XDIST PW2 } + # LMID := BR ++ { XDIST 0 - PW2 } + # 0 0 + # [LR clockwise] + # xsize ysize * 0.5 + # [UR clockwise] + # 0 ysize + # [BR clockwise ] + # UMID + # 0 ysize * 0.5 + PW2 + # 0 ysize * 0.5 - PW2 + # LMID + # [BR clockwise ] + # 0 0 + } + PDF @Yield {} + } + } + { + length @Wide width @High + } + } + + def @CircleArrowHead + named width { arrowwidth } + named length { arrowlength } + named pathwidth { pathwidth } + { + @InsulatedNode + outlinestyle { noline } + paint { nochange } + outlinewidth { pathwidth } + outline { circle } + { length @Wide length @High } + } + + def @BoxArrowHead + named width { arrowwidth } + named length { arrowlength } + named pathwidth { pathwidth } + { + @InsulatedNode + outlinestyle { noline } + paint { nochange } + outlinewidth { pathwidth } + outline { box } + { length @Wide width @High } + } + + def @ArrowHead + named style { arrowstyle } + named width { arrowwidth } + named length { arrowlength } + named pathwidth { pathwidth } + { + style @Case { + solid @Yield @SolidArrowHead + width { width } length { length } + pathwidth { pathwidth } + halfopen @Yield @HalfOpenArrowHead + width { width } length { length } + pathwidth { pathwidth } + open @Yield @OpenArrowHead + width { width } length { length } + pathwidth { pathwidth } + curvedsolid @Yield @SolidCurvedArrowHead + width { width } length { length } + pathwidth { pathwidth } + curvedhalfopen @Yield @HalfOpenCurvedArrowHead + width { width } length { length } + pathwidth { pathwidth } + curvedopen @Yield @OpenCurvedArrowHead + width { width } length { length } + pathwidth { pathwidth } + circle @Yield @CircleArrowHead + width { width } length { length } + pathwidth { pathwidth } + box @Yield @BoxArrowHead + width { width } length { length } + pathwidth { pathwidth } + } + } + + def @Link + import @Geometry named path + named from {} + named to {} + named bias {} + named fbias {} + named tbias {} + named radius {} + named xindent {} + named zindent {} + named frompt {} + named topt {} + named arrow {} + named arrowlength {} + { path + from { from } + to { to } + bias { bias } + fbias { fbias } + tbias { tbias } + radius { radius } + xindent { xindent } + zindent { zindent } + frompt { frompt } + topt { topt } + arrow { arrow } + arrowlength { arrowlength } + } + import @Geometry named from { from } + import @Geometry named to { to } + import @Geometry named bias { bias } + import @Geometry named fbias { fbias } + import @Geometry named tbias { tbias } + import @Geometry named radius { radius } + import @Geometry named xindent { xindent } + import @Geometry named zindent { zindent } + import @Geometry named frompt { frompt } + import @Geometry named topt { topt } + named pathstyle + named solid { "/ldiagsolid" } + named dashed { "/ldiagdashed" } + named cdashed { "/ldiagcdashed" } + named dotted { "/ldiagdotted" } + named noline { "/ldiagnoline" } + { pathstyle } + import @Geometry named pathdashlength { pathdashlength } + import @Geometry named pathwidth + named thin { 0.04 ft } + named medium { 0.08 ft } + named thick { 0.12 ft } + { pathwidth } + import @Geometry named pathgap + named thin { 0.08 ft } + named medium { 0.16 ft } + named thick { 0.24 ft } + { pathgap } + + named arrow { arrow } + named arrowstyle { arrowstyle } + named arrowwidth { arrowwidth } + named arrowlength { arrowlength } + + named linklabel { linklabel } + named linklabelmargin { linklabelmargin } + named linklabelfont { linklabelfont } + named linklabelbreak { linklabelbreak } + named linklabelformat right @Body { linklabelformat @Body } + import @Geometry named linklabelpos { linklabelpos } + named linklabelprox { linklabelprox } + import @Geometry named linklabelangle { linklabelangle } + named linklabelctr { linklabelctr } + import @Geometry named linklabeladjust { linklabeladjust } + + named xlabel { xlabel } + named xlabelmargin { xlabelmargin } + named xlabelfont { xlabelfont } + named xlabelbreak { xlabelbreak } + named xlabelformat right @Body { xlabelformat @Body } + import @Geometry named xlabelpos { xlabelpos } + named xlabelprox { xlabelprox } + import @Geometry named xlabelangle { xlabelangle } + named xlabelctr { xlabelctr } + import @Geometry named xlabeladjust { xlabeladjust } + + named ylabel { ylabel } + named ylabelmargin { ylabelmargin } + named ylabelfont { ylabelfont } + named ylabelbreak { ylabelbreak } + named ylabelformat right @Body { ylabelformat @Body } + import @Geometry named ylabelpos { ylabelpos } + named ylabelprox { ylabelprox } + import @Geometry named ylabelangle { ylabelangle } + named ylabelctr { ylabelctr } + import @Geometry named ylabeladjust { ylabeladjust } + + named zlabel { zlabel } + named zlabelmargin { zlabelmargin } + named zlabelfont { zlabelfont } + named zlabelbreak { zlabelbreak } + named zlabelformat right @Body { zlabelformat @Body } + import @Geometry named zlabelpos { zlabelpos } + named zlabelprox { zlabelprox } + import @Geometry named zlabelangle { zlabelangle } + named zlabelctr { zlabelctr } + import @Geometry named zlabeladjust { zlabeladjust } + + named fromlabel { fromlabel } + named fromlabelmargin { fromlabelmargin } + named fromlabelfont { fromlabelfont } + named fromlabelbreak { fromlabelbreak } + named fromlabelformat right @Body { fromlabelformat @Body } + import @Geometry named fromlabelpos { fromlabelpos } + named fromlabelprox { fromlabelprox } + import @Geometry named fromlabelangle { fromlabelangle } + named fromlabelctr { fromlabelctr } + import @Geometry named fromlabeladjust { fromlabeladjust } + + named tolabel { tolabel } + named tolabelmargin { tolabelmargin } + named tolabelfont { tolabelfont } + named tolabelbreak { tolabelbreak } + named tolabelformat right @Body { tolabelformat @Body } + import @Geometry named tolabelpos { tolabelpos } + named tolabelprox { tolabelprox } + import @Geometry named tolabelangle { tolabelangle } + named tolabelctr { tolabelctr } + import @Geometry named tolabeladjust{ tolabeladjust } + + { + def @XLabel + { + @DoLabel + which { "x" } + label { xlabel @Else linklabel } + labelmargin { xlabelmargin @Else linklabelmargin } + labelfont { xlabelfont @Else linklabelfont } + labelbreak { xlabelbreak @Else linklabelbreak } + labelformat { xlabelformat @Body @Else linklabelformat @Body} + labelpos { xlabelpos @Else linklabelpos } + labelprox { xlabelprox @Else linklabelprox } + labelangle { xlabelangle @Else linklabelangle } + labelctr { xlabelctr @Else linklabelctr } + labeladjust { xlabeladjust @Else linklabeladjust } + } + + def @YLabel + { + @DoLabel + which { "y" } + label { ylabel @Else linklabel } + labelmargin { ylabelmargin @Else linklabelmargin } + labelfont { ylabelfont @Else linklabelfont } + labelbreak { ylabelbreak @Else linklabelbreak } + labelformat { ylabelformat @Body @Else linklabelformat @Body} + labelpos { ylabelpos @Else linklabelpos } + labelprox { ylabelprox @Else linklabelprox } + labelangle { ylabelangle @Else linklabelangle } + labelctr { ylabelctr @Else linklabelctr } + labeladjust { ylabeladjust @Else linklabeladjust } + } + + def @ZLabel + { + @DoLabel + which { "z" } + label { zlabel @Else linklabel } + labelmargin { zlabelmargin @Else linklabelmargin } + labelfont { zlabelfont @Else linklabelfont } + labelbreak { zlabelbreak @Else linklabelbreak } + labelformat { zlabelformat @Body @Else linklabelformat @Body} + labelpos { zlabelpos @Else linklabelpos } + labelprox { zlabelprox @Else linklabelprox } + labelangle { zlabelangle @Else linklabelangle } + labelctr { zlabelctr @Else linklabelctr } + labeladjust { zlabeladjust @Else linklabeladjust } + } + + def @FromArrow + { + arrow @Case { + { back both } @Yield { + @ArrowHead + style { arrowstyle } + width { arrowwidth } + length { arrowlength } + pathwidth { pathwidth } + } + else @Yield "" + } + } + + def @ToArrow + { + arrow @Case { + { yes forward both } @Yield { + @ArrowHead + style { arrowstyle } + width { arrowwidth } + length { arrowlength } + pathwidth { pathwidth } + } + else @Yield "" + } + } + + import @Geometry + def @LinePath + { + @BackEnd @Case { + PostScript @Yield { + {arrow @FromArrowLength arrowlength} + {arrow @ToArrowLength arrowlength} + "{" from "}" "{" to "}" + xindent zindent "ldiaglinepath" + # FROM :< {from??CTR angleto to??CTR} + # FROM :: from boundaryatangle FROM@ANGLE + # ++ {arrow @FromArrowLength arrowlength}atangle FROM@ANGLE + # TO :< FROM@ANGLE + # TO :: to boundaryatangle { TO@ANGLE - 180d } + # ++ {arrow @ToArrowLength arrowlength} atangle {TO@ANGLE - 180d} + # + # LMID :: FROM ** 0.5 ++ TO ** 0.5 + # LMID :< FROM@ANGLE + # XINDENT := xindent min { FROM distance LMID } + # LFROM :: FROM ++ XINDENT atangle FROM@ANGLE + # LFROM :< FROM@ANGLE + # ZINDENT := zindent min { TO distance LMID } + # LTO :: TO -- ZINDENT atangle FROM@ANGLE + # LTO :< FROM@ANGLE + # + # if cond { direct } + # then { FROM TO } + # else { FROM LFROM LMID LTO TO } + } + PDF @Yield {} + } + } + + import @Geometry + def @DoubleLinePath + { + @BackEnd @Case { + PostScript @Yield { + {arrow @FromArrowLength arrowlength} + {arrow @ToArrowLength arrowlength} + "{" from "}" "{" to "}" + xindent zindent pathgap "ldiagdoublelinepath" + # FROM :< {from??CTR angleto to??CTR} + # FROM :: from boundaryatangle FROM@ANGLE + # ++ {arrow @FromArrowLength arrowlength}atangle FROM@ANGLE + # TO :< FROM@ANGLE + # TO :: to boundaryatangle { TO@ANGLE - 180d } + # ++ {arrow @ToArrowLength arrowlength} atangle {TO@ANGLE - 180d} + # + # LMID :: FROM ** 0.5 ++ TO ** 0.5 + # LMID :< FROM@ANGLE + # XINDENT := xindent min { FROM distance LMID } + # LFROM :: FROM ++ XINDENT atangle FROM@ANGLE + # LFROM :< FROM@ANGLE + # ZINDENT := zindent min { TO distance LMID } + # LTO :: TO -- ZINDENT atangle FROM@ANGLE + # LTO :< FROM@ANGLE + # + # if cond { direct } + # then { FROM TO } + # else { FROM LFROM LMID LTO TO } + } + PDF @Yield {} + } + } + + import @Geometry + def @ACurvePath + { + @BackEnd @Case { + PostScript @Yield { + {arrow @FromArrowLength arrowlength} + {arrow @ToArrowLength arrowlength} + "{" from "}" "{" to "}" + xindent zindent bias "ldiagacurvepath" + # #B1 := bias max 0.02f + # #B2 := { from??CTR distance to??CTR } * 0.5 + # #BIAS := B1 min B2 + # BIAS := bias max 0.02f + # XMID := from??CTR ** 0.5 ++ to??CTR ** 0.5 + # XTOP := XMID ++ BIAS atangle {from??CTR angleto to??CTR - 90d} + # CTR := { from??CTR XTOP ldiaglinebetween + # to??CTR XTOP ldiaglinebetween ldiaglineintersect } + # FROM :: aabout + # circum { from } + # extra { arrow @FromArrowLength arrowlength } + # centre { CTR } + # FROM :< if cond { from??CTR distance FROM > 0 } + # then { from??CTR angleto FROM } + # else { CTR angleto FROM + 90d } + # TO :: cabout + # circum { to } + # extra { arrow @ToArrowLength arrowlength } + # centre { CTR } + # TO :< if cond { TO distance to??CTR > 0 } + # then { TO angleto to??CTR } + # else { CTR angleto TO + 90d } + # + # RADIUS := CTR distance FROM + # LMID :: CTR ++ RADIUS atangle { + # CTR angleto FROM + + # { {360d + {CTR angleto TO} - {CTR angleto FROM}} mod 360 } / 2 + # } + # LMID :< CTR angleto LMID + 90d + # + # XINDENT := xindent min { FROM distance LMID } + # LFROM :: CTR ++ RADIUS atangle { + # CTR angleto { FROM ++ XINDENT atangle FROM@ANGLE } } + # LFROM :< CTR angleto LFROM + 90d + # ZINDENT := zindent min { TO distance LMID } + # LTO :: CTR ++ RADIUS atangle { + # CTR angleto { TO ++ ZINDENT atangle {TO@ANGLE+180d}}} + # LTO :< CTR angleto LTO + 90d + # + # if cond { direct } + # then { FROM [CTR] TO } + # else { FROM [CTR] LFROM [CTR] LMID [CTR] LTO [CTR] TO } + } + PDF @Yield {} + } + } + + import @Geometry + def @CCurvePath + { + @BackEnd @Case { + PostScript @Yield { + {arrow @FromArrowLength arrowlength} + {arrow @ToArrowLength arrowlength} + "{" from "}" "{" to "}" + xindent zindent bias "ldiagccurvepath" + # #B1 := bias max 0.02f + # #B2 := { from??CTR distance to??CTR } * 0.5 + # #BIAS := B1 min B2 + # BIAS := bias max 0.02f + # XMID := from??CTR ** 0.5 ++ to??CTR ** 0.5 + # XTOP := XMID ++ BIAS atangle {from??CTR angleto to??CTR + 90d} + # CTR := { from??CTR XTOP ldiaglinebetween + # to??CTR XTOP ldiaglinebetween ldiaglineintersect } + # FROM :: cabout + # circum { from } + # extra { arrow @FromArrowLength arrowlength } + # centre { CTR } + # FROM :< if cond { from??CTR distance FROM > 0 } + # then { from??CTR angleto FROM } + # else { CTR angleto FROM - 90d } + # TO :: aabout + # circum { to } + # extra { arrow @ToArrowLength arrowlength } + # centre { CTR } + # TO :< if cond { TO distance to??CTR > 0 } + # then { TO angleto to??CTR } + # else { CTR angleto TO - 90d } + # + # RADIUS := CTR distance FROM + # LMID :: CTR ++ RADIUS atangle { + # CTR angleto TO + + # { {360d + {CTR angleto FROM} - {CTR angleto TO} } mod 360 } / 2 + # } + # LMID :< CTR angleto LMID - 90d + # + # XINDENT := xindent min { FROM distance LMID } + # LFROM :: CTR ++ RADIUS atangle { + # CTR angleto { FROM ++ XINDENT atangle FROM@ANGLE } } + # LFROM :< CTR angleto LFROM - 90d + # ZINDENT := zindent min { TO distance LMID } + # LTO :: CTR ++ RADIUS atangle { + # CTR angleto { TO ++ ZINDENT atangle {TO@ANGLE+180d}}} + # LTO :< CTR angleto LTO - 90d + # + # if cond { direct } + # then { FROM [CTR clockwise] TO } + # else { FROM [CTR clockwise] LFROM [CTR clockwise] + # LMID [CTR clockwise] LTO [CTR clockwise] TO } + } + PDF @Yield {} + } + } + + import @Geometry + def @BezierPath + { + @BackEnd @Case { + PostScript @Yield { + {arrow @FromArrowLength arrowlength} + {arrow @ToArrowLength arrowlength} + "{" from "}" "{" to "}" + xindent zindent [ frompt ] [ topt ] "ldiagbezierpath" + # FROM :< from??CTR angleto frompt + # FROM :: from boundaryatangle FROM@ANGLE + # ++ {arrow @FromArrowLength arrowlength} atangle FROM@ANGLE + # TO :< topt angleto to??CTR + # TO :: to boundaryatangle { TO@ANGLE + 180d } + # ++ {arrow @ToArrowLength arrowlength} atangle { TO@ANGLE + 180d } + # LFROM :: FROM ++ { xindent atangle FROM@ANGLE } + # LFROM :< FROM@ANGLE + # LTO :: TO ++ zindent atangle { TO@ANGLE + 180d } + # LTO :< TO@ANGLE + # LMID :: { FROM ++ TO ++ frompt ++ topt } ** 0.25 + # FROM [frompt topt] TO + } + PDF @Yield {} + } + } + + import @Geometry + def @VHLinePath + { + @BackEnd @Case { + PostScript @Yield { + {arrow @FromArrowLength arrowlength} + {arrow @ToArrowLength arrowlength} + "{" from "}" "{" to "}" + xindent zindent "ldiagvhlinepath" + # CTR := { {xcoord from??CTR} {ycoord to??CTR} } + # FANG := from??CTR angleto CTR + # TANG := to??CTR angleto CTR + # FROM :: from boundaryatangle FANG + # ++ {arrow @FromArrowLength arrowlength} atangle FANG + # FROM :< FANG + # TO :: to boundaryatangle TANG + # ++ {arrow @ToArrowLength arrowlength} atangle TANG + # TO :< TANG + 180d + # FDIST := FROM distance CTR + # TDIST := TO distance CTR + # XINDENT := xindent min FDIST + # ZINDENT := zindent min TDIST + # LFROM :: FROM ++ XINDENT atangle FANG + # LFROM :< FROM@ANGLE + # LTO :: TO ++ ZINDENT atangle TANG + # LTO :< TO@ANGLE + # LMID :: CTR + # LMID :< {1f atangle {FANG + 180d}} angleto + # {1f atangle {TANG + 180d}} + # FROM LFROM LMID LTO TO + } + PDF @Yield {} + } + } + + import @Geometry + def @VHCurvePath + { + @BackEnd @Case { + PostScript @Yield { + {arrow @FromArrowLength arrowlength} + {arrow @ToArrowLength arrowlength} + "{" from "}" "{" to "}" + xindent zindent radius "ldiagvhcurvepath" + # CTR := { {xcoord from??CTR} {ycoord to??CTR} } + # FANG := from??CTR angleto CTR + # TANG := to??CTR angleto CTR + # FROM :: from boundaryatangle FANG + # ++ {arrow @FromArrowLength arrowlength} atangle FANG + # FROM :< FANG + # TO :: to boundaryatangle TANG + # ++ {arrow @ToArrowLength arrowlength} atangle TANG + # TO :< TANG + 180d + # FDIST := FROM distance CTR + # TDIST := TO distance CTR + # RADIUS := radius min FDIST min TDIST + # XINDENT := xindent min { FDIST - RADIUS } + # ZINDENT := zindent min { TDIST - RADIUS } + # LFROM :: FROM ++ XINDENT atangle FANG + # LFROM :< FROM@ANGLE + # LTO :: TO ++ ZINDENT atangle TANG + # LTO :< TO@ANGLE + # FCTR := CTR ++ RADIUS atangle { FROM@ANGLE + 180d } + # TCTR := CTR ++ RADIUS atangle { TO@ANGLE } + # XCTR := CTR ++ RADIUS atangle { FROM@ANGLE + 180d } + # ++ RADIUS atangle { TO@ANGLE } + # LMID :: XCTR ++ RADIUS atangle { XCTR angleto CTR } + # LMID :< FCTR angleto TCTR + # FROM LFROM FCTR + # { FCTR angleto TCTR } quadcase + # 0 { } + # 0-90 { [XCTR clockwise] } + # 90 { } + # 90-180 { [XCTR] } + # 180 { } + # 180-270 { [XCTR clockwise] } + # 270 { } + # 270-360 { [XCTR] } + # TCTR LTO TO + } + PDF @Yield {} + } + } + + import @Geometry + def @HVLinePath + { + @BackEnd @Case { + PostScript @Yield { + {arrow @FromArrowLength arrowlength} + {arrow @ToArrowLength arrowlength} + "{" from "}" "{" to "}" + xindent zindent "ldiaghvlinepath" + # CTR := { {xcoord to??CTR} {ycoord from??CTR} } + # FANG := from??CTR angleto CTR + # TANG := to??CTR angleto CTR + # FROM :: from boundaryatangle FANG + # ++ {arrow @FromArrowLength arrowlength} atangle FANG + # FROM :< FANG + # TO :: to boundaryatangle TANG + # ++ {arrow @ToArrowLength arrowlength} atangle TANG + # TO :< TANG + 180d + # FDIST := FROM distance CTR + # TDIST := TO distance CTR + # XINDENT := xindent min FDIST + # ZINDENT := zindent min TDIST + # LFROM :: FROM ++ XINDENT atangle FANG + # LFROM :< FROM@ANGLE + # LTO :: TO ++ ZINDENT atangle TANG + # LTO :< TO@ANGLE + # LMID :: CTR + # LMID :< {1f atangle {FANG + 180d}} angleto + # {1f atangle {TANG + 180d}} + # FROM LFROM LMID LTO TO + } + PDF @Yield {} + } + } + + import @Geometry + def @HVCurvePath + { + @BackEnd @Case { + PostScript @Yield { + {arrow @FromArrowLength arrowlength} + {arrow @ToArrowLength arrowlength} + "{" from "}" "{" to "}" + xindent zindent radius "ldiaghvcurvepath" + # CTR := { {xcoord to??CTR} {ycoord from??CTR} } + # FANG := from??CTR angleto CTR + # TANG := to??CTR angleto CTR + # FROM :: from boundaryatangle FANG + # ++ {arrow @FromArrowLength arrowlength} atangle FANG + # FROM :< FANG + # TO :: to boundaryatangle TANG + # ++ {arrow @ToArrowLength arrowlength} atangle TANG + # TO :< TANG + 180d + # FDIST := FROM distance CTR + # TDIST := TO distance CTR + # RADIUS := radius min FDIST min TDIST + # XINDENT := xindent min { FDIST - RADIUS } + # ZINDENT := zindent min { TDIST - RADIUS } + # LFROM :: FROM ++ XINDENT atangle FANG + # LFROM :< FROM@ANGLE + # LTO :: TO ++ ZINDENT atangle TANG + # LTO :< TO@ANGLE + # FCTR := CTR ++ RADIUS atangle { FROM@ANGLE + 180d } + # TCTR := CTR ++ RADIUS atangle { TO@ANGLE } + # XCTR := CTR ++ RADIUS atangle { FROM@ANGLE + 180d } + # ++ RADIUS atangle { TO@ANGLE } + # LMID :: XCTR ++ RADIUS atangle { XCTR angleto CTR } + # LMID :< FCTR angleto TCTR + # FROM LFROM FCTR + # { FCTR angleto TCTR } quadcase + # 0 { } + # 0-90 { [XCTR] } + # 90 { } + # 90-180 { [XCTR clockwise] } + # 180 { } + # 180-270 { [XCTR] } + # 270 { } + # 270-360 { [XCTR clockwise] } + # TCTR LTO TO + } + PDF @Yield {} + } + } + + import @Geometry + def @LVRLinePath + { + @BackEnd @Case { + PostScript @Yield { + {arrow @FromArrowLength arrowlength} + {arrow @ToArrowLength arrowlength} + "{" from "}" "{" to "}" + xindent zindent bias "ldiaglvrlinepath" + # FROM :: from boundaryatangle 180d + # ++ {arrow @FromArrowLength arrowlength} atangle 180d + # FROM :< 180d + # TO :: to boundaryatangle 180d + # ++ {arrow @ToArrowLength arrowlength} atangle 180d + # TO :< 0d + # XLEFT := {{xcoord FROM} min {xcoord TO}} - bias + # P1 :: { XLEFT ycoord FROM } + # P2 :: { XLEFT ycoord TO } + # VERT := P1 angleto P2 + # P1 :< P1 angleto {P1++{1f atangle 180d}++{1f atangle VERT}} + # P2 :< P2 angleto {P2++{1f atangle 0d} ++{1f atangle VERT}} + # LMID :: P1 ** 0.5 ++ P2 ** 0.5 + # LMID :< VERT + # XINDENT := xindent min {FROM distance P1} + # ZINDENT := zindent min {P2 distance TO} + # LFROM :: FROM -- { XINDENT 0 } + # LFROM :< 180d + # LTO :: TO -- { ZINDENT 0 } + # LTO :< 0d + # FROM LFROM P1 LMID P2 LTO TO + } + PDF @Yield {} + } + } + + import @Geometry + def @LVRCurvePath + { + @BackEnd @Case { + PostScript @Yield { + {arrow @FromArrowLength arrowlength} + {arrow @ToArrowLength arrowlength} + "{" from "}" "{" to "}" + xindent zindent bias radius "ldiaglvrcurvepath" + # FROM :: from boundaryatangle 180d + # ++ {arrow @FromArrowLength arrowlength} atangle 180d + # FROM :< 180d + # TO :: to boundaryatangle 180d + # ++ {arrow @ToArrowLength arrowlength} atangle 180d + # TO :< 0d + # XLEFT := {{xcoord FROM} min {xcoord TO}} - bias + # XP1 := { XLEFT ycoord FROM } + # XP2 := { XLEFT ycoord TO } + # VERT := XP1 angleto XP2 + # LMID :: XP1 ** 0.5 ++ XP2 ** 0.5 + # LMID :< VERT + # XINDENT := xindent min {FROM distance XP1} + # ZINDENT := zindent min {XP2 distance TO} + # LFROM :: FROM -- { XINDENT 0 } + # LFROM :< 180d + # LTO :: TO -- { ZINDENT 0 } + # LTO :< 0d + # RADIUS := radius min { { XP1 distance XP2 } / 2 } + # XP1PRE := XP1 ++ { RADIUS atangle 0d } + # XP1POST := XP1 ++ { RADIUS atangle VERT } + # XP1CTR := XP1PRE ++ { RADIUS atangle VERT } + # P1 :: XP1CTR ++ { RADIUS atangle { XP1CTR angleto XP1 } } + # P1 :< XP1PRE angleto XP1POST + # XP2PRE := XP2 -- { RADIUS atangle VERT } + # XP2POST := XP2 ++ { RADIUS atangle 0d } + # XP2CTR := XP2PRE ++ { RADIUS atangle 0d } + # P2 :: XP2CTR ++ { RADIUS atangle { XP2CTR angleto XP2 } } + # P2 :< XP2PRE angleto XP2POST + # FROM LFROM XP1PRE + # {round VERT} quadcase + # 90 { [XP1CTR clockwise] P1 [XP1CTR clockwise] } + # 270 { [XP1CTR] P1 [XP1CTR] } + # XP1POST LMID XP2PRE + # {round VERT} quadcase + # 90 { [XP2CTR clockwise] P2 [XP2CTR clockwise] } + # 270 { [XP2CTR] P2 [XP2CTR] } + # XP2POST LTO TO + } + PDF @Yield {} + } + } + + import @Geometry + def @RVLLinePath + { + @BackEnd @Case { + PostScript @Yield { + {arrow @FromArrowLength arrowlength} + {arrow @ToArrowLength arrowlength} + "{" from "}" "{" to "}" + xindent zindent bias "ldiagrvllinepath" + # FROM :: from boundaryatangle 0d + # ++ {arrow @FromArrowLength arrowlength} atangle 0d + # FROM :< 0d + # TO :: to boundaryatangle 0d + # ++ {arrow @ToArrowLength arrowlength} atangle 0d + # TO :< 180d + # XRIGHT := {{xcoord FROM} max {xcoord TO}} + bias + # P1 :: { XRIGHT ycoord FROM } + # P2 :: { XRIGHT ycoord TO } + # VERT := P1 angleto P2 + # P1 :< P1 angleto {P1++{1f atangle 0d} ++{1f atangle VERT}} + # P2 :< P2 angleto {P2++{1f atangle 180d}++{1f atangle VERT}} + # LMID :: P1 ** 0.5 ++ P2 ** 0.5 + # LMID :< VERT + # XINDENT := xindent min {FROM distance P1} + # ZINDENT := zindent min {P2 distance TO} + # LFROM :: FROM ++ { XINDENT 0 } + # LFROM :< 0d + # LTO :: TO ++ { ZINDENT 0 } + # LTO :< 180d + # FROM LFROM P1 LMID P2 LTO TO + } + PDF @Yield {} + } + } + + import @Geometry + def @RVLCurvePath + { + @BackEnd @Case { + PostScript @Yield { + {arrow @FromArrowLength arrowlength} + {arrow @ToArrowLength arrowlength} + "{" from "}" "{" to "}" + xindent zindent bias radius "ldiagrvlcurvepath" + # FROM :: from boundaryatangle 0d + # ++ {arrow @FromArrowLength arrowlength} atangle 0d + # FROM :< 0d + # TO :: to boundaryatangle 0d + # ++ {arrow @ToArrowLength arrowlength} atangle 0d + # TO :< 180d + # XRIGHT := {{xcoord FROM} max {xcoord TO}} + bias + # XP1 := { XRIGHT ycoord FROM } + # XP2 := { XRIGHT ycoord TO } + # VERT := XP1 angleto XP2 + # LMID :: XP1 ** 0.5 ++ XP2 ** 0.5 + # LMID :< VERT + # XINDENT := xindent min {FROM distance XP1} + # ZINDENT := zindent min {XP2 distance TO} + # LFROM :: FROM ++ { XINDENT 0 } + # LFROM :< 0d + # LTO :: TO ++ { ZINDENT 0 } + # LTO :< 180d + # RADIUS := radius min { { XP1 distance XP2 } * 0.5 } + # XP1PRE := XP1 ++ { RADIUS atangle 180d } + # XP1POST := XP1 ++ { RADIUS atangle VERT } + # XP1CTR := XP1PRE ++ { RADIUS atangle VERT } + # P1 :: XP1CTR ++ { RADIUS atangle { XP1CTR angleto XP1 } } + # P1 :< XP1PRE angleto XP1POST + # XP2PRE := XP2 -- { RADIUS atangle VERT } + # XP2POST := XP2 ++ { RADIUS atangle 180d } + # XP2CTR := XP2PRE ++ { RADIUS atangle 180d } + # P2 :: XP2CTR ++ { RADIUS atangle { XP2CTR angleto XP2 } } + # P2 :< XP2PRE angleto XP2POST + # FROM LFROM XP1PRE + # {round VERT} quadcase + # 90 { [XP1CTR] P1 [XP1CTR] } + # 270 { [XP1CTR clockwise] P1 [XP1CTR clockwise] } + # XP1POST LMID XP2PRE + # {round VERT} quadcase + # 90 { [XP2CTR] P2 [XP2CTR] } + # 270 { [XP2CTR clockwise] P2 [XP2CTR clockwise] } + # XP2POST LTO TO + } + PDF @Yield {} + } + } + + import @Geometry + def @DWrapLinePath + { + @BackEnd @Case { + PostScript @Yield { + {arrow @FromArrowLength arrowlength} + {arrow @ToArrowLength arrowlength} + "{" from "}" "{" to "}" + xindent zindent bias fbias tbias "ldiagdwraplinepath" + # DIRN := if cond { xcoord from??CTR < xcoord to??CTR } + # then { 180d } else { 0d } + # FROM :: from boundaryatangle DIRN + # ++ {arrow @FromArrowLength arrowlength} atangle DIRN + # FROM :< DIRN + # TO :: to boundaryatangle { DIRN + 180d } + # ++ {arrow @ToArrowLength arrowlength} atangle { DIRN + 180d } + # TO :< DIRN + # P1 :: FROM ++ {fbias max 0} atangle DIRN + # P1 :< if cond { DIRN = 180d } then { 225d } else { -45d } + # P4 :: TO ++ {tbias max 0} atangle { DIRN + 180d } + # P4 :< if cond { DIRN = 180d } then { 135d } else { 45d } + # YC := ycoord { from boundaryatangle 270d } min + # ycoord { to boundaryatangle 270d } + # - { bias max 0 } + # P2 :: { xcoord P1 YC } + # P2 :< P4@ANGLE - 180d + # P3 :: { xcoord P4 YC } + # P3 :< P1@ANGLE - 180d + # XINDENT := xindent min { FROM distance P1 } + # LFROM :: FROM ++ XINDENT atangle DIRN + # LFROM :< FROM@ANGLE + # ZINDENT := zindent min { TO distance P4 } + # LTO :: TO ++ ZINDENT atangle { DIRN + 180d } + # LTO :< TO@ANGLE + # LMID :: P2 ** 0.5 ++ P3 ** 0.5 + # LMID :< DIRN - 180d + # FROM P1 P2 P3 P4 TO + } + PDF @Yield {} + } + } + + import @Geometry + def @DWrapCurvePath + { + @BackEnd @Case { + PostScript @Yield { + {arrow @FromArrowLength arrowlength} + {arrow @ToArrowLength arrowlength} + "{" from "}" "{" to "}" + xindent zindent bias fbias tbias radius "ldiagdwrapcurvepath" + # DIRN := if cond { xcoord from??CTR < xcoord to??CTR } + # then { 180d } else { 0d } + # CLOCK := if cond { xcoord from??CTR < xcoord to??CTR } + # then { anticlockwise } else { clockwise } + # FROM :: from boundaryatangle DIRN + # ++ {arrow @FromArrowLength arrowlength} atangle DIRN + # FROM :< DIRN + # TO :: to boundaryatangle { DIRN + 180d } + # ++ {arrow @ToArrowLength arrowlength} atangle { DIRN + 180d } + # TO :< DIRN + # + # XP1 := FROM ++ {fbias max 0} atangle DIRN + # XP4 := TO ++ {tbias max 0} atangle { DIRN + 180d } + # YC := ycoord { from boundaryatangle 270d } min + # ycoord { to boundaryatangle 270d } + # - { bias max 0 } + # XP2 := { xcoord XP1 YC } + # XP3 := { xcoord XP4 YC } + # + # RP1 := radius min { XP1 distance FROM } min + # { { XP1 distance XP2 } / 2 } + # XP1PRE := XP1 ++ RP1 atangle { XP1 angleto FROM } + # XP1POST := XP1 ++ RP1 atangle { XP1 angleto XP2 } + # XP1CTR := XP1PRE ++ RP1 atangle { XP1 angleto XP2 } + # P1 :: XP1CTR ++ RP1 atangle { XP1CTR angleto XP1 } + # P1 :< XP1CTR angleto P1 + DIRN - 90d + # + # RP2 := radius min { { XP1 distance XP2 } / 2 } + # min { { XP2 distance XP3 } / 2 } + # XP2PRE := XP2 ++ RP2 atangle { XP2 angleto XP1 } + # XP2POST := XP2 ++ RP2 atangle { XP2 angleto XP3 } + # XP2CTR := XP2PRE ++ RP2 atangle { XP2 angleto XP3 } + # P2 :: XP2CTR ++ RP2 atangle { XP2CTR angleto XP2 } + # P2 :< XP2CTR angleto P2 + DIRN - 90d + # + # RP3 := radius min { { XP2 distance XP3 } / 2 } + # min { { XP3 distance XP4 } / 2 } + # XP3PRE := XP3 ++ RP3 atangle { XP3 angleto XP2 } + # XP3POST := XP3 ++ RP3 atangle { XP3 angleto XP4 } + # XP3CTR := XP3PRE ++ RP3 atangle { XP3 angleto XP4 } + # P3 :: XP3CTR ++ RP3 atangle { XP3CTR angleto XP3 } + # P3 :< XP3CTR angleto P3 + DIRN - 90d + # + # RP4 := radius min { { XP4 distance XP3 } / 2 } + # min { XP4 distance TO } + # XP4PRE := XP4 ++ RP4 atangle { XP4 angleto XP3 } + # XP4POST := XP4 ++ RP4 atangle { XP4 angleto TO } + # XP4CTR := XP4PRE ++ RP4 atangle { XP4 angleto TO } + # P4 :: XP4CTR ++ RP4 atangle { XP4CTR angleto XP4 } + # P4 :< XP4CTR angleto P4 + DIRN - 90d + # + # XINDENT := xindent min { FROM distance XP1PRE } + # LFROM :: FROM ++ XINDENT atangle DIRN + # LFROM :< FROM@ANGLE + # + # LMID :: XP2 ** 0.5 ++ XP3 ** 0.5 + # LMID :< DIRN - 180d + # + # ZINDENT := zindent min { TO distance XP4POST } + # LTO :: TO ++ ZINDENT atangle { DIRN + 180d } + # LTO :< TO@ANGLE + # + # FROM LFROM + # XP1PRE [XP1CTR CLOCK] XP1POST + # XP2PRE [XP2CTR CLOCK] XP2POST + # LMID + # XP3PRE [XP3CTR CLOCK] XP3POST + # XP4PRE [XP4CTR CLOCK] XP4POST + # LTO TO + } + PDF @Yield {} + } + } + + import @Geometry + def @UWrapLinePath + { + @BackEnd @Case { + PostScript @Yield { + {arrow @FromArrowLength arrowlength} + {arrow @ToArrowLength arrowlength} + "{" from "}" "{" to "}" + xindent zindent bias fbias tbias "ldiaguwraplinepath" + # DIRN := if cond { xcoord from??CTR < xcoord to??CTR } + # then { 180d } else { 0d } + # FROM :: from boundaryatangle DIRN + # ++ {arrow @FromArrowLength arrowlength} atangle DIRN + # FROM :< DIRN + # TO :: to boundaryatangle { DIRN + 180d } + # ++ {arrow @ToArrowLength arrowlength} atangle { DIRN + 180d } + # TO :< DIRN + # P1 :: FROM ++ {fbias max 0} atangle DIRN + # P1 :< if cond { DIRN = 180d } then { 135d } else { 45d } + # P4 :: TO ++ {tbias max 0} atangle { DIRN + 180d } + # P4 :< if cond { DIRN = 180d } then { 225d } else { -45d } + # YC := ycoord { from boundaryatangle 90d } max + # ycoord { to boundaryatangle 90d } + # + { bias max 0 } + # P2 :: { xcoord P1 YC } + # P2 :< P4@ANGLE - 180d + # P3 :: { xcoord P4 YC } + # P3 :< P1@ANGLE - 180d + # XINDENT := xindent min { FROM distance P1 } + # LFROM :: FROM ++ XINDENT atangle DIRN + # LFROM :< FROM@ANGLE + # ZINDENT := zindent min { TO distance P4 } + # LTO :: TO ++ ZINDENT atangle { DIRN + 180d } + # LTO :< TO@ANGLE + # LMID :: P2 ** 0.5 ++ P3 ** 0.5 + # LMID :< DIRN - 180d + # FROM P1 P2 P3 P4 TO + } + PDF @Yield {} + } + } + + import @Geometry + def @UWrapCurvePath + { + @BackEnd @Case { + PostScript @Yield { + {arrow @FromArrowLength arrowlength} + {arrow @ToArrowLength arrowlength} + "{" from "}" "{" to "}" + xindent zindent bias fbias tbias radius "ldiaguwrapcurvepath" + # DIRN := if cond { xcoord from??CTR < xcoord to??CTR } + # then { 180d } else { 0d } + # CLOCK := if cond { xcoord from??CTR < xcoord to??CTR } + # then { clockwise } else { anticlockwise } + # FROM :: from boundaryatangle DIRN + # ++ {arrow @FromArrowLength arrowlength} atangle DIRN + # FROM :< DIRN + # TO :: to boundaryatangle { DIRN + 180d } + # ++ {arrow @ToArrowLength arrowlength} atangle { DIRN + 180d } + # TO :< DIRN + # + # XP1 := FROM ++ {fbias max 0} atangle DIRN + # XP4 := TO ++ {tbias max 0} atangle { DIRN + 180d } + # YC := ycoord { from boundaryatangle 90d } max + # ycoord { to boundaryatangle 90d } + # + { bias max 0 } + # XP2 := { xcoord XP1 YC } + # XP3 := { xcoord XP4 YC } + # + # RP1 := radius min { XP1 distance FROM } min + # { { XP1 distance XP2 } / 2 } + # XP1PRE := XP1 ++ RP1 atangle { XP1 angleto FROM } + # XP1POST := XP1 ++ RP1 atangle { XP1 angleto XP2 } + # XP1CTR := XP1PRE ++ RP1 atangle { XP1 angleto XP2 } + # P1 :: XP1CTR ++ RP1 atangle { XP1CTR angleto XP1 } + # P1 :< XP1CTR angleto P1 + DIRN + 90d + # + # RP2 := radius min { { XP1 distance XP2 } / 2 } + # min { { XP2 distance XP3 } / 2 } + # XP2PRE := XP2 ++ RP2 atangle { XP2 angleto XP1 } + # XP2POST := XP2 ++ RP2 atangle { XP2 angleto XP3 } + # XP2CTR := XP2PRE ++ RP2 atangle { XP2 angleto XP3 } + # P2 :: XP2CTR ++ RP2 atangle { XP2CTR angleto XP2 } + # P2 :< XP2CTR angleto P2 + DIRN + 90d + # + # RP3 := radius min { { XP2 distance XP3 } / 2 } + # min { { XP3 distance XP4 } / 2 } + # XP3PRE := XP3 ++ RP3 atangle { XP3 angleto XP2 } + # XP3POST := XP3 ++ RP3 atangle { XP3 angleto XP4 } + # XP3CTR := XP3PRE ++ RP3 atangle { XP3 angleto XP4 } + # P3 :: XP3CTR ++ RP3 atangle { XP3CTR angleto XP3 } + # P3 :< XP3CTR angleto P3 + DIRN + 90d + # + # RP4 := radius min { { XP4 distance XP3 } / 2 } + # min { XP4 distance TO } + # XP4PRE := XP4 ++ RP4 atangle { XP4 angleto XP3 } + # XP4POST := XP4 ++ RP4 atangle { XP4 angleto TO } + # XP4CTR := XP4PRE ++ RP4 atangle { XP4 angleto TO } + # P4 :: XP4CTR ++ RP4 atangle { XP4CTR angleto XP4 } + # P4 :< XP4CTR angleto P4 + DIRN + 90d + # + # XINDENT := xindent min { FROM distance XP1PRE } + # LFROM :: FROM ++ XINDENT atangle DIRN + # LFROM :< FROM@ANGLE + # + # LMID :: XP2 ** 0.5 ++ XP3 ** 0.5 + # LMID :< DIRN - 180d + # + # ZINDENT := zindent min { TO distance XP4POST } + # LTO :: TO ++ ZINDENT atangle { DIRN + 180d } + # LTO :< TO@ANGLE + # + # FROM LFROM + # XP1PRE [XP1CTR CLOCK] XP1POST + # XP2PRE [XP2CTR CLOCK] XP2POST + # LMID + # XP3PRE [XP3CTR CLOCK] XP3POST + # XP4PRE [XP4CTR CLOCK] XP4POST + # LTO TO + } + PDF @Yield {} + } + } + + import @Geometry + def @Path + { + path @Case { + line @Yield @LinePath + doubleline @Yield @DoubleLinePath + { acurve curve } @Yield @ACurvePath + ccurve @Yield @CCurvePath + bezier @Yield @BezierPath + vhline @Yield @VHLinePath + vhcurve @Yield @VHCurvePath + hvline @Yield @HVLinePath + hvcurve @Yield @HVCurvePath + lvrline @Yield @LVRLinePath + lvrcurve @Yield @LVRCurvePath + rvlline @Yield @RVLLinePath + rvlcurve @Yield @RVLCurvePath + dwrapline @Yield @DWrapLinePath + dwrapcurve @Yield @DWrapCurvePath + uwrapline @Yield @UWrapLinePath + uwrapcurve @Yield @UWrapCurvePath + else @Yield { + path + from { from } + to { to } + bias { bias } + fbias { fbias } + tbias { tbias } + radius { radius } + xindent { xindent } + zindent { zindent } + frompt { frompt } + topt { topt } + arrow { arrow } + arrowlength { arrowlength } + } + } + } + + def @FromLabel + { + @DoLabel + which { "f" } + label { fromlabel @Else @FromArrow } + labelmargin { fromlabelmargin } + labelfont { fromlabelfont } + labelbreak { fromlabelbreak } + labelformat { fromlabelformat @Body } + labelpos { fromlabelpos } + labelprox { fromlabelprox } + labelangle { fromlabelangle } + labelctr { fromlabelctr } + labeladjust { fromlabeladjust } + } + + def @ToLabel + { + @DoLabel + which { "t" } + label { tolabel @Else @ToArrow } + labelmargin { tolabelmargin } + labelfont { tolabelfont } + labelbreak { tolabelbreak } + labelformat { tolabelformat @Body } + labelpos { tolabelpos } + labelprox { tolabelprox } + labelangle { tolabelangle } + labelctr { tolabelctr } + labeladjust { tolabeladjust } + } + + def @Direct + { + pathstyle @Case { + { "/ldiagsolid" "/ldiagdashed" "/ldiagcdashed" + "/ldiagdotted" "/ldiagnoline" } @Yield 1 + else @Yield 0 + } + } + + @BackEnd @Case { + PostScript @Yield { + + @Null & # so that preceding space gets chewed up + { + @Direct "ldiaglinkbegin [" @Path "]" pathdashlength + "[" pathstyle "]" pathwidth "ldiaglinkend" + } + @Graphic + { + / { fromlabel @Else @FromArrow} @IfNonEmpty @FromLabel + / { xlabel @Else linklabel } @IfNonEmpty @XLabel + / { ylabel @Else linklabel } @IfNonEmpty @YLabel + / { zlabel @Else linklabel } @IfNonEmpty @ZLabel + / { tolabel @Else @ToArrow } @IfNonEmpty @ToLabel + } + + } + PDF @Yield {} + } + } + + + def @ObjectLink + precedence 90 + associativity left + left x + named treehsep { treehsep } + named treevsep { treevsep } + named format + named x {} + named y {} + named insinuatelink {} + named treehsep {} + named treevsep {} + { x | y | insinuatelink } + import @Geometry named path + named from {} + named to {} + named bias {} + named fbias {} + named tbias {} + named radius {} + named xindent {} + named zindent {} + named frompt {} + named topt {} + named arrow {} + named arrowlength {} + { path + from { from } + to { to } + bias { bias } + fbias { fbias } + tbias { tbias } + radius { radius } + xindent { xindent } + zindent { zindent } + frompt { frompt } + topt { topt } + arrow { arrow } + arrowlength { arrowlength } + } + import @Geometry named basefrom { } + import @Geometry named baseto { } + import @Geometry named from { } + import @Geometry named to { } + import @Geometry named bias { bias } + import @Geometry named fbias { fbias } + import @Geometry named tbias { tbias } + import @Geometry named radius { radius } + import @Geometry named xindent { xindent } + import @Geometry named zindent { zindent } + import @Geometry named frompt { frompt } + import @Geometry named topt { topt } + named pathstyle + named solid { "/ldiagsolid" } + named dashed { "/ldiagdashed" } + named cdashed { "/ldiagcdashed" } + named dotted { "/ldiagdotted" } + named noline { "/ldiagnoline" } + { pathstyle } + import @Geometry named pathdashlength { pathdashlength } + import @Geometry named pathwidth + named thin { 0.04 ft } + named medium { 0.08 ft } + named thick { 0.12 ft } + { pathwidth } + import @Geometry named pathgap + named thin { 0.08 ft } + named medium { 0.16 ft } + named thick { 0.24 ft } + { pathgap } + + named arrow { arrow } + named arrowstyle { arrowstyle } + named arrowwidth { arrowwidth } + named arrowlength { arrowlength } + + named linklabel { linklabel } + named linklabelmargin { linklabelmargin } + named linklabelfont { linklabelfont } + named linklabelbreak { linklabelbreak } + named linklabelformat right @Body { linklabelformat @Body } + import @Geometry named linklabelpos { linklabelpos } + named linklabelprox { linklabelprox } + import @Geometry named linklabelangle { linklabelangle } + named linklabelctr { linklabelctr } + import @Geometry named linklabeladjust { linklabeladjust } + + named xlabel { xlabel } + named xlabelmargin { xlabelmargin } + named xlabelfont { xlabelfont } + named xlabelbreak { xlabelbreak } + named xlabelformat right @Body { xlabelformat @Body } + import @Geometry named xlabelpos { xlabelpos } + named xlabelprox { xlabelprox } + import @Geometry named xlabelangle { xlabelangle } + named xlabelctr { xlabelctr } + import @Geometry named xlabeladjust { xlabeladjust } + + named ylabel { ylabel } + named ylabelmargin { ylabelmargin } + named ylabelfont { ylabelfont } + named ylabelbreak { ylabelbreak } + named ylabelformat right @Body { ylabelformat @Body } + import @Geometry named ylabelpos { ylabelpos } + named ylabelprox { ylabelprox } + import @Geometry named ylabelangle { ylabelangle } + named ylabelctr { ylabelctr } + import @Geometry named ylabeladjust { ylabeladjust } + + named zlabel { zlabel } + named zlabelmargin { zlabelmargin } + named zlabelfont { zlabelfont } + named zlabelbreak { zlabelbreak } + named zlabelformat right @Body { zlabelformat @Body } + import @Geometry named zlabelpos { zlabelpos } + named zlabelprox { zlabelprox } + import @Geometry named zlabelangle { zlabelangle } + named zlabelctr { zlabelctr } + import @Geometry named zlabeladjust { zlabeladjust } + + named fromlabel { fromlabel } + named fromlabelmargin { fromlabelmargin } + named fromlabelfont { fromlabelfont } + named fromlabelbreak { fromlabelbreak } + named fromlabelformat right @Body { fromlabelformat @Body } + import @Geometry named fromlabelpos { fromlabelpos } + named fromlabelprox { fromlabelprox } + import @Geometry named fromlabelangle { fromlabelangle } + named fromlabelctr { fromlabelctr } + import @Geometry named fromlabeladjust { fromlabeladjust } + + named tolabel { tolabel } + named tolabelmargin { tolabelmargin } + named tolabelfont { tolabelfont } + named tolabelbreak { tolabelbreak } + named tolabelformat right @Body { tolabelformat @Body } + import @Geometry named tolabelpos { tolabelpos } + named tolabelprox { tolabelprox } + import @Geometry named tolabelangle { tolabelangle } + named tolabelctr { tolabelctr } + import @Geometry named tolabeladjust{ tolabeladjust } + right y + + { + def @From + { + from @Case { + "" @Yield basefrom + else @Yield { basefrom"@"from } + } + } + + def @To + { + to @Case { + "" @Yield baseto + else @Yield { baseto"@"to } + } + } + + format + x { x } + y { y } + treehsep { treehsep } + treevsep { treevsep } + insinuatelink { + @Link + from { @From } + to { @To } + bias { bias } + fbias { fbias } + tbias { tbias } + radius { radius } + xindent { xindent } + zindent { zindent } + frompt { frompt } + topt { topt } + path { path + from { @From } + to { @To } + bias { bias } + fbias { fbias } + tbias { tbias } + radius { radius } + xindent { xindent } + zindent { zindent } + frompt { frompt } + topt { topt } + arrow { arrow } + arrowlength { arrowlength } + } + pathstyle { pathstyle } + pathdashlength { pathdashlength } + pathwidth { pathwidth } + pathgap { pathgap } + arrow { arrow } + arrowstyle { arrowstyle } + arrowwidth { arrowwidth } + arrowlength { arrowlength } + + linklabel { linklabel } + linklabelmargin { linklabelmargin } + linklabelfont { linklabelfont } + linklabelbreak { linklabelbreak } + linklabelformat { linklabelformat @Body } + linklabelpos { linklabelpos } + linklabelprox { linklabelprox } + linklabelangle { linklabelangle } + linklabelctr { linklabelctr } + linklabeladjust { linklabeladjust } + + xlabel { xlabel } + xlabelmargin { xlabelmargin } + xlabelfont { xlabelfont } + xlabelbreak { xlabelbreak } + xlabelformat { xlabelformat @Body } + xlabelpos { xlabelpos } + xlabelprox { xlabelprox } + xlabelangle { xlabelangle } + xlabelctr { xlabelctr } + xlabeladjust { xlabeladjust } + + ylabel { ylabel } + ylabelmargin { ylabelmargin } + ylabelfont { ylabelfont } + ylabelbreak { ylabelbreak } + ylabelformat { ylabelformat @Body } + ylabelpos { ylabelpos } + ylabelprox { ylabelprox } + ylabelangle { ylabelangle } + ylabelctr { ylabelctr } + ylabeladjust { ylabeladjust } + + zlabel { zlabel } + zlabelmargin { zlabelmargin } + zlabelfont { zlabelfont } + zlabelbreak { zlabelbreak } + zlabelformat { zlabelformat @Body } + zlabelpos { zlabelpos } + zlabelprox { zlabelprox } + zlabelangle { zlabelangle } + zlabelctr { zlabelctr } + zlabeladjust { zlabeladjust } + + fromlabel { fromlabel } + fromlabelmargin { fromlabelmargin } + fromlabelfont { fromlabelfont } + fromlabelbreak { fromlabelbreak } + fromlabelformat { fromlabelformat @Body } + fromlabelpos { fromlabelpos } + fromlabelprox { fromlabelprox } + fromlabelangle { fromlabelangle } + fromlabelctr { fromlabelctr } + fromlabeladjust { fromlabeladjust } + + tolabel { tolabel } + tolabelmargin { tolabelmargin } + tolabelfont { tolabelfont } + tolabelbreak { tolabelbreak } + tolabelformat { tolabelformat @Body } + tolabelpos { tolabelpos } + tolabelprox { tolabelprox } + tolabelangle { tolabelangle } + tolabelctr { tolabelctr } + tolabeladjust { tolabeladjust } + } + } + + macro @Line { @Link path { line } } + macro @DoubleLine { @Link path { doubleline } } + macro @Arrow { @Link path { line } arrow { yes } } + macro @DoubleArrow { @Link path {doubleline} arrow { yes } } + macro @Curve { @Link path { curve } } + macro @CurveArrow { @Link path { curve } arrow { yes } } + macro @ACurve { @Link path { acurve } } + macro @ACurveArrow { @Link path { acurve } arrow { yes } } + macro @CCurve { @Link path { ccurve } } + macro @CCurveArrow { @Link path { ccurve } arrow { yes } } + + macro @Bezier { @Link path { bezier } } + macro @BezierArrow { @Link path { bezier } arrow { yes } } + + macro @HVLine { @Link path { hvline } } + macro @HVArrow { @Link path { hvline } arrow { yes } } + macro @VHLine { @Link path { vhline } } + macro @VHArrow { @Link path { vhline } arrow { yes } } + macro @HVCurve { @Link path { hvcurve } } + macro @HVCurveArrow { @Link path { hvcurve } arrow { yes } } + macro @VHCurve { @Link path { vhcurve } } + macro @VHCurveArrow { @Link path { vhcurve } arrow { yes } } + + macro @LVRLine { @Link path { lvrline } } + macro @LVRArrow { @Link path { lvrline } arrow { yes } } + macro @RVLLine { @Link path { rvlline } } + macro @RVLArrow { @Link path { rvlline } arrow { yes } } + macro @LVRCurve { @Link path { lvrcurve } } + macro @LVRCurveArrow { @Link path { lvrcurve } arrow { yes } } + macro @RVLCurve { @Link path { rvlcurve } } + macro @RVLCurveArrow { @Link path { rvlcurve } arrow { yes } } + + macro @DWrapLine { @Link path { dwrapline} } + macro @DWrapArrow { @Link path { dwrapline} arrow { yes } } + macro @UWrapLine { @Link path { uwrapline} } + macro @UWrapArrow { @Link path { uwrapline} arrow { yes } } + macro @DWrapCurve { @Link path {dwrapcurve} } + macro @DWrapCurveArrow { @Link path {dwrapcurve} arrow { yes } } + macro @UWrapCurve { @Link path {uwrapcurve} } + macro @UWrapCurveArrow { @Link path {uwrapcurve} arrow { yes } } + + export + + @Node @Box @CurveBox @ShadowBox @Square @Diamond + @Polygon @Isosceles @Ellipse @Circle + @LeftSub @ZeroWidthLeftSub @RightSub @ZeroWidthRightSub + @FirstSub @NextSub @StubSub + + def @Tree + named treehindent + named left { 0.0rt } + named ctr { 0.5rt } + named right { 1.0rt } + { treehindent } + body x + { + + macro @TNode { @@Node nodetag { T } } + macro @Node { @TNode } + macro @Box { @TNode outline { box } } + macro @CurveBox { @TNode outline { curvebox } } + macro @ShadowBox { @TNode outline { shadowbox } } + macro @Square { @TNode outline { square } } + macro @Diamond { @TNode outline { diamond } } + macro @Polygon { @TNode outline { polygon } } + macro @Isosceles { @TNode outline { isosceles } } + macro @Ellipse { @TNode outline { ellipse } } + macro @Circle { @TNode outline { circle } } + + def fixroot + precedence 90 + left root + { + |treehindent root + } + + macro @LeftSub + { + @ObjectLink + basefrom { T } + baseto { L@T } + format { { /treevsep {L::y} } |treehsep x | insinuatelink } + } + + macro @ZeroWidthLeftSub + { + @ObjectLink + basefrom { T } + baseto { L@T } + format { { /treevsep @ZeroWidth { {L::y} ^|treehsep } } | + x | insinuatelink } + } + + macro @FirstSub + { + fixroot // + @ObjectLink + basefrom { T } + baseto { S@T } + format { //treevsep {S::y} | insinuatelink | } + } + + macro @NextSub + { + @ObjectLink + basefrom { T } + baseto { S@T } + format { x |treehsep { / {S::y} | insinuatelink | } } + } + + macro @RightSub + { + @ObjectLink + basefrom { T } + baseto { R@T } + format { x |treehsep { /treevsep {R::y} } | insinuatelink } + } + + macro @ZeroWidthRightSub + { + @ObjectLink + basefrom { T } + baseto { R@T } + format { x | { /treevsep @ZeroWidth { |treehsep {R::y} } } + | insinuatelink } + } + + macro @StubSub + { + @ObjectLink + basefrom { T } + baseto { T } + format { @VContract { |0.5rt x | // |0.5rt + S:: @BoxLabels @CatchTags y | } | insinuatelink } + # path { from S@T@SW S@T@SE to } + path { + P1:: S@SW + P2:: S@SE + FROM:: from boundaryatangle { from??CTR angleto P1 } + TO:: to boundaryatangle { to??CTR angleto P2 } + FROM P1 P2 TO + } + } + + @HContract @VContract x + } + + export + + @Node @Box @CurveBox @ShadowBox @Square @Diamond + @Polygon @Isosceles @Ellipse @Circle + @LeftSub @ZeroWidthLeftSub @RightSub @ZeroWidthRightSub + @FirstSub @NextSub @StubSub + + def @HTree + named treevindent + named top { 0.0rt } + named ctr { 0.5rt } + named foot { 1.0rt } + { treevindent } + body x + { + + macro @TNode { @@Node nodetag { T } } + macro @Node { @TNode } + macro @Box { @TNode outline { box } } + macro @CurveBox { @TNode outline { curvebox } } + macro @ShadowBox { @TNode outline { shadowbox } } + macro @Square { @TNode outline { square } } + macro @Diamond { @TNode outline { diamond } } + macro @Polygon { @TNode outline { polygon } } + macro @Isosceles { @TNode outline { isosceles } } + macro @Ellipse { @TNode outline { ellipse } } + macro @Circle { @TNode outline { circle } } + + def fixroot + precedence 90 + left root + { + /treevindent root + } + + macro @LeftSub + { + @ObjectLink + basefrom { T } + baseto { L@T } + format { { |treehsep {L::y} } /treevsep x / insinuatelink } + } + + macro @ZeroWidthLeftSub + { + @ObjectLink + basefrom { T } + baseto { L@T } + format { { |treehsep @ZeroWidth { {L::y} ^/treevsep } } / + x / insinuatelink } + } + + macro @FirstSub + { + fixroot || + @ObjectLink + basefrom { T } + baseto { S@T } + format { ||treehsep { {S::y} / insinuatelink / } } + } + + macro @NextSub + { + @ObjectLink + basefrom { T } + baseto { S@T } + format { x /treevsep { | {S::y} { / insinuatelink / } } } + } + + macro @RightSub + { + @ObjectLink + basefrom { T } + baseto { R@T } + format { x /treevsep { |treehsep {R::y} } / insinuatelink } + } + + macro @ZeroWidthRightSub + { + @ObjectLink + basefrom { T } + baseto { R@T } + format { x / { |treehsep @ZeroWidth { /treevsep {R::y} } } + / insinuatelink } + } + + macro @StubSub + { + @ObjectLink + basefrom { T } + baseto { T } + format { @VContract { { /0.5rt x / } || { /0.5rt + S:: @BoxLabels @CatchTags y / } } / insinuatelink } + # path { from S@T@SW S@T@SE to } + path { + P1:: S@NE + P2:: S@SE + FROM:: from boundaryatangle { from??CTR angleto P1 } + TO:: to boundaryatangle { to??CTR angleto P2 } + FROM P1 P2 TO + } + } + + @HContract @VContract x + } + + @BackEnd @Case { + PostScript @Yield { + { + save @Case { { yes Yes } @Yield "grestore save gsave" else @Yield {} } + maxlabels "ldiagbegin" + // + "ldiagend" + save @Case { { yes Yes } @Yield "restore" else @Yield {} } + } @Graphic @Body + } + PDF @Yield {} + } + + @End @Diag +} diff --git a/include/diagf.etc b/include/diagf.etc new file mode 100644 index 0000000..c92a145 --- /dev/null +++ b/include/diagf.etc @@ -0,0 +1,627 @@ + +############################################################################### +# # +# Lout @Geometry package for algebra and geometry in PostScript # +# Version 1.0 (June 1996) # +# Jeffrey H. Kingston # +# # +############################################################################### + +export + + i c p m s v f d "-0" "-1" "-2" "-3" "-4" "-5" "-6" "-7" "-8" "-9" "-." + pi e sqrt abs ceiling floor truncate round cos sin atan + exp log rand max min "*" "/" idiv mod "+" "-" + xcoord ycoord distance angleto ":=" ":==" "::" ":<" prev "??" "?!?" + boundaryatangle atangle + "**" "++" "--" anglefix anydebug "," + "=" "!=" "==" "!==" "<" "<=" ">" ">=" not and xor or + if quadcase signcase xloop yloop zloop + cabout aabout + +def @Geometry +{ + def i + precedence 100 + left x + { + x "in" + } + + def c + precedence 100 + left x + { + x "cm" + } + + def p + precedence 100 + left x + { + x "pt" + } + + def m + precedence 100 + left x + { + x "em" + } + + def s + precedence 100 + left x + { + x "sp" + } + + def v + precedence 100 + left x + { + x "vs" + } + + def f + precedence 100 + left x + { + x "ft" + } + + def d + precedence 100 + left x + { + x "dg" + } + + def pi + { + "ldiagpi" + } + + def e + { + "ldiage" + } + + def sqrt + precedence 99 + right y + { + y "sqrt" + } + + def abs + precedence 99 + right y + { + y "abs" + } + + def anglefix + precedence 99 + right y + { + y "ldiagfixangle" + } + + def ceiling + precedence 99 + right y + { + y "ceiling" + } + + def floor + precedence 99 + right y + { + y "floor" + } + + def truncate + precedence 99 + right y + { + y "truncate" + } + + def round + precedence 99 + right y + { + y "round" + } + + def cos + precedence 99 + right y + { + y "cos" + } + + def sin + precedence 99 + right y + { + y "sin" + } + + def xcoord + precedence 99 + right y + { + y "pop" + } + + def ycoord + precedence 99 + right y + { + y "exch pop" + } + + def distance + precedence 98 + left x + right y + { + x y "ldiagdistance" + } + + def angleto + precedence 98 + left x + right y + { + x y "ldiagangleto" + } + + def atan + precedence 98 + left x + right y + { + x y "atan" + } + + def exp + precedence 98 + left x + right y + { + x y "exp" + } + + def log + precedence 98 + left x + right y + { + x y "ldiaglog" + } + + def rand + precedence 98 + left x + right y + { + x y "dorand" + } + + def max + precedence 98 + left x + right y + { + x y "ldiagmax" + } + + def min + precedence 98 + left x + right y + { + x y "ldiagmin" + } + + def "*" + precedence 97 + left x + right y + { + x y "mul" + } + + def "/" + precedence 96 + associativity left + left x + right y + { + x y "div" + } + + def idiv + precedence 96 + associativity left + left x + right y + { + x y "idiv" + } + + def mod + precedence 96 + left x + right y + { + x "cvi" y "cvi mod" + } + + def "+" + precedence 95 + associativity left + left x + right y + { + x @Case { + "" @Yield y + else @Yield { x y "add" } + } + } + + def "-" + precedence 95 + associativity left + left x + right y + { + x @Case { + "" @Yield { y "neg" } + else @Yield { x y "sub" } + } + } + + def "-0" { "-0" } + def "-1" { "-1" } + def "-2" { "-2" } + def "-3" { "-3" } + def "-4" { "-4" } + def "-5" { "-5" } + def "-6" { "-6" } + def "-7" { "-7" } + def "-8" { "-8" } + def "-9" { "-9" } + def "-." { "-." } + + def prev + { + "ldiagprevious" + } + + def "??" + precedence 99 + left x + right y + { + "{" x "} ("y") ldiagdolabel" + } + + def "?!?" + precedence 99 + left x + right y + { + "{" x "} "y" ldiagdolabel" + } + + def boundaryatangle + precedence 89 + left x + right y + { + x??"CTR" y x??"CIRCUM" "ldiagpadd" + } + + def atangle + precedence 89 + left x + right y + { + 0 0 x y "ldiagatangle" + } + + def "**" + precedence 88 + left x + right y + { + x y "ldiagpmul" + } + + def "++" + precedence 87 + associativity left + left x + right y + { + x y "ldiagpadd" + } + + def "--" + precedence 87 + associativity left + left x + right y + { + y x "ldiagpsub" + } + + def "=" + precedence 79 + left x + right y + { + x y "eq" + } + + def "!=" + precedence 79 + left x + right y + { + x y "ne" + } + + def "==" + precedence 79 + left x + right y + { + x y "ldiagangleeq" + } + + def "!==" + precedence 79 + left x + right y + { + x y "ldiaganglene" + } + + def "<" + precedence 79 + left x + right y + { + x y "lt" + } + + def "<=" + precedence 79 + left x + right y + { + x y "le" + } + + def ">" + precedence 79 + left x + right y + { + x y "gt" + } + + def ">=" + precedence 79 + left x + right y + { + x y "ge" + } + + def not + precedence 78 + right y + { + y "not" + } + + def and + precedence 77 + left x + right y + { + x y "and" + } + + def xor + precedence 76 + left x + right y + { + x y "xor" + } + + def or + precedence 76 + left x + right y + { + x y "or" + } + + def "," + precedence 70 + left x + right y + { + OOO ++ { OOX -- OOO }**x ++ { OOY -- OOO }**y + } + + def ":=" + precedence 20 + left x + right y + { + "/"x "[" y "] cvx def" + } + + def ":==" + precedence 20 + left x + right y + { + "/"x "[" y "counttomark 2 add (assigning) exch ldiagdebugprint ] cvx def" + } + + def "::" + precedence 20 + left x + right y + { + y "/"x "ldiagpointdef" + } + + def ":<" + precedence 20 + left x + right y + { + y "/"x"@ANGLE ldiagangledef" + } + + def if + named cond {} + named then {} + named else {} + { + cond "{" then "} {" else "} ifelse" + } + + def quadcase + precedence 10 + left angle + named "0" {} + named "0-90" {} + named "90" {} + named "90-180" {} + named "180" {} + named "180-270" {} + named "270" {} + named "270-360" {} + { + "{" 0-90 "} {" 270 "} {" 180 "} {" 90 "}" + "{" 0 "} {" 270-360 "} {" 180-270 "} {" 90-180 "}" angle "ldiagquadcase" + } + + def signcase + precedence 10 + left number + named neg {} + named zero {} + named pos {} + { + "{" neg "} {" zero "} {" pos "}" number "ldiagsigncase" + } + + def xloop + named from { 0 } + named to { 0 } + named by { 1 } + named do named x { "xval" } {} + { + from by to "{ /xval exch def" do "} for" + } + + def yloop + named from { 0 } + named to { 0 } + named by { 1 } + named do named y { "yval" } {} + { + from by to "{ /yval exch def" do "} for" + } + + def zloop + named from { 0 } + named to { 0 } + named by { 1 } + named do named z { "zval" } {} + { + from by to "{ /zval exch def" do "} for" + } + + def anydebug + right tag + { + "[" tag "counttomark ("tag") exch ldiagdebugprint cleartomark" + } + + def aabout + named circum {} + named extra {} + named centre {} + { + "{" circum "} cvlit" extra "[" centre "] cvx ldiagaabout" + # ZXCTR := centre + # ZFCTR := circum??CTR + # ZAREF := ZFCTR angleto ZXCTR + # ZAMIN := 0d + # ZPMIN := circum boundaryatangle { ZAREF - ZAMIN } + # ++ extra atangle { ZAREF - ZAMIN } + # ZAMAX := 90d + # ZPMAX := circum boundaryatangle { ZAREF - ZAMAX } + # ++ extra atangle { ZAREF - ZAMAX } + # xloop from { 1 } to { 12 } by { 1 } do { + # ZAMID := { ZAMIN + ZAMAX } * 0.5 + # ZPMID := circum boundaryatangle { ZAREF - ZAMID } + # ++ extra atangle { ZAREF - ZAMID } + # if cond { {ZPMID distance ZXCTR} > {ZFCTR distance ZXCTR} } then { + # ZAMAX := ZAMID + # ZPMAX := ZPMID + # } + # else { + # ZAMIN := ZAMID + # ZPMIN := ZPMID + # } + # } + # ZPMID + } + + def cabout + named circum {} + named extra {} + named centre {} + { + "{" circum "} cvlit" extra "[" centre "] cvx ldiagcabout" + # ZXCTR := centre + # ZFCTR := circum??CTR + # ZAREF := ZFCTR angleto ZXCTR + # ZAMIN := 0d + # ZPMIN := circum boundaryatangle { ZAREF + ZAMIN } + # ++ extra atangle { ZAREF + ZAMIN } + # ZAMAX := 90d + # ZPMAX := circum boundaryatangle { ZAREF + ZAMAX } + # ++ extra atangle { ZAREF + ZAMAX } + # xloop from { 1 } to { 12 } by { 1 } do { + # ZAMID := { ZAMIN + ZAMAX } * 0.5 + # ZPMID := circum boundaryatangle { ZAREF + ZAMID } + # ++ extra atangle { ZAREF + ZAMID } + # if cond { {ZPMID distance ZXCTR} > {ZFCTR distance ZXCTR} } then { + # ZAMAX := ZAMID + # ZPMAX := ZPMID + # } + # else { + # ZAMIN := ZAMID + # ZPMIN := ZPMID + # } + # } + # ZPMID + } +} diff --git a/include/diagf.lpg b/include/diagf.lpg new file mode 100644 index 0000000..8b76f58 --- /dev/null +++ b/include/diagf.lpg @@ -0,0 +1,2706 @@ +%%BeginResource: procset LoutFigPrependGraphic +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% PostScript @SysPrependGraphic file for @Diag Jeffrey H. Kingston % +% Version 2.0 (includes CIRCUM label) September 1996 % +% % +% To assist in avoiding name clashes, the names of all symbols % +% defined here begin with "ldiag". However, this is not feasible % +% with user-defined labels and some labels used by users. % +% % +% <point> is two numbers, a point. % +% <length> is one number, a length % +% <angle> is one number, an angle in degrees % +% <dashlength> is one number, the preferred length of a dash % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +errordict begin + /handleerror + { + { /Times-Roman findfont 8 pt scalefont setfont + 0 setgray 4 pt 4 pt moveto + $error /errorname get + dup ldiagdict exch known + { ldiagdict exch get } + { 50 string cvs } ifelse + show + ( Command: ) show + $error /command get 50 string cvs show + } stopped {} if + showpage stop + } def +end + +% begin diagram: <maxlabels> ldiagbegin - +% must be defined outside ldiagdict since it loads it +/ldiagbegin +{ xsize 0 0 ysize ldiagdict begin + 5 -1 roll /ldiagmaxlabels exch def + (@Diag) ldiagpushtagdict + /OOY ldiagpointdef /OOX ldiagpointdef 0 0 /OOO ldiagpointdef +} def + +% end diagram: - ldiagend - +/ldiagend +{ ldiagpoptagdict end +} def + +% concat strings: <string> <string> ldiagconcat <string> +% must be defined outside ldiagdict since used in ldiagpromotelabels +/ldiagconcat +{ 2 copy length exch length add string + dup 0 4 index putinterval + dup 3 index length 3 index putinterval + 3 1 roll pop pop +} def + +/ldiagdebugposy 432 def +/ldiagdebugposx 72 def + +% <string> <int> ldiagdebugprint - +% must be defined outside ldiagdict since used in arbitrary places +% print count or <int> stack entries, which ever is the smaller +/ldiagdebugprint +{ + exch + gsave + initgraphics + ldiagdebugposy 72 lt + { /ldiagdebugposx ldiagdebugposx 144 add store + /ldiagdebugposy 432 store + } + { + /ldiagdebugposy ldiagdebugposy 12 sub store + } ifelse + ldiagdebugposx ldiagdebugposy moveto + /Times-Roman findfont 10 scalefont setfont + 0 setgray show + count 1 sub 2 copy lt { pop } { exch pop } ifelse 1 sub + 0 exch 1 exch + { + /ldiagdebugposy ldiagdebugposy 12 sub store + ldiagdebugposx 12 add ldiagdebugposy moveto + index 50 string cvs show + } for + grestore +} def + +/ldiagdict 200 dict def +ldiagdict begin + +% error messages +/dictfull (dictfull error: too many labels?) def +/dictstackoverflow (dictstackoverflow error: labels nested too deeply?) def +/execstackoverflow (execstackoverflow error: figure nested too deeply?) def +/limitcheck (limitcheck error: figure nested too deeply or too large?) def +/syntaxerror (syntaxerror error: syntax error in text of figure?) def +/typecheck (typecheck error: syntax error in text of figure?) def +/undefined (undefined error: unknown or misspelt label?) def +/VMError (VMError error: run out of memory?) def + +% push pi onto stack: - ldiagpi <num> +/ldiagpi 3.14159 def + +% push e onto stack: - ldiage <num> +/ldiage 2.71828 def + +% arc directions +/clockwise false def +/anticlockwise true def + +% test equality between two angles: <angle> <angle> ldiagangleeq <bool> +/ldiagangleeq { ldiagfixangle exch ldiagfixangle eq } def + +% test inequality between two angles: <angle> <angle> ldiaganglene <bool> +/ldiaganglene { ldiagangleeq not } def + +% maximum of two numbers: <num> <num> ldiagmax <num> +/ldiagmax { 2 copy gt { pop } { exch pop } ifelse } def + +% minimum of two numbers: <num> <num> ldiagmin <num> +/ldiagmin { 2 copy lt { pop } { exch pop } ifelse } def + +% add two points: <point> <point> ldiagpadd <point> +/ldiagpadd +{ + % (Entering padd) 4 ldiagdebugprint + exch 3 1 roll add 3 1 roll add exch + % (Leaving padd) 2 ldiagdebugprint +} def + +% subtract first point from second: <point> <point> ldiagpsub <point> +/ldiagpsub { 3 2 roll sub 3 1 roll exch sub exch } def + +% max two points: <point> <point> ldiagpmax <point> +/ldiagpmax { exch 3 1 roll ldiagmax 3 1 roll ldiagmax exch } def + +% min two points: <point> <point> ldiagpmin <point> +/ldiagpmin { exch 3 1 roll ldiagmin 3 1 roll ldiagmin exch } def + +% scalar multiplication: <point> <num> ldiagpmul <point> +/ldiagpmul { dup 3 1 roll mul 3 1 roll mul exch } def + +% point at angle and distance: <point> <length> <angle> ldiagatangle <point> +/ldiagatangle { 2 copy cos mul 3 1 roll sin mul ldiagpadd } def + +% angle from one point to another: <point> <point> ldiagangleto <angle> +/ldiagangleto { ldiagpsub 2 copy 0 eq exch 0 eq and {pop} {exch atan} ifelse } def + +% distance between two points: <point> <point> ldiagdistance <length> +/ldiagdistance { ldiagpsub dup mul exch dup mul add sqrt } def + +% stroke a solid line: <length> <dashlength> ldiagsolid - +/ldiagsolid +{ pop pop [] 0 setdash 1 setlinecap stroke +} def + +% stroke a dashed line: <length> <dashlength> ldiagdashed - +/ldiagdashed +{ 2 copy div 2 le 1 index 0 le or + { exch pop 1 pt ldiagmax [ exch dup ] 0 setdash } + { dup [ exch 4 2 roll 2 copy div + 1 sub 2 div ceiling dup 4 1 roll + 1 add mul sub exch div ] 0 setdash + } ifelse 0 setlinecap stroke +} def + +% stroke a cdashed line: <length> <dashlength> ldiagcdashed - +/ldiagcdashed +{ % (Entering ldiagcdashed) 2 ldiagdebugprint + 2 copy le 1 index 0 le or + { exch pop 1 pt ldiagmax [ exch dup ] dup 0 get 2 div setdash } + { dup [ 4 2 roll exch 2 copy exch div + 2 div ceiling div 1 index sub + ] exch 2 div setdash + } ifelse 0 setlinecap stroke + % (Leaving ldiagcdashed) 0 ldiagdebugprint +} def + +% stroke a dotted line: <length> <dashlength> ldiagdotted - +/ldiagdotted +{ 2 copy le 1 index 0 le or + { exch pop 1 pt ldiagmax [ exch 0 exch ] 0 setdash } + { 1 index exch div ceiling div + [ 0 3 2 roll ] 0 setdash + } ifelse 1 setlinecap stroke +} def + +% stroke a noline line: <length> <dashlength> ldiagnoline - +/ldiagnoline +{ pop pop +} def + +% painting (i.e. filling): - ldiagwhite - (etc.) +/ldiagnopaint { } def +/ldiagnochange { fill } def +/ldiagdarkblue { 0.0 0.0 0.5 setrgbcolor fill } def +/ldiagblue { 0.0 0.0 1.0 setrgbcolor fill } def +/ldiaglightblue { 0.5 0.5 1.0 setrgbcolor fill } def +/ldiagdarkgreen { 0.0 0.5 0.0 setrgbcolor fill } def +/ldiaggreen { 0.0 1.0 0.0 setrgbcolor fill } def +/ldiaglightgreen { 0.5 1.0 0.5 setrgbcolor fill } def +/ldiagdarkred { 0.5 0.0 0.0 setrgbcolor fill } def +/ldiagred { 1.0 0.0 0.0 setrgbcolor fill } def +/ldiaglightred { 1.0 0.5 0.5 setrgbcolor fill } def +/ldiagdarkcyan { 0.0 0.5 0.5 setrgbcolor fill } def +/ldiagcyan { 0.0 1.0 1.0 setrgbcolor fill } def +/ldiaglightcyan { 0.5 1.0 1.0 setrgbcolor fill } def +/ldiagdarkmagenta { 0.5 0.0 0.5 setrgbcolor fill } def +/ldiagmagenta { 1.0 0.0 1.0 setrgbcolor fill } def +/ldiaglightmagenta { 1.0 0.5 1.0 setrgbcolor fill } def +/ldiagdarkyellow { 0.5 0.5 0.0 setrgbcolor fill } def +/ldiagyellow { 1.0 1.0 0.0 setrgbcolor fill } def +/ldiaglightyellow { 1.0 1.0 0.5 setrgbcolor fill } def +/ldiagdarkgray { 0.2 0.2 0.2 setrgbcolor fill } def +/ldiaggray { 0.5 0.5 0.5 setrgbcolor fill } def +/ldiaglightgray { 0.8 0.8 0.8 setrgbcolor fill } def +/ldiagdarkgrey { 0.2 0.2 0.2 setrgbcolor fill } def +/ldiaggrey { 0.5 0.5 0.5 setrgbcolor fill } def +/ldiaglightgrey { 0.8 0.8 0.8 setrgbcolor fill } def +/ldiagblack { 0.0 0.0 0.0 setrgbcolor fill } def +/ldiagwhite { 1.0 1.0 1.0 setrgbcolor fill } def + +% shape and labels of the @Box symbol +/ldiagbox +{ + 0 0 /SW ldiagpointdef + xsize 0 /SE ldiagpointdef + xsize ysize /NE ldiagpointdef + 0 ysize /NW ldiagpointdef + SE 0.5 ldiagpmul /S ldiagpointdef + NW 0.5 ldiagpmul /W ldiagpointdef + W SE ldiagpadd /E ldiagpointdef + S NW ldiagpadd /N ldiagpointdef + NE 0.5 ldiagpmul /CTR ldiagpointdef + + 0 dg /S@ANGLE ldiagangledef + 45 dg /SE@ANGLE ldiagangledef + 90 dg /E@ANGLE ldiagangledef + 135 dg /NE@ANGLE ldiagangledef + 180 dg /N@ANGLE ldiagangledef + 225 dg /NW@ANGLE ldiagangledef + 270 dg /W@ANGLE ldiagangledef + 315 dg /SW@ANGLE ldiagangledef + + [ CTR NE ldiagpsub /ldiagboxcircum cvx ] ldiagcircumdef + SW SE NE NW SW +} def + +% shape and labels of the @CurveBox symbol +% <margin> ldiagcurvebox <shape> +/ldiagcurvebox +{ + + % (Entering ldiagcurvebox) 1 ldiagdebugprint + ldiagdecodelength /cbmgn exch def + + xsize 0.5 mul ysize 0.5 mul /CTR ldiagpointdef + xsize 0.5 mul 0 /S ldiagpointdef + xsize ysize 0.5 mul /E ldiagpointdef + xsize 0.5 mul ysize /N ldiagpointdef + 0 ysize 0.5 mul /W ldiagpointdef + + cbmgn 0.293 mul cbmgn 0.293 mul /SW ldiagpointdef + xsize cbmgn 0.293 mul sub cbmgn 0.293 mul /SE ldiagpointdef + xsize cbmgn 0.293 mul sub ysize cbmgn 0.293 mul sub /NE ldiagpointdef + cbmgn 0.293 mul ysize cbmgn 0.293 mul sub /NW ldiagpointdef + + 0 dg /S@ANGLE ldiagangledef + 45 dg /SE@ANGLE ldiagangledef + 90 dg /E@ANGLE ldiagangledef + 135 dg /NE@ANGLE ldiagangledef + 180 dg /N@ANGLE ldiagangledef + 225 dg /NW@ANGLE ldiagangledef + 270 dg /W@ANGLE ldiagangledef + 315 dg /SW@ANGLE ldiagangledef + + [ xsize ysize 0.5 ldiagpmul cbmgn /ldiagcurveboxcircum cvx ] ldiagcircumdef + + cbmgn 0 + xsize cbmgn sub 0 + [ xsize cbmgn sub cbmgn ] + xsize cbmgn + xsize ysize cbmgn sub + [ xsize cbmgn sub ysize cbmgn sub ] + xsize cbmgn sub ysize + cbmgn ysize + [ cbmgn ysize cbmgn sub ] + 0 ysize cbmgn sub + 0 cbmgn + [ cbmgn cbmgn ] + cbmgn 0 + + % (Leaving ldiagcurvebox) 0 ldiagdebugprint +} def + +% shadow of the @ShadowBox symbol +% its shape and labels are done, somewhat inaccurately, with ldiagbox +% <shadowmargin> ldiagshadow - +/ldiagshadow +{ + /lfshm exch def + + lfshm 0 moveto + 0 lfshm neg rlineto + xsize 0 rlineto + 0 ysize rlineto + lfshm neg 0 rlineto + xsize 0 lineto + closepath fill + +} def + +% shape and labels of the @Square symbol +/ldiagsquare +{ + xsize ysize 0.5 ldiagpmul /CTR ldiagpointdef + CTR xsize xsize ysize ysize ldiagpmax 0.5 ldiagpmul ldiagpadd /NE ldiagpointdef + CTR 0 0 CTR NE ldiagdistance 135 ldiagatangle ldiagpadd /NW ldiagpointdef + CTR 0 0 CTR NE ldiagdistance 225 ldiagatangle ldiagpadd /SW ldiagpointdef + CTR 0 0 CTR NE ldiagdistance 315 ldiagatangle ldiagpadd /SE ldiagpointdef + SW 0.5 ldiagpmul SE 0.5 ldiagpmul ldiagpadd /S ldiagpointdef + NW 0.5 ldiagpmul NE 0.5 ldiagpmul ldiagpadd /N ldiagpointdef + SW 0.5 ldiagpmul NW 0.5 ldiagpmul ldiagpadd /W ldiagpointdef + SE 0.5 ldiagpmul NE 0.5 ldiagpmul ldiagpadd /E ldiagpointdef + + 0 dg /S@ANGLE ldiagangledef + 45 dg /SE@ANGLE ldiagangledef + 90 dg /E@ANGLE ldiagangledef + 135 dg /NE@ANGLE ldiagangledef + 180 dg /N@ANGLE ldiagangledef + 225 dg /NW@ANGLE ldiagangledef + 270 dg /W@ANGLE ldiagangledef + 315 dg /SW@ANGLE ldiagangledef + + [ CTR NE ldiagpsub /ldiagboxcircum cvx ] ldiagcircumdef + SW SE NE NW SW +} def + +% shape and labels of the @Diamond symbol +/ldiagdiamond +{ + xsize 0 0.5 ldiagpmul /S ldiagpointdef + 0 ysize 0.5 ldiagpmul /W ldiagpointdef + S W ldiagpadd /CTR ldiagpointdef + CTR W ldiagpadd /N ldiagpointdef + CTR S ldiagpadd /E ldiagpointdef + E N ldiagpadd 0.5 ldiagpmul /NE ldiagpointdef + N W ldiagpadd 0.5 ldiagpmul /NW ldiagpointdef + S W ldiagpadd 0.5 ldiagpmul /SW ldiagpointdef + S E ldiagpadd 0.5 ldiagpmul /SE ldiagpointdef + + 0 dg /S@ANGLE ldiagangledef + 90 dg /E@ANGLE ldiagangledef + 180 dg /N@ANGLE ldiagangledef + 270 dg /W@ANGLE ldiagangledef + S E ldiagangleto /SE@ANGLE ldiagangledef + E N ldiagangleto /NE@ANGLE ldiagangledef + N W ldiagangleto /NW@ANGLE ldiagangledef + W S ldiagangleto /SW@ANGLE ldiagangledef + + [ xsize ysize 0.5 ldiagpmul /ldiagdiamondcircum cvx ] ldiagcircumdef + S E N W S +} def + +% shape and labels of the @Ellipse symbol +/ldiagellipse +{ + xsize 0 0.5 ldiagpmul /S ldiagpointdef + 0 ysize 0.5 ldiagpmul /W ldiagpointdef + S W ldiagpadd /CTR ldiagpointdef + CTR W ldiagpadd /N ldiagpointdef + CTR S ldiagpadd /E ldiagpointdef + CTR xsize 0 0.3536 ldiagpmul ldiagpadd 0 ysize 0.3536 ldiagpmul ldiagpadd /NE ldiagpointdef + 0 ysize 0.3536 ldiagpmul CTR xsize 0 0.3536 ldiagpmul ldiagpadd ldiagpsub /SE ldiagpointdef + xsize 0 0.3536 ldiagpmul CTR ldiagpsub 0 ysize 0.3536 ldiagpmul ldiagpadd /NW ldiagpointdef + 0 ysize 0.3536 ldiagpmul xsize 0 0.3536 ldiagpmul CTR ldiagpsub ldiagpsub /SW ldiagpointdef + [ xsize ysize 0.5 ldiagpmul /ldiagellipsecircum cvx ] ldiagcircumdef + + 0 dg /S@ANGLE ldiagangledef + 90 dg /E@ANGLE ldiagangledef + 180 dg /N@ANGLE ldiagangledef + 270 dg /W@ANGLE ldiagangledef + + S E ldiagangleto /SE@ANGLE ldiagangledef + E N ldiagangleto /NE@ANGLE ldiagangledef + N W ldiagangleto /NW@ANGLE ldiagangledef + W S ldiagangleto /SW@ANGLE ldiagangledef + + S [ CTR ] E [ CTR ] N [ CTR ] W [ CTR ] S +} def + +% shape and labels of the @Circle symbol +/ldiagcircle +{ + xsize ysize 0.5 ldiagpmul /CTR ldiagpointdef + CTR xsize 0 ysize 0 ldiagpmax 0.5 ldiagpmul ldiagpadd /E ldiagpointdef + CTR 0 0 CTR E ldiagdistance 45 ldiagatangle ldiagpadd /NE ldiagpointdef + CTR 0 0 CTR E ldiagdistance 90 ldiagatangle ldiagpadd /N ldiagpointdef + CTR 0 0 CTR E ldiagdistance 135 ldiagatangle ldiagpadd /NW ldiagpointdef + CTR 0 0 CTR E ldiagdistance 180 ldiagatangle ldiagpadd /W ldiagpointdef + CTR 0 0 CTR E ldiagdistance 225 ldiagatangle ldiagpadd /SW ldiagpointdef + CTR 0 0 CTR E ldiagdistance 270 ldiagatangle ldiagpadd /S ldiagpointdef + CTR 0 0 CTR E ldiagdistance 315 ldiagatangle ldiagpadd /SE ldiagpointdef + [ S E ldiagpsub /ldiagellipsecircum cvx ] ldiagcircumdef + + 0 dg /S@ANGLE ldiagangledef + 45 dg /SE@ANGLE ldiagangledef + 90 dg /E@ANGLE ldiagangledef + 135 dg /NE@ANGLE ldiagangledef + 180 dg /N@ANGLE ldiagangledef + 225 dg /NW@ANGLE ldiagangledef + 270 dg /W@ANGLE ldiagangledef + 315 dg /SW@ANGLE ldiagangledef + + S [ CTR ] E [ CTR ] N [ CTR ] W [ CTR ] S +} def + +% shape and labels of the @VLine and @VArrow symbols +/ldiagvline +{ + xmark ysize ldiagprevious /FROM ldiagpointdef + xmark 0 ldiagprevious /TO ldiagpointdef +} def + +% points of a polygon around base with given no of sides, vert init angle: +% <sides> <angle> ldiagpolygon <point> ... <point> +/ldiagpolygon +{ exch round cvi exch + xsize ysize 0.5 ldiagpmul /CTR ldiagpointdef + 90 sub CTR 2 copy ldiagmax 5 3 roll + [ 4 copy pop /ldiagpolycircum cvx ] ldiagcircumdef + exch dup 360 exch div exch + 1 1 3 2 roll + { 4 string cvs (P) exch ldiagconcat + 3 copy exch pop (@ANGLE) ldiagconcat cvn exch 90 add exch ldiagangledef + cvn 6 copy pop pop ldiagatangle 2 copy 10 2 roll + 3 2 roll ldiagpointdef + dup 3 1 roll add exch + } for + pop ldiagatangle +} def + +% shape and labels of the @Isosceles triangle symbol +/ldiagisosceles +{ + xsize ysize 0.5 ldiagpmul /CTR ldiagpointdef + 0 0 /SW ldiagpointdef + xsize 0 /SE ldiagpointdef + xsize 0.5 mul ysize /N ldiagpointdef + xsize 0.5 mul 0 /S ldiagpointdef + SE 0.5 ldiagpmul N 0.5 ldiagpmul ldiagpadd /NE ldiagpointdef + SW 0.5 ldiagpmul N 0.5 ldiagpmul ldiagpadd /NW ldiagpointdef + + [ xsize ysize /ldiagisoscelescircum cvx ] ldiagcircumdef + + 0 dg /SW@ANGLE ldiagangledef + 0 dg /SE@ANGLE ldiagangledef + 180 dg /N@ANGLE ldiagangledef + 0 dg /S@ANGLE ldiagangledef + SE N ldiagangleto /NE@ANGLE ldiagangledef + N SW ldiagangleto /NW@ANGLE ldiagangledef + + SW SE N SW +} def + +% next array element: <array> <index> ldiaggetnext <array> <index> <any> true +% or <array> <index> false +/ldiaggetnext +{ 2 copy exch length ge + { false } + { 2 copy get exch 1 add exch true } ifelse +} def + +% check whether thing is number: <any> ldiagisnumbertype <any> <bool> +/ldiagisnumbertype +{ dup type dup + /integertype eq exch /realtype eq or +} def + +% check whether thing is an array: <any> ldiagisarraytype <any> <bool> +/ldiagisarraytype { dup type /arraytype eq } def + +% check whether thing is an array: <any> ldiagisnametype <any> <bool> +/ldiagisnametype { dup type /nametype eq } def + +% get next item: <array> <index> ldiaggetnextitem <array> <index> 0 +% or <array> <index> <array> 1 +% or <array> <index> <point> 2 +/ldiaggetnextitem +{ ldiaggetnext + { ldiagisarraytype + { 1 + } + { ldiagisnumbertype + { 3 1 roll + ldiaggetnext + { ldiagisnumbertype + { 4 3 roll exch 2 + } + { pop 3 2 roll pop 0 + } ifelse + } + { 3 2 roll pop 0 + } ifelse + } + { pop 0 + } ifelse + } ifelse + } + { 0 + } ifelse +} def + +% approximate equality: num1 num2 approxeq <boolean> +/approxeq +{ dup 0 eq + { pop 0 eq + } + { dup 3 1 roll sub exch div abs 0.001 lt + } ifelse +} def + +% set arc path: bool x1 y1 x2 y2 x0 y0 ldiagsetarc <angle> <angle> <dist> +% the path goes from x1 y1 to x2 y2 about centre x0 y0, +% anticlockwise if bool is true else clockwise. +% The orientations of backwards pointing and forwards pointing +% arrowheads are returned in the two angles, and +% the length of the arc is returned in <dist>. +/ldiagsetarc +{ + % (Entering ldiagsetarc) 7 ldiagdebugprint + 20 dict begin + matrix currentmatrix 8 1 roll + 2 copy translate 2 copy 8 2 roll + 4 2 roll ldiagpsub 6 2 roll ldiagpsub + dup /y1 exch def dup mul /y1s exch def + dup /x1 exch def dup mul /x1s exch def + dup /y2 exch def dup mul /y2s exch def + dup /x2 exch def dup mul /x2s exch def + /dist1 0 0 x1 y1 ldiagdistance def + /dist2 0 0 x2 y2 ldiagdistance def + + y1s y2s approxeq + { -1 + } + { y1s x2s mul y2s x1s mul sub y1s y2s sub div + } ifelse + /da exch def + + x1s x2s approxeq + { -1 + } + { x1s y2s mul x2s y1s mul sub x1s x2s sub div + } ifelse + /db exch def + + da 0 gt db 0 gt and + { + % ( case 1, ellipse) 0 ldiagdebugprint + /LMax da sqrt db sqrt ldiagmax def + /scalex da sqrt LMax div def + /scaley db sqrt LMax div def + scalex scaley scale + 0 0 LMax + 0 0 x1 scalex mul y1 scaley mul ldiagangleto + 0 0 x2 scalex mul y2 scaley mul ldiagangleto + 2 copy eq { 360 add } if + 2 copy 8 2 roll + 5 index { arc } { arcn } ifelse + 2 index 1 index + { 90 sub } { 90 add } ifelse + dup sin scaley mul exch cos scalex mul atan + 2 index 2 index + { 90 add } { 90 sub } ifelse + dup sin scaley mul exch cos scalex mul atan + 5 2 roll % res1 res2 ang1 ang2 anticlockwise + { exch sub } { sub } ifelse + dup 0 le { 360 add } if ldiagpi mul LMax mul 180 div + } + { + dist1 dist2 approxeq + % x1 y1 dist1 ( x1 y1, d) 3 ldiagdebugprint pop pop pop + % x2 y2 dist2 ( x2 y2, d) 3 ldiagdebugprint pop pop pop + { + % ( case 2, circle) 0 ldiagdebugprint + 0 0 + dist1 + 0 0 x1 y1 ldiagangleto + 0 0 x2 y2 ldiagangleto + 2 copy eq { 360 add } if + 2 copy 8 2 roll + 5 index { arc } { arcn } ifelse + 2 index 1 index + { 90 sub } { 90 add } ifelse + 2 index 2 index + { 90 add } { 90 sub } ifelse + 5 2 roll % res1 res2 ang1 ang2 clockwise + { exch sub } { sub } ifelse + dup 0 le { 360 add } if + ldiagpi mul dist1 mul 180 div + } + { + % ( case 3, line) 0 ldiagdebugprint + x2 y2 lineto pop + x2 y2 x1 y1 ldiagangleto + x1 y1 x2 y2 ldiagangleto + x1 y1 x2 y2 ldiagdistance + } ifelse + } ifelse + 4 -1 roll setmatrix + end + % (Leaving ldiagsetarc) 3 ldiagdebugprint +} def + +% ldiagsetcurve: set up a Bezier curve from x0 y0 to x3 y3 +% and return arrowhead angles and length of curve (actually 0) +% x0 y0 x1 y1 x2 y2 x3 y3 ldiagsetcurve <angle> <angle> <length> +/ldiagsetcurve +{ 8 copy curveto pop pop + ldiagangleto + 5 1 roll + 4 2 roll ldiagangleto + exch + 0 +} def + +% ldiagsetpath: convert a Diag path into a PostScript path +% [ shape ] ldiagsetpath +/ldiagsetpath +{ + 10 dict begin + 0 newpath + /prevseen false def + /curveseen false def + { ldiaggetnextitem + dup 0 eq { pop exit } + { 1 eq + { /curveseen true def + /curve exch def + curve length 0 eq { /curveseen false def } if + } + { /ycurr exch def + /xcurr exch def + prevseen + { curveseen + { curve length 4 eq + { xprev yprev + curve 0 get curve 1 get + curve 2 get curve 3 get + xcurr ycurr + ldiagsetcurve pop pop pop + } + { xprev yprev xcurr ycurr + curve length 1 ge { curve 0 get } { 0 } ifelse + curve length 2 ge { curve 1 get } { 0 } ifelse + curve length 3 ge { curve 2 get } { true } ifelse + 7 1 roll + ldiagsetarc pop pop pop + } ifelse + } + { xcurr ycurr lineto + } ifelse + } + { xcurr ycurr moveto + } ifelse + /xprev xcurr def + /yprev ycurr def + /prevseen true def + /curveseen false def + } ifelse + } ifelse + } loop pop pop + end +} def + +% ldiagpaintpath: paint a path of the given shape +% /paint [ shape ] ldiagpaintpath - +/ldiagpaintpath +{ + ldiagsetpath cvx exec +} def + +% stroke a path of the given shape in the given linestyle and dash length. +% Return the origin and angle of the backward and forward arrow heads. +% dashlength /linestyle [shape] ldiagdopath [<point> <angle>] [<point> <angle>] +/ldiagdopath +{ + 10 dict begin + 0 + /prevseen false def + /curveseen false def + /backarrow [] def + /fwdarrow [] def + { + ldiaggetnextitem + dup 0 eq { pop exit } + { + 1 eq + { /curveseen true def + /curve exch def + curve length 0 eq { /prevseen false def } if + } + { /ycurr exch def + /xcurr exch def + prevseen + { newpath xprev yprev moveto + curveseen + { curve length 4 eq + { xprev yprev + curve 0 get curve 1 get + curve 2 get curve 3 get + xcurr ycurr ldiagsetcurve + } + { xprev yprev xcurr ycurr + curve length 1 ge { curve 0 get } { 0 } ifelse + curve length 2 ge { curve 1 get } { 0 } ifelse + curve length 3 ge { curve 2 get } { true } ifelse + 7 1 roll + ldiagsetarc + } ifelse + } + { xcurr ycurr lineto + xcurr ycurr xprev yprev ldiagangleto dup 180 sub + xprev yprev xcurr ycurr ldiagdistance + } ifelse + 6 index 6 index cvx exec + [ xprev yprev 5 -1 roll ] + backarrow length 0 eq + { /backarrow exch def } + { pop } ifelse + [ xcurr ycurr 4 -1 roll ] /fwdarrow exch def + } if + /xprev xcurr def + /yprev ycurr def + /prevseen true def + /curveseen false def + } ifelse + } ifelse + } loop + pop pop pop pop + backarrow length 0 eq { [ 0 0 0 ] } { backarrow } ifelse + fwdarrow length 0 eq { [ 0 0 0 ] } { fwdarrow } ifelse + end +} def + + +% stroke a path of the given shape in the given linestyle and dash length. +% dashlength [ /linestyle ] [shape] ldiagdosegpath - +/ldiagdosegpath +{ + 12 dict begin + 1 index /seg exch def + 1 index length /seglength exch def + 0 /segcount exch def + 0 + /prevseen false def + /curveseen false def + /backarrow [] def + /fwdarrow [] def + { + ldiaggetnextitem + dup 0 eq { pop exit } + { + 1 eq + { /curveseen true def + /curve exch def + curve length 0 eq { /prevseen false def } if + } + { /ycurr exch def + /xcurr exch def + prevseen + { newpath xprev yprev moveto + curveseen + { curve length 4 eq + { xprev yprev + curve 0 get curve 1 get + curve 2 get curve 3 get + xcurr ycurr ldiagsetcurve + } + { xprev yprev xcurr ycurr + curve length 1 ge { curve 0 get } { 0 } ifelse + curve length 2 ge { curve 1 get } { 0 } ifelse + curve length 3 ge { curve 2 get } { true } ifelse + 7 1 roll + ldiagsetarc + } ifelse + } + { xcurr ycurr lineto + xcurr ycurr xprev yprev ldiagangleto dup 180 sub + xprev yprev xcurr ycurr ldiagdistance + } ifelse + 6 index seg segcount seglength mod get cvx exec + /segcount segcount 1 add def + [ xprev yprev 5 -1 roll ] + backarrow length 0 eq + { /backarrow exch def } + { pop } ifelse + [ xcurr ycurr 4 -1 roll ] /fwdarrow exch def + } if + /xprev xcurr def + /yprev ycurr def + /prevseen true def + /curveseen false def + } ifelse + } ifelse + } loop + pop pop pop pop + end +} def + +% ldiagnodebegin: start of node parameters +% ldiagnodebegin - +/ldiagnodebegin +{ % (Entering ldiagnodebegin) 0 ldiagdebugprint + ldiagmaxlabels dict begin +} def + +% ldiagnodeend: end of node parameters (so do the node) +% <outline> <dashlength> <style> <linewidth> <paint> ldiagnodeend - +/ldiagnodeend +{ + % (Entering ldiagnodeend) 0 ldiagdebugprint + end % matches begin in ldiagnodebegin + 4 index gsave ldiagpaintpath grestore + 3 index ldiagsetpath clip newpath + 2 mul setlinewidth + 3 -1 roll ldiagdosegpath + % (Leaving ldiagnodeend) 0 ldiagdebugprint +} def + +% ldiaglinkbegin: start of link parameters +% <direct> ldiaglinkbegin - +/ldiaglinkbegin +{ ldiagmaxlabels dict begin + 1 eq /direct exch def +} def + +% ldiaglinkend: end of link parameters (so do the link) +% <outline> <dashlength> <style> <linewidth> ldiaglinkend - +/ldiaglinkend +{ + end % matches begin in ldiaglinkbegin + setlinewidth + 3 -1 roll ldiagdosegpath +} def + +% ldiagdoarrow: draw an arrow head of given form +% dashlength /lstyle /pstyle hfrac height width [ <point> <angle> ] ldiagdoarrow - +/ldiagdoarrow +{ matrix currentmatrix 8 1 roll + dup 0 get 1 index 1 get translate + 2 get rotate + [ 2 index neg 2 index 0 0 + 3 index 3 index neg + 1 index 10 index mul 0 + 7 index 7 index ] + 4 1 roll pop pop pop + dup 3 1 roll + gsave ldiagpaintpath grestore ldiagdopath pop pop + setmatrix +} def + +% arrow head styles +/ldiagopen 0.0 def +/ldiaghalfopen 0.5 def +/ldiagclosed 1.0 def + +% stroke no arrows, forward, back, and both +/ldiagnoarrow { pop pop pop pop pop pop pop pop } def +/ldiagforward { 7 -1 roll ldiagdoarrow pop } def +/ldiagback { 8 -2 roll pop ldiagdoarrow } def +/ldiagboth { 8 -1 roll 7 copy ldiagdoarrow pop 7 -1 roll ldiagdoarrow } def + +% ldiagprevious: return previous point on path +/ldiagprevious +{ ldiagisnumbertype + { 2 copy } + { ldiagisarraytype + { 2 index 2 index } + { 0 0 } + ifelse + } ifelse +} def + +% Tag dictionary operators +% +% Diag's tag dictionaries are kept on the same stack as other dictionaries, +% since there is nowhere else to put them. However, they are managed like +% a separate stack using the following operators: +% +% <tag> ldiagpushtagdict - Push a new, empty tag dictionary +% ldiagtoptagdict dict Find the top tag dictionary +% ldiagpoptagdict - Pop and destroy the top tag dictionary +% ldiagpopuptagdict - Pop top tag dict and promote its entries +% ldiagdebugtagdict - Debug print of dictionary stack +% +% They are distinguished from other dictionaries by containing /ldiagtagdict, +% whose value is the <tag> which is used by ldiagpopuptagdict, +% and they are hopefully never the target of any non-tag definition because +% they are never the top dictionary, since push places the new dict second. + +/ldiagpushtagdict +{ ldiagmaxlabels dict dup + currentdict end exch begin begin + exch /ldiagtagdict exch put +} def + +/ldiagtoptagdict +{ /ldiagtagdict where not + { (Diag internal error: no tag dictionary) show stop + } if +} def + +/ldiagpoptagdict +{ + % (Entering poptagdict) 0 ldiagdebugprint + % ldiagdebugtagdict + mark + { currentdict end + dup /ldiagtagdict known + { exit + } if + } loop + pop + counttomark + { begin + } repeat + pop + % (Leaving poptagdict) 0 ldiagdebugprint + % ldiagdebugtagdict +} def + +% promote labels from top tag dictionary to second top tag dictionary +% each prefixed by <string>@ if <string> (value of /ldiagtagdict) is not empty +% - ldiagpopuptagdict - +/ldiagpopuptagdict +{ + ldiagtagdict + % (Entering ldiagpopuptagdict) 1 ldiagdebugprint + % ldiagdebugtagdict + ldiagtoptagdict ldiagpoptagdict ldiagtoptagdict exch + { exch 50 string cvs 3 index + dup length 0 ne + { (@) ldiagconcat + } if + exch ldiagconcat cvn exch 2 index 3 1 roll put + } forall + pop pop + % (Leaving ldiagpopuptagdict) 0 ldiagdebugprint + % ldiagdebugtagdict +} def + +% debug tag dictionary stack +/ldiagdebugtagdict +{ (Entering ldiagdebugtagdict) 0 ldiagdebugprint + 30 array dictstack + { dup /ldiagtagdict known + { dup /ldiagtagdict get 0 ldiagdebugprint + { pop 50 string cvs ( ) exch ldiagconcat + dup 0 ldiagdebugprint + pop + } + forall + } + { pop (other) 0 ldiagdebugprint + } ifelse + } forall + (Leaving ldiagdebugtagdict) 0 ldiagdebugprint +} def + +% label a point in top tag dictionary: <point> /name ldiagpointdef - +/ldiagpointdef +{ + % (Entering ldiagpointdef) 3 ldiagdebugprint + [ 4 2 roll transform /itransform cvx ] cvx + ldiagtoptagdict 3 1 roll put + % (Leaving ldiagpointdef) 0 ldiagdebugprint +} def + +% label an angle in top tag dictionary: <angle> /name ldiagangledef - +/ldiagangledef +{ + % (Entering ldiagangledef) 2 ldiagdebugprint + exch ldiagfixangle ldiagtoptagdict 3 1 roll put + % (Leaving ldiagangledef) 0 ldiagdebugprint +} def + +% add CIRCUM operator with this body: <array> ldiagcircumdef - +/ldiagcircumdef +{ % (Entering ldiagcircumdef) 1 ldiagdebugprint + /CIRCUM exch cvx + ldiagtoptagdict 3 1 roll put + % currentdict end + % 3 1 roll + % def + % begin + % (Leaving ldiagcircumdef) 0 ldiagdebugprint +} def + +% show points (except CIRCUM and ANGLE): - ldiagshowpoints - +/ldiagshowpoints +{ + % (Entering ldiagshowpoints) 0 ldiagdebugprint + ldiagtoptagdict + { 1 index 50 string cvs + (ldiagdebugpos) search + { pop pop pop pop pop } + { + (CIRCUM) search % if CIRCUM in key + { pop pop pop pop pop } + { + (ANGLE) search % if ANGLE in key + { + pop pop pop pop pop + } + { + (ldiagtagdict) search + { + pop pop pop pop pop + } + { + pop cvx exec + newpath 2.0 pt 0 360 arc 0 setgray fill pop + } ifelse + } ifelse + } ifelse + } ifelse + } forall + % (Leaving ldiagshowpoints) 0 ldiagdebugprint +} def + + +/ldiagshowtags +{ + % (Entering ldiagshowtags) 0 ldiagdebugprint + ldiagtoptagdict + { 1 index 50 string cvs + % dup 0 ldiagdebugprint + (ldiagdebugpos) search + { pop pop pop pop pop } + { + (CIRCUM) search % if CIRCUM in key + { pop pop pop pop pop } + { + (ANGLE) search % if ANGLE in key + { + pop pop pop pop pop + } + { + (ldiagtagdict) search + { + pop pop pop pop pop + } + { + pop cvx exec 2 copy + gsave + newpath 2.0 pt 0 360 arc 0 setgray fill + /Times-Roman findfont 8 pt scalefont setfont + translate 40 rotate 0.2 cm 0.1 cm moveto 20 string cvs show + grestore + } ifelse + } ifelse + } ifelse + } ifelse + } forall + % (Leaving ldiagshowtags) 0 ldiagdebugprint +} def + + +% show angles: - ldiagshowangles - +/ldiagshowangles +{ + % (Entering ldiagshowangles) 0 ldiagdebugprint + ldiagtoptagdict + { 1 index 20 string cvs + % dup 0 ldiagdebugprint + (ldiagdebugpos) search + { pop pop pop pop pop } + { + (ldiagtagdict) search + { + pop pop pop pop pop + } + { + (CIRCUM) search % if CIRCUM in key + { pop pop pop pop pop } + { + (@ANGLE) search % if ANGLE in key, draw the angle at the point + { + % (showing ANGLE) 5 ldiagdebugprint + gsave exch pop exch pop cvx + % (about to execute) 1 ldiagdebugprint + exec translate rotate 0.8 0.8 scale pop + newpath 0 0 2.0 pt 0 360 arc 0 setgray fill + newpath 4 pt 0 moveto 9 pt 0 lineto + 9 pt 1.5 pt lineto 11 pt 0 lineto 9 pt -1.5 pt lineto + 9 pt 0 lineto [] 0 setdash 4 pt setlinewidth 0 setlinejoin + stroke grestore + % (finished ANGLE) 5 ldiagdebugprint + } + { + % else must be a point, we aren't showing those + pop pop pop + } ifelse + } ifelse + } ifelse + } ifelse + } forall + % (Leaving ldiagshowangles) 0 ldiagdebugprint +} def + +% fix an angle to 0 <= res < 360: <angle> ldiagfixangle <angle> +/ldiagfixangle +{ + % (Entering ldiagfixangle) 1 ldiagdebugprint + { dup 0 ge { exit } if + 360 add + } loop + { dup 360 lt { exit } if + 360 sub + } loop + % (Leaving ldiagfixangle) 1 ldiagdebugprint +} def + +% find point on circumference of box: alpha a b ldiagboxcircum x y +/ldiagboxcircum +{ + % (Entering ldiagboxcircum) 3 ldiagdebugprint + 4 dict begin + /b exch def + /a exch def + ldiagfixangle /alpha exch def + 0 0 a b ldiagangleto /theta exch def + + % if alpha <= theta, return (a, a*tan(alpha)) + alpha theta le + { a a alpha sin mul alpha cos div } + { + % else if alpha <= 180 - theta, return (b*cot(alpha), b) + alpha 180 theta sub le + { b alpha cos mul alpha sin div b } + { + % else if alpha <= 180 + theta, return (-a, -a*tan(alpha)) + alpha 180 theta add le + { a neg a neg alpha sin mul alpha cos div } + { + % else if alpha <= 360 - theta, return (-b*cot(alpha), -b) + alpha 360 theta sub le + { b neg alpha cos mul alpha sin div b neg } + { + % else 360 - theta <= alpha, return (a, a*tan(alpha)) + a a alpha sin mul alpha cos div + } ifelse + } ifelse + } ifelse + } ifelse + end + % (Leaving ldiagboxcircum) 2 ldiagdebugprint +} def + +% find quadratic roots (assume a != 0): a b c ldiagqroots x1 x2 2 +% or x2 1 +% or 0 +/ldiagqroots +{ + 4 dict begin + /c exch def + /b exch def + /a exch def + /disc b b mul 4 a c mul mul sub def + disc 0 lt + { 0 + } + { disc 0 eq + { b neg 2 a mul div + 1 + } + { b neg disc sqrt add 2 a mul div + b neg disc sqrt sub 2 a mul div + 2 + } + ifelse + } + ifelse + end +} def + +% work our which quadrant: <angle> ldiagquadrant <0-3> +/ldiagquadrant +{ dup 90 lt + { pop 0 + } + { dup 180 lt + { pop 1 + } + { 270 lt + { 2 + } + { 3 + } ifelse + } ifelse + } ifelse +} def + +% find curvebox circum, assuming upper right quadrant: alpha a b xmk ldiagcb x y +/ldiagcb +{ + 6 dict begin + /xmk exch def + /b exch def + /a exch def + /alpha exch def + /theta1 0 0 a b xmk sub ldiagangleto def + /theta2 0 0 a xmk sub b ldiagangleto def + alpha theta1 le + { % if alpha <= theta1, return (a, a*tan(alpha)) + a a alpha sin mul alpha cos div + } + { alpha theta2 ge + { % else if alpha > theta2, return (b*cot(alpha), b) + b alpha cos mul alpha sin div b + } + { + % else, return the intersection of line and circle + a xmk sub b xmk sub xmk 0 0 alpha ldiagcircleintersect + dup 0 eq + { % should never happen, just return any reasonable point + pop + a b 0.5 ldiagpmul + } + { 1 eq + { % should never happen, just return the point on top of stack + } + { % the usual case, two points on stack, return the larger + ldiagpmax + } ifelse + } ifelse + } ifelse + } ifelse + end +} def + +% find point on circumference of curvebox: alpha a b xmk ldiagcurveboxcircum x y +/ldiagcurveboxcircum +{ + % (Entering ldiagcurveboxcircum) 4 ldiagdebugprint + 5 dict begin + /xmk exch def + /b exch def + /a exch def + ldiagfixangle /alpha exch def + + % work out which quadrant we are in, and reflect accordingly + /quad alpha ldiagquadrant def + quad 0 eq + { alpha a b xmk ldiagcb + } + { quad 1 eq + { 180 alpha sub a b xmk ldiagcb exch neg exch + } + { quad 2 eq + { alpha 180 sub a b xmk ldiagcb neg exch neg exch + } + { 360 alpha sub a b xmk ldiagcb neg + } ifelse + } ifelse + } ifelse + end + % (Leaving ldiagcurveboxcircum) 2 ldiagdebugprint +} def + +% find point on circumference of diamond: alpha a b ldiagdiamondcircum x y +/ldiagdiamondcircum +{ + % (Entering ldiagdiamondcircum) 3 ldiagdebugprint + 4 dict begin + /b exch def + /a exch def + ldiagfixangle /alpha exch def + b alpha cos abs mul a alpha sin abs mul add /denom exch def + a b mul alpha cos mul denom div + a b mul alpha sin mul denom div + end + % (Leaving ldiagdiamondcircum) 2 ldiagdebugprint +} def + +% find point on circumference of ellipse: alpha a b ldiagellipsecircum x y +/ldiagellipsecircum +{ + % (Entering ldiagellipsecircum) 3 ldiagdebugprint + 4 dict begin + /b exch def + /a exch def + ldiagfixangle /alpha exch def + b alpha cos mul dup mul a alpha sin mul dup mul add sqrt /denom exch def + a b mul alpha cos mul denom div + a b mul alpha sin mul denom div + end + % (Leaving ldiagellipsecircum) 2 ldiagdebugprint +} def + +% find point on circumference of isosceles: alpha a b ldiagisoscelescircum x y +/ldiagisoscelescircum +{ + % (Entering ldiagisoscelescircum) 3 ldiagdebugprint + 7 dict begin + /b exch def + /a exch def + /alpha exch ldiagfixangle def + /theta1 90 def + /theta2 a b 0.5 ldiagpmul 0 0 ldiagangleto def + /theta3 a b 0.5 ldiagpmul a 0 ldiagangleto def + alpha theta1 ge alpha theta2 le and + { 0 0 a 2 div b + } + { alpha theta2 ge alpha theta3 le and + { 0 0 a 0 + } + { a 0 a 2 div b + } ifelse + } ifelse + a 2 div b 2 div 2 copy 1 ft alpha ldiagatangle ldiaglineintersect + a 2 div b 2 div 4 2 roll ldiagpsub + end + % (Leaving ldiagisoscelescircum) 2 ldiagdebugprint +} def + +% find point of intersection of two lines each defined by two points +% x1 y1 x2 y2 x3 y3 x4 y4 ldiaglineintersect x y +/ldiaglineintersect +{ + % (Entering ldiaglineintersect) 8 ldiagdebugprint + 13 dict begin + /y4 exch def + /x4 exch def + /y3 exch def + /x3 exch def + /y2 exch def + /x2 exch def + /y1 exch def + /x1 exch def + x2 x1 sub /x21 exch def + x4 x3 sub /x43 exch def + y2 y1 sub /y21 exch def + y4 y3 sub /y43 exch def + y21 x43 mul y43 x21 mul sub /det exch def + + % calculate x + y21 x43 mul x1 mul + y43 x21 mul x3 mul sub + y3 y1 sub x21 mul x43 mul add + det div + + % calculate y + x21 y43 mul y1 mul + x43 y21 mul y3 mul sub + x3 x1 sub y21 mul y43 mul add + det neg div + + end + % (Leaving ldiaglineintersect) 2 ldiagdebugprint +} def + +% find point on circumference of polygon +% alpha radius num theta ldiagpolycircum x y +/ldiagpolycircum +{ + % (Entering ldiagpolycircum) 4 ldiagdebugprint + 13 dict begin + /theta exch def + /num exch def + /radius exch def + /alpha exch def + + % calculate delta, the angle from theta to alpha + alpha theta sub ldiagfixangle + + % calculate the angle which is the multiple of 360/num closest to delta + 360 num div div truncate 360 num div mul theta add /anglea exch def + + % calculate the next multiple of 360/num after anglea + anglea 360 num div add /angleb exch def + + % intersect the line through these two points with the alpha line + anglea cos anglea sin angleb cos angleb sin + 0 0 alpha cos 2 mul alpha sin 2 mul + ldiaglineintersect radius ldiagpmul + + end + % (Leaving ldiagpolycircum) 2 ldiagdebugprint +} def + +% find point of intersection of a line and a circle +% x0 y0 r x1 y1 theta ldiagcircleintersect xa ya xb yb 2 +% or xb yb 1 +% or 0 +/ldiagcircleintersect +{ + % (Entering ldiagcircleintersect) 6 ldiagdebugprint + 15 dict begin + /theta exch def + /y1 exch def + /x1 exch def + /r exch def + /y0 exch def + /x0 exch def + + % if sin(theta) = 0 then line is horizontal and y must be y1 + theta sin abs 0.00001 lt + { + /a 1 def + /b -2 x0 mul def + /c x0 dup mul y1 y0 sub dup mul add r dup mul sub def + a b c ldiagqroots dup + 0 eq + { pop + 0 + } + { 1 eq + { y1 1 + } + { y1 exch y1 2 + } ifelse + } ifelse + } + { + /ct theta cos theta sin div def + /a ct ct mul 1 add def + /b ct x1 x0 sub mul y1 add y0 sub 2 mul def + /c x1 x0 sub dup mul y1 y0 sub dup mul add r dup mul sub def + a b c ldiagqroots dup + 0 eq + { pop + 0 + } + { 1 eq + { y1 add /yb exch def + yb y1 sub ct mul x1 add /xb exch def + xb yb 1 + } + { y1 add /ya exch def + ya y1 sub ct mul x1 add /xa exch def + y1 add /yb exch def + yb y1 sub ct mul x1 add /xb exch def + xa ya xb yb 2 + } ifelse + } ifelse + } ifelse + end + % (Leaving ldiagcircleintersect) 1 ldiagdebugprint +} def + +% find line which is the perpendicular bisector of two points, defined +% by two points +% x1 y1 x2 y2 ldiaglinebetween x3 y3 x4 y4 +/ldiaglinebetween +{ % (Entering ldiaglinebetween) 4 ldiagdebugprint + /y2 exch def /x2 exch def + /y1 exch def /x1 exch def + + % let x3, y3 be the point halfway between the two points + x1 y1 x2 y2 ldiagpadd 0.5 ldiagpmul + /y3 exch def /x3 exch def + + % find a point perpendicular to x3, y3 + x3 y3 50 x1 y1 x2 y2 ldiagangleto 90 dg add ldiagatangle + + % plus x3 y3 gives the two points + x3 y3 + + % (Leaving ldiaglinebetween) 4 ldiagdebugprint +} def + +% find <proc>@<string>: <proc> <string> ldiagfindlabel <any> true +% <proc> <string> false +/ldiagfindlabel +{ + % (Entering ldiagfindlabel) 2 ldiagdebugprint + exch dup length 1 ne + { exch false + % (Leaving ldiagfindabel (length not 1)) 3 ldiagdebugprint + } + { dup 0 get type /nametype ne + { exch false + % (Leaving ldiagfindabel (not a name)) 3 ldiagdebugprint + } + { dup 0 get 50 string cvs (@) ldiagconcat 2 index ldiagconcat dup where + { exch get exch pop exch pop cvx exec true + % (Leaving ldiagfindlabel with success) 100 ldiagdebugprint + } + { + pop exch false + % (Leaving ldiagfindabel (concat not sensible)) 3 ldiagdebugprint + } ifelse + } ifelse + } ifelse +} bind def + +% execute <proc>@<string> or else default: <proc> <string> ldiagdolabel <various> +/ldiagdolabel +{ + % (Entering ldiagdolabel) 2 ldiagdebugprint + ldiagfindlabel not + { + dup (CIRCUM) eq + { pop pop pop 0 0 + } + { + dup (ANGLE) eq + { pop pop 0 + } + { pop cvx exec + } ifelse + } ifelse + } if + % (Leaving ldiagdolabel) 2 ldiagdebugprint +} bind def + +% execute a proc depending on whether number is negative, zero, or positive +% procneg proczero procpos number ldiagsigncase <anything> +/ldiagsigncase +{ + % (Entering ldiagsigncase) 4 ldiagdebugprint + dup 0 lt + { pop pop pop exec + } + { 0 gt + { exch pop exch pop exec + } + { pop exch pop exec + } ifelse + } ifelse + % (Leaving ldiagsigncase) 0 ldiagdebugprint +} bind def + +% execute proci if angle is in ith quadrant +% proc45 proc270 proc180 proc90 proc0 proc315 proc225 proc135 angle ldiagquadcase <anything> +/ldiagquadcase +{ + % (Entering ldiagquadcase) 9 ldiagdebugprint + round ldiagfixangle cvi dup 90 mod 0 eq + { 90 idiv 4 add } { 90 idiv } ifelse + 8 exch roll pop pop pop pop pop pop pop exec + % (Leaving ldiagquadcase) 0 ldiagdebugprint +} bind def + +% decode Lout length into PostScript length +% <string> ldiagdecodelength <number> +/ldiagdecodelength +{ + % (Entering ldiagdecodelength) 1 ldiagdebugprint + (f) search + { exch pop exch pop cvr ft + } + { (c) search + { exch pop exch pop cvr cm + } + { (p) search + { exch pop exch pop cvr pt + } + { (m) search + { exch pop exch pop cvr em + } + { (s) search + { exch pop exch pop cvr sp + } + { (v) search + { exch pop exch pop cvr vs + } + { (i) search + { exch pop exch pop cvr in + } + { pop 0 + } ifelse + } ifelse + } ifelse + } ifelse + } ifelse + } ifelse + } ifelse + % (Leaving ldiagdecodelength) 1 ldiagdebugprint +} def + +% implement aabout function +% logical form: <circum> <extra> <centre> aabout <point> +% actual form: { <labelorpoint> } cvlit <length> [ <point> ] cvx aabout <point> +/ldiagaabout +{ + /centre exch def + /extra exch def + /circum exch def + + /ZXCTR [ centre ] cvx def + /ZFCTR [ circum (CTR) ldiagdolabel ] cvx def + /ZAREF ZFCTR ZXCTR ldiagangleto def + /ZAMIN 0 dg def + /ZPMIN [ circum (CTR) ldiagdolabel ZAREF ZAMIN sub + circum (CIRCUM) ldiagdolabel ldiagpadd + 0 0 extra ZAREF ZAMIN sub ldiagatangle + ldiagpadd ] cvx def + + /ZAMAX 90 dg def + /ZPMAX [ circum (CTR) ldiagdolabel ZAREF ZAMAX sub + circum (CIRCUM) ldiagdolabel ldiagpadd + 0 0 extra ZAREF ZAMAX sub ldiagatangle + ldiagpadd ] cvx def + + 1 1 20 + { /xval exch def + /ZAMID ZAMIN ZAMAX add 0.5 mul def + /ZPMID [ circum (CTR) ldiagdolabel ZAREF ZAMID sub + circum (CIRCUM) ldiagdolabel ldiagpadd + 0 0 extra ZAREF ZAMID sub ldiagatangle + ldiagpadd ] cvx def + ZPMID ZXCTR ldiagdistance ZFCTR ZXCTR ldiagdistance gt + { + /ZAMAX [ ZAMID ] cvx def + /ZPMAX [ ZPMID ] cvx def + } + { + /ZAMIN [ ZAMID ] cvx def + /ZPMIN [ ZPMID ] cvx def + } ifelse + } for + ZPMID +} def + +% implement cabout function +% logical form: <circum> <extra> <centre> cabout <point> +% actual form: { <labelorpoint> } cvlit <length> [ <point> ] cvx cabout <point> +/ldiagcabout +{ + /centre exch def + /extra exch def + /circum exch def + + /ZXCTR [ centre ] cvx def + /ZFCTR [ circum (CTR) ldiagdolabel ] cvx def + /ZAREF ZFCTR ZXCTR ldiagangleto def + /ZAMIN 0 dg def + /ZPMIN [ circum (CTR) ldiagdolabel ZAREF ZAMIN add + circum (CIRCUM) ldiagdolabel ldiagpadd + 0 0 extra ZAREF ZAMIN add ldiagatangle + ldiagpadd ] cvx def + + /ZAMAX 90 dg def + /ZPMAX [ circum (CTR) ldiagdolabel ZAREF ZAMAX add + circum (CIRCUM) ldiagdolabel ldiagpadd + 0 0 extra ZAREF ZAMAX add ldiagatangle + ldiagpadd ] cvx def + + 1 1 20 + { /xval exch def + /ZAMID ZAMIN ZAMAX add 0.5 mul def + /ZPMID [ circum (CTR) ldiagdolabel ZAREF ZAMID add + circum (CIRCUM) ldiagdolabel ldiagpadd + 0 0 extra ZAREF ZAMID add ldiagatangle + ldiagpadd ] cvx def + ZPMID ZXCTR ldiagdistance ZFCTR ZXCTR ldiagdistance gt + { + /ZAMAX [ ZAMID ] cvx def + /ZPMAX [ ZPMID ] cvx def + } + { + /ZAMIN [ ZAMID ] cvx def + /ZPMIN [ ZPMID ] cvx def + } ifelse + } for + ZPMID +} def + +% fromarrowlength toarrowlength { from } { to } xindent zindent ldiaglinepath - +/ldiaglinepath +{ + % (entering ldiaglinepath) 0 ldiagdebugprint + /zindent exch def + /xindent exch def + cvlit /to exch def + cvlit /from exch def + /toarrowlength exch def + /fromarrowlength exch def + + from (CTR) ldiagdolabel to (CTR) ldiagdolabel ldiagangleto + /FROM@ANGLE ldiagangledef + from (CTR) ldiagdolabel FROM@ANGLE from (CIRCUM) ldiagdolabel ldiagpadd + 0 0 fromarrowlength FROM@ANGLE ldiagatangle ldiagpadd + /FROM ldiagpointdef + + FROM@ANGLE /TO@ANGLE ldiagangledef + to (CTR) ldiagdolabel TO@ANGLE 180 dg sub to (CIRCUM) ldiagdolabel ldiagpadd + 0 0 toarrowlength TO@ANGLE 180 dg sub ldiagatangle ldiagpadd /TO ldiagpointdef + + FROM 0.5 ldiagpmul TO 0.5 ldiagpmul ldiagpadd /LMID ldiagpointdef + FROM@ANGLE /LMID@ANGLE ldiagangledef + + /XINDENT xindent FROM LMID ldiagdistance ldiagmin def + FROM 0 0 XINDENT FROM@ANGLE ldiagatangle ldiagpadd /LFROM ldiagpointdef + FROM@ANGLE /LFROM@ANGLE ldiagangledef + + /ZINDENT zindent TO LMID ldiagdistance ldiagmin def + 0 0 ZINDENT FROM@ANGLE ldiagatangle TO ldiagpsub /LTO ldiagpointdef + FROM@ANGLE /LTO@ANGLE ldiagangledef + + direct { FROM TO } { FROM LFROM LMID LTO TO } ifelse + + % (leaving ldiaglinepath) 0 ldiagdebugprint +} def + +% fromarrowlength toarrowlength { from } { to } xindent zindent pathgap ldiagdoublelinepath - +/ldiagdoublelinepath +{ + % (entering ldiagdoublelinepath) 0 ldiagdebugprint + /pathgap exch def + /zindent exch def + /xindent exch def + cvlit /to exch def + cvlit /from exch def + /toarrowlength exch def + /fromarrowlength exch def + + from (CTR) ldiagdolabel to (CTR) ldiagdolabel ldiagangleto + /FROM@ANGLE ldiagangledef + from (CTR) ldiagdolabel FROM@ANGLE from (CIRCUM) ldiagdolabel ldiagpadd + 0 0 fromarrowlength FROM@ANGLE ldiagatangle ldiagpadd + /FROM ldiagpointdef + + FROM@ANGLE /TO@ANGLE ldiagangledef + to (CTR) ldiagdolabel TO@ANGLE 180 dg sub to (CIRCUM) ldiagdolabel ldiagpadd + 0 0 toarrowlength TO@ANGLE 180 dg sub ldiagatangle ldiagpadd /TO ldiagpointdef + + FROM 0.5 ldiagpmul TO 0.5 ldiagpmul ldiagpadd /LMID ldiagpointdef + FROM@ANGLE /LMID@ANGLE ldiagangledef + + /XINDENT xindent FROM LMID ldiagdistance ldiagmin def + FROM 0 0 XINDENT FROM@ANGLE ldiagatangle ldiagpadd /LFROM ldiagpointdef + FROM@ANGLE /LFROM@ANGLE ldiagangledef + + /ZINDENT zindent TO LMID ldiagdistance ldiagmin def + 0 0 ZINDENT FROM@ANGLE ldiagatangle TO ldiagpsub /LTO ldiagpointdef + FROM@ANGLE /LTO@ANGLE ldiagangledef + + direct { + FROM pathgap 2 div FROM@ANGLE 90 dg sub ldiagatangle + TO pathgap 2 div FROM@ANGLE 90 dg sub ldiagatangle + [] + FROM pathgap 2 div FROM@ANGLE 90 dg add ldiagatangle + TO pathgap 2 div FROM@ANGLE 90 dg add ldiagatangle + } + { + FROM pathgap 2 div FROM@ANGLE 90 dg sub ldiagatangle + LFROM pathgap 2 div FROM@ANGLE 90 dg sub ldiagatangle + LMID pathgap 2 div FROM@ANGLE 90 dg sub ldiagatangle + LTO pathgap 2 div FROM@ANGLE 90 dg sub ldiagatangle + TO pathgap 2 div FROM@ANGLE 90 dg sub ldiagatangle + [] + FROM pathgap 2 div FROM@ANGLE 90 dg add ldiagatangle + LFROM pathgap 2 div FROM@ANGLE 90 dg add ldiagatangle + LMID pathgap 2 div FROM@ANGLE 90 dg add ldiagatangle + LTO pathgap 2 div FROM@ANGLE 90 dg add ldiagatangle + TO pathgap 2 div FROM@ANGLE 90 dg add ldiagatangle + } ifelse + + % (leaving ldiagdoublelinepath) 0 ldiagdebugprint +} def + +% fromarrowlen toarrowlen { from } { to } xindent zindent bias ldiagacurvepath - +/ldiagacurvepath +{ + % (entering ldiagacurvepath) 0 ldiagdebugprint + /bias exch def + /zindent exch def + /xindent exch def + cvlit /to exch def + cvlit /from exch def + /toarrowlength exch def + /fromarrowlength exch def + + %/B1 bias 0.02 ft ldiagmax def + %/B2 from (CTR) ldiagdolabel to (CTR) ldiagdolabel ldiagdistance 0.5 mul def + %/BIAS B1 B2 ldiagmin def + /BIAS bias 0.02 ft ldiagmax def + /XMID [ from (CTR) ldiagdolabel 0.5 ldiagpmul + to (CTR) ldiagdolabel 0.5 ldiagpmul ldiagpadd ] cvx def + /XTOP [ XMID 0 0 BIAS from (CTR) ldiagdolabel to (CTR) ldiagdolabel + ldiagangleto 90 dg sub ldiagatangle ldiagpadd ] cvx def + /CTR [ from (CTR) ldiagdolabel XTOP ldiaglinebetween + to (CTR) ldiagdolabel XTOP ldiaglinebetween + ldiaglineintersect ] cvx def + + from fromarrowlength [ CTR ] cvx ldiagaabout /FROM ldiagpointdef + from (CTR) ldiagdolabel FROM ldiagdistance 0 gt + { from (CTR) ldiagdolabel FROM ldiagangleto + } + { CTR FROM ldiagangleto 90 dg add + } ifelse /FROM@ANGLE ldiagangledef + + to toarrowlength [ CTR ] cvx ldiagcabout /TO ldiagpointdef + TO to (CTR) ldiagdolabel ldiagdistance 0 gt + { TO to (CTR) ldiagdolabel ldiagangleto + } + { CTR TO ldiagangleto 90 dg add + } ifelse /TO@ANGLE ldiagangledef + + /RADIUS CTR FROM ldiagdistance def + CTR 0 0 RADIUS CTR FROM ldiagangleto 360 dg CTR TO ldiagangleto + add CTR FROM ldiagangleto sub cvi 360 mod 0.5 mul add + ldiagatangle ldiagpadd /LMID ldiagpointdef + CTR LMID ldiagangleto 90 dg add /LMID@ANGLE ldiagangledef + + /XINDENT xindent FROM LMID ldiagdistance ldiagmin def + CTR 0 0 RADIUS CTR FROM 0 0 XINDENT FROM@ANGLE ldiagatangle + ldiagpadd ldiagangleto ldiagatangle ldiagpadd /LFROM ldiagpointdef + CTR LFROM ldiagangleto 90 dg add /LFROM@ANGLE ldiagangledef + + /ZINDENT zindent TO LMID ldiagdistance ldiagmin def + CTR 0 0 RADIUS CTR TO 0 0 ZINDENT TO@ANGLE 180 dg add + ldiagatangle ldiagpadd ldiagangleto ldiagatangle ldiagpadd /LTO ldiagpointdef + CTR LTO ldiagangleto 90 dg add /LTO@ANGLE ldiagangledef + + direct + { FROM [CTR] TO } + { FROM [CTR] LFROM [CTR] LMID [CTR] LTO [CTR] TO } + ifelse + + % (leaving ldiagacurvepath) 0 ldiagdebugprint +} def + +% fromarrowlen toarrowlen { from } { to } xindent zindent bias ldiagccurvepath - +/ldiagccurvepath +{ + % (entering ldiagccurvepath) 0 ldiagdebugprint + % count ( stack size is) 1 ldiagdebugprint pop + /bias exch def + /zindent exch def + /xindent exch def + cvlit /to exch def + cvlit /from exch def + /toarrowlength exch def + /fromarrowlength exch def + + %/B1 bias 0.02 ft ldiagmax def + %/B2 from (CTR) ldiagdolabel to (CTR) ldiagdolabel ldiagdistance 0.5 mul def + %/BIAS B1 B2 ldiagmin def + /BIAS bias 0.02 ft ldiagmax def + /XMID [ from (CTR) ldiagdolabel 0.5 ldiagpmul + to (CTR) ldiagdolabel 0.5 ldiagpmul ldiagpadd ] cvx def + /XTOP [ XMID 0 0 BIAS from (CTR) ldiagdolabel to (CTR) ldiagdolabel + ldiagangleto 90 dg add ldiagatangle ldiagpadd ] cvx def + /CTR [ from (CTR) ldiagdolabel XTOP ldiaglinebetween + to (CTR) ldiagdolabel XTOP ldiaglinebetween ldiaglineintersect ] cvx def + + from fromarrowlength [ CTR ] cvx ldiagcabout /FROM ldiagpointdef + from (CTR) ldiagdolabel FROM ldiagdistance 0 gt + { from (CTR) ldiagdolabel FROM ldiagangleto } + { CTR FROM ldiagangleto 90 dg sub } + ifelse /FROM@ANGLE ldiagangledef + + to toarrowlength [ CTR ] cvx ldiagaabout /TO ldiagpointdef + TO to (CTR) ldiagdolabel ldiagdistance 0 gt + { TO to (CTR) ldiagdolabel ldiagangleto } + { CTR TO ldiagangleto 90 dg sub } + ifelse /TO@ANGLE ldiagangledef + + /RADIUS [ CTR FROM ldiagdistance ] cvx def + CTR 0 0 RADIUS CTR TO ldiagangleto 360 dg CTR FROM ldiagangleto add + CTR TO ldiagangleto sub cvi 360 cvi mod 2 div add ldiagatangle + ldiagpadd /LMID ldiagpointdef + CTR LMID ldiagangleto 90 dg sub /LMID@ANGLE ldiagangledef + + /XINDENT [ xindent FROM LMID ldiagdistance ldiagmin ] cvx def + CTR 0 0 RADIUS CTR FROM 0 0 XINDENT FROM@ANGLE ldiagatangle ldiagpadd + ldiagangleto ldiagatangle ldiagpadd /LFROM ldiagpointdef + CTR LFROM ldiagangleto 90 dg sub /LFROM@ANGLE ldiagangledef + + /ZINDENT [ zindent TO LMID ldiagdistance ldiagmin ] cvx def + CTR 0 0 RADIUS CTR TO 0 0 ZINDENT TO@ANGLE 180 dg add ldiagatangle + ldiagpadd ldiagangleto ldiagatangle ldiagpadd /LTO ldiagpointdef + CTR LTO ldiagangleto 90 dg sub /LTO@ANGLE ldiagangledef + + direct + { FROM [CTR clockwise] TO } + { FROM [CTR clockwise] LFROM [CTR clockwise] + LMID [CTR clockwise] LTO [CTR clockwise] TO } + ifelse + % (leaving ldiagccurvepath) 0 ldiagdebugprint +} def + + +% farr tarr { from } { to } xindent zindent [frompt] [topt] ldiagbezierpath - +/ldiagbezierpath +{ + % (entering ldiagbezierpath) 0 ldiagdebugprint + % count ( stack size is) 1 ldiagdebugprint pop + cvx /topt exch def + cvx /frompt exch def + /zindent exch def + /xindent exch def + cvlit /to exch def + cvlit /from exch def + /toarrowlength exch def + /fromarrowlength exch def + + from (CTR) ldiagdolabel frompt ldiagangleto /FROM@ANGLE ldiagangledef + from (CTR) ldiagdolabel FROM@ANGLE from (CIRCUM) ldiagdolabel + ldiagpadd 0 0 fromarrowlength FROM@ANGLE ldiagatangle ldiagpadd + /FROM ldiagpointdef + + topt to (CTR) ldiagdolabel ldiagangleto /TO@ANGLE ldiagangledef + to (CTR) ldiagdolabel TO@ANGLE 180 dg add to (CIRCUM) ldiagdolabel + ldiagpadd 0 0 toarrowlength TO@ANGLE 180 dg add ldiagatangle ldiagpadd + /TO ldiagpointdef + + FROM 0 0 xindent FROM@ANGLE ldiagatangle ldiagpadd + /LFROM ldiagpointdef + FROM@ANGLE /LFROM@ANGLE ldiagangledef + + TO 0 0 zindent TO@ANGLE 180 dg add ldiagatangle ldiagpadd + /LTO ldiagpointdef + TO@ANGLE /LTO@ANGLE ldiagangledef + + FROM TO ldiagpadd frompt ldiagpadd topt ldiagpadd 0.25 ldiagpmul + /LMID ldiagpointdef + + FROM [frompt topt] TO + + % (leaving ldiagbezierpath) 0 ldiagdebugprint + % count ( stack size is) 1 ldiagdebugprint pop +} def + + +% farr tarr { from } { to } xindent zindent ldiagvhlinepath - +/ldiagvhlinepath +{ + % (entering ldiagvhlinepath) 0 ldiagdebugprint + % count ( stack size is) 1 ldiagdebugprint pop + /zindent exch def + /xindent exch def + cvlit /to exch def + cvlit /from exch def + /toarrowlength exch def + /fromarrowlength exch def + + /CTR [ from (CTR) ldiagdolabel pop to (CTR) ldiagdolabel exch pop ] cvx def + /FANG [ from (CTR) ldiagdolabel CTR ldiagangleto ] cvx def + /TANG [ to (CTR) ldiagdolabel CTR ldiagangleto ] cvx def + + from (CTR) ldiagdolabel FANG from (CIRCUM) ldiagdolabel ldiagpadd + 0 0 fromarrowlength FANG ldiagatangle ldiagpadd /FROM ldiagpointdef + FANG /FROM@ANGLE ldiagangledef + + to (CTR) ldiagdolabel TANG to (CIRCUM) ldiagdolabel ldiagpadd + 0 0 toarrowlength TANG ldiagatangle ldiagpadd /TO ldiagpointdef + TANG 180 dg add /TO@ANGLE ldiagangledef + + /FDIST [ FROM CTR ldiagdistance ] cvx def + /TDIST [ TO CTR ldiagdistance ] cvx def + /XINDENT [ xindent FDIST ldiagmin ] cvx def + /ZINDENT [ zindent TDIST ldiagmin ] cvx def + FROM 0 0 XINDENT FANG ldiagatangle ldiagpadd /LFROM ldiagpointdef + FROM@ANGLE /LFROM@ANGLE ldiagangledef + TO 0 0 ZINDENT TANG ldiagatangle ldiagpadd /LTO ldiagpointdef + TO@ANGLE /LTO@ANGLE ldiagangledef + + CTR /LMID ldiagpointdef + 0 0 1 ft FANG 180 dg add ldiagatangle + 0 0 1 ft TANG 180 dg add ldiagatangle + ldiagangleto /LMID@ANGLE ldiagangledef + + FROM LFROM LMID LTO TO + + % (leaving ldiagvhlinepath) 0 ldiagdebugprint + % count ( stack size is) 1 ldiagdebugprint pop +} def + +% farr tarr { from } { to } xindent zindent radius ldiagvhcurvepath - +/ldiagvhcurvepath +{ + % (entering ldiagvhcurvepath) 0 ldiagdebugprint + % count ( stack size is) 1 ldiagdebugprint pop + /radius exch def + /zindent exch def + /xindent exch def + cvlit /to exch def + cvlit /from exch def + /toarrowlength exch def + /fromarrowlength exch def + + /CTR [ from (CTR) ldiagdolabel pop to (CTR) ldiagdolabel exch pop ] cvx def + /FANG [ from (CTR) ldiagdolabel CTR ldiagangleto ] cvx def + /TANG [ to (CTR) ldiagdolabel CTR ldiagangleto ] cvx def + + from (CTR) ldiagdolabel FANG from (CIRCUM) ldiagdolabel ldiagpadd + 0 0 fromarrowlength FANG ldiagatangle ldiagpadd /FROM ldiagpointdef + FANG /FROM@ANGLE ldiagangledef + + to (CTR) ldiagdolabel TANG to (CIRCUM) ldiagdolabel ldiagpadd + 0 0 toarrowlength TANG ldiagatangle ldiagpadd /TO ldiagpointdef + TANG 180 dg add /TO@ANGLE ldiagangledef + + /FDIST [ FROM CTR ldiagdistance ] cvx def + /TDIST [ TO CTR ldiagdistance ] cvx def + /RADIUS [ radius FDIST TDIST ldiagmin ldiagmin ] cvx def + /XINDENT [ xindent FDIST RADIUS sub ldiagmin ] cvx def + /ZINDENT [ zindent TDIST RADIUS sub ldiagmin ] cvx def + + FROM 0 0 XINDENT FANG ldiagatangle ldiagpadd /LFROM ldiagpointdef + FROM@ANGLE /LFROM@ANGLE ldiagangledef + TO 0 0 ZINDENT TANG ldiagatangle ldiagpadd /LTO ldiagpointdef + TO@ANGLE /LTO@ANGLE ldiagangledef + + /FCTR [ CTR 0 0 RADIUS FROM@ANGLE 180 dg add ldiagatangle ldiagpadd ] cvx def + /TCTR [ CTR 0 0 RADIUS TO@ANGLE ldiagatangle ldiagpadd ] cvx def + /XCTR [ CTR 0 0 RADIUS FROM@ANGLE 180 dg add ldiagatangle ldiagpadd + 0 0 RADIUS TO@ANGLE ldiagatangle ldiagpadd ] cvx def + XCTR 0 0 RADIUS XCTR CTR ldiagangleto ldiagatangle ldiagpadd + /LMID ldiagpointdef + FCTR TCTR ldiagangleto /LMID@ANGLE ldiagangledef + + FROM LFROM FCTR + {[XCTR clockwise]} {} {} {} {} {[XCTR]} {[XCTR clockwise]} {[XCTR]} + FCTR TCTR ldiagangleto ldiagquadcase + TCTR LTO TO + + % (leaving ldiagvhcurvepath) 0 ldiagdebugprint + % count ( stack size is) 1 ldiagdebugprint pop +} def + +% farr tarr { from } { to } xindent zindent ldiaghvlinepath - +/ldiaghvlinepath +{ + % (entering ldiaghvlinepath) 0 ldiagdebugprint + % count ( stack size is) 1 ldiagdebugprint pop + /zindent exch def + /xindent exch def + cvlit /to exch def + cvlit /from exch def + /toarrowlength exch def + /fromarrowlength exch def + + /CTR [ to (CTR) ldiagdolabel pop from (CTR) ldiagdolabel exch pop ] cvx def + /FANG [ from (CTR) ldiagdolabel CTR ldiagangleto ] cvx def + /TANG [ to (CTR) ldiagdolabel CTR ldiagangleto ] cvx def + + from (CTR) ldiagdolabel FANG from (CIRCUM) ldiagdolabel ldiagpadd + 0 0 fromarrowlength FANG ldiagatangle ldiagpadd /FROM ldiagpointdef + FANG /FROM@ANGLE ldiagangledef + + to (CTR) ldiagdolabel TANG to (CIRCUM) ldiagdolabel ldiagpadd + 0 0 toarrowlength TANG ldiagatangle ldiagpadd /TO ldiagpointdef + TANG 180 dg add /TO@ANGLE ldiagangledef + + /FDIST [ FROM CTR ldiagdistance ] cvx def + /TDIST [ TO CTR ldiagdistance ] cvx def + /XINDENT [ xindent FDIST ldiagmin ] cvx def + /ZINDENT [ zindent TDIST ldiagmin ] cvx def + + FROM 0 0 XINDENT FANG ldiagatangle ldiagpadd /LFROM ldiagpointdef + FROM@ANGLE /LFROM@ANGLE ldiagangledef + TO 0 0 ZINDENT TANG ldiagatangle ldiagpadd /LTO ldiagpointdef + TO@ANGLE /LTO@ANGLE ldiagangledef + + CTR /LMID ldiagpointdef + 0 0 1 ft FANG 180 dg add ldiagatangle + 0 0 1 ft TANG 180 dg add ldiagatangle ldiagangleto + /LMID@ANGLE ldiagangledef + + FROM LFROM LMID LTO TO + + % (leaving ldiaghvlinepath) 0 ldiagdebugprint + % count ( stack size is) 1 ldiagdebugprint pop +} def + +% farr tarr { from } { to } xindent zindent radius ldiaghvcurvepath - +/ldiaghvcurvepath +{ + % (entering ldiaghvcurvepath) 0 ldiagdebugprint + % count ( stack size is) 1 ldiagdebugprint pop + /radius exch def + /zindent exch def + /xindent exch def + cvlit /to exch def + cvlit /from exch def + /toarrowlength exch def + /fromarrowlength exch def + + /CTR [ to (CTR) ldiagdolabel pop from (CTR) ldiagdolabel exch pop ] cvx def + /FANG [ from (CTR) ldiagdolabel CTR ldiagangleto ] cvx def + /TANG [ to (CTR) ldiagdolabel CTR ldiagangleto ] cvx def + + from (CTR) ldiagdolabel FANG from (CIRCUM) ldiagdolabel ldiagpadd + 0 0 fromarrowlength FANG ldiagatangle ldiagpadd /FROM ldiagpointdef + FANG /FROM@ANGLE ldiagangledef + + to (CTR) ldiagdolabel TANG to (CIRCUM) ldiagdolabel ldiagpadd + 0 0 toarrowlength TANG ldiagatangle ldiagpadd /TO ldiagpointdef + TANG 180 dg add /TO@ANGLE ldiagangledef + + /FDIST [ FROM CTR ldiagdistance ] cvx def + /TDIST [ TO CTR ldiagdistance ] cvx def + /RADIUS [ radius FDIST TDIST ldiagmin ldiagmin ] cvx def + /XINDENT [ xindent FDIST RADIUS sub ldiagmin ] cvx def + /ZINDENT [ zindent TDIST RADIUS sub ldiagmin ] cvx def + FROM 0 0 XINDENT FANG ldiagatangle ldiagpadd /LFROM ldiagpointdef + FROM@ANGLE /LFROM@ANGLE ldiagangledef + TO 0 0 ZINDENT TANG ldiagatangle ldiagpadd /LTO ldiagpointdef + TO@ANGLE /LTO@ANGLE ldiagangledef + + /FCTR [ CTR 0 0 RADIUS FROM@ANGLE 180 dg add ldiagatangle ldiagpadd ] cvx def + /TCTR [ CTR 0 0 RADIUS TO@ANGLE ldiagatangle ldiagpadd ] cvx def + /XCTR [ CTR 0 0 RADIUS FROM@ANGLE 180 dg add ldiagatangle ldiagpadd + 0 0 RADIUS TO@ANGLE ldiagatangle ldiagpadd ] cvx def + XCTR 0 0 RADIUS XCTR CTR ldiagangleto ldiagatangle ldiagpadd + /LMID ldiagpointdef + FCTR TCTR ldiagangleto /LMID@ANGLE ldiagangledef + + FROM LFROM FCTR + {[XCTR]} {} {} {} {} {[XCTR clockwise]} {[XCTR]} {[XCTR clockwise]} + FCTR TCTR ldiagangleto ldiagquadcase + TCTR LTO TO + + % (leaving ldiaghvcurvepath) 0 ldiagdebugprint + % count ( stack size is) 1 ldiagdebugprint pop +} def + +% farr tarr { from } { to } xindent zindent bias ldiaglvrlinepath - +/ldiaglvrlinepath +{ + % (entering ldiaglvrlinepath) 0 ldiagdebugprint + % count ( stack size is) 1 ldiagdebugprint pop + /bias exch def + /zindent exch def + /xindent exch def + cvlit /to exch def + cvlit /from exch def + /toarrowlength exch def + /fromarrowlength exch def + + from (CTR) ldiagdolabel 180 dg from (CIRCUM) ldiagdolabel ldiagpadd + 0 0 fromarrowlength 180 dg ldiagatangle ldiagpadd /FROM ldiagpointdef + 180 dg /FROM@ANGLE ldiagangledef + + to (CTR) ldiagdolabel 180 dg to (CIRCUM) ldiagdolabel ldiagpadd + 0 0 toarrowlength 180 dg ldiagatangle ldiagpadd /TO ldiagpointdef + 0 dg /TO@ANGLE ldiagangledef + + /XLEFT [ FROM pop TO pop ldiagmin bias sub ] cvx def + XLEFT FROM exch pop /P1 ldiagpointdef + XLEFT TO exch pop /P2 ldiagpointdef + /VERT [ P1 P2 ldiagangleto ] cvx def + P1 P1 0 0 1 ft 180 dg ldiagatangle ldiagpadd 0 0 1 ft VERT ldiagatangle + ldiagpadd ldiagangleto /P1@ANGLE ldiagangledef + P2 P2 0 0 1 ft 0 dg ldiagatangle ldiagpadd 0 0 1 ft VERT ldiagatangle + ldiagpadd ldiagangleto /P2@ANGLE ldiagangledef + + P1 0.5 ldiagpmul P2 0.5 ldiagpmul ldiagpadd /LMID ldiagpointdef + VERT /LMID@ANGLE ldiagangledef + + /XINDENT [ xindent FROM P1 ldiagdistance ldiagmin ] cvx def + /ZINDENT [ zindent P2 TO ldiagdistance ldiagmin ] cvx def + XINDENT 0 FROM ldiagpsub /LFROM ldiagpointdef + 180 dg /LFROM@ANGLE ldiagangledef + ZINDENT 0 TO ldiagpsub /LTO ldiagpointdef + 0 dg /LTO@ANGLE ldiagangledef + + FROM LFROM P1 LMID P2 LTO TO + + % (leaving ldiaglvrlinepath) 0 ldiagdebugprint + % count ( stack size is) 1 ldiagdebugprint pop +} def + +% farr tarr { from } { to } xindent zindent bias radius ldiaglvrcurvepath - +/ldiaglvrcurvepath +{ + % (entering ldiaglvrcurvepath) 0 ldiagdebugprint + % count ( stack size is) 1 ldiagdebugprint pop + /radius exch def + /bias exch def + /zindent exch def + /xindent exch def + cvlit /to exch def + cvlit /from exch def + /toarrowlength exch def + /fromarrowlength exch def + + from (CTR) ldiagdolabel 180 dg from (CIRCUM) ldiagdolabel ldiagpadd 0 0 + fromarrowlength 180 dg ldiagatangle ldiagpadd /FROM ldiagpointdef + 180 dg /FROM@ANGLE ldiagangledef + to (CTR) ldiagdolabel 180 dg to (CIRCUM) ldiagdolabel ldiagpadd 0 0 + toarrowlength 180 dg ldiagatangle ldiagpadd /TO ldiagpointdef + 0 dg /TO@ANGLE ldiagangledef + /XLEFT [ FROM pop TO pop ldiagmin bias sub ] cvx def + /XP1 [ XLEFT FROM exch pop ] cvx def + /XP2 [ XLEFT TO exch pop ] cvx def + /VERT [ XP1 XP2 ldiagangleto ] cvx def + XP1 0.5 ldiagpmul XP2 0.5 ldiagpmul ldiagpadd /LMID ldiagpointdef + VERT /LMID@ANGLE ldiagangledef + /XINDENT [ xindent FROM XP1 ldiagdistance ldiagmin ] cvx def + /ZINDENT [ zindent XP2 TO ldiagdistance ldiagmin ] cvx def + XINDENT 0 FROM ldiagpsub /LFROM ldiagpointdef + 180 dg /LFROM@ANGLE ldiagangledef + ZINDENT 0 TO ldiagpsub /LTO ldiagpointdef + 0 dg /LTO@ANGLE ldiagangledef + /RADIUS [ radius XP1 XP2 ldiagdistance 2 div ldiagmin ] cvx def + /XP1PRE [ XP1 0 0 RADIUS 0 dg ldiagatangle ldiagpadd ] cvx def + /XP1POST [ XP1 0 0 RADIUS VERT ldiagatangle ldiagpadd ] cvx def + /XP1CTR [ XP1PRE 0 0 RADIUS VERT ldiagatangle ldiagpadd ] cvx def + XP1CTR 0 0 RADIUS XP1CTR XP1 ldiagangleto ldiagatangle ldiagpadd + /P1 ldiagpointdef + XP1PRE XP1POST ldiagangleto /P1@ANGLE ldiagangledef + /XP2PRE [ 0 0 RADIUS VERT ldiagatangle XP2 ldiagpsub ] cvx def + /XP2POST [ XP2 0 0 RADIUS 0 dg ldiagatangle ldiagpadd ] cvx def + /XP2CTR [ XP2PRE 0 0 RADIUS 0 dg ldiagatangle ldiagpadd ] cvx def + XP2CTR 0 0 RADIUS XP2CTR XP2 ldiagangleto ldiagatangle ldiagpadd + /P2 ldiagpointdef + XP2PRE XP2POST ldiagangleto /P2@ANGLE ldiagangledef + FROM LFROM XP1PRE + { } { [XP1CTR] P1 [XP1CTR] } { } { [XP1CTR clockwise] P1 [XP1CTR clockwise] } + { } { } { } { } VERT round ldiagquadcase + XP1POST LMID XP2PRE + { } { [XP2CTR] P2 [XP2CTR] } { } { [XP2CTR clockwise] P2 [XP2CTR clockwise] } + { } { } { } { } VERT round ldiagquadcase + XP2POST LTO TO + + % (leaving ldiaglvrcurvepath) 0 ldiagdebugprint + % count ( stack size is) 1 ldiagdebugprint pop +} def + +% farr tarr { from } { to } xindent zindent bias ldiagrvllinepath - +/ldiagrvllinepath +{ + % (entering ldiagrvllinepath) 0 ldiagdebugprint + % count ( stack size is) 1 ldiagdebugprint pop + /bias exch def + /zindent exch def + /xindent exch def + cvlit /to exch def + cvlit /from exch def + /toarrowlength exch def + /fromarrowlength exch def + + from (CTR) ldiagdolabel 0 dg from (CIRCUM) ldiagdolabel ldiagpadd + 0 0 fromarrowlength 0 dg ldiagatangle ldiagpadd /FROM ldiagpointdef + 0 dg /FROM@ANGLE ldiagangledef + to (CTR) ldiagdolabel 0 dg to (CIRCUM) ldiagdolabel ldiagpadd + 0 0 toarrowlength 0 dg ldiagatangle ldiagpadd /TO ldiagpointdef + 180 dg /TO@ANGLE ldiagangledef + /XRIGHT [ FROM pop TO pop ldiagmax bias add ] cvx def + XRIGHT FROM exch pop /P1 ldiagpointdef + XRIGHT TO exch pop /P2 ldiagpointdef + /VERT [ P1 P2 ldiagangleto ] cvx def + P1 P1 0 0 1 ft 0 dg ldiagatangle ldiagpadd 0 0 1 ft VERT ldiagatangle + ldiagpadd ldiagangleto /P1@ANGLE ldiagangledef + P2 P2 0 0 1 ft 180 dg ldiagatangle ldiagpadd 0 0 1 ft VERT ldiagatangle + ldiagpadd ldiagangleto /P2@ANGLE ldiagangledef + P1 0.5 ldiagpmul P2 0.5 ldiagpmul ldiagpadd /LMID ldiagpointdef + VERT /LMID@ANGLE ldiagangledef + /XINDENT [ xindent FROM P1 ldiagdistance ldiagmin ] cvx def + /ZINDENT [ zindent P2 TO ldiagdistance ldiagmin ] cvx def + FROM XINDENT 0 ldiagpadd /LFROM ldiagpointdef + 0 dg /LFROM@ANGLE ldiagangledef + TO ZINDENT 0 ldiagpadd /LTO ldiagpointdef + 180 dg /LTO@ANGLE ldiagangledef + FROM LFROM P1 LMID P2 LTO TO + + % (leaving ldiagrvllinepath) 0 ldiagdebugprint + % count ( stack size is) 1 ldiagdebugprint pop +} def + + +% farr tarr { from } { to } xindent zindent bias radius ldiagrvlcurvepath - +/ldiagrvlcurvepath +{ + % (entering ldiagrvlcurvepath) 0 ldiagdebugprint + % count ( stack size is) 1 ldiagdebugprint pop + /radius exch def + /bias exch def + /zindent exch def + /xindent exch def + cvlit /to exch def + cvlit /from exch def + /toarrowlength exch def + /fromarrowlength exch def + + from (CTR) ldiagdolabel 0 dg from (CIRCUM) ldiagdolabel ldiagpadd + 0 0 fromarrowlength 0 dg ldiagatangle ldiagpadd /FROM ldiagpointdef + 0 dg /FROM@ANGLE ldiagangledef + to (CTR) ldiagdolabel 0 dg to (CIRCUM) ldiagdolabel ldiagpadd + 0 0 toarrowlength 0 dg ldiagatangle ldiagpadd /TO ldiagpointdef + 180 dg /TO@ANGLE ldiagangledef + /XRIGHT [ FROM pop TO pop ldiagmax bias add ] cvx def + /XP1 [ XRIGHT FROM exch pop ] cvx def + /XP2 [ XRIGHT TO exch pop ] cvx def + /VERT [ XP1 XP2 ldiagangleto ] cvx def + XP1 0.5 ldiagpmul XP2 0.5 ldiagpmul ldiagpadd /LMID ldiagpointdef + VERT /LMID@ANGLE ldiagangledef + /XINDENT [ xindent FROM XP1 ldiagdistance ldiagmin ] cvx def + /ZINDENT [ zindent XP2 TO ldiagdistance ldiagmin ] cvx def + FROM XINDENT 0 ldiagpadd /LFROM ldiagpointdef + 0 dg /LFROM@ANGLE ldiagangledef + TO ZINDENT 0 ldiagpadd /LTO ldiagpointdef + 180 dg /LTO@ANGLE ldiagangledef + /RADIUS [ radius XP1 XP2 ldiagdistance 0.5 mul ldiagmin ] cvx def + /XP1PRE [ XP1 0 0 RADIUS 180 dg ldiagatangle ldiagpadd ] cvx def + /XP1POST [ XP1 0 0 RADIUS VERT ldiagatangle ldiagpadd ] cvx def + /XP1CTR [ XP1PRE 0 0 RADIUS VERT ldiagatangle ldiagpadd ] cvx def + XP1CTR 0 0 RADIUS XP1CTR XP1 ldiagangleto ldiagatangle ldiagpadd + /P1 ldiagpointdef + XP1PRE XP1POST ldiagangleto /P1@ANGLE ldiagangledef + /XP2PRE [ 0 0 RADIUS VERT ldiagatangle XP2 ldiagpsub ] cvx def + /XP2POST [ XP2 0 0 RADIUS 180 dg ldiagatangle ldiagpadd ] cvx def + /XP2CTR [ XP2PRE 0 0 RADIUS 180 dg ldiagatangle ldiagpadd ] cvx def + XP2CTR 0 0 RADIUS XP2CTR XP2 ldiagangleto ldiagatangle ldiagpadd + /P2 ldiagpointdef + XP2PRE XP2POST ldiagangleto /P2@ANGLE ldiagangledef + FROM LFROM XP1PRE + {} {[XP1CTR clockwise] P1 [XP1CTR clockwise]} {} {[XP1CTR] P1 [XP1CTR]} + {} {} {} {} VERT round ldiagquadcase + XP1POST LMID XP2PRE + {} {[XP2CTR clockwise] P2 [XP2CTR clockwise]} {} {[XP2CTR] P2 [XP2CTR]} + {} {} {} {} VERT round ldiagquadcase + XP2POST LTO TO + + % (leaving ldiagrvlcurvepath) 0 ldiagdebugprint + % count ( stack size is) 1 ldiagdebugprint pop +} def + +% farr tarr { from } { to } xindent zindent bias fbias tbias ldiagdwraplinepath - +/ldiagdwraplinepath +{ + % (entering ldiagdwraplinepath) 0 ldiagdebugprint + % count ( stack size is) 1 ldiagdebugprint pop + /tbias exch def + /fbias exch def + /bias exch def + /zindent exch def + /xindent exch def + cvlit /to exch def + cvlit /from exch def + /toarrowlength exch def + /fromarrowlength exch def + + /DIRN [ from (CTR) ldiagdolabel pop to (CTR) ldiagdolabel pop + lt { 180 dg } { 0 dg } ifelse ] cvx def + from (CTR) ldiagdolabel DIRN from (CIRCUM) ldiagdolabel ldiagpadd 0 0 + fromarrowlength DIRN ldiagatangle ldiagpadd /FROM ldiagpointdef + DIRN /FROM@ANGLE ldiagangledef + to (CTR) ldiagdolabel DIRN 180 dg add to (CIRCUM) ldiagdolabel ldiagpadd + 0 0 toarrowlength DIRN 180 dg add ldiagatangle ldiagpadd /TO ldiagpointdef + DIRN /TO@ANGLE ldiagangledef + FROM 0 0 fbias 0 ldiagmax DIRN ldiagatangle ldiagpadd /P1 ldiagpointdef + DIRN 180 dg eq { 225 dg } { -45 dg } ifelse /P1@ANGLE ldiagangledef + TO 0 0 tbias 0 ldiagmax DIRN 180 dg add ldiagatangle ldiagpadd + /P4 ldiagpointdef + DIRN 180 dg eq { 135 dg } { 45 dg } ifelse /P4@ANGLE ldiagangledef + /YC [ from (CTR) ldiagdolabel 270 dg from (CIRCUM) ldiagdolabel ldiagpadd + exch pop to (CTR) ldiagdolabel 270 dg to (CIRCUM) ldiagdolabel ldiagpadd + exch pop ldiagmin bias 0 ldiagmax sub ] cvx def + P1 pop YC /P2 ldiagpointdef + P4@ANGLE 180 dg sub /P2@ANGLE ldiagangledef + P4 pop YC /P3 ldiagpointdef + P1@ANGLE 180 dg sub /P3@ANGLE ldiagangledef + /XINDENT [ xindent FROM P1 ldiagdistance ldiagmin ] cvx def + FROM 0 0 XINDENT DIRN ldiagatangle ldiagpadd /LFROM ldiagpointdef + FROM@ANGLE /LFROM@ANGLE ldiagangledef + /ZINDENT [ zindent TO P4 ldiagdistance ldiagmin ] cvx def + TO 0 0 ZINDENT DIRN 180 dg add ldiagatangle ldiagpadd /LTO ldiagpointdef + TO@ANGLE /LTO@ANGLE ldiagangledef + P2 0.5 ldiagpmul P3 0.5 ldiagpmul ldiagpadd /LMID ldiagpointdef + DIRN 180 dg sub /LMID@ANGLE ldiagangledef + FROM P1 P2 P3 P4 TO + + % (leaving ldiagdwraplinepath) 0 ldiagdebugprint + % count ( stack size is) 1 ldiagdebugprint pop +} def + +% farr tarr { from } { to } xindent zindent bias fbias tbias radius +% ldiagdwrapcurvepath - +/ldiagdwrapcurvepath +{ + % (entering ldiagdwrapcurvepath) 0 ldiagdebugprint + % count ( stack size is) 1 ldiagdebugprint pop + /radius exch def + /tbias exch def + /fbias exch def + /bias exch def + /zindent exch def + /xindent exch def + cvlit /to exch def + cvlit /from exch def + /toarrowlength exch def + /fromarrowlength exch def + + /DIRN [ from (CTR) ldiagdolabel pop to (CTR) ldiagdolabel pop lt + { 180 dg } { 0 dg } ifelse ] cvx def + /CLOCK [ from (CTR) ldiagdolabel pop to (CTR) ldiagdolabel pop lt + { anticlockwise } { clockwise } ifelse ] cvx def + from (CTR) ldiagdolabel DIRN from (CIRCUM) ldiagdolabel ldiagpadd + 0 0 fromarrowlength DIRN ldiagatangle ldiagpadd /FROM ldiagpointdef + DIRN /FROM@ANGLE ldiagangledef + to (CTR) ldiagdolabel DIRN 180 dg add to (CIRCUM) ldiagdolabel ldiagpadd + 0 0 toarrowlength DIRN 180 dg add ldiagatangle ldiagpadd /TO ldiagpointdef + DIRN /TO@ANGLE ldiagangledef + /XP1 [ FROM 0 0 fbias 0 ldiagmax DIRN ldiagatangle ldiagpadd ] cvx def + /XP4 [ TO 0 0 tbias 0 ldiagmax DIRN 180 dg add ldiagatangle ldiagpadd ] cvx def + /YC [ from (CTR) ldiagdolabel 270 dg from (CIRCUM) ldiagdolabel ldiagpadd + exch pop to (CTR) ldiagdolabel 270 dg to (CIRCUM) ldiagdolabel ldiagpadd + exch pop ldiagmin bias 0 ldiagmax sub ] cvx def + /XP2 [ XP1 pop YC ] cvx def + /XP3 [ XP4 pop YC ] cvx def + /RP1 [ radius XP1 FROM ldiagdistance XP1 XP2 ldiagdistance 2 div + ldiagmin ldiagmin ] cvx def + /XP1PRE [ XP1 0 0 RP1 XP1 FROM ldiagangleto ldiagatangle ldiagpadd ] cvx def + /XP1POST [ XP1 0 0 RP1 XP1 XP2 ldiagangleto ldiagatangle ldiagpadd ] cvx def + /XP1CTR [ XP1PRE 0 0 RP1 XP1 XP2 ldiagangleto ldiagatangle ldiagpadd ] cvx def + XP1CTR 0 0 RP1 XP1CTR XP1 ldiagangleto ldiagatangle ldiagpadd /P1 ldiagpointdef + XP1CTR P1 ldiagangleto DIRN add 90 dg sub /P1@ANGLE ldiagangledef + /RP2 [ radius XP1 XP2 ldiagdistance 2 div XP2 XP3 ldiagdistance 2 div + ldiagmin ldiagmin ] cvx def + /XP2PRE [ XP2 0 0 RP2 XP2 XP1 ldiagangleto ldiagatangle ldiagpadd ] cvx def + /XP2POST [ XP2 0 0 RP2 XP2 XP3 ldiagangleto ldiagatangle ldiagpadd ] cvx def + /XP2CTR [ XP2PRE 0 0 RP2 XP2 XP3 ldiagangleto ldiagatangle ldiagpadd ] cvx def + XP2CTR 0 0 RP2 XP2CTR XP2 ldiagangleto ldiagatangle ldiagpadd /P2 ldiagpointdef + XP2CTR P2 ldiagangleto DIRN add 90 dg sub /P2@ANGLE ldiagangledef + /RP3 [ radius XP2 XP3 ldiagdistance 2 div XP3 XP4 ldiagdistance 2 div + ldiagmin ldiagmin ] cvx def + /XP3PRE [ XP3 0 0 RP3 XP3 XP2 ldiagangleto ldiagatangle ldiagpadd ] cvx def + /XP3POST [ XP3 0 0 RP3 XP3 XP4 ldiagangleto ldiagatangle ldiagpadd ] cvx def + /XP3CTR [ XP3PRE 0 0 RP3 XP3 XP4 ldiagangleto ldiagatangle ldiagpadd ] cvx def + XP3CTR 0 0 RP3 XP3CTR XP3 ldiagangleto ldiagatangle ldiagpadd /P3 ldiagpointdef + XP3CTR P3 ldiagangleto DIRN add 90 dg sub /P3@ANGLE ldiagangledef + /RP4 [ radius XP4 XP3 ldiagdistance 2 div XP4 TO ldiagdistance + ldiagmin ldiagmin ] cvx def + /XP4PRE [ XP4 0 0 RP4 XP4 XP3 ldiagangleto ldiagatangle ldiagpadd ] cvx def + /XP4POST [ XP4 0 0 RP4 XP4 TO ldiagangleto ldiagatangle ldiagpadd ] cvx def + /XP4CTR [ XP4PRE 0 0 RP4 XP4 TO ldiagangleto ldiagatangle ldiagpadd ] cvx def + XP4CTR 0 0 RP4 XP4CTR XP4 ldiagangleto ldiagatangle ldiagpadd /P4 ldiagpointdef + XP4CTR P4 ldiagangleto DIRN add 90 dg sub /P4@ANGLE ldiagangledef + /XINDENT [ xindent FROM XP1PRE ldiagdistance ldiagmin ] cvx def + FROM 0 0 XINDENT DIRN ldiagatangle ldiagpadd /LFROM ldiagpointdef + FROM@ANGLE /LFROM@ANGLE ldiagangledef + XP2 0.5 ldiagpmul XP3 0.5 ldiagpmul ldiagpadd /LMID ldiagpointdef + DIRN 180 dg sub /LMID@ANGLE ldiagangledef + /ZINDENT [ zindent TO XP4POST ldiagdistance ldiagmin ] cvx def + TO 0 0 ZINDENT DIRN 180 dg add ldiagatangle ldiagpadd /LTO ldiagpointdef + TO@ANGLE /LTO@ANGLE ldiagangledef + FROM LFROM + XP1PRE [XP1CTR CLOCK] XP1POST + XP2PRE [XP2CTR CLOCK] XP2POST + LMID + XP3PRE [XP3CTR CLOCK] XP3POST + XP4PRE [XP4CTR CLOCK] XP4POST + LTO TO + + % (leaving ldiagdwrapcurvepath) 0 ldiagdebugprint + % count ( stack size is) 1 ldiagdebugprint pop +} def + +% farr tarr { from } { to } xindent zindent bias fbias tbias ldiaguwraplinepath - +/ldiaguwraplinepath +{ + % (entering ldiaguwraplinepath) 0 ldiagdebugprint + % count ( stack size is) 1 ldiagdebugprint pop + /tbias exch def + /fbias exch def + /bias exch def + /zindent exch def + /xindent exch def + cvlit /to exch def + cvlit /from exch def + /toarrowlength exch def + /fromarrowlength exch def + + /DIRN [ from (CTR) ldiagdolabel pop to (CTR) ldiagdolabel pop lt + { 180 dg } { 0 dg } ifelse ] cvx def + from (CTR) ldiagdolabel DIRN from (CIRCUM) ldiagdolabel ldiagpadd + 0 0 fromarrowlength DIRN ldiagatangle ldiagpadd /FROM ldiagpointdef + DIRN /FROM@ANGLE ldiagangledef + to (CTR) ldiagdolabel DIRN 180 dg add to (CIRCUM) ldiagdolabel ldiagpadd + 0 0 toarrowlength DIRN 180 dg add ldiagatangle ldiagpadd /TO ldiagpointdef + DIRN /TO@ANGLE ldiagangledef + FROM 0 0 fbias 0 ldiagmax DIRN ldiagatangle ldiagpadd /P1 ldiagpointdef + DIRN 180 dg eq { 135 dg } { 45 dg } ifelse /P1@ANGLE ldiagangledef + TO 0 0 tbias 0 ldiagmax DIRN 180 dg add ldiagatangle ldiagpadd + /P4 ldiagpointdef + DIRN 180 dg eq { 225 dg } { -45 dg } ifelse /P4@ANGLE ldiagangledef + /YC [ from (CTR) ldiagdolabel 90 dg from (CIRCUM) ldiagdolabel ldiagpadd + exch pop to (CTR) ldiagdolabel 90 dg to (CIRCUM) ldiagdolabel ldiagpadd + exch pop ldiagmax bias 0 ldiagmax add ] cvx def + P1 pop YC /P2 ldiagpointdef + P4@ANGLE 180 dg sub /P2@ANGLE ldiagangledef + P4 pop YC /P3 ldiagpointdef + P1@ANGLE 180 dg sub /P3@ANGLE ldiagangledef + /XINDENT [ xindent FROM P1 ldiagdistance ldiagmin ] cvx def + FROM 0 0 XINDENT DIRN ldiagatangle ldiagpadd /LFROM ldiagpointdef + FROM@ANGLE /LFROM@ANGLE ldiagangledef + /ZINDENT [ zindent TO P4 ldiagdistance ldiagmin ] cvx def + TO 0 0 ZINDENT DIRN 180 dg add ldiagatangle ldiagpadd /LTO ldiagpointdef + TO@ANGLE /LTO@ANGLE ldiagangledef + P2 0.5 ldiagpmul P3 0.5 ldiagpmul ldiagpadd /LMID ldiagpointdef + DIRN 180 dg sub /LMID@ANGLE ldiagangledef + FROM P1 P2 P3 P4 TO + + % (leaving ldiaguwraplinepath) 0 ldiagdebugprint + % count ( stack size is) 1 ldiagdebugprint pop +} def + +% farr tarr { from } { to } xindent zindent bias fbias tbias radius +% ldiaguwrapcurvepath - +/ldiaguwrapcurvepath +{ + % (entering ldiaguwrapcurvepath) 0 ldiagdebugprint + % count ( stack size is) 1 ldiagdebugprint pop + /radius exch def + /tbias exch def + /fbias exch def + /bias exch def + /zindent exch def + /xindent exch def + cvlit /to exch def + cvlit /from exch def + /toarrowlength exch def + /fromarrowlength exch def + + /DIRN [ from (CTR) ldiagdolabel pop to (CTR) ldiagdolabel pop lt + { 180 dg } { 0 dg } ifelse ] cvx def + /CLOCK [ from (CTR) ldiagdolabel pop to (CTR) ldiagdolabel pop lt + { clockwise } { anticlockwise } ifelse ] cvx def + from (CTR) ldiagdolabel DIRN from (CIRCUM) ldiagdolabel ldiagpadd + 0 0 fromarrowlength DIRN ldiagatangle ldiagpadd /FROM ldiagpointdef + DIRN /FROM@ANGLE ldiagangledef + to (CTR) ldiagdolabel DIRN 180 dg add to (CIRCUM) ldiagdolabel ldiagpadd + 0 0 toarrowlength DIRN 180 dg add ldiagatangle ldiagpadd /TO ldiagpointdef + DIRN /TO@ANGLE ldiagangledef + /XP1 [ FROM 0 0 fbias 0 ldiagmax DIRN ldiagatangle ldiagpadd ] cvx def + /XP4 [ TO 0 0 tbias 0 ldiagmax DIRN 180 dg add ldiagatangle ldiagpadd ] cvx def + /YC [ from (CTR) ldiagdolabel 90 dg from (CIRCUM) ldiagdolabel ldiagpadd + exch pop to (CTR) ldiagdolabel 90 dg to (CIRCUM) ldiagdolabel ldiagpadd + exch pop ldiagmax bias 0 ldiagmax add ] cvx def + /XP2 [ XP1 pop YC ] cvx def + /XP3 [ XP4 pop YC ] cvx def + /RP1 [ radius XP1 FROM ldiagdistance XP1 XP2 ldiagdistance 2 div + ldiagmin ldiagmin ] cvx def + /XP1PRE [ XP1 0 0 RP1 XP1 FROM ldiagangleto ldiagatangle ldiagpadd ] cvx def + /XP1POST [ XP1 0 0 RP1 XP1 XP2 ldiagangleto ldiagatangle ldiagpadd ] cvx def + /XP1CTR [ XP1PRE 0 0 RP1 XP1 XP2 ldiagangleto ldiagatangle ldiagpadd ] cvx def + XP1CTR 0 0 RP1 XP1CTR XP1 ldiagangleto ldiagatangle ldiagpadd /P1 ldiagpointdef + XP1CTR P1 ldiagangleto DIRN add 90 dg add /P1@ANGLE ldiagangledef + /RP2 [ radius XP1 XP2 ldiagdistance 2 div XP2 XP3 ldiagdistance 2 div + ldiagmin ldiagmin ] cvx def + /XP2PRE [ XP2 0 0 RP2 XP2 XP1 ldiagangleto ldiagatangle ldiagpadd ] cvx def + /XP2POST [ XP2 0 0 RP2 XP2 XP3 ldiagangleto ldiagatangle ldiagpadd ] cvx def + /XP2CTR [ XP2PRE 0 0 RP2 XP2 XP3 ldiagangleto ldiagatangle ldiagpadd ] cvx def + XP2CTR 0 0 RP2 XP2CTR XP2 ldiagangleto ldiagatangle ldiagpadd /P2 ldiagpointdef + XP2CTR P2 ldiagangleto DIRN add 90 dg add /P2@ANGLE ldiagangledef + /RP3 [ radius XP2 XP3 ldiagdistance 2 div XP3 XP4 ldiagdistance 2 div + ldiagmin ldiagmin ] cvx def + /XP3PRE [ XP3 0 0 RP3 XP3 XP2 ldiagangleto ldiagatangle ldiagpadd ] cvx def + /XP3POST [ XP3 0 0 RP3 XP3 XP4 ldiagangleto ldiagatangle ldiagpadd ] cvx def + /XP3CTR [ XP3PRE 0 0 RP3 XP3 XP4 ldiagangleto ldiagatangle ldiagpadd ] cvx def + XP3CTR 0 0 RP3 XP3CTR XP3 ldiagangleto ldiagatangle ldiagpadd /P3 ldiagpointdef + XP3CTR P3 ldiagangleto DIRN add 90 dg add /P3@ANGLE ldiagangledef + /RP4 [ radius XP4 XP3 ldiagdistance 2 div XP4 TO ldiagdistance + ldiagmin ldiagmin ] cvx def + /XP4PRE [ XP4 0 0 RP4 XP4 XP3 ldiagangleto ldiagatangle ldiagpadd ] cvx def + /XP4POST [ XP4 0 0 RP4 XP4 TO ldiagangleto ldiagatangle ldiagpadd ] cvx def + /XP4CTR [ XP4PRE 0 0 RP4 XP4 TO ldiagangleto ldiagatangle ldiagpadd ] cvx def + XP4CTR 0 0 RP4 XP4CTR XP4 ldiagangleto ldiagatangle ldiagpadd /P4 ldiagpointdef + XP4CTR P4 ldiagangleto DIRN add 90 dg add /P4@ANGLE ldiagangledef + /XINDENT [ xindent FROM XP1PRE ldiagdistance ldiagmin ] cvx def + FROM 0 0 XINDENT DIRN ldiagatangle ldiagpadd /LFROM ldiagpointdef + FROM@ANGLE /LFROM@ANGLE ldiagangledef + XP2 0.5 ldiagpmul XP3 0.5 ldiagpmul ldiagpadd /LMID ldiagpointdef + DIRN 180 dg sub /LMID@ANGLE ldiagangledef + /ZINDENT [ zindent TO XP4POST ldiagdistance ldiagmin ] cvx def + TO 0 0 ZINDENT DIRN 180 dg add ldiagatangle ldiagpadd /LTO ldiagpointdef + TO@ANGLE /LTO@ANGLE ldiagangledef + FROM LFROM + XP1PRE [XP1CTR CLOCK] XP1POST + XP2PRE [XP2CTR CLOCK] XP2POST + LMID + XP3PRE [XP3CTR CLOCK] XP3POST + XP4PRE [XP4CTR CLOCK] XP4POST + LTO TO + + % (leaving ldiaguwrapcurvepath) 0 ldiagdebugprint + % count ( stack size is) 1 ldiagdebugprint pop +} def + +% shape and labels of the @SolidArrowHead symbol +% - ldiagsolidarrowhead - +/ldiagsolidarrowhead +{ + 0 0 xsize ysize 0.5 mul 0 ysize +} def + +% shape and labels of the @OpenArrowHead symbol +% <pathwidth> ldiagopenarrowhead - +/ldiagopenarrowhead +{ + /pathwidth exch def + /PSW [ 0 0 ] cvx def + /PNW [ 0 ysize ] cvx def + /PE [ xsize ysize 0.5 mul ] cvx def + /REL [ 0 0 pathwidth PE PNW ldiagangleto 90 add ldiagatangle ] cvx def + /PNA [ 0 ysize 0.5 mul pathwidth 0.5 mul add ] cvx def + /PSA [ 0 ysize 0.5 mul pathwidth 0.5 mul sub ] cvx def + /PNI [ PNA PNA xsize 0 ldiagpadd PNW REL ldiagpadd + PE REL ldiagpadd ldiaglineintersect ] cvx def + /PSI [ 0 pathwidth PNI ldiagpsub ] cvx def + + PSW PE PNW PNI PNA PSA PSI PSW +} def + +% shape and labels of the @HalfOpenArrowHead symbol +% <pathwidth> ldiaghalfopenarrowhead - +/ldiaghalfopenarrowhead +{ + /pathwidth exch def + 0 0 + xsize ysize 0.5 mul + 0 ysize + xsize 0.3 mul ysize 0.5 mul pathwidth 0.5 mul add + 0 ysize 0.5 mul pathwidth 0.5 mul add + 0 ysize 0.5 mul pathwidth 0.5 mul sub + xsize 0.3 mul ysize 0.5 mul pathwidth 0.5 mul sub + 0 0 +} def + +% shape and labels of the @SolidCurvedArrowHead symbol +% - ldiagsolidcurvedarrowhead - +/ldiagsolidcurvedarrowhead +{ + 0 0 + [0 0 xsize ysize 0.5 mul ldiaglinebetween + xsize 0 xsize ysize ldiaglineintersect clockwise] + xsize ysize 0.5 mul + [xsize ysize 0.5 mul 0 ysize ldiaglinebetween + xsize 0 xsize ysize ldiaglineintersect clockwise] + 0 ysize +} def + +% shape and labels of the @OpenCurvedArrowHead symbol +% <pathwidth> ldiagopencurvedarrowhead - +/ldiagopencurvedarrowhead +{ + /pathwidth exch def + /LR [ 0 0 xsize ysize 0.5 mul ldiaglinebetween + xsize 0 xsize ysize ldiaglineintersect + ] cvx def + /UR [ xsize ysize 0.5 mul 0 ysize ldiaglinebetween + xsize 0 xsize ysize ldiaglineintersect + ] cvx def + /PW2 [ pathwidth 0.5 mul ] cvx def + /UMID [ + 0 ysize 0.5 mul PW2 add + xsize ysize 0.5 mul PW2 add + 0 ysize 0 0 1 ft UR 0 ysize ldiagangleto 90 add ldiagatangle + ldiagpadd 0 ysize ldiaglineintersect + ] cvx def + /LMID [ 0 pathwidth UMID ldiagpsub ] cvx def + 0 0 + [LR clockwise] + xsize ysize 0.5 mul + [UR clockwise] + 0 ysize + UMID + 0 ysize 0.5 mul PW2 add + 0 ysize 0.5 mul PW2 sub + LMID + 0 0 +} def + +% shape and labels of the @HalfOpenCurvedArrowHead symbol +% <pathwidth> ldiaghalfopencurvedarrowhead - +/ldiaghalfopencurvedarrowhead +{ + /pathwidth exch def + /LR [ 0 0 xsize ysize 0.5 mul ldiaglinebetween + xsize 0 xsize ysize ldiaglineintersect + ] cvx def + /UR [ xsize ysize 0.5 mul 0 ysize ldiaglinebetween + xsize 0 xsize ysize ldiaglineintersect + ] cvx def + /BR [ 0 0 LR 0 ysize UR ldiaglineintersect ] cvx def + /BRAD [ 0 0 BR ldiagdistance ] cvx def + /PW2 [ pathwidth 0.5 mul ] cvx def + /XDIST [ BRAD dup mul PW2 dup mul sub sqrt ] cvx def + /UMID [ BR XDIST PW2 ldiagpadd ] cvx def + /LMID [ BR XDIST 0 PW2 sub ldiagpadd ] cvx def + 0 0 + [LR clockwise] + xsize ysize 0.5 mul + [UR clockwise] + 0 ysize + [BR clockwise] + UMID + 0 ysize 0.5 mul PW2 add + 0 ysize 0.5 mul PW2 sub + LMID + [BR clockwise] + 0 0 +} def + +end +%%EndResource diff --git a/include/doc b/include/doc new file mode 100644 index 0000000..7dda601 --- /dev/null +++ b/include/doc @@ -0,0 +1,353 @@ +############################################################################### +# # +# Lout setup file for ordinary documents # +# # +# Jeffrey H. Kingston # +# 5 February 1999 # +# # +############################################################################### + + +############################################################################### +# # +# @SysInclude commands for standard packages. # +# # +############################################################################### + + @SysInclude { fontdefs } # font definitions + @SysInclude { langdefs } # language definitions + @SysInclude { bsf } # BasicSetup package + @SysInclude { dsf } # DocumentSetup package + @SysInclude { docf } # OrdinarySetup extension + + +############################################################################### +# # +# @Include command for reading personal definitions from current directory. # +# # +############################################################################### + + @Include { mydefs } + + +############################################################################### +# # +# The @BasicSetup @Use clause - basics, lists, paragraphs, displays. # +# # +# To change the default value of any option, delete the # at the start of # +# its line and change the value between braces. # +# # +############################################################################### + +@Use { @BasicSetup + # @InitialFont { Times Base 12p } # initial font + # @InitialBreak {{adjust 1.2fx hyphen} @OrIfPlain {ragged 1fx nohyphen}} + # @InitialSpace { lout } # initial space style + # @InitialLanguage { English } # initial language + # @InitialColour { black } # initial colour + # @OptimizePages { No } # optimize page breaks? + # @HeadingFont { Bold } # font for @Heading + # @ParaGap { 1.3vx @OrIfPlain 1f } # gap between paragraphs + # @ParaIndent { 2.00f @OrIfPlain 5s } # first-line indent for @PP + # @DisplayGap { 1.00v @OrIfPlain 1f } # gap above, below displays + # @DisplayIndent { 2.00f @OrIfPlain 5s } # @IndentedDisplay indent + # @DefaultIndent { 0.5rt } # @Display indent + # @DisplayNumStyle { (num) } # style of display numbers + # @WideIndent { 4.00f @OrIfPlain 10s } # @WideTaggedList indent + # @VeryWideIndent { 8.00f @OrIfPlain 20s } # @VeryWideTaggedList indent + # @ListOuterGap { 1.00v @OrIfPlain 1f } # gap before, after lists + # @ListGap { 1.00v @OrIfPlain 1f } # gap between list items + # @ListIndent { 0s } # indent of list items + # @ListRightIndent { 0s } # right indent of list items + # @ListLabelWidth { 2.00f @OrIfPlain 5s } # width allowed for list tags + # @NumberSeparator { . } # separates nums like 2.3.7 +} + + +############################################################################### +# # +# The @DocumentSetup @Use clause - page layout plus figures, tables, etc. # +# # +# To change the default value of any option, delete the # at the start of # +# its line and change the value between braces. # +# # +############################################################################### + +@Use { @DocumentSetup + # @PageType { A4 @OrIfPlain Other} # page type (width, height) + # @PageWidth { 80s } # page width if type Other + # @PageHeight { 66f } # page height if type Other + # @PageOrientation { Portrait } # Portrait, Landscape, etc. + # @PageBackground { } # background of each page + # @TopMargin { 2.5c @OrIfPlain 6f } # top margin of all pages + # @FootMargin { 2.5c @OrIfPlain 6f } # bottom margin of all pages + # @OddLeftMargin { 2.5c @OrIfPlain 10s } # left margin of odd pages + # @OddRightMargin { 2.5c @OrIfPlain 10s } # right margin of odd pages + # @EvenLeftMargin { 2.5c @OrIfPlain 10s } # left margin of even pages + # @EvenRightMargin { 2.5c @OrIfPlain 10s } # right margin of even pages + # @PageBoxType { None } # None Box CurveBox ShadowBox + # @PageBoxMargin { 1.00c } # page box margin + # @PageBoxLineWidth { } # page box line thickness + # @PageBoxPaint { none } # page box paint + # @PageBoxShadow { 0.60c } # shadow margin if ShadowBox + # @ColumnNumber { 1 } # number of columns (1 to 10) + # @ColumnGap { 1.00c @OrIfPlain 6s } # column gap + + # @FigureLocation { PageTop } # default figure location + # @TableLocation { PageTop } # default table location + # @FigureFormat { @CC @Body } # default figure format + # @TableFormat { @CC @Body } # default table format + # @FigureWord { figure } # "Figure" word else anything + # @TableWord { table } # "Table" word else anything + # @FigureNumbers { Arabic } # method of numbering figures + # @TableNumbers { Arabic } # method of numbering tables + # @FigureCaptionPos { Below } # Above or Below + # @TableCaptionPos { Below } # Above or Below + # @CaptionFont { } # figure, table caption font + # @CaptionBreak { } # figure, table caption break + # @CaptionFormat { @B { number @DotSep @OneCol } } # figure, table caption format + # @MakeFigureContents { No } # list of figures at start + # @MakeTableContents { No } # list of tables at start + # @MakeContents { No } # make contents? Yes or No + # @ContentsGap { 0.20v @OrIfPlain 0f } # extra gap above minor entry + # @ContentsGapAbove { 0.80v @OrIfPlain 1f } # extra gap above major entry + # @ContentsGapBelow { 0.00v @OrIfPlain 0f } # extra gap below major entry + # @ContentsFont { Bold } # font for major entry + # @ContentsPartGapAbove { 1.00v @OrIfPlain 1f } # extra gap above `part' entry + # @ContentsPartGapBelow { 0.00v @OrIfPlain 0f } # extra gap below `part' entry + # @ContentsFormat { number @DotSep title } # contents entry format + # @ContentsLeader { .. } # leader symbol in contents + # @ContentsLeaderGap { 4s @OrIfPlain 2s } # gap between leaders + # @ContentsRightWidth { 3f @OrIfPlain 6s } # page numbers column width + # @MakeReferences { Yes } # make references? Yes or No + # @RefCiteStyle { [cite] } # citation style + # @RefCiteLabels { @RefNum } # citation items + # @RefNumbers { Arabic } # reference numbers + # @RefListFormat { Labels } # NoLabels, Labels, etc. + # @RefListLabels { [@RefNum] } # ref list label format + # @RefListTitle { references } # title of reference list + # @ChapRefListTitle { references } # title of chapter ref list + # @RefListIndent { 0s } # indent to left of labels + # @RefListRightIndent { 0s } # indent to right of items + # @RefListGap { @ListGap } # gap between ref list items + # @RefListFont { } # font used in reference list + # @RefListBreak { } # break style of ref list + # @RefListLabelWidth { @ListLabelWidth } # Labels column width + # @RefListSortKey { @Tag } # sorting key + # @MakeIndex { No } # make index? Yes or No + # @IndexFont { } # index entries font + # @IndexBreak { {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break + # @IndexColumnNumber { 2 } # index columns (1 to 10) + # @IndexColumnGap { 1.00c @OrIfPlain 6s } # index column gap + # @MakeIndexA { No } # make index A? Yes or No + # @IndexAFont { } # index A entries font + # @IndexABreak { {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break + # @IndexAColumnNumber { 2 } # index A columns (1 to 10) + # @IndexAColumnGap { 1.00c @OrIfPlain 6s } # index A column gap + # @MakeIndexB { No } # make index B? Yes or No + # @IndexBFont { } # index B entries font + # @IndexBBreak { {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break + # @IndexBColumnNumber { 2 } # index B columns (1 to 10) + # @IndexBColumnGap { 1.00c @OrIfPlain 6s } # index B column gap + # @TopGap { 0.75c @OrIfPlain 2f } # gap between figures + # @MidGap { 0.75c @OrIfPlain 2f } # gap above/below body text + # @FootNoteNumbers { Arabic } # footnote numbers + # @FootNoteThrough { No } # numbered through chapter? + # @FootNoteLocation { ColFoot } # where the footnote appears + # @FootNoteFont { 0.80f } # font for footnotes + # @FootNoteBreak { 1.2fx @OrIfPlain 1fx } # break for footnotes + # @FootNoteFormat { { number &0.05f } @Insert body } # footnote format + # @FootLen { 2.00c @OrIfPlain 10s } # length of footnote line + # @FootAboveGap { @DisplayGap } # gap above footnote line + # @FootGap { 0.20c @OrIfPlain 1fx } # gap between footnotes + # @MarginNoteFont { 0.80f } # font of margin notes + # @MarginNoteBreak { ragged 1.10fx } # break style of margin notes + # @MarginNoteHGap { 0.5c } # horizontal gap to notes + # @MarginNoteVGap { @DisplayGap } # min vertical gap between + # @MarginNoteWidth { 1.50c } # width of margin notes + # @EndNoteNumbers { Arabic } # endnote numbers + # @EndNoteFont { 0.80f } # font of endnotes + # @EndNoteBreak { 1.2fx @OrIfPlain 1fx } # break for endnotes + # @EndNoteFormat { { number &0.05f } @Insert body } # endnote format + # @EndNoteGap { 0.20c @OrIfPlain 1f } # gap between endnotes + # @TheoremWord { theorem } # "Theorem" word, etc. + # @TheoremTitleFormat { (title) } # only if title present + # @TheoremFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @DefinitionWord { definition } # "Definition" word, etc. + # @DefinitionTitleFormat { (title) } # only if title present + # @DefinitionFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @ClaimWord { claim } # "Claim" word, etc. + # @ClaimTitleFormat { (title) } # only if title present + # @ClaimFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @PropositionWord { proposition } # "Proposition" word, etc. + # @PropositionTitleFormat { (title) } # only if title present + # @PropositionFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @LemmaWord { lemma } # "Lemma" word, etc. + # @LemmaTitleFormat { (title) } # only if title present + # @LemmaFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @CorollaryWord { corollary } # "Corollary" word, etc. + # @CorollaryTitleFormat { (title) } # only if title present + # @CorollaryFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @ExampleWord { example } # "Example" word, etc. + # @ExampleTitleFormat { (title) } # only if title present + # @ExampleFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @ProofWord { proof } # "Proof" word, etc. + # @PageHeaders { Simple } # None Simple Titles NoTitles + # @PageNumbers { Arabic } # page numbers + # @FirstPageNumber { 1 } # number of first page + # @IntroPageNumbers { Roman } # intro page numbers + # @IntroFirstPageNumber{ 1 } # number of first intro page + # @StructPageNums { No } # make structured page numbers + + # @OddTop { @Centre{- @PageNum -} } # Simple page headers + # @OddFoot { @Null } + # @EvenTop { @Centre{- @PageNum -} } + # @EvenFoot { @Null } + # @StartOddTop { @Null } + # @StartOddFoot { @Null } + # @StartEvenTop { @Null } + # @StartEvenFoot { @Null } + # @IntroOddTop { @Null } + # @IntroOddFoot { @Centre @PageNum } + # @IntroEvenTop { @Null } + # @IntroEvenFoot { @Centre @PageNum } + # @IntroStartOddTop { @Null } + # @IntroStartOddFoot { @Null } + # @IntroStartEvenTop { @Null } + # @IntroStartEvenFoot { @Null } + + # Titles, NoTitles headers + # @RunningOddTop { @I {@MinorNum @DotSep @MinorTitle} @Right @B @PageNum } + # @RunningOddFoot { @Null } + # @RunningEvenTop { @B @PageNum @Right @I {@MajorNum @DotSep @MajorTitle} } + # @RunningEvenFoot { @Null } + # @RunningStartOddTop { @Null } + # @RunningStartOddFoot { @Centre { Bold 0.8f } @Font @PageNum } + # @RunningStartEvenTop { @Null } + # @RunningStartEvenFoot { @Centre { Bold 0.8f } @Font @PageNum } + # @RunningIntroOddTop { @Null } + # @RunningIntroOddFoot { @Right @PageNum } + # @RunningIntroEvenTop { @Null } + # @RunningIntroEvenFoot { @PageNum } + # @RunningIntroStartOddTop { @Null } + # @RunningIntroStartOddFoot { @Null } + # @RunningIntroStartEvenTop { @Null } + # @RunningIntroStartEvenFoot { @Null } +} + + +############################################################################### +# # +# The @OrdinarySetup @Use clause - options specific to ordinary documents. # +# # +############################################################################### + +@Use { @OrdinarySetup + # @IndexWord { index } # word for "Index" word etc. + # @IndexAWord { index } # word for "Index" (A) + # @IndexBWord { index } # word for "Index" (B) + # @AppendixWord { appendix } # word for "Appendix" + # @SectionNumbers { Arabic } # kind of section numbers + # @FirstSectionNumber { 1 } # first section num (Arabic) + # @SubSectionNumbers { Arabic } # kind of subsection numbers + # @FirstSubSectionNumber { 1 } # first subsect num (Arabic) + # @SubSubSectionNumbers { Arabic } # kind of sub-subsect numbers + # @FirstSubSubSectionNumber { 1 } # first subsub. num (Arabic) + # @AppendixNumbers { UCAlpha } # kind of appendix numbers + # @FirstAppendixNumber { 1 } # first appendix num (Arabic) + # @SubAppendixNumbers { Arabic } # kind of subappendix numbers + # @FirstSubAppendixNumber { 1 } # first sub-app. num (Arabic) + # @SubSubAppendixNumbers { Arabic } # kind of sub-subapp. numbers + # @FirstSubSubAppendixNumber { 1 } # first sub-sub. num (Arabic) + # @SectionHeadingFont { Bold } # section head font + # @SectionHeadingBreak { ragged 1.2fx nohyphen } # section head break + # @SectionHeadingFormat { number @DotSep title } # section head fmt + # @SubSectionHeadingFont { Bold } # subsect head font + # @SubSectionHeadingBreak { ragged 1.2fx nohyphen } # subsect head break + # @SubSectionHeadingFormat { number @DotSep title } # subsect head fmt + # @SubSubSectionHeadingFont { Slope } # sub-ss. head font + # @SubSubSectionHeadingBreak { ragged 1.2fx nohyphen } # sub-ss. head break + # @SubSubSectionHeadingFormat { number @DotSep title } # sub-ss. head fmt + # @AppendixHeadingFont { Bold } # appendix head font + # @AppendixHeadingBreak { ragged 1.2fx nohyphen } # appendix head break + # @AppendixHeadingFormat { number @DotSep title } # appendix head fmt + # @SubAppendixHeadingFont { Bold } # subapp. head font + # @SubAppendixHeadingBreak { ragged 1.2fx nohyphen } # subapp. head break + # @SubAppendixHeadingFormat { number @DotSep title } # subapp. head format + # @SubSubAppendixHeadingFont { Slope } # sub-sa. head font + # @SubSubAppendixHeadingBreak { ragged 1.2fx nohyphen } # sub-sa. head break + # @SubSubAppendixHeadingFormat{ number @DotSep title } # sub-sa. head fmt + # @ReferencesHeadingFont { Bold } # refs head font + # @ReferencesHeadingBreak { ragged 1.2fx nohyphen } # refs head break + # @ReferencesHeadingFormat { title } # refs head format + # @IndexHeadingFont { Bold } # index head font + # @IndexHeadingBreak { ragged 1.2fx nohyphen } # index head break + # @IndexHeadingFormat { title } # index head format + # @IndexAHeadingFont { Bold } # index A head font + # @IndexAHeadingBreak { ragged 1.2fx nohyphen } # index A head break + # @IndexAHeadingFormat { title } # index A head fmt + # @IndexBHeadingFont { Bold } # index B head font + # @IndexBHeadingBreak { ragged 1.2fx nohyphen } # index B head break + # @IndexBHeadingFormat { title } # index B head fmt + # @SectionGap { 2.0v @OrIfPlain 3f } # between sections + # @SubSectionGap { 1.5v @OrIfPlain 2f } # between subsects + # @SubSubSectionGap { 1.5v @OrIfPlain 2f } # between sub-subs. + # @AppendixGap { 2.0v @OrIfPlain 3f } # between appendices + # @SubAppendixGap { 1.5v @OrIfPlain 2f } # between subappendices + # @SubSubAppendixGap { 1.5v @OrIfPlain 2f } # between sub-subapps + # @SectionInContents { Yes } # add sections to contents + # @SubSectionInContents { Yes } # add subsections to contents + # @SubSubSectionInContents { No } # add sub-subsects to contents + # @AppendixInContents { Yes } # add appendices to contents + # @SubAppendixInContents { Yes } # add subappendices to contents + # @SubSubAppendixInContents { No } # add sub-subapps to contents + # @ReferencesInContents { Yes } # add ref. section to contents + # @IndexInContents { Yes } # add index to contents + # @IndexAInContents { Yes } # add index A to contents + # @IndexBInContents { Yes } # add index B to contents + # @SectionNumInTheorems { No } # theorem num has section num + # @SubSectionNumInTheorems { No } # theorem num has subsect num + # @SubSubSectionNumInTheorems { No } # theorem num has sub-ss. num + # @AppendixNumInTheorems { No } # theorem num has appendix num + # @SubAppendixNumInTheorems { No } # theorem num has sub-app num + # @SubSubAppendixNumInTheorems{ No } # theorem num has sub-sa. num + # @SectionNumInDisplays { Yes } # display num has section num + # @SubSectionNumInDisplays { No } # display num has subsect num + # @SubSubSectionNumInDisplays { No } # display num has sub-ss. num + # @AppendixNumInDisplays { Yes } # display num has appendix num + # @SubAppendixNumInDisplays { Yes } # display num has sub-app num + # @SubSubAppendixNumInDisplays{ No } # display num has sub-sa. num + # @SectionNumInFigures { No } # figure num has section num + # @SubSectionNumInFigures { No } # figure num has subsect num + # @SubSubSectionNumInFigures { No } # figure num has sub-ss. num + # @AppendixNumInFigures { No } # figure num has appendix num + # @SubAppendixNumInFigures { No } # figure num has sub-app num + # @SubSubAppendixNumInFigures { No } # figure num has sub-sa. num + # @SectionNumInTables { No } # table num has section num + # @SubSectionNumInTables { No } # table num has subsect num + # @SubSubSectionNumInTables { No } # table num has sub-ss. num + # @AppendixNumInTables { No } # table num has appendix num + # @SubAppendixNumInTables { No } # table num has sub-app num + # @SubSubAppendixNumInTables { No } # table num has sub-sa. num + # @SectionNumInRunners { Yes } # runners have section num + # @SubSectionNumInRunners { No } # runners have subsect num + # @SubSubSectionNumInRunners { No } # runners have sub-ss. num + # @AppendixNumInRunners { Yes } # runners have appendix num + # @SubAppendixNumInRunners { No } # runners have sub-app num + # @SubSubAppendixNumInRunners { No } # runners have sub-sa. num + # @SectionPrefix { } # for structured page nums + # @AppendixPrefix { } # for structured page nums + # @ReferencesPrefix { } # for structured page nums + # @IndexPrefix { } # for structured page nums + # @IndexAPrefix { } # for structured page nums + # @IndexBPrefix { } # for structured page nums +} + + +############################################################################### +# # +# @Database (and @SysDatabase) clauses go here. # +# # +############################################################################### + +@SysDatabase @RefStyle { refstyle } # reference printing styles diff --git a/include/docf b/include/docf new file mode 100644 index 0000000..dd9f0e6 --- /dev/null +++ b/include/docf @@ -0,0 +1,779 @@ + +########################################################################### +# # +# @OrdinarySetup extension to @DocumentSetup. # +# # +# Jeffrey H. Kingston # +# August 1994 # +# 5 February 1999 # +# # +# This package extends DocumentSetup for ordinary documents. # +# # +########################################################################### + +extend @BasicSetup @DocumentSetup +export @Doc @Document @Text +def @OrdinarySetup + + named @IndexWord { index } + named @IndexAWord { index } + named @IndexBWord { index } + named @AppendixWord { appendix } + + named @SectionNumbers { Arabic } + named @FirstSectionNumber { 1 } + named @SubSectionNumbers { Arabic } + named @FirstSubSectionNumber { 1 } + named @SubSubSectionNumbers { Arabic } + named @FirstSubSubSectionNumber { 1 } + named @AppendixNumbers { UCAlpha } + named @FirstAppendixNumber { 1 } + named @SubAppendixNumbers { Arabic } + named @FirstSubAppendixNumber { 1 } + named @SubSubAppendixNumbers { Arabic } + named @FirstSubSubAppendixNumber { 1 } + + named @SectionHeadingFont { Bold } + named @SectionHeadingBreak { ragged 1.2fx nohyphen } + named @SectionHeadingFormat + left number right title { number @Sep title } + + named @SubSectionHeadingFont { Bold } + named @SubSectionHeadingBreak { ragged 1.2fx nohyphen } + named @SubSectionHeadingFormat + left number right title { number @Sep title } + + named @SubSubSectionHeadingFont { Slope } + named @SubSubSectionHeadingBreak { ragged 1.2fx nohyphen } + named @SubSubSectionHeadingFormat + left number right title { number @Sep title } + + named @AppendixHeadingFont { Bold } + named @AppendixHeadingBreak { ragged 1.2fx nohyphen } + named @AppendixHeadingFormat + left number right title { number @Sep title } + + named @SubAppendixHeadingFont { Bold } + named @SubAppendixHeadingBreak { ragged 1.2fx nohyphen } + named @SubAppendixHeadingFormat + left number right title { number @Sep title } + + named @SubSubAppendixHeadingFont { Slope } + named @SubSubAppendixHeadingBreak { ragged 1.2fx nohyphen } + named @SubSubAppendixHeadingFormat + left number right title { number @Sep title } + + named @ReferencesHeadingFont { Bold } + named @ReferencesHeadingBreak { ragged 1.2fx nohyphen } + named @ReferencesHeadingFormat + right title { title } + + named @IndexHeadingFont { Bold } + named @IndexHeadingBreak { ragged 1.2fx nohyphen } + named @IndexHeadingFormat + right title { title } + + named @IndexAHeadingFont { Bold } + named @IndexAHeadingBreak { ragged 1.2fx nohyphen } + named @IndexAHeadingFormat + right title { title } + + named @IndexBHeadingFont { Bold } + named @IndexBHeadingBreak { ragged 1.2fx nohyphen } + named @IndexBHeadingFormat + right title { title } + + named @SectionGap { 2.0v @OrIfPlain 3f } + named @SubSectionGap { 1.5v @OrIfPlain 2f } + named @SubSubSectionGap { 1.5v @OrIfPlain 2f } + named @AppendixGap { 2.0v @OrIfPlain 3f } + named @SubAppendixGap { 1.5v @OrIfPlain 2f } + named @SubSubAppendixGap { 1.5v @OrIfPlain 2f } + + named @SectionInContents { Yes } + named @SubSectionInContents { Yes } + named @SubSubSectionInContents { No } + named @AppendixInContents { Yes } + named @SubAppendixInContents { Yes } + named @SubSubAppendixInContents { No } + named @ReferencesInContents { Yes } + named @IndexInContents { Yes } + named @IndexAInContents { Yes } + named @IndexBInContents { Yes } + + named @SectionNumInTheorems { No } + named @SubSectionNumInTheorems { No } + named @SubSubSectionNumInTheorems { No } + named @AppendixNumInTheorems { No } + named @SubAppendixNumInTheorems { No } + named @SubSubAppendixNumInTheorems { No } + + named @SectionNumInDisplays { Yes } + named @SubSectionNumInDisplays { No } + named @SubSubSectionNumInDisplays { No } + named @AppendixNumInDisplays { Yes } + named @SubAppendixNumInDisplays { No } + named @SubSubAppendixNumInDisplays { No } + + named @SectionNumInFigures { No } + named @SubSectionNumInFigures { No } + named @SubSubSectionNumInFigures { No } + named @AppendixNumInFigures { No } + named @SubAppendixNumInFigures { No } + named @SubSubAppendixNumInFigures { No } + + named @SectionNumInTables { No } + named @SubSectionNumInTables { No } + named @SubSubSectionNumInTables { No } + named @AppendixNumInTables { No } + named @SubAppendixNumInTables { No } + named @SubSubAppendixNumInTables { No } + + named @SectionNumInRunners { Yes } + named @SubSectionNumInRunners { No } + named @SubSubSectionNumInRunners { No } + named @AppendixNumInRunners { Yes } + named @SubAppendixNumInRunners { No } + named @SubSubAppendixNumInRunners { No } + + named @SectionPrefix { } + named @AppendixPrefix { } + named @ReferencesPrefix { } + named @IndexPrefix { } + named @IndexAPrefix { } + named @IndexBPrefix { } +@Begin + + ####################################################################### + # # + # Lists of sections, sub(-sub)sections, appendices, etc. # + # # + ####################################################################### + + def @TextPlace { @Galley } + + export num + def @SectionList named @Tag {} right num + { + @Galley + //@SectionGap @SectionList @Next num + } + + export num + def @SubSectionList named @Tag {} right num + { + @Galley + //@SubSectionGap @SubSectionList @Next num + } + + export num + def @SubSubSectionList named @Tag {} right num + { + @Galley + //@SubSubSectionGap @SubSubSectionList @Next num + } + + export num + def @AppendixList named @Tag {} right num + { + @Galley + //@AppendixGap @AppendixList @Next num + } + + export num + def @SubAppendixList named @Tag {} right num + { + @Galley + //@SubAppendixGap @SubAppendixList @Next num + } + + export num + def @SubSubAppendixList named @Tag {} right num + { + @Galley + //@SubSubAppendixGap @SubSubAppendixList @Next num + } + + + ####################################################################### + # # + # @SendFull - send full-width text. # + # # + ####################################################################### + + def @SendFull force into { @FullPlace&&following } + right x + { + x + } + + + ####################################################################### + # # + # Document. # + # # + ####################################################################### + + def @Document + named @InitialFont { @InitialFont } + named @InitialBreak { @InitialBreak } + named @InitialSpace { @InitialSpace } + named @InitialLanguage { @InitialLanguage } + named @PageOrientation { @PageOrientation } + named @PageHeaders { @PageHeaders } + named @ColumnNumber { @ColumnNumber } + named @FirstPageNumber { @FirstPageNumber } + named @OptimizePages { @OptimizePages } + named @Unpaginated { No } + { + def @ReferencesPart + named @Tag {} + { + @LargeScaleStructure + tag { @Tag } + type { Major } + initiallanguage { @InitialLanguage } + title { @RefHeading @RefListTitle } + headingfont { @ReferencesHeadingFont } + headingbreak { @ReferencesHeadingBreak } + headingformat { @ReferencesHeadingFormat @Body } + incontents { @ReferencesInContents } + pnprefix { @ReferencesPrefix } + majornum {} + majortitle {} + minornum {} + minortitle { @RefHeading @RefListTitle } + inrunners { Yes } + sendheader { @Body } + aboveheadinggap { 0f } + { //@RefListGap @ReferencesSection } + + } + + def @IndexPart + named @Tag {} + { + + def @Run + { + NonStart @Runner + @MajorNum {} + @MajorTitle { index @WordVal @IndexWord } + @MinorNum {} + @MinorTitle {} + @Owner { @Tag } + @Prefix { @IndexPrefix } + } + + @LargeScaleStructure + tag { @Tag } + type { Major } + initiallanguage { @InitialLanguage } + title { index @WordVal @IndexWord } + headingfont { @IndexHeadingFont } + headingbreak { @IndexHeadingBreak } + headingformat { @IndexHeadingFormat @Body } + incontents { @IndexInContents } + pnprefix { @IndexPrefix } + inrunners { Yes } + majornum {} + majortitle {} + minornum {} + minortitle { index @WordVal @IndexWord } + sendheader { @SendFull @Body } + innergap { @SectionGap } + wantindefinite { Yes } + @IndexSection @Run + + } + + def @IndexAPart + named @Tag {} + { + def @Run + { + NonStart @Runner + @MajorNum {} + @MajorTitle { index @WordVal @IndexAWord } + @MinorNum {} + @MinorTitle {} + @Owner { @Tag } + @Prefix { @IndexAPrefix } + } + + @LargeScaleStructure + tag { @Tag } + type { Major } + initiallanguage { @InitialLanguage } + title { index @WordVal @IndexAWord } + headingfont { @IndexAHeadingFont } + headingbreak { @IndexAHeadingBreak } + headingformat { @IndexAHeadingFormat @Body } + incontents { @IndexAInContents } + pnprefix { @IndexAPrefix } + inrunners { Yes } + majornum {} + majortitle {} + minornum {} + minortitle { index @WordVal @IndexAWord } + sendheader { @SendFull @Body } + innergap { @SectionGap } + wantindefinite { Yes } + @IndexASection @Run + + } + + def @IndexBPart + named @Tag {} + { + def @Run + { + NonStart @Runner + @MajorNum {} + @MajorTitle { index @WordVal @IndexBWord } + @MinorNum {} + @MinorTitle {} + @Owner { @Tag } + @Prefix { @IndexBPrefix } + } + + @LargeScaleStructure + tag { @Tag } + type { Major } + initiallanguage { @InitialLanguage } + title { index @WordVal @IndexBWord } + headingfont { @IndexBHeadingFont } + headingbreak { @IndexBHeadingBreak } + headingformat { @IndexBHeadingFormat @Body } + incontents { @IndexBInContents } + pnprefix { @IndexBPrefix } + inrunners { Yes } + majornum {} + majortitle {} + minornum {} + minortitle { index @WordVal @IndexBWord } + sendheader { @SendFull @Body } + innergap { @SectionGap } + wantindefinite { Yes } + @IndexBSection @Run + + } + + def @DocumentBody force into { @ColPlace&&preceding } + named @Optimize { @OptimizePages } + { + # this whole comment is now obsolete: + # It's important that the first component of @DocumentBody be + # indefinite. If it was definite, then @DocumentBody would + # attach immediately to the first page. This would prevent + # @FullWidth from attaching to that page, with the result that + # a document starting with @FullWidth would start on page 2! + + // @FootNoteThrough @Do @BeginFootNoteCounter + // @TextPlace + //@SectionGap @EndFigureList + //@SectionGap @EndNoteList 1 + //@SectionGap @MakeReferences @Do @ReferencesPart + // @MakeIndexA @Do @IndexAPart + // @MakeIndexB @Do @IndexBPart + // @MakeIndex @Do @IndexPart + // NonStart @Runner + } + + @InitialFont @Font @InitialBreak @Break @InitialLanguage @Language + @InitialSpace @Space { @ColourCommand @InitialColour } @SetColour + { + Yes @BeginAllCounters {} + Yes @BeginDisplayCounter {} + Yes @BeginFigureCounter {} + Yes @BeginTableCounter {} + // @BackEnd @Case { + + PlainText @Yield { + @Unpaginated @Case { + + { Yes yes } @Yield { + @ContinuousPageList + @Orient { @PageOrientation } + } + + { No no } @Yield { + @PageList + @ColumnNumber { @ColumnNumber } + @PageHeaders { @PageHeaders } + @Orient { @PageOrientation } + extra { Yes } + @FirstPageNumber + } + } + } + + else @Yield { + @PageList + @ColumnNumber { @ColumnNumber } + @PageHeaders { @PageHeaders } + @Orient { @PageOrientation } + extra { Yes } + @FirstPageNumber + } + } + // @DocumentBody + } + } + + macro @Doc { @Document // } + + + ####################################################################### + # # + # @Text containing sections, appendices, etc. # + # # + ####################################################################### + + export @ContentsGoesHere @FullWidth + @BeginSections @EndSections @Section + @BeginAppendices @EndAppendices @Appendix + def @Text force into { @TextPlace&&preceding } + body @Body + { + + def @ContentsGoesHere { @ContentsSection } + + export @ContentsGoesHere + def @FullWidth body @Body + { + def @ContentsGoesHere {} + + @SendFull { Start @Runner // @Body } + & NonStart @Runner & &2.1b & + } + + def @EndSectionsPlace { @Galley } + + def @EndSections force into { @EndSectionsPlace&&preceding } + {} + + macro @BeginSections + { //@SectionGap @SectionList @FirstSectionNumber + // @EndSectionsPlace // + } + + export @BeginSubSections @EndSubSections @SubSection @Title + def @Section force into { @SectionList&&preceding } + named @Tag {} + named @Title {} + named @RunningTitle { dft } + named @InitialLanguage {} + named @BypassNumber { dft } + body @Body + { + + def @EndSubSectionsPlace { @Galley } + + def @EndSubSections force into { @EndSubSectionsPlace&&preceding } + {} + + macro @BeginSubSections + { //@SubSectionGap @SubSectionList @FirstSubSectionNumber + // @EndSubSectionsPlace // + } + + def @SectionShortNum + { + @SectionNumbers @Then { + @BypassNumber @Dft { + @SectionNumbers @Num @SectionList&&@Tag @Open { num } + } + } + } + + export @BeginSubSubSections @EndSubSubSections @SubSubSection + def @SubSection force into { @SubSectionList&&preceding } + named @Tag {} + named @Title {} + named @RunningTitle { dft } + named @InitialLanguage { @InitialLanguage } + named @BypassNumber { dft } + body @Body + { + + def @EndSubSubSectionsPlace { @Galley } + + def @EndSubSubSections force into + { @EndSubSubSectionsPlace&&preceding } + {} + + macro @BeginSubSubSections + { //@SubSubSectionGap + @SubSubSectionList @FirstSubSubSectionNumber + // @EndSubSubSectionsPlace // + } + + def @SubSectionShortNum + { + @SubSectionNumbers @Then { + @BypassNumber @Dft { + @SectionShortNum @Join @SubSectionNumbers @Num + { @SubSectionList&&@Tag @Open { num } } + } + } + } + + def @SubSubSection force into { @SubSubSectionList&&preceding } + named @Tag {} + named @Title {} + named @RunningTitle { dft } + named @InitialLanguage { @InitialLanguage } + named @BypassNumber { dft } + body @Body + { + + @LargeScaleStructure + tag { @Tag } + type { Minor } + initiallanguage { @InitialLanguage } + title { @Title } + runningtitle { @RunningTitle } + headingfont { @SubSubSectionHeadingFont } + headingbreak { @SubSubSectionHeadingBreak } + headingformat { @Num @SubSubSectionHeadingFormat @Body } + incontents { @SubSubSectionInContents } + contentsindent { 6f } + numbers { @SubSubSectionNumbers } + attachnum { @SubSubSectionList&&preceding @Tagged @Tag } + retrievenum { @SubSubSectionList&&@Tag @Open { num } } + bypassnumber { @BypassNumber } + prefix { @SubSectionShortNum } + majornum {} + majortitle {} + intheorems { @SubSubSectionNumInTheorems } + indisplays { @SubSubSectionNumInDisplays } + infigures { @SubSubSectionNumInFigures } + intables { @SubSubSectionNumInTables } + inrunners { @SubSubSectionNumInRunners } + @Body + + } + + @LargeScaleStructure + tag { @Tag } + type { Minor } + initiallanguage { @InitialLanguage } + title { @Title } + runningtitle { @RunningTitle } + headingfont { @SubSectionHeadingFont } + headingbreak { @SubSectionHeadingBreak } + headingformat { @Num @SubSectionHeadingFormat @Body } + incontents { @SubSectionInContents } + contentsindent { 3f } + numbers { @SubSectionNumbers } + attachnum { @SubSectionList&&preceding @Tagged @Tag } + retrievenum { @SubSectionList&&@Tag @Open { num } } + bypassnumber { @BypassNumber } + prefix { @SectionShortNum } + majornum {} + majortitle {} + intheorems { @SubSectionNumInTheorems } + indisplays { @SubSectionNumInDisplays } + infigures { @SubSectionNumInFigures } + intables { @SubSectionNumInTables } + inrunners { @SubSectionNumInRunners } + @Body + + } + + @LargeScaleStructure + tag { @Tag } + type { Minor } + initiallanguage { @InitialLanguage } + title { @Title } + runningtitle { @RunningTitle } + headingfont { @SectionHeadingFont } + headingbreak { @SectionHeadingBreak } + headingformat { @Num @SectionHeadingFormat @Body } + incontents { @SectionInContents } + numbers { @SectionNumbers } + attachnum { @SectionList&&preceding @Tagged @Tag } + retrievenum { @SectionList&&@Tag @Open { num } } + pnprefix { @SectionPrefix } + majornum {} + majortitle {} + bypassnumber { @BypassNumber } + intheorems { @SectionNumInTheorems } + indisplays { @SectionNumInDisplays } + infigures { @SectionNumInFigures } + intables { @SectionNumInTables } + inrunners { @SectionNumInRunners } + @Body + + } + + def @EndAppendicesPlace { @Galley } + + def @EndAppendices force into { @EndAppendicesPlace&&preceding } + {} + + macro @BeginAppendices + { //@AppendixGap @AppendixList @FirstAppendixNumber + // @EndAppendicesPlace // + } + + export @BeginSubAppendices @EndSubAppendices @SubAppendix + def @Appendix force into { @AppendixList&&preceding } + named @Tag {} + named @Title {} + named @RunningTitle { dft } + named @InitialLanguage {} + named @BypassNumber { dft } + body @Body + { + + def @EndSubAppendicesPlace { @Galley } + + def @EndSubAppendices force into + { @EndSubAppendicesPlace&&preceding } + {} + + macro @BeginSubAppendices + { //@SubAppendixGap @SubAppendixList @FirstSubAppendixNumber + // @EndSubAppendicesPlace // + } + + def @AppendixShortNum + { + @AppendixNumbers @Then { + @BypassNumber @Dft { + @AppendixNumbers @Num @AppendixList&&@Tag @Open { num } + } + } + } + + export @BeginSubSubAppendices @EndSubSubAppendices @SubSubAppendix + def @SubAppendix force into { @SubAppendixList&&preceding } + named @Tag {} + named @Title {} + named @RunningTitle { dft } + named @InitialLanguage { @InitialLanguage } + named @BypassNumber { dft } + body @Body + { + + def @EndSubSubAppendicesPlace { @Galley } + + def @EndSubSubAppendices force into + { @EndSubSubAppendicesPlace&&preceding } + {} + + macro @BeginSubSubAppendices + { //@SubSubAppendixGap + @SubSubAppendixList @FirstSubSubAppendixNumber + // @EndSubSubAppendicesPlace // + } + + def @SubAppendixShortNum + { + @SubAppendixNumbers @Then { + @BypassNumber @Dft { + @AppendixShortNum @Join @SubAppendixNumbers @Num + { @SubAppendixList&&@Tag @Open { num } } + } + } + } + + def @SubSubAppendix force into {@SubSubAppendixList&&preceding} + named @Tag {} + named @Title {} + named @RunningTitle { dft } + named @InitialLanguage { @InitialLanguage } + named @BypassNumber { dft } + body @Body + { + + @LargeScaleStructure + tag { @Tag } + type { Minor } + initiallanguage { @InitialLanguage } + title { @Title } + runningtitle { @RunningTitle } + headingfont { @SubSubAppendixHeadingFont } + headingbreak { @SubSubAppendixHeadingBreak } + headingformat { @Num @SubSubAppendixHeadingFormat @Body } + incontents { @SubSubAppendixInContents } + contentsindent { 6f } + numbers { @SubSubAppendixNumbers } + attachnum { @SubSubAppendixList&&preceding @Tagged @Tag } + retrievenum { @SubSubAppendixList&&@Tag @Open { num } } + bypassnumber { @BypassNumber } + prefix { @SubAppendixShortNum } + majornum {} + majortitle {} + intheorems { @SubSubAppendixNumInTheorems } + indisplays { @SubSubAppendixNumInDisplays } + infigures { @SubSubAppendixNumInFigures } + intables { @SubSubAppendixNumInTables } + inrunners { @SubSubAppendixNumInRunners } + @Body + + } + + @LargeScaleStructure + tag { @Tag } + type { Minor } + initiallanguage { @InitialLanguage } + title { @Title } + runningtitle { @RunningTitle } + headingfont { @SubAppendixHeadingFont } + headingbreak { @SubAppendixHeadingBreak } + headingformat { @Num @SubAppendixHeadingFormat @Body } + incontents { @SubAppendixInContents } + contentsindent { 3f } + numbers { @SubAppendixNumbers } + attachnum { @SubAppendixList&&preceding @Tagged @Tag } + retrievenum { @SubAppendixList&&@Tag @Open { num } } + bypassnumber { @BypassNumber } + prefix { @AppendixShortNum } + majornum {} + majortitle {} + intheorems { @SubAppendixNumInTheorems } + indisplays { @SubAppendixNumInDisplays } + infigures { @SubAppendixNumInFigures } + intables { @SubAppendixNumInTables } + inrunners { @SubAppendixNumInRunners } + @Body + } + + @LargeScaleStructure + tag { @Tag } + type { Minor } + initiallanguage { @InitialLanguage } + title { @Title } + runningtitle { @RunningTitle } + headingfont { @AppendixHeadingFont } + headingbreak { @AppendixHeadingBreak } + headingformat { @Num @AppendixHeadingFormat @Body } + incontents { @AppendixInContents } + contentsindent { 0f } + word { appendix @WordVal @AppendixWord } + numbers { @AppendixNumbers } + attachnum { @AppendixList&&preceding @Tagged @Tag } + retrievenum { @AppendixList&&@Tag @Open { num } } + pnprefix { @AppendixPrefix } + majornum {} + majortitle {} + bypassnumber { @BypassNumber } + intheorems { @AppendixNumInTheorems } + indisplays { @AppendixNumInDisplays } + infigures { @AppendixNumInFigures } + intables { @AppendixNumInTables } + inrunners { Yes } + @Body + + } + + // Start @Runner + // @Body + // NonStart @Runner + + } + +@End @OrdinarySetup diff --git a/include/dsf b/include/dsf new file mode 100644 index 0000000..082c59d --- /dev/null +++ b/include/dsf @@ -0,0 +1,4644 @@ +############################################################################### +# # +# Lout @DocumentSetup package (Version 3.16) # +# # +# 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. # +# Version 3.07 by Jeffrey H. Kingston, February 1996. # +# Version 3.10 by Jeffrey H. Kingston, September 1996. # +# Version 3.11 by Jeffrey H. Kingston, December 1996. # +# Version 3.13 by Jeffrey H. Kingston, October 1998. # +# Version 3.16 by Jeffrey H. Kingston, May 1999. # +# Version 3.17 by Jeffrey H. Kingston, September 1999. # +# # +# 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. # +# # +############################################################################### + +extend @BasicSetup + +export + + @Runner + + @Figure @Table + @FootNote @AnotherFootNote @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 @DocumentSetup + named @PageType { A4 @OrIfPlain Other} # page type (width, height) + named @PageWidth { 80s } # page width if type Other + named @PageHeight { 66f } # page height if type Other + named @PageOrientation { Portrait } # Portrait, Landscape, etc. + named @PageBackground { } # background of each page + named @TopMargin { 2.50c @OrIfPlain 6f } # top margin of all pages + named @FootMargin { 2.50c @OrIfPlain 6f } # bottom margin of all pages + named @OddLeftMargin { 2.50c @OrIfPlain 10s } # left margin of odd pages + named @OddRightMargin { 2.50c @OrIfPlain 10s } # right margin of odd pages + named @EvenLeftMargin { 2.50c @OrIfPlain 10s } # left margin of even pages + named @EvenRightMargin { 2.50c @OrIfPlain 10s } # right margin of even pages + named @PageBoxType { None } # None Box CurveBox ShadowBox + named @PageBoxMargin { 1.00c } # page box margin + import @LengthUnits named @PageBoxLineWidth + { } # 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 @OrIfPlain 6s } # column gap + named @FigureLocation { PageTop } # default figure location + named @TableLocation { PageTop } # default table location + named @FigureFormat + named @II right x { |@DisplayIndent x | } + named @QQ right x { |@DisplayIndent x |@DisplayIndent } + named @CC right x { |0.5rt x | } + named @RR right x { |1.0rt x | } + right @Body + { @CC @Body } # default figure format + named @TableFormat + named @II right x { |@DisplayIndent x | } + named @QQ right x { |@DisplayIndent x |@DisplayIndent } + named @CC right x { |0.5rt x | } + named @RR right x { |1.0rt x | } + right @Body + { @CC @Body } # default table format + 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 @FigureCaptionFont { } # figure caption font + named @FigureCaptionBreak { } # figure caption break + named @FigureCaptionFormat named word {} named number {} named caption {} + { @B { word @NumSep number. &2s } @Insert caption } + named @TableCaptionFont { } # figure caption font + named @TableCaptionBreak { } # figure caption break + named @TableCaptionFormat named word {} named number {} named caption {} + { @B { word @NumSep number. &2s } @Insert caption } + 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 @OrIfPlain 0f } # extra gap above minor entry + named @ContentsGapAbove { 0.80v @OrIfPlain 1f } # extra gap above major entry + named @ContentsGapBelow { 0.00v @OrIfPlain 0f } # extra gap below major entry + named @ContentsFont { Bold } # font for major entry + named @ContentsPartGapAbove { 1.00v @OrIfPlain 1f } # extra gap above part entry + named @ContentsPartGapBelow { 0.00v @OrIfPlain 0f } # extra gap below part entry + named @ContentsFormat + left number + right title + { number @Sep title } # contents format + named @ContentsLeader { .. } # leader symbol in contents + named @ContentsLeaderGap { 4s @OrIfPlain 2s } # gap between leaders + named @ContentsRightWidth { 3f @OrIfPlain 6s } # 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 { 0s } # indent to left of labels + named @RefListRightIndent { 0s } # indent to right of items + named @RefListGap { @ListGap } # gap between ref list items + named @RefListFont { } # font used in reference list + named @RefListBreak { } # break style of ref list + named @RefListLabelWidth { @ListLabelWidth } # 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 {} + named ":" { "\037" } + { @Tag } # sorting key + + named @MakeIndex { No } # make index? Yes or No + named @IndexFont { } # index entries font + named @IndexBreak { {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # index entries break + named @IndexColumnNumber { 2 } # index columns (1 to 10) + named @IndexColumnGap { 1.00c @OrIfPlain 6s } # index column gap + named @MakeIndexA { No } # make index A? Yes or No + named @IndexAFont { } # index A entries font + named @IndexABreak { {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # index A entries break + named @IndexAColumnNumber { 2 } # index A columns (1 to 10) + named @IndexAColumnGap { 1.00c @OrIfPlain 6s } # index A column gap + named @MakeIndexB { No } # make index B? Yes or No + named @IndexBFont { } # index B entries font + named @IndexBBreak { {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # index B entries break + named @IndexBColumnNumber { 2 } # index B columns (1 to 10) + named @IndexBColumnGap { 1.00c @OrIfPlain 6s } # index B column gap + named @TopGap { 0.75c @OrIfPlain 2f } # gap between figures + named @MidGap { 0.75c @OrIfPlain 2f } # gap above/below body text + + named @FootNoteNumbers { Arabic } # footnote numbers + named @FootNoteThrough { No } # numbered through chapter? + named @FootNoteLocation { ColFoot } # where the footnote appears + named @FootNoteFont { 0.80f } # font for footnotes + named @FootNoteBreak { 1.2fx @OrIfPlain 1fx } # break for footnotes + named @FootNoteFormat left number right body + { { number &0.05f } @Insert body } # break for footnotes + named @FootLen { 2.00c @OrIfPlain 10s } # length of footnote line + named @FootAboveGap { @DisplayGap } # gap above footnote line + named @FootGap { 0.20c @OrIfPlain 1fx } # 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 { @DisplayGap } # 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.2fx @OrIfPlain 1fx } # break for endnotes + named @EndNoteFormat left number right body + { { number &0.05f } @Insert body } # break for endnotes + named @EndNoteGap { 0.20c @OrIfPlain 1f } # gap between endnotes + + named @TheoremWord { theorem } # "Theorem" word, etc. + named @TheoremTitleFormat right title + { (title) } # Theorem title format if present + named @TheoremFormat named word {} named number {} named title {} named body {} # theorem format + { { @B { word @NumSep number title: } &2s } @Insert body } + named @DefinitionWord { definition } # "Definition" word, etc. + named @DefinitionTitleFormat{ (title) } # Definition title format if present + named @DefinitionFormat named word {} named number {} named title {} named body {} # definition format + { { @B { word @NumSep number title: } &2s } @Insert body } + named @ClaimWord { claim } # "Claim" word, etc. + named @ClaimTitleFormat { (title) } # Claim title format if present + named @ClaimFormat named word {} named number {} named title {} named body {} # claim format + { { @B { word @NumSep number title: } &2s } @Insert body } + named @PropositionWord { proposition } # "Proposition" word, etc. + named @PropositionTitleFormat{ (title) } # Proposition title format if present + named @PropositionFormat named word {} named number {} named title {} named body {} # proposition format + { { @B { word @NumSep number title: } &2s } @Insert body } + named @LemmaWord { lemma } # "Lemma" word, etc. + named @LemmaTitleFormat { (title) } # Lemma title format if present + named @LemmaFormat named word {} named number {} named title {} named body {} # lemma format + { { @B { word @NumSep number title: } &2s } @Insert body } + named @CorollaryWord { corollary } # "Corollary" word, etc. + named @CorollaryTitleFormat { (title) } # Corollary title format if present + named @CorollaryFormat named word {} named number {} named title {} named body {} # corollary format + { { @B { word @NumSep number title: } &2s } @Insert body } + named @ExampleWord { example } # "Example" word, etc. + named @ExampleTitleFormat { (title) } # Example title format if present + named @ExampleFormat named word {} named number {} named title {} named body {} # example format + { { @B { word @NumSep number title: } &2s } @Insert body } + 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 @StructPageNums { No } # structured page numbers + + 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 { @Centre @PageNum } + named @IntroEvenTop right @PageNum { @Null } + named @IntroEvenFoot right @PageNum { @Centre @PageNum } + 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 @Sep @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 @Sep @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 + { + @BackEnd @Case { + PlainText @Yield { "-" @PlainGraphic 1f @High } + PostScript @Yield { {0 0 moveto xsize 0 lineto stroke} @Graphic {} } + PDF @Yield { {0 0 m __xsize 0 l S} @Graphic {} } + } + } + + + ########################################################################### + # # + # 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 + } + } + + ########################################################################### + # # + # 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 + } + } + + + ########################################################################### + # # + # @MakePageNum # + # # + # Make a page number. # + # # + ########################################################################### + + def @MakePageNum + named numbers {} + named rawnum {} + named prefix {} + named owner {} + { + def @OwnerNum { @PageMarker&&owner @Open { rawnum } } + + def @StructNum { @FirstPageNumber @Plus rawnum @Minus @OwnerNum } + + @PageHeaders.@StructPageNums @Case { + { Titles.Yes NoTitles.Yes } @Yield { + prefix @Join { numbers @Num @StructNum } } + else @Yield { numbers @Num rawnum } + } + } + + + ########################################################################### + # # + # 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 right @Orient + { + @Orient @Case { + { Portrait ReversePortrait } @Yield @Width + { Landscape ReverseLandscape } @Yield @Height + } + } + + def @OrientedHeight right @Orient + { + @Orient @Case { + { Portrait ReversePortrait } @Yield @Height + { Landscape ReverseLandscape } @Yield @Width + } + } + + def @OrientationAngle right @Orient + { + @Orient @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 @DoBackground right @Orient + { +# "LoutPageSet" @Graphic # VT: case PDF produces nothing + { @BackEnd @Case { + PostScript @Yield "LoutPageSet" + else @Yield "% @DoBackground/LoutPageSet UNIMPLEMENTED" + } + } @Graphic + { + { @OrientationAngle @Orient } @Rotate + { @OrientedWidth @Orient } @Wide { @OrientedHeight @Orient } @High + { //@TopMargin ||@OddLeftMargin + @HExpand @VExpand @PageBackground + ||@OddRightMargin //@FootMargin + } + } + } + + def @PageSet right x + { +# "LoutPageSet" @Graphic # VT: case PDF produces nothing + { @BackEnd @Case { + PostScript @Yield "LoutPageSet" + else @Yield "% @DoBackground/LoutPageSet UNIMPLEMENTED" + } + } @Graphic x + } + + def @MargSet + left parity + right x + { +# { parity "LoutMargSet" } @Graphic x # VT: case PDF produces nothing + { @BackEnd @Case { + PostScript @Yield { parity "LoutMargSet" } + else @Yield "% @MargSet/LoutMargSet UNIMPLEMENTED" + } + } @Graphic x + } + + def @OddPage + left extra + named @Orient {} + right x + { + # @DoBackground @Orient ||0io + @PageSet + { @OrientationAngle @Orient } @Rotate + { @OrientedWidth @Orient } @Wide { @OrientedHeight @Orient } @High + { //@TopMargin ||@OddLeftMargin + @PageBackground @Background + 1 @MargSet + @PageBox @HExpand { extra // @VExpand x } + ||@OddRightMargin //@FootMargin + } + } + + def @EvenPage + left extra + named @Orient {} + right x + { + @PageSet + # @DoBackground @Orient ||0io + { @OrientationAngle @Orient } @Rotate + { @OrientedWidth @Orient } @Wide { @OrientedHeight @Orient } @High + { //@TopMargin ||@EvenLeftMargin + @PageBackground @Background + 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 @Owner @Prefix + def @Runner + left @Start + named @MajorNum {} + named @MajorTitle {} + named @MinorNum {} + named @MinorTitle {} + named @Owner {} + named @Prefix {} + named @Tag {} + { @Null + } + + def @DupRunner # duplicate previous runner + { + @Runner&&preceding @Open { + NonStart @Runner + @MajorNum { @MajorNum } + @MajorTitle { @MajorTitle } + @MinorNum { @MinorNum } + @MinorTitle { @MinorTitle } + @Owner { @Owner } + @Prefix { @Prefix } + } + } + + 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 @FullPagePlace { @Galley } + def @EvenFullPagePlace { @Galley } + def @EvenPagePlace { @Galley } + def @OddFullPagePlace { @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 { @ForceGalley } + + def @TryAfterLinePlace right x + { + x @Case { + noforce @Yield @Galley + force @Yield @ForceGalley + } + } + + def @EvenFullPageSection + { + @OneRow @EvenFullPagePlace + // @FullPagePlace + //@MidGap @EvenFullPageSection + } + + def @OddFullPageSection + { + @OneRow @OddFullPagePlace + // @FullPagePlace + //@MidGap @OddFullPageSection + } + + def @EvenPageTopSect + { + @OneRow @EvenPagePlace + // @PageTopPlace + //@MidGap @PageFootAndTopPlace + //@MidGap @EvenPageTopSect + } + + def @OddPageTopSect + { + @PageTopPlace + //@MidGap @PageFootAndTopPlace + //@MidGap @OddPageTopSect + } + + def @PageOddTopSection right @Orient + { + @OddPageTopSect ||{@OrientedWidth @Orient} @FullPlace + ||{@OrientedWidth @Orient} @OddFullPlace + } + + def @PageEvenTopSection right @Orient + { + @EvenPageTopSect ||{@OrientedWidth @Orient} @FullPlace + ||{@OrientedWidth @Orient} @EvenFullPlace + } + + def @PageIntroOddTopSection right @Orient + { + @OddPageTopSect ||{@OrientedWidth @Orient} @IntroFullPlace + ||{@OrientedWidth @Orient} @IntroOddFullPlace + } + + def @PageIntroEvenTopSection right @Orient + { + @EvenPageTopSect + ||{@OrientedWidth @Orient} @IntroFullPlace + ||{@OrientedWidth @Orient} @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 } + named @Another { No } + named @Label { Numbered } + right x + { + + def @FootLabelFmt + right x + { + @FootNoteFont @Font @FootNoteBreak @Break + +0.3v @VShift { Base 0.8f } @Font x + } + + def @FootExtra + { + @BackEnd @Case { + PlainText @Yield "," + else @Yield @FootLabelFmt "," + } + } + + def @FootLabel + { + @Label @Case { + "Numbered" @Yield { @BackEnd @Case { + PlainText @Yield { ({@NumberOf @Tag}) } + else @Yield @FootLabelFmt @NumberOf @Tag + } } + else @Yield { @BackEnd @Case { + PlainText @Yield @Label + else @Yield @FootLabelFmt @Label + } } + } + } + + def @LongFootLabel + { + @Another @Case { + No @Yield { @FootLabel } + Yes @Yield { @FootExtra &0iu @FootLabel } + } + } + + def @FootVal + { + @FootNoteFont @Font @FootNoteBreak @Break @Label @Case { + "Numbered" @Yield { + { @FootNoteCounterIncrement @Tag & @FootLabel } + @FootNoteFormat x + } + else @Yield { @FootLabel @FootNoteFormat x } + } + } + + def @PageFootNote into { @PageFootNotePlace&&following } { @FootVal } + def @ColFootNote into { @ColFootNotePlace&&following } { @FootVal } + + @Location @Case { + ColFoot @Yield { @Null &0iu @LongFootLabel & @ColFootNote } + PageFoot @Yield { @Null &0iu @LongFootLabel & @PageFootNote } + } + } + + macro @AnotherFootNote { @FootNote @Another { Yes } } + + + ########################################################################### + # # + # 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 @ChooseColList right colnum + { + @OneOf + { + @ColList colnum + @IndexAColList @IndexAColumnNumber + @IndexBColList @IndexBColumnNumber + @IndexColList @IndexColumnNumber + } + } + + def @ChooseIntroColList right colnum + { + @OneOf + { + @IntroColList colnum + @IndexAColList @IndexAColumnNumber + @IndexBColList @IndexBColumnNumber + @IndexColList @IndexColumnNumber + } + } + + def @SimplePageList + named @ColumnNumber {} + named @PageHeaders {} + named extra { No } + named @Orient {} + named @AtTop { @Null } + right @PageNum + { + + def @OrdinaryOddPage + { + {@PageHeaders.{@SStart @PageNum}} @OddTopHeader + { @PageNumbers @Num @PageNum } + //@MidGap @AtTop + //@MidGap @PageOddTopSection @Orient + //@MidGap @ChooseColList @ColumnNumber + // //1rt @OneRow + { // @PageFootSection + //@MidGap {@PageHeaders.{@SStart @PageNum}} @OddFootHeader + { @PageNumbers @Num @PageNum } + } + } + + def @FullPageOddPage + { + {@PageHeaders.{@SStart @PageNum}} @OddTopHeader + { @PageNumbers @Num @PageNum } + //@MidGap @OddFullPageSection + // //1rt @OneRow + { //@MidGap {@PageHeaders.{@SStart @PageNum}} @OddFootHeader + { @PageNumbers @Num @PageNum } + } + } + + def @SimpleEvenPageList + named @ColumnNumber {} + named @PageHeaders {} + named extra { No } + right @PageNum + { + + def @OrdinaryEvenPage + { + @PageHeaders.NonStart @EvenTopHeader + { @PageNumbers @Num @PageNum } + //@MidGap @PageEvenTopSection @Orient + //@MidGap @ChooseColList @ColumnNumber + // //1rt @OneRow + { // @PageFootSection + //@MidGap @PageHeaders.NonStart @EvenFootHeader + { @PageNumbers @Num @PageNum } + } + } + + def @FullPageEvenPage + { + @PageHeaders.NonStart @EvenTopHeader + { @PageNumbers @Num @PageNum } + //@MidGap @EvenFullPageSection + // //1rt @OneRow + { //@MidGap @PageHeaders.NonStart @EvenFootHeader + { @PageNumbers @Num @PageNum } + } + } + + @PageMarker + rawnum { @PageNum } + num { @PageNumbers @Num @PageNum } + // @FootNoteThrough @NoDo @BeginFootNoteCounter + // {} @EvenPage @Orient { @Orient } + { + @OrdinaryEvenPage ||{@OrientedWidth @Orient} @FullPageEvenPage + } + // @SimplePageList + @ColumnNumber { @ColumnNumber } + @PageHeaders { @PageHeaders } + @Orient { @Orient } + @Next @PageNum + } + + @PageMarker + rawnum { @PageNum } + num { @PageNumbers @Num @PageNum } + // @FootNoteThrough @NoDo @BeginFootNoteCounter + // { extra @Then @ZeroColList @ColumnNumber } @OddPage @Orient { @Orient } + { + @OrdinaryOddPage ||{@OrientedWidth @Orient} @FullPageOddPage + } + // @SimpleEvenPageList + @ColumnNumber { @ColumnNumber } + @PageHeaders { @PageHeaders } + @Next @PageNum + } + + def @SimpleIntroPageList + named @ColumnNumber {} + named @PageHeaders {} + named @Orient {} + named extra { No } + named @AtTop { @Null } + right @PageNum + { + @PageMarker + num { @IntroPageNumbers @Num @PageNum } + rawnum { @PageNum } + // @FootNoteThrough @NoDo @BeginFootNoteCounter + // { extra @Then @ZeroIntroColList @ColumnNumber } @OddPage @Orient { @Orient } + { + {@PageHeaders.{@SStart @PageNum}} @IntroOddTopHeader + { @IntroPageNumbers @Num @PageNum } + //@MidGap @AtTop + //@MidGap @PageIntroOddTopSection @Orient + //@MidGap @ChooseIntroColList @ColumnNumber + // //1rt @OneRow + { // @PageFootSection + //@MidGap + {@PageHeaders.{@SStart @PageNum}} @IntroOddFootHeader + { @IntroPageNumbers @Num @PageNum } + } + } + // @PageMarker + num { @IntroPageNumbers @Num @Next @PageNum } + rawnum { @Next @PageNum } + // @FootNoteThrough @NoDo @BeginFootNoteCounter + // {} @EvenPage @Orient { @Orient } + @Runner&&following @Open + { + @PageHeaders.NonStart @IntroEvenTopHeader { @IntroPageNumbers @Num @Next @PageNum } + //@MidGap @PageIntroEvenTopSection @Orient + //@MidGap @ChooseIntroColList @ColumnNumber + // //1rt @OneRow + { // @PageFootSection + //@MidGap @PageHeaders.NonStart @IntroEvenFootHeader + { @IntroPageNumbers @Num @Next @PageNum } + } + } + // @SimpleIntroPageList + @ColumnNumber { @ColumnNumber } + @PageHeaders { @PageHeaders } + @Orient { @Orient } + @Next @Next @PageNum + } + + def @SimpleOddOrEvenIntroPageList + named @ColumnNumber {} + named @PageHeaders {} + named @Orient {} + named extra { No } + named @AtTop { @Null } + right @PageNum + { + + def @SimpleEvenIntroPageList + named @ColumnNumber {} + named @PageHeaders {} + named @Orient {} + named extra { No } + named @AtTop { @Null } + right @PageNum + { + + @PageMarker + num { @IntroPageNumbers @Num @PageNum } + rawnum { @PageNum } + // @FootNoteThrough @NoDo @BeginFootNoteCounter + // {} @EvenPage @Orient { @Orient } + @Runner&&following @Open + { + @PageHeaders.NonStart @IntroEvenTopHeader { @IntroPageNumbers @Num @PageNum } + //@MidGap @PageIntroEvenTopSection @Orient + //@MidGap @ChooseIntroColList @ColumnNumber + // //1rt @OneRow + { // @PageFootSection + //@MidGap @PageHeaders.NonStart @IntroEvenFootHeader + { @IntroPageNumbers @Num @PageNum } + } + } + // @SimpleOddOrEvenIntroPageList + @ColumnNumber { @ColumnNumber } + @PageHeaders { @PageHeaders } + @Orient { @Orient } + @Next @PageNum + } + @PageMarker + num { @IntroPageNumbers @Num @PageNum } + rawnum { @PageNum } + // @FootNoteThrough @NoDo @BeginFootNoteCounter + // { extra @Then @ZeroIntroColList @ColumnNumber } @OddPage @Orient { @Orient } + { + {@PageHeaders.{@SStart @PageNum}} @IntroOddTopHeader + { @IntroPageNumbers @Num @PageNum } + //@MidGap @AtTop + //@MidGap @PageIntroOddTopSection @Orient + //@MidGap @ChooseIntroColList @ColumnNumber + // //1rt @OneRow + { // @PageFootSection + //@MidGap + {@PageHeaders.{@SStart @PageNum}} @IntroOddFootHeader + { @IntroPageNumbers @Num @PageNum } + } + } + // @SimpleEvenIntroPageList + @ColumnNumber { @ColumnNumber } + @PageHeaders { @PageHeaders } + @Orient { @Orient } + @Next @PageNum + } + + def @RunningPageList + named @ColumnNumber {} + named @PageHeaders {} + named extra { No } + named @Orient {} + named @AtTop { @Null } + right @PageNum + { + + def @OrdinaryOddPage + { + @Runner&&following @Open + { + @PageMarker + num { @MakePageNum + numbers { @PageNumbers } + rawnum { @PageNum } + prefix { @Prefix } + owner { @Owner } } + rawnum { @PageNum } + // @PageHeaders.@Start @RunningOddTopHeader + @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } + @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } + { + @MakePageNum + numbers { @PageNumbers } + rawnum { @PageNum } + prefix { @Prefix } + owner { @Owner } + } + //@MidGap @AtTop + //@MidGap @PageOddTopSection @Orient + //@MidGap @ChooseColList @ColumnNumber + // //1rt @OneRow + { // @PageFootSection + //@MidGap @PageHeaders.@Start @RunningOddFootHeader + @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } + @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } + { + @MakePageNum + numbers { @PageNumbers } + rawnum { @PageNum } + prefix { @Prefix } + owner { @Owner } + } + } + } + } + + def @FullPageOddPage + { + @Runner&&following @Open + { + @PageMarker + num { @MakePageNum + numbers { @PageNumbers } + rawnum { @PageNum } + prefix { @Prefix } + owner { @Owner } } + rawnum { @PageNum } + // @PageHeaders.@Start @RunningOddTopHeader + @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } + @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } + { + @MakePageNum + numbers { @PageNumbers } + rawnum { @PageNum } + prefix { @Prefix } + owner { @Owner } + } + //@MidGap @AtTop + //@MidGap @OddFullPageSection + // //1rt @OneRow + { + //@MidGap @PageHeaders.@Start @RunningOddFootHeader + @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } + @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } + { + @MakePageNum + numbers { @PageNumbers } + rawnum { @PageNum } + prefix { @Prefix } + owner { @Owner } + } + } + } + } + + def @RunningEvenPageList + named @ColumnNumber {} + named @PageHeaders {} + right @PageNum + { + + def @OrdinaryEvenPage + { + @Runner&&following @Open + { + @PageMarker + num { @MakePageNum + numbers { @PageNumbers } + rawnum { @PageNum } + prefix { @Prefix } + owner { @Owner } } + rawnum { @PageNum } + // @PageHeaders.@Start @RunningEvenTopHeader + @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } + @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } + { + @MakePageNum + numbers { @PageNumbers } + rawnum { @PageNum } + prefix { @Prefix } + owner { @Owner } + } + //@MidGap @PageEvenTopSection @Orient + //@MidGap @ChooseColList @ColumnNumber + // //1rt @OneRow + { // @PageFootSection + //@MidGap @PageHeaders.@Start @RunningEvenFootHeader + @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } + @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } + { + @MakePageNum + numbers { @PageNumbers } + rawnum { @PageNum } + prefix { @Prefix } + owner { @Owner } + } + } + } + } + + def @FullPageEvenPage + { + @Runner&&following @Open + { + @PageMarker + num { @MakePageNum + numbers { @PageNumbers } + rawnum { @PageNum } + prefix { @Prefix } + owner { @Owner } } + rawnum { @PageNum } + // @PageHeaders.@Start @RunningEvenTopHeader + @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } + @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } + { + @MakePageNum + numbers { @PageNumbers } + rawnum { @PageNum } + prefix { @Prefix } + owner { @Owner } + } + //@MidGap @EvenFullPageSection + // //1rt @OneRow + { + //@MidGap @PageHeaders.@Start @RunningEvenFootHeader + @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } + @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } + { + @MakePageNum + numbers { @PageNumbers } + rawnum { @PageNum } + prefix { @Prefix } + owner { @Owner } + } + } + } + } + + @FootNoteThrough @NoDo @BeginFootNoteCounter + // {} @EvenPage @Orient { @Orient } + { + @OrdinaryEvenPage ||{@OrientedWidth @Orient} @FullPageEvenPage + } + // @RunningPageList + @ColumnNumber { @ColumnNumber } + @PageHeaders { @PageHeaders } + @Orient { @Orient } + @Next @PageNum + } + + @FootNoteThrough @NoDo @BeginFootNoteCounter + // { extra @Then @ZeroColList @ColumnNumber } @OddPage @Orient { @Orient } + { + @OrdinaryOddPage ||{@OrientedWidth @Orient} @FullPageOddPage + } + // @RunningEvenPageList + @ColumnNumber { @ColumnNumber } + @PageHeaders { @PageHeaders } + @Next @PageNum + } + + def @RunningIntroPageList + named @ColumnNumber {} + named @PageHeaders {} + named @AtTop { @Null } + named @Orient {} + named extra { No } + right @PageNum + { + @FootNoteThrough @NoDo @BeginFootNoteCounter + // { extra @Then @ZeroIntroColList @ColumnNumber } @OddPage @Orient { @Orient } + @Runner&&following @Open + { + @PageMarker + num { @MakePageNum + numbers { @IntroPageNumbers } + rawnum { @PageNum } + prefix { @Prefix } + owner { @Owner } } + rawnum { @PageNum } + // @PageHeaders.@Start @RunningIntroOddTopHeader + @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } + @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } + { + @MakePageNum + numbers { @IntroPageNumbers } + rawnum { @PageNum } + prefix { @Prefix } + owner { @Owner } + } + //@MidGap @AtTop + //@MidGap @PageIntroOddTopSection @Orient + //@MidGap @IntroColList @ColumnNumber + // //1rt @OneRow + { // @PageFootSection + //@MidGap @PageHeaders.@Start @RunningIntroOddFootHeader + @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } + @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } + { + @MakePageNum + numbers { @IntroPageNumbers } + rawnum { @PageNum } + prefix { @Prefix } + owner { @Owner } + } + } + } + // @FootNoteThrough @NoDo @BeginFootNoteCounter + // {} @EvenPage @Orient { @Orient } + @Runner&&following @Open + { + @PageMarker + num { @MakePageNum + numbers { @IntroPageNumbers } + rawnum { @Next @PageNum } + prefix { @Prefix } + owner { @Owner } } + rawnum { @Next @PageNum } + // @PageHeaders.@Start @RunningIntroEvenTopHeader + @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } + @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } + { + @MakePageNum + numbers { @IntroPageNumbers } + rawnum { @Next @PageNum } + prefix { @Prefix } + owner { @Owner } + } + //@MidGap @PageIntroEvenTopSection @Orient + //@MidGap @ChooseIntroColList @ColumnNumber + // //1rt @OneRow + { // @PageFootSection + //@MidGap @PageHeaders.@Start @RunningIntroEvenFootHeader + @MajorNum { @MajorNum } @MajorTitle { @MajorTitle } + @MinorNum { @MinorNum } @MinorTitle { @MinorTitle } + { + @MakePageNum + numbers { @IntroPageNumbers } + rawnum { @Next @PageNum } + prefix { @Prefix } + owner { @Owner } + } + } + } + // @RunningIntroPageList + @PageHeaders { @PageHeaders } + @ColumnNumber { @ColumnNumber } + @Orient { @Orient } + @Next @Next @PageNum + } + + def @PageList + named @ColumnNumber {} + named @PageHeaders {} + named extra { No } + named @Orient {} + named @AtTop { @Null } + right @FirstPageNum + { + @PageHeaders @Case { + { None Simple } @Yield @SimplePageList + @ColumnNumber { @ColumnNumber } + @PageHeaders { @PageHeaders } + @Orient { @Orient } + extra { extra } + @AtTop { @AtTop } + @FirstPageNum + { Running Titles } @Yield @RunningPageList + @ColumnNumber { @ColumnNumber } + @PageHeaders { @PageHeaders } + @Orient { @Orient } + extra { extra } + @AtTop { @AtTop } + @FirstPageNum + } + // + @PageMark last.page + } + + def @IntroPageList + named @ColumnNumber {} + named @PageHeaders {} + named @Orient {} + named extra { No } + named @AtTop { @Null } + right @FirstPageNum + { + @PageHeaders @Case { + { None Simple } @Yield @SimpleIntroPageList + @ColumnNumber { @ColumnNumber } + @PageHeaders { @PageHeaders } + @Orient { @Orient } + extra { extra } + @AtTop { @AtTop } + @FirstPageNum + { Running Titles } @Yield @RunningIntroPageList + @ColumnNumber { @ColumnNumber } + @PageHeaders { @PageHeaders } + @Orient { @Orient } + extra { extra } + @AtTop { @AtTop } + @FirstPageNum + } + } + + def @ContinuousPageList + named @Orient {} + { + {@OrientedWidth @Orient} @Wide + { //@TopMargin ||@EvenLeftMargin + { + @BeginFootNoteCounter + // @ColPlace + //@FootAboveGap @ColFootNoteSection + //@FootAboveGap @PageFootNoteSection + } + ||@EvenRightMargin //@FootMargin + } + } + + + ########################################################################### + # # + # 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 @ContentsFormat @HExpand { + title & @ContentsLeaderGap @Wide &1rt @OneCol { + @Leaders & @RightPart &0io + } + } + |@ContentsRightWidth + } + + //pregap + //0.5vx + @BackEnd @Case { + { PostScript PlainText } @Yield { + protect @Case { + No @Yield @Item + Yes @Yield @Protect @Item + } + } + PDF @Yield { + protect @Case { + No @Yield { "__link_source=<<"title">>" } @Graphic @Item + Yes @Yield { "__link_source=<<"title">>" } @Graphic { @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 { @ContentsFont @Font number } + title { @ContentsFont @Font title } + pagenum { pagenum } + pregap { pregap } + postgap { postgap } + protect { Yes } + } + else @Yield @Null + } + } + + def @VeryMajorContentsEntry + left wanted + named indent { 0.5rt } + named title {} + named pregap { @ContentsPartGapAbove } + named postgap { @ContentsPartGapBelow } + { + def item + { + //pregap + //0.5vx + |indent @ContentsFont @Font @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}) + } + else @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 } @EndNoteFormat 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 { + @BackEnd @Case { + PlainText @Yield "" + PostScript @Yield { + { parity "LoutMargShift gsave" // "grestore" } @Graphic + { + |@MarginNoteHGap @MarginNoteWidth @Wide @OneRow x + |@MarginNoteHGap //@MarginNoteVGap + } + } + PDF @Yield { "% @MargPut/LoutMargShift UNIMPLEMENTED" @Graphic { + |@MarginNoteHGap @MarginNoteWidth @Wide @OneRow x + |@MarginNoteHGap //@MarginNoteVGap + } # VT: PDF currently has no output + } + } + } + } + + 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. # + # # + ########################################################################### + +# +# VT: the expressions in the braces will work for PostScript but not for PDF +# they should be modified in the way the "named c { " cm" }" blocks were modified above +# but since the point of @Place is to output a matrix (?), I have not implemented this change +# + 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 { + @BackEnd @Case { + PlainText @Yield "" + PostScript @Yield { + { "LoutPageDict begin matr setmatrix" x y "translate end gsave" + // "grestore" } @Graphic val + } + else @Yield { { "% @Place UNIMPLEMENTED" } @Graphic val # VT: PDF currently has no output + } + } + } + } + + + ########################################################################### + # # + # @Theorem, @Proof, and @EndProof # + # # + ########################################################################### + + export @Tag val + def @TheoremCounterMarker + named @Tag {} + named val {} + { + @Null + } + + def @BeginTheoremCounter + right prefix + { + @TheoremCounterMarker val { prefix @Join 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 @TheoremTitleFormat @Title + } + } + + { @PageMark @Tag @TheoremCounterIncrement @Tag } @Insert + @TheoremFormat + word { theorem @WordVal @TheoremWord } + number { @TheoremNum @Tag } + title { @TheoremTitle } + body { 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 @Join 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) + } + } + + { @PageMark @Tag @DefinitionCounterIncrement @Tag } @Insert + @DefinitionFormat + word { definition @WordVal @DefinitionWord } + number { @DefinitionNum @Tag } + title { @DefinitionTitle } + body { x } + } + + + ########################################################################### + # # + # @Claim # + # # + ########################################################################### + + export @Tag val + def @ClaimCounterMarker + named @Tag {} + named val {} + { + @Null + } + + def @BeginClaimCounter + right prefix + { + @ClaimCounterMarker val { prefix @Join 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) + } + } + + { @PageMark @Tag @ClaimCounterIncrement @Tag } @Insert + @ClaimFormat + word { claim @WordVal @ClaimWord } + number { @ClaimNum @Tag } + title { @ClaimTitle } + body { x } + } + + + ########################################################################### + # # + # @Proposition # + # # + ########################################################################### + + export @Tag val + def @PropositionCounterMarker + named @Tag {} + named val {} + { + @Null + } + + def @BeginPropositionCounter + right prefix + { + @PropositionCounterMarker val { prefix @Join 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) + } + } + + { @PageMark @Tag @PropositionCounterIncrement @Tag } @Insert + @PropositionFormat + word { proposition @WordVal @PropositionWord } + number { @PropositionNum @Tag } + title { @PropositionTitle } + body { x } + } + + + ########################################################################### + # # + # @Lemma # + # # + ########################################################################### + + export @Tag val + def @LemmaCounterMarker + named @Tag {} + named val {} + { + @Null + } + + def @BeginLemmaCounter + right prefix + { + @LemmaCounterMarker val { prefix @Join 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) + } + } + + { @PageMark @Tag @LemmaCounterIncrement @Tag } @Insert + @LemmaFormat + word { lemma @WordVal @LemmaWord } + number { @LemmaNum @Tag } + title { @LemmaTitle } + body { x } + } + + + ########################################################################### + # # + # @Corollary # + # # + ########################################################################### + + export @Tag val + def @CorollaryCounterMarker + named @Tag {} + named val {} + { + @Null + } + + def @BeginCorollaryCounter + right prefix + { + @CorollaryCounterMarker val { prefix @Join 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) + } + } + + { @PageMark @Tag @CorollaryCounterIncrement @Tag } @Insert + @CorollaryFormat + word { corollary @WordVal @CorollaryWord } + number { @CorollaryNum @Tag } + title { @CorollaryTitle } + body { x } + } + + + ########################################################################### + # # + # @Example # + # # + ########################################################################### + + export @Tag val + def @ExampleCounterMarker + named @Tag {} + named val {} + { + @Null + } + + def @BeginExampleCounter + right prefix + { + @ExampleCounterMarker val { prefix @Join 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) + } + } + + { @PageMark @Tag @ExampleCounterIncrement @Tag } @Insert + @ExampleFormat + word { example @WordVal @ExampleWord } + number { @ExampleNum @Tag } + title { @ExampleTitle } + body { x } + } + + + ########################################################################### + # # + # @BeginAllCounters - begin all counters # + # # + ########################################################################### + + def @BeginAllCounters + left condition + right prefix + { + condition @Do { + @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 compulsory @Tag {} + named compulsory @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 "~" { "~" } + named "/" { "/" &0p } + named "//" { "//" &0p } {} + 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 + } + } + + + ####################################################################### + # # + # @ChapRefSection # + # # + ####################################################################### + + def @ChapRefSection + { + @Heading @RefHeading @ChapRefListTitle + @DP + @ChapReferencesSection + } + + + ########################################################################### + # # + # @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 + { +# +# VT: I can't get this to work, so I've put back the original code +# +# @RefListFont @Font @RefListBreak @Break { +# @BackEnd @Case { +# PostScript @Yield { +# @NumberMarker&&preceding @Tagged tag & +# @PageMark tag +# |@RefListIndent {label @ListLabel tag} @RefItem {@RefPrint tag} +# |@RefListRightIndent +# } +# PDF @Yield { +# { "__link_target=<<"tag">>" } +# @Graphic +# { +# @NumberMarker&&preceding @Tagged tag & +# @PageMark tag +# |@RefListIndent {label @ListLabel tag} @RefItem {@RefPrint tag} +# |@RefListRightIndent +# } +# } +# } +# } +# VT: original: + + @RefListFont @Font @RefListBreak @Break { + @NumberMarker&&preceding @Tagged tag & + @PageMark 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 } + Yes @Yield { + @BackEnd @Case { + { PlainText PostScript } @Yield { @RefCiteStyle cite } + PDF @Yield { +# +# VT: can't get this to work: need to ask JHK; I want the text following the "$" to be +# the name of the link that we are trying to create a link to +# { "__link_source=<<"label">>" } +# @Graphic + { @RefCiteStyle cite } +# { blue @Colour @Underline { @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 } } + @Join {@FigureNumbers @Num @RawFigureNum tag} + } + } + + def @BeginFigureCounter + left condition + right prefix + { + condition @Do { + @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 + named @II right x { |@DisplayIndent x | } + named @QQ right x { |@DisplayIndent x |@DisplayIndent } + named @CC right x { |0.5rt x | } + named @RR right x { |1.0rt x | } + right @Body { @FigureFormat @Body } + named @InitialLanguage { @InitialLanguage } + named @BypassNumber { dft } + named @OnePage { dft } + named @Location { @FigureLocation } + right @Body + { + def @FigureNumber + { + @BypassNumber @Dft @NumberOf @Tag + } + + def @ContentsCaption + { + @ShortCaption @Dft @Caption + } + + def @OnePg + { + @OnePage @Case { + { No no } @Yield No + { Yes yes } @Yield Yes + dft @Yield { @Location @Case { + PageTop @Yield No + EvenPageTop @Yield No + FullPage @Yield No + EvenFullPage @Yield No + PageFoot @Yield Yes + ColTop @Yield No + ColFoot @Yield Yes + ColEnd @Yield No + Display @Yield Yes + AfterLine @Yield Yes + TryAfterLine @Yield Yes + Raw @Yield No + } + } + } + } + + def @CaptionState + { + @Caption @Case { + dft @Yield None + else @Yield { @CaptionPos @Case { + { Below below } @Yield Below + { Above above } @Yield Above + } } + } + } + + #def @FigureLabel + #{ + # @FigureNumbers @Case { + # No @Yield @Null + # else @Yield { + # @CaptionFormat { {figure @WordVal @FigureWord} @NumSep @FigureNumber } + # } + # } + #} + + def @CaptionVal + { + @FigureCaptionFont @Font @FigureCaptionBreak @Break + { ||0.5rt @FigureCaptionFormat + word { figure @WordVal @FigureWord } + number { @FigureNumber } + caption { @Caption } + } + } + + def @FigureVal + { + @InitialLanguage @Language + { + @MakeFigureContents @FigureContentsEntry + indent { 0f } + number { @FigureNumber } + title { @InitialLanguage @Language @ContentsCaption } + pagenum { @PageOf @Tag } + // @FigureCounterIncrement @Tag + // @PageMark @Tag + // @Body + } + } + + def @FigureTarget + { + @Location @Case { + PageTop @Yield @PageTopPlace&&following + EvenPageTop @Yield @PageTopPlace&&following + FullPage @Yield @FullPagePlace&&following + EvenFullPage @Yield @FullPagePlace&&following + PageFoot @Yield @PageFootAndTopPlace&&following + ColTop @Yield @ColTopPlace&&following + ColFoot @Yield @ColFootAndTopPlace&&following + ColEnd @Yield @EndFigureList&&following + Display @Yield @AfterLinePlace&&following + AfterLine @Yield @AfterLinePlace&&following + TryAfterLine @Yield @TryAfterLinePlace&&following + } + } + + def @SendEncl into { @FigureTarget } + right x + { + def @Enclose right x + { + @OnePg @Case { + No @Yield @Format x + Yes @Yield x + } + } + + x + } + + def @Send into { @FigureTarget } + right x + { + x + } + + def @EvenFullPageSend into { @EvenFullPagePlace&&following } + right x + { + @OneRow x + } + + def @EvenPageSend into { @EvenPagePlace&&following } + right x + { + @OneRow x + } + + def @RawFigureVal + { + @OnePg.@CaptionState @Case + { + Yes.Below @Yield @OneRow { @Format @FigureVal @DP @CaptionVal } + Yes.Above @Yield @OneRow { @CaptionVal @DP @Format @FigureVal } + Yes.None @Yield @OneRow { @Format @FigureVal } + No.Below @Yield { @Format @FigureVal @DP @CaptionVal } + No.Above @Yield { @CaptionVal @DP @Format @FigureVal } + No.None @Yield { @Format @FigureVal } + } + } + + def @NonRawFigureVal + { + @OnePg.@CaptionState @Case + { + Yes.Below @Yield { + @Send @OneRow { @Format @FigureVal @DP @CaptionVal // @DupRunner} + } + Yes.Above @Yield { + @Send @OneRow { @CaptionVal @DP @Format @FigureVal // @DupRunner} + } + Yes.None @Yield { + @Send @OneRow { @Format @FigureVal // @DupRunner } + } + No.Below @Yield { + @SendEncl { @FigureVal // @Send { @CaptionVal // @DupRunner } } + } + No.Above @Yield { + @Send { @CaptionVal // @SendEncl { @FigureVal // @DupRunner } } + } + No.None @Yield { + @SendEncl { @FigureVal // @DupRunner } + } + } + } + + @Location @Case { + Raw @Yield @RawFigureVal + Display @Yield { @NonRawFigureVal &1rt } + EvenPageTop @Yield @EvenPageSend @NonRawFigureVal + EvenFullPage @Yield @EvenFullPageSend @NonRawFigureVal + else @Yield @NonRawFigureVal + } + } + + + ########################################################################### + # # + # 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 } } + @Join {@TableNumbers @Num @RawTableNum tag} + } + } + + def @BeginTableCounter + left condition + right prefix + { + condition @Do { + @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 + named @II right x { |@DisplayIndent x | } + named @QQ right x { |@DisplayIndent x |@DisplayIndent } + named @CC right x { |0.5rt x | } + named @RR right x { |1.0rt x | } + right @Body { @TableFormat @Body } + named @InitialLanguage { @InitialLanguage } + named @BypassNumber { dft } + named @OnePage { dft } + named @Location { @TableLocation } + right @Body + { + def @TableNumber + { + @BypassNumber @Dft @NumberOf @Tag + } + + def @ContentsCaption + { + @ShortCaption @Dft @Caption + } + + def @OnePg + { + @OnePage @Case { + { No no } @Yield No + { Yes yes } @Yield Yes + dft @Yield { @Location @Case { + PageTop @Yield No + EvenPageTop @Yield No + FullPage @Yield No + EvenFullPage @Yield No + PageFoot @Yield Yes + ColTop @Yield No + ColFoot @Yield Yes + ColEnd @Yield No + Display @Yield Yes + AfterLine @Yield Yes + TryAfterLine @Yield Yes + Raw @Yield No + } + } + } + } + + def @CaptionState + { + @Caption @Case { + dft @Yield None + else @Yield { @CaptionPos @Case { + { Below below } @Yield Below + { Above above } @Yield Above + } } + } + } + + #def @TableLabel + #{ + # @TableNumbers @Case { + # No @Yield @Null + # else @Yield { + # @CaptionFormat { {table @WordVal @TableWord} @NumSep @TableNumber } + # } + # } + #} + + def @CaptionVal + { + @TableCaptionFont @Font @TableCaptionBreak @Break + { ||0.5rt @TableCaptionFormat + word { table @WordVal @TableWord } + number { @TableNumber } + caption { @Caption } + } + } + + def @TableVal + { + @InitialLanguage @Language + { + @MakeTableContents @TableContentsEntry + indent { 0f } + number { @TableNumber } + title { @InitialLanguage @Language @ContentsCaption } + pagenum { @PageOf @Tag } + // @TableCounterIncrement @Tag + // @PageMark @Tag + // @Body + } + } + + def @TableTarget + { + @Location @Case { + PageTop @Yield @PageTopPlace&&following + EvenPageTop @Yield @PageTopPlace&&following + FullPage @Yield @FullPagePlace&&following + EvenFullPage @Yield @FullPagePlace&&following + PageFoot @Yield @PageFootAndTopPlace&&following + ColTop @Yield @ColTopPlace&&following + ColFoot @Yield @ColFootAndTopPlace&&following + ColEnd @Yield @EndTableList&&following + Display @Yield @AfterLinePlace&&following + AfterLine @Yield @AfterLinePlace&&following + TryAfterLine @Yield @TryAfterLinePlace&&following + } + } + + def @SendEncl into { @TableTarget } + right x + { + def @Enclose right x + { + @OnePg @Case { + No @Yield @Format x + Yes @Yield x + } + } + + x + } + + def @Send into { @TableTarget } + right x + { + x + } + + def @EvenFullPageSend into { @EvenFullPagePlace&&following } + right x + { + @OneRow x + } + + def @EvenPageSend into { @EvenPagePlace&&following } + right x + { + @OneRow x + } + + def @RawTableVal + { + @OnePg.@CaptionState @Case + { + Yes.Below @Yield @OneRow { @Format @TableVal @DP @CaptionVal } + Yes.Above @Yield @OneRow { @CaptionVal @DP @Format @TableVal } + Yes.None @Yield @OneRow { @Format @TableVal } + No.Below @Yield { @Format @TableVal @DP @CaptionVal } + No.Above @Yield { @CaptionVal @DP @Format @TableVal } + No.None @Yield { @Format @TableVal } + } + } + + def @NonRawTableVal + { + @OnePg.@CaptionState @Case + { + Yes.Below @Yield { + @Send @OneRow { @Format @TableVal @DP @CaptionVal // @DupRunner} + } + Yes.Above @Yield { + @Send @OneRow { @CaptionVal @DP @Format @TableVal // @DupRunner} + } + Yes.None @Yield { + @Send @OneRow { @Format @TableVal // @DupRunner } + } + No.Below @Yield { + @SendEncl { @TableVal // @Send { @CaptionVal // @DupRunner } } + } + No.Above @Yield { + @Send { @CaptionVal // @SendEncl { @TableVal // @DupRunner } } + } + No.None @Yield { + @SendEncl { @TableVal // @DupRunner } + } + } + } + + @Location @Case { + Raw @Yield @RawTableVal + Display @Yield { @NonRawTableVal &1rt } + EvenPageTop @Yield @EvenPageSend @NonRawTableVal + EvenFullPage @Yield @EvenFullPageSend @NonRawTableVal + else @Yield @NonRawTableVal + } + } + + + ########################################################################### + # # + # Index. # + # # + ########################################################################### + + def @IndexList { @Galley //1vx @IndexList } + def @BypassIndexList { @Galley //1vx @BypassIndexList } + + def @IndexSection into { @IndexPlace&&following } + right etc + { + // @IndexBreak @Break @IndexList + // @IndexBreak @Break @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 &"0.03fu" , } @Meld y } + } + +################################ obsolete ################################### +# {x @Rump y} @Case +# { +# "" @Yield x +# else @Yield { +# { {x @Rump y} @Common "," } @Case +# { +# "," @Yield { x &"0.03fu" x @Rump y } +# else @Yield { x &"0.03fu" , 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} } +# } +# } +# } + @BackEnd @Case { + { PlainText PostScript } @Yield { + to @Case + { + "" @Yield @PageOf @Tag + else @Yield { + { @PageOf @Tag } @Case + { + { @PageOf to } @Yield { @PageOf @Tag } + else @Yield { {@PageOf @Tag}--{@PageOf to} } + } + } + } + } +# +# PDF: Index entries produce a blue underlined hyperlink for the page number +# + PDF @Yield { + { "__link_source=<<"@Tag">>" } + @Graphic { blue @Colour @Underline { + 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 { + @BackEnd @Case { + { PostScript PlainText } @Yield { + @PageMark @Tag + x @DoIndex indent { indent } { y &"0.03fu" , numval } + } + PDF @Yield { + {"__link_target=<<"@Tag">>"} @Graphic {""} + @PageMark @Tag + x @DoIndex indent { indent } { y &"0.03fu" , numval } + } + } + } +# Yes @Yield { @PageMark @Tag +# x @DoIndex indent { indent } { y &"0.03fu" , 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 // etc + // @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 &"0.03fu" , } @Meld 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} } +# } +# } +# } + @BackEnd @Case { + { PostScript PlainText } @Yield { + to @Case + { + "" @Yield @PageOf @Tag + else @Yield { + { @PageOf @Tag } @Case + { + { @PageOf to } @Yield { @PageOf @Tag } + else @Yield { {@PageOf @Tag}--{@PageOf to} } + } + } + } + } +# +# PDF: Index entries produce a blue underlined hyperlink for the page number +# + PDF @Yield { + { "__link_source=<<"@Tag">>" } + @Graphic { blue @Colour @Underline { + 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.03fu" , 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 // etc + // @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 &"0.03fu" , } @Meld 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} } +# } +# } +# } + @BackEnd @Case { + { PostScript PlainText } @Yield { + to @Case + { + "" @Yield @PageOf @Tag + else @Yield { + { @PageOf @Tag } @Case + { + { @PageOf to } @Yield { @PageOf @Tag } + else @Yield { {@PageOf @Tag}--{@PageOf to} } + } + } + } + } +# +# PDF: Index entries produce a blue underlined hyperlink for the page number +# + PDF @Yield { + { "__link_source=<<"@Tag">>" } + @Graphic { blue @Colour @Underline { + 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.03fu" , 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 } + + + ########################################################################### + # # + # @LargeScaleStructure # + # # + # The prototype for the value of each large-scale structure symbol # + # (@Chapter, @Section, etc.) # + # # + ########################################################################### + + def @LargeScaleStructure + named tag {} # tag of this large-scale structure sym + named type {} # MajorIntro, Major, VeryMajor, or Minor + named initiallanguage {} # its language + named title {} # its full title + named runningtitle {} # its running title + named aboveheadinggap { 0f } # gap above heading + named headingfont {} # its heading font + named headingbreak {} # its heading break + named headingformat # its heading format + left @Num right @Body {} + named incontents { No } # entry in table of contents required + named contentsindent { 0f } # only if type is Major + named word {} + named numbers { None } + named attachnum {} # only if numbers is not None + named retrievenum {} # only if numbers is not None + named bypassnumber {} # only if numbers is not None, or VeryMajor + named prefix {} # prefix of number of this symbol + named pnprefix {} # prefix for page numbers of this sym + named majornum { dft } + named majortitle { dft } + named minornum { dft } + named minortitle { dft } + named intheorems { No } + named indisplays { No } + named infigures { No } + named intables { No } + named inrunners { No } + named sendheader right @Body {} + named innergap {} + named endifmajor right innergap { + @EndFigureList + //innergap @EndNoteList 1 + //innergap @ChapRefSection + } + named wantindefinite { No } + right @Body + { + + def @ShortNum + { + numbers @Then { + bypassnumber @Dft { + prefix @Join { numbers @Num retrievenum } + } + } + } + + def @LongNum + { + numbers @Then { + initiallanguage @Language { word @NumSep @ShortNum } + } + } + + def @ShortTitle + { + initiallanguage @Language { runningtitle @Dft title } + } + + def @Run right start + { + inrunners @Do type @Case { + + { Major MajorIntro } @Yield { + start @Runner + @MajorNum { majornum @Dft @LongNum } + @MajorTitle { majortitle @Dft @ShortTitle } + @MinorNum {} + @MinorTitle {} + @Owner { tag } + @Prefix { pnprefix @Join @ShortNum } + } + + { ExtraMajor ExtraMajorIntro } @Yield { + start @Runner + @MajorNum { majornum @Dft @LongNum } + @MajorTitle { majortitle @Dft @ShortTitle } + @MinorNum { majornum @Dft @LongNum } + @MinorTitle { majortitle @Dft @ShortTitle } + @Owner { tag } + @Prefix { pnprefix @Join @ShortNum } + } + + { VeryMajor } @Yield { + start @Runner + @MajorNum { majornum @Dft @LongNum } + @MajorTitle { majortitle @Dft @ShortTitle } + @MinorNum {} + @MinorTitle {} + @Owner { tag } + @Prefix {} + } + + Minor @Yield { + start @Runner + @MajorNum { majornum @Dft @LongNum } + @MajorTitle { majortitle @Dft @ShortTitle } + @MinorNum { minornum @Dft @LongNum } + @MinorTitle { minortitle @Dft @ShortTitle } + @Owner { tag } + @Prefix { pnprefix @Join @ShortNum } + } + } + } + + def @ContentsStuff + { + incontents.type @Case { + + Yes.Minor @Yield { + incontents @ContentsEntry + indent { contentsindent } + number { @LongNum } + title { initiallanguage @Language title } + pagenum { @PageOf tag } + } + + { Yes.Major Yes.MajorIntro Yes.ExtraMajor Yes.ExtraMajorIntro } @Yield { + incontents @MajorContentsEntry + number { @LongNum } + title { initiallanguage @Language title } + pagenum { @PageOf tag } + } + + { Yes.VeryMajor } @Yield { + incontents @VeryMajorContentsEntry + title { initiallanguage @Language { bypassnumber: &2s title } } + } + + else @Yield @Null + } + } + + def @Heading + { + def @AttachPDFLink + left title + right x + { + @BackEnd @Case { + + # VTan: Rats! Cannot use the tag for the name of the link + # because the source link has no access to the tag + # + # using title will work most of the time; it will fail + # with a "problem with left parameter of @Graphic" warning + # message if the title has objects other than text in it. + # Eg, "@Title { My @FancyTitle }" with + # "def @FancyTitle { @OneCol { @Bold "fancy" "title" }" } + # + # Example: the user manual has a definition for @Tex which + # causes this warning message to appear + + PDF @Yield { + title @Case { + "" @Yield x + else @Yield { + "__link_target_for_export=<<"title">>" + @Graphic x + } + } + } + + else @Yield x + } + } + + type @Case { + + Minor @Yield title @AttachPDFLink { + headingfont @Font + headingbreak @Break @Protect {@LongNum headingformat title} + // @PageMark tag + } + + { Major MajorIntro ExtraMajor ExtraMajorIntro } @Yield { + sendheader { title @AttachPDFLink { + //aboveheadinggap + headingfont @Font + headingbreak @Break { @LongNum headingformat title } + // @PageMark tag + } } + } + + { VeryMajor } @Yield { sendheader { title @AttachPDFLink { + //aboveheadinggap + headingfont @Font + headingbreak @Break { bypassnumber headingformat title } + // @PageMark tag + } } + } + } + } + + def @IfMajor right x + { + type @Case { + { MajorIntro Major ExtraMajor ExtraMajorIntro } @Yield x + else @Yield @Null + } + } + + def @StartIfMajor { + type @Case { + { MajorIntro Major ExtraMajor ExtraMajorIntro VeryMajor } @Yield Start + else @Yield NonStart + } + } + + initiallanguage @Language { + @Heading + // wantindefinite @Case { + Yes @Yield @Null + No @Yield "" + } + // numbers @Do { + attachnum & @NumberMarker @Tag { tag } @Value { @ShortNum } + } + # // @PageMark tag + // @IfMajor { @FootNoteThrough @Do @BeginFootNoteCounter } + // @Run @StartIfMajor + // @ContentsStuff + // intheorems @BeginAllCounters @ShortNum + // indisplays @BeginDisplayCounter @ShortNum + // infigures @BeginFigureCounter @ShortNum + // intables @BeginTableCounter @ShortNum + // @Body + //innergap @IfMajor endifmajor innergap + // @Run NonStart + } + } + +@End @DocumentSetup diff --git a/include/eq b/include/eq new file mode 100644 index 0000000..b8cd1f0 --- /dev/null +++ b/include/eq @@ -0,0 +1,27 @@ +############################################################################### +# # +# Lout setup file for equation formatting # +# # +# Jeffrey H. Kingston # +# 5 February 1999 # +# # +############################################################################### + + +############################################################################### +# # +# The @SysInclude { eqf } line # +# # +# This line causes Lout to read the definitions for equations, and should # +# not be touched. # +# # +############################################################################### + +@SysInclude { eqf } + + +############################################################################### +# # +# This package does not offer default options that can be changed. # +# # +############################################################################### diff --git a/include/eqf b/include/eqf new file mode 100644 index 0000000..4437edf --- /dev/null +++ b/include/eqf @@ -0,0 +1,1643 @@ + +############################################################################### +# # +# Lout @Eq package for equation formatting (Version 3.0) # +# # +# Version 1.0 by Jeffrey H. Kingston, December 1990. # +# Version 2.0 by Jeffrey H. Kingston, 22 December 1992. # +# Version 3.0 by Jeffrey H. Kingston and Robert Marsa, March 1996. # +# # +# This package makes extensive use of the Adobe Systems Symbol font, and # +# it assumes that the font has not been recoded. It could be rewritten # +# using the @Char symbol to be made independent of any recoding, but since # +# there seems no reason to ever recode this font, I haven't bothered. # +# # +# See "Eq - a Lout package for typesetting mathematics" for user # +# information. Acknowledgement: the @Eq language is based closely on # +# the Eqn language of B. W. Kernighan and L. L. Cherry; the spacing rules # +# are similar to those of the TeX system by D. E. Knuth. # +# # +# Version 3.0 makes use of the new x and y units of measurement to improve # +# the spacing rules. # +# # +############################################################################### + +export "`" "``" "```" bin rel punct non vctr big + + space exclam universal numbersign existential percent + ampersand suchthat parenleft parenright asteriskmath + plus comma minus period slash zero one two three four + five six seven eight nine colon semicolon less equal + greater question congruent Alpha Beta Chi Delta Epsilon + Phi Gamma Eta Iota thetaone Kappa Lambda Mu Nu Omicron + Pi Theta Rho Sigma Tau Upsilon sigmaone Omega Xi Psi Zeta + bracketleft therefore bracketright perpendicular underscore + radicalex alpha beta chi delta epsilon phi gamma eta iota + phione kappa lambda mu nu omicron pi theta rho sigma tau + upsilon omegaone omega xi psi zeta braceleft bar braceright + similar Upsilonone minute lessequal fraction infinity florin + club diamond heart spade arrowboth arrowleft arrowup + arrowright arrowdown degree plusminus second greaterequal + multiply proportional partialdiff bullet divide notequal + equivalence approxequal ellipsis arrowvertex arrowhorizex + carriagereturn aleph Ifraktur Rfraktur weierstrass + circlemultiply circleplus emptyset intersection union + propersuperset reflexsuperset notsubset propersubset + reflexsubset element notelement angle gradient registerserif + copyrightserif trademarkserif product radical dotmath + logicalnot logicaland logicalor arrowdblboth arrowdblleft + arrowdblup arrowdblright arrowdbldown lozenge angleleft + registersans copyrightsans trademarksans summation parenlefttp + parenleftex parenleftbt bracketlefttp bracketleftex + bracketleftbt bracelefttp braceleftmid braceleftbt braceex + angleright integral integraltp integralex integralbt + parenrighttp parenrightex parenrightbt bracketrighttp + bracketrightex bracketrightbt bracerighttp bracerightmid + bracerightbt + + hbar Re Im partial infty prime nabla surd top bot dbar + triangle backslash forall exists neg circle square + + "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" + + sum prod coprod int oint bcap bcup bvee bwedge bodot botimes + boplus buplus + + "+" "-" "+-" "-+" setminus cdot times "*" circ div cap cup uplus + sqcap sqcup triangleleft triangleright wr bigcirc bigtriangleup + bigtriangledown vee wedge oplus ominus otimes oslash odot dagger + daggerdbl amalg + + "<" ">" "=" "<=" prec preceq "<<" subset subseteq sqsubseteq + in vdash smile frown ">=" succ succeq ">>" supset supseteq + sqsupseteq ni dashv mid parallel "==" "~" "-~" asymp "~~" + "=~" bowtie propto models doteq perp notsub notin "!=" not + "<->" "<--" "-->" up down "<=>" "<==" "==>" dblup dbldown + ":" "::" ":=" + + lpar blpar rpar brpar lbrack blbrack rbrack brbrack lbrace blbrace + rbrace brbrace lfloor blfloor rfloor brfloor lceil blceil + rceil brceil langle blangle rangle brangle + + ";" "," col + + "!" "?" "%" "(" ")" "[" "]" + + arccos arcsin arctan arg cos cosh cot coth csc deg det dim exp + gcd hom inf ker lg lim liminf limsup ln log max min Pr sec sin + sinh supr tan tanh mod ldots cdots vdots ddots del grad + "..." ",...," "'" "''" "'''" "''''" empty + + leftarrow longleftarrow dblleftarrow dbllongleftarrow + rightarrow longrightarrow dblrightarrow dbllongrightarrow + leftrightarrow longleftrightarrow dblleftrightarrow dbllongleftrightarrow + mapsto longmapsto hookleftarrow hookrightarrow leadsto + leftharpoonup rightharpoonup leftharpoondown rightharpoondown + rightleftharpoons + uparrow dbluparrow downarrow dbldownarrow updownarrow dblupdownarrow + nearrow searrow swarrow nwarrow + + sup sub tsub supp on ton frac half third over from to widefrom wideto + dot dotdot hat tilde vec dyad overbar underbar sqrt root + nextcol above labove cabove rabove mabove + matrix pmatrix bmatrix brmatrix fmatrix cmatrix amatrix + +def @Eq + body @Body +@Begin + + + ################################################################### + # # + # Context-sensitive format changes. # + # # + # Equation formatting (according to Knuth) demands changes in # + # the appearance of equations depending on context. These are: # + # # + # @Smaller x Superscripts and subscripts are to be set # + # in a smaller font size. The @Smaller # + # symbol implements this by changing the # + # f unit. # + # # + # @HSqueeze x The horizontal space surrounding binary # + # operators and relations is to be reduced # + # within superscripts and subscripts, etc. # + # The @HSqueeze symbol implements this by # + # changing the y unit, which is not used by # + # Lout but which is used by symbols @ThinGap, # + # @MedGap and @ThickGap. # + # # + # @VSqueeze x The vertical space taken by superscripts # + # and subscripts is to be reduced within # + # built-up fractions and under root signs. # + # The @VSqueeze symbol implements this by # + # changing the z unit, which is not used by # + # Lout but is used by the @SupGap symbol. # + # # + # Knuth also recommends some changes that depend on whether the # + # equation is displayed or inline; these are not implemented. # + # # + ################################################################### + + def @SpaceGap { 0.05f } + + def @Smaller right x { 0.7f @Font @SpaceGap @Space x } + + def @HSqueeze right x { 0.2f @YUnit x } + + def @VSqueeze right x { 0.7f @ZUnit x } + + def @SkewGap { 0.05f } + def @SupGap { 0.43zk } + def @ThinGap { 0.15y } + def @MedGap { 0.20y } + def @ThickGap { 0.25y } + def @ColGap { 0.8f } + def @RowGap { 0.5f } + + def "`" { &@ThinGap } + def "``" { &@MedGap } + def "```" { &@ThickGap } + + def bin right x { `` x `` } + def rel right x { ``` x ``` } + def punct right x { x ` } + def non right x { 0c @YUnit x } + def big right x { 1.3f @Font @SpaceGap @Space x } + + def @Base right x { Base @Font x } + def @Sym right x { {Symbol Base} @Font x } + + def @HLine + named line { @BackEnd @Case { PostScript @Yield { "0.05 ft setlinewidth" } PDF @Yield { "__mul(__loutf, 0.05) w" } } } + { + @BackEnd @Case { + PostScript @Yield { + { "0 0 moveto xsize 0 lineto" line "stroke" } @Graphic {} + } + PDF @Yield { # note re-arrangement of commands (setlinewidth (='w') not allowed in a path) + { line "0 0 m __xsize 0 l s" } @Graphic {} + } + } + } + + def @VLine + { + @BackEnd @Case { + PostScript @Yield { + "0 0 moveto 0 ysize lineto 0.05 ft setlinewidth stroke" @Graphic {} + } + PDF @Yield { + "__mul(__loutf, 0.05) w 0 0 m 0 __ysize l s" @Graphic {} + } + } + } + + def vctr + right x + { + 0.5w @VShift x + } + + def @Strut right x + { + @OneCol { x | @OneRow { 0.5f @High ^/ 0.5f @High } } + } + + ################################################################### + # # + # Full names # + # # + # These symbols and their names are taken directly from the # + # Adobe Systems Inc. Symbol font (see PostScript Language # + # Reference Manual, pp. 256-257). The only differences are: # + # # + # Adobe: theta1 Eq: thetaone # + # sigma1 sigmaone # + # phi1 phione # + # omega1 omegaone # + # # + # These were needed since Lout identifiers do not have digits. # + # # + ################################################################### + + def space { @Sym "\040" } + def exclam { @Sym "\041" } + def universal { @Sym "\042" } + def numbersign { @Sym "\043" } + def existential { @Sym "\044" } + def percent { @Sym "\045" } + def ampersand { @Sym "\046" } + def suchthat { @Sym "\047" } + def parenleft { @Sym "\050" } + def parenright { @Sym "\051" } + def asteriskmath { @Sym "\052" } + def plus { @Sym "+" } + def comma { @Sym "\054" } + def minus { @Sym "-" } + def period { @Sym "\056" } + def slash { @Sym "\057" } + def zero { @Sym "\060" } + def one { @Sym "\061" } + def two { @Sym "\062" } + def three { @Sym "\063" } + def four { @Sym "\064" } + def five { @Sym "\065" } + def six { @Sym "\066" } + def seven { @Sym "\067" } + def eight { @Sym "\070" } + def nine { @Sym "\071" } + def colon { @Sym "\072" } + def semicolon { @Sym "\073" } + def less { @Sym "\074" } + def equal { @Sym "\075" } + def greater { @Sym "\076" } + def question { @Sym "\077" } + def congruent { @Sym "\100" } + def Alpha { @Sym "\101" } + def Beta { @Sym "\102" } + def Chi { @Sym "\103" } + def Delta { @Sym "\104" } + def Epsilon { @Sym "\105" } + def Phi { @Sym "\106" } + def Gamma { @Sym "\107" } + def Eta { @Sym "\110" } + def Iota { @Sym "\111" } + def thetaone { @Sym "\112" } + def Kappa { @Sym "\113" } + + def Lambda { @Sym "\114" } + def Mu { @Sym "\115" } + def Nu { @Sym "\116" } + def Omicron { @Sym "\117" } + def Pi { @Sym "\120" } + def Theta { @Sym "\121" } + def Rho { @Sym "\122" } + def Sigma { @Sym "\123" } + def Tau { @Sym "\124" } + def Upsilon { @Sym "\125" } + def sigmaone { @Sym "\126" } + def Omega { @Sym "\127" } + def Xi { @Sym "\130" } + def Psi { @Sym "\131" } + def Zeta { @Sym "\132" } + def bracketleft { @Sym "\133" } + def therefore { @Sym "\134" } + def bracketright { @Sym "\135" } + def perpendicular { @Sym "\136" } + def underscore { @Sym "\137" } + def radicalex { @Sym "\140" } + def alpha { @Sym "\141" } + def beta { @Sym "\142" } + def chi { @Sym "\143" } + def delta { @Sym "\144" } + def epsilon { @Sym "\145" } + def phi { @Sym "\146" } + def gamma { @Sym "\147" } + def eta { @Sym "\150" } + def iota { @Sym "\151" } + def phione { @Sym "\152" } + def kappa { @Sym "\153" } + def lambda { @Sym "\154" } + def mu { @Sym "\155" } + def nu { @Sym "\156" } + + def omicron { @Sym "\157" } + def pi { @Sym "\160" } + def theta { @Sym "\161" } + def rho { @Sym "\162" } + def sigma { @Sym "\163" } + def tau { @Sym "\164" } + def upsilon { @Sym "\165" } + def omegaone { @Sym "\166" } + def omega { @Sym "\167" } + def xi { @Sym "\170" } + def psi { @Sym "\171" } + def zeta { @Sym "\172" } + def braceleft { @Sym "\173" } + def bar { @Sym "\174" } + def braceright { @Sym "\175" } + def similar { @Sym "\176" } + def Upsilonone { @Sym "\241" } + def minute { @Sym "\242" } + def lessequal { @Sym "\243" } + def fraction { @Sym "\244" } + def infinity { "1.2f" @Font @Sym "\245" } + def florin { @Sym "\246" } + def club { @Sym "\247" } + def diamond { @Sym "\250" } + def heart { @Sym "\251" } + def spade { @Sym "\252" } + def arrowboth { @Sym "\253" } + def arrowleft { @Sym "\254" } + def arrowup { @Sym "\255" } + def arrowright { @Sym "\256" } + def arrowdown { @Sym "\257" } + def degree { @Sym "\260" } + def plusminus { @Sym "\261" } + def second { @Sym "\262" } + def greaterequal { @Sym "\263" } + + def multiply { @Sym "\264" } + def proportional { @Sym "\265" } + def partialdiff { @Sym "\266" } + def bullet { @Sym "\267" } + def divide { @Sym "\270" } + def notequal { @Sym "\271" } + def equivalence { @Sym "\272" } + def approxequal { @Sym "\273" } + def ellipsis { @Sym "\274" } + def arrowvertex { @Sym "\275" } + def arrowhorizex { @Sym "\276" } + def carriagereturn { @Sym "\277" } + def aleph { @Sym "\300" } + def Ifraktur { @Sym "\301" } + def Rfraktur { @Sym "\302" } + def weierstrass { @Sym "\303" } + def circlemultiply { @Sym "\304" } + def circleplus { @Sym "\305" } + def emptyset { @Sym "\306" } + def intersection { @Sym "\307" } + def union { @Sym "\310" } + def propersuperset { @Sym "\311" } + def reflexsuperset { @Sym "\312" } + def notsubset { @Sym "\313" } + def propersubset { @Sym "\314" } + def reflexsubset { @Sym "\315" } + def element { @Sym "\316" } + def notelement { @Sym "\317" } + def angle { @Sym "\320" } + def gradient { @Sym "\321" } + def registerserif { @Sym "\322" } + def copyrightserif { @Sym "\323" } + def trademarkserif { @Sym "\324" } + def product { @Sym "\325" } + def radical { @Sym "\326" } + def dotmath { @Sym "\327" } + + def @PureDot # dot with no extra space + { + @HContract { &0io 0.4w @HShift dotmath } + } + + def logicalnot { @Sym "\330" } + def logicaland { @Sym "\331" } + def logicalor { @Sym "\332" } + def arrowdblboth { @Sym "\333" } + def arrowdblleft { @Sym "\334" } + def arrowdblup { @Sym "\335" } + def arrowdblright { @Sym "\336" } + def arrowdbldown { @Sym "\337" } + def lozenge { @Sym "\340" } + def angleleft { @Sym "\341" } + def registersans { @Sym "\342" } + def copyrightsans { @Sym "\343" } + def trademarksans { @Sym "\344" } + def summation { @Sym "\345" } + def parenlefttp { @Sym "\346" } + def parenleftex { @Sym "\347" } + def parenleftbt { @Sym "\350" } + def bracketlefttp { @Sym "\351" } + def bracketleftex { @Sym "\352" } + def bracketleftbt { @Sym "\353" } + def bracelefttp { @Sym "\354" } + def braceleftmid { @Sym "\355" } + def braceleftbt { @Sym "\356" } + def braceex { @Sym "\357" } + def angleright { @Sym "\361" } + def integral { @Sym "\362" } + def integraltp { @Sym "\363" } + def integralex { @Sym "\364" } + def integralbt { @Sym "\365" } + def parenrighttp { @Sym "\366" } + def parenrightex { @Sym "\367" } + def parenrightbt { @Sym "\370" } + def bracketrighttp { @Sym "\371" } + def bracketrightex { @Sym "\372" } + def bracketrightbt { @Sym "\373" } + def bracerighttp { @Sym "\374" } + def bracerightmid { @Sym "\375" } + def bracerightbt { @Sym "\376" } + + + ################################################################### + # # + # Short names # + # # + # These symbols, their names, and their spacing, are based on # + # the list in Appendix F of Donald E. Knuth's The TeXBook. # + # # + # Group 1 (lowercase Greek letters): see full names above # + # Group 2 (uppercase Greek letters): see full names above # + # Group 3 (calligraphic capitals): not provided by Eq # + # # + ################################################################### + + ################################################################### + # # + # Group 4 (miscellaneous Ord symbols) # + # # + # Not all of Knuth's symbols are available. The four suits # + # (heartsuit, etc.), have definitions above. # + # # + ################################################################### + + def hbar { @OneCol { &0.1f @Base "-" ^/0.25fo h } } + def Re { Rfraktur } + def Im { Ifraktur } + def partial { partialdiff } + def infty { infinity } + def prime { minute } + #def emptyset { defined above } + def nabla { gradient } + def surd { radical } + def top { 180d @Rotate perpendicular } + def bot { perpendicular } + def dbar { @Base "||" } + #def angle { defined above } + def backslash { "\\" } + def forall { universal } + def exists { existential } + def neg { logicalnot } + + def circle { @HContract @VContract + @BackEnd @Case { + PostScript @Yield { + { "xsize ysize 2 div moveto" + "xsize 2 div ysize 2 div xsize 2 div 0 360 arc" + "0.04 ft setlinewidth stroke" + } + @Graphic { 0.7f @Wide 0.3f @High ^/ 0.3f @High } + } + PDF @Yield { +# +# VT: draws a counterclockwise 360 degree arc from 0 to +360 degree positions +# (straight right to straight right) with centre = (xsize/2, ysize/2) +# and radius = xsize/2 +# +# implemented as two counterclockwise 180 degree arcs: +# + { + "__mul(0.04, __loutf) w" +# +# start at (xsize, ysize/2) +# the control points are: +# pt1 = (xsize, ysize/2 + (4/3 * xsize/2)) and pt2 = (0, ysize/2 + (4/3 * xsize/2)) +# end at (0, ysize/2) +# + "__xsize __div(__ysize, 2) m" + "__xsize __add(__div(__ysize, 2), __div(__mul(2, __xsize), 3))" # pt1 + "0 __add(__div(__ysize, 2), __div(__mul(2, __xsize), 3))" # pt2 + "0 __div(__ysize, 2) c" # pt3 +# +# start at (0, ysize/2) +# the control points are: +# pt1 = (0, ysize/2 - (4/3 * xsize/2)) and pt2 = (xsize, ysize/2 - (4/3 * xsize/2)) +# end at (xsize, ysize/2) +# + "0 __sub(__div(__ysize, 2), __div(__mul(2, __xsize), 3))" # pt1 + "__xsize __sub(__div(__ysize, 2), __div(__mul(2, __xsize), 3))" # pt2 + "__xsize __div(__ysize, 2) c S" # pt3 + } + @Graphic { 0.7f @Wide 0.3f @High ^/ 0.3f @High } + } + } + } + + def square { @HContract @VContract + @BackEnd @Case { + PostScript @Yield { + { "0 0 moveto xsize 0 lineto xsize ysize lineto" + "0 ysize lineto closepath" + "0.04 ft setlinewidth stroke" + } + @Graphic { 0.6f @Wide 0.3f @High ^/ 0.3f @High } + } + PDF @Yield { + { "__mul(__loutf, 0.04) w" + "0 0 m __xsize 0 l __xsize __ysize l" + "0 __ysize l s" + } + @Graphic { 0.6f @Wide 0.3f @High ^/ 0.3f @High } + } + } + } + + def triangle { @HContract @VContract + @BackEnd @Case { + PostScript @Yield { + { "0 0 moveto xsize 0 lineto" + "xsize 2 div ysize lineto closepath" + "0.04 ft setlinewidth stroke" + } + @Graphic + { 0.3f @Wide 0.3f @High ^| ^/ + 0.3f @Wide 0.3f @High + } + } + PDF @Yield { + { "__mul(__loutf, 0.04) w" + "0 0 m __xsize 0 l" + "__div(__xsize, 2) __ysize l s" + } + @Graphic + { 0.3f @Wide 0.3f @High ^| ^/ + 0.3f @Wide 0.3f @High + } + } + } + } + + ################################################################### + # # + # Group 5 (digits) # + # # + ################################################################### + + def "0" { zero } + def "1" { one } + def "2" { two } + def "3" { three } + def "4" { four } + def "5" { five } + def "6" { six } + def "7" { seven } + def "8" { eight } + def "9" { nine } + + + ################################################################### + # # + # Group 6 ("Large" operators) # + # # + # Knuth's large operators automatically change size depending # + # on whether the equation is display or inline. Eq does not # + # do this; instead, the `big' operator must be used. # + # # + ################################################################### + + def sum { summation } + def prod { product } + def coprod { 180d @Rotate vctr product } + def int { 1.3f @Font vctr integral } + def oint { @OneCol { vctr degree |0.015fo int } } + def bcap { 1.3f @Font intersection } + def bcup { 1.3f @Font union } + def bvee { 1.3f @Font logicalor } + def bwedge { 1.3f @Font logicaland } + def bodot { & 1.3f @Font @HContract { circle /0io &0.5rt @PureDot } } + def botimes { 1.3f @Font circlemultiply } + def boplus { 1.3f @Font circleplus } + def buplus { & 1.3f @Font @HContract { &0.5rt 0.7f @Font plus ^/0.2fo union } } + + ################################################################### + # # + # Group 7 (binary operations) # + # # + # All of Knuth's symbols are available except \star, \diamond # + # and \bullet; a few have been given more mnemonic names. # + # # + ################################################################### + + def "+" { bin plus } + def "-" { bin minus } + def "+-" { bin plusminus } + def "-+" { bin 180d @Rotate plusminus } + def setminus { bin backslash } + def cdot { bin dotmath } + def times { bin multiply } + def "*" { bin asteriskmath } + #def diamond { name used above } + def circ { bin circle } + #def bullet { name used above } + def div { bin divide } + def cap { bin intersection } + def cup { bin union } + def uplus { bin @OneRow @HContract { &0.5rt 0.7f @Font plus ^/0.2fo union}} + def sqcap { bin + { @HContract @VContract + @BackEnd @Case { + PostScript @Yield { + { "0 0 moveto 0 ysize lineto xsize ysize lineto" + "xsize 0 lineto" + "0.04 ft setlinewidth stroke" + } + @Graphic + { 0.3f @Wide 0.3f @High ^| ^/ + 0.3f @Wide 0.3f @High + } + } + PDF @Yield { + { "__mul(__loutf, 0.04) w" + "0 0 m 0 __ysize l __xsize __ysize l" + "__xsize 0 l s" + } + @Graphic + { 0.3f @Wide 0.3f @High ^| ^/ + 0.3f @Wide 0.3f @High + } + } + } + } + } + def sqcup { 180d @Rotate sqcap } + def triangleleft { bin 90d @Rotate 0.8f @Font triangle } + def triangleright { bin "-90d" @Rotate 0.8f @Font triangle} + def wr { bin vctr {90d @Rotate similar} } + def bigcirc { bin 1.2f @Font circle } + def bigtriangleup { bin 1.2f @Font triangle } + def bigtriangledown { bin 180d @Rotate 1.2f @Font triangle } + def vee { bin logicalor } + def wedge { bin logicaland } + def oplus { bin circleplus } + def ominus { bin @OneRow @HContract { circle /0io &0.5rt minus}} + def otimes { bin circlemultiply } + def oslash {`vctr 60d @Rotate @HContract {circle /0io &0.5rt minus`}} + def odot { bin @OneRow @HContract {circle /0io &0.5rt @PureDot }} + def dagger { bin @Base @Char "dagger" } + def daggerdbl { bin @Base @Char "daggerdbl" } + def amalg { bin 180d @Rotate vctr product } + + ################################################################### + # # + # Group 8 (relations) # + # # + # All Knuth's operators are available, but many have been # + # given different, more mnemonic names. Also included is # + # a not operator for negating the relations. # + # # + ################################################################### + + def "<" { rel less } + def ">" { rel greater } + def "=" { rel equal } + def "<=" { rel lessequal } + def prec { rel { 0.45f @Font "-90d" @Rotate + { parenrighttp ^| parenlefttp } + } + } + def preceq { rel { @OneRow non prec /0.1f minus } } + def "<<" { rel {less less} } + def subset { rel propersubset } + def subseteq { rel reflexsubset } + def sqsubseteq { rel @HContract @VContract + @BackEnd @Case { + PostScript @Yield { + { { "xsize 0 moveto" + "0 0 lineto" + "0 ysize lineto" + "xsize ysize lineto" + "0.04 ft setlinewidth stroke" + } + @Graphic + { 0.5f @Wide 0.25f @High ^/ + 0.25f @High + } + /0.1f minus + } + } + PDF @Yield { + { { "__mul(__loutf, 0.04) w" + "__xsize 0 m" + "0 0 l" + "0 __ysize l" + "__xsize __ysize l s" + } + @Graphic + { 0.5f @Wide 0.25f @High ^/ + 0.25f @High + } + /0.1f minus + } + } + } + } + + def in { rel element } + def vdash { rel vctr{"-90d" @Rotate perpendicular}} + def smile { rel vctr 90d @Rotate parenleft } + def frown { rel vctr 90d @Rotate parenright } + + def ">=" { rel greaterequal } + def succ { rel { 0.45f @Font 90d @Rotate + { parenrighttp ^| parenlefttp } + } + } + def succeq { rel { @OneRow non succ /0.1f minus } } + def ">>" { rel {greater greater} } + def supset { rel propersuperset } + def supseteq { rel reflexsuperset } + def sqsupseteq { rel @HContract @VContract + @BackEnd @Case { + PostScript @Yield { + { { "0 0 moveto xsize 0 lineto" + "xsize ysize lineto" + "0 ysize lineto" + "0.04 ft setlinewidth stroke" + } + @Graphic + { 0.5f @Wide 0.25f @High ^/ + 0.25f @High + } + /0.1f minus + } + } + PDF @Yield { + { { "__mul(__loutf, 0.04) w" + "0 0 m __xsize 0 l" + "__xsize __ysize l" + "0 __ysize l s" + } + @Graphic + { 0.5f @Wide 0.25f @High ^/ + 0.25f @High + } + /0.1f minus + } + } + } + } + def ni { rel 180d @Rotate element } + def dashv { rel vctr {90d @Rotate perpendicular} } + def mid { rel @Base "|" } + def parallel { rel @Base "||" } + + def "==" { rel equivalence } + def "~" { rel similar } + def "-~" { rel @OneRow{similar^/0.07f/0.07f minus}} + def asymp { rel 0.7f @Font @OneRow + { 90d @Rotate parenleft ^/0.008f + /0.008f 90d @Rotate parenright } + } + def "~~" { rel approxequal } + def "=~" { rel congruent } + def bowtie { rel{non triangleright non triangleleft}} + def propto { rel proportional } + def models { rel{@Base vctr "|" &0.05fo vctr equal}} + def doteq { rel @OneRow @HContract {&0.5rt dotmath^/0.15f equal}} + def perp { rel perpendicular } + + def notsub { rel notsubset } + def notin { rel notelement } + def "!=" { rel notequal } + + def "<->" { rel arrowboth } + def "<--" { rel arrowleft } + def "-->" { rel arrowright } + def up { rel arrowup } + def down { rel arrowdown } + def "<=>" { rel arrowdblboth } + def "<==" { rel arrowdblleft } + def "==>" { rel arrowdblright } + def dblup { rel arrowdblup } + def dbldown { rel arrowdbldown } + + def ":" { rel colon } + def "::" { rel @OneCol {colon ` colon} } + def ":=" { rel { colon{ //0.05fo equal} } } + + def not right x { @HContract {@OneCol x /0co &0.5rt slash}} + + + ################################################################### + # # + # Groups 11 and 12 - openings and closings. # + # # + ################################################################### + + def lpar { parenleft } + def rpar { parenright } + def lbrack { bracketleft } + def rbrack { bracketright } + def lbrace { braceleft } + def rbrace { braceright } + def lfloor { ` "-0.15f" @VShift bracketleftbt } + def rfloor { "-0.15f" @VShift bracketrightbt ` } + def lceil { ` "-0.1f" @VShift bracketlefttp } + def rceil { "-0.1f" @VShift bracketrighttp ` } + def langle { angleleft } + def rangle { angleright } + + def blpar { @OneRow {parenlefttp ^/ parenleftex / parenleftbt } } + def brpar { @OneRow {parenrighttp ^/ parenrightex / parenrightbt } } + def blbrack { @OneRow {bracketlefttp ^/ bracketleftex / bracketleftbt } } + def brbrack { @OneRow {bracketrighttp ^/ bracketrightex / bracketrightbt} } + def blbrace { @OneRow {bracelefttp ^/ braceleftmid / braceleftbt } } + def brbrace { @OneRow {bracerighttp ^/ bracerightmid / bracerightbt } } + def blfloor { @OneRow {bracketleftex ^/ bracketleftex / bracketleftbt } } + def brfloor { @OneRow {bracketrightex ^/ bracketrightex / bracketrightbt} } + def blceil { @OneRow {bracketlefttp ^/ bracketleftex / bracketleftex } } + def brceil { @OneRow {bracketrighttp ^/ bracketrightex / bracketrightex} } + def blangle { @HContract @VContract + @BackEnd @Case { + PostScript @Yield { + { "xsize 0 moveto" + "0 ysize 2 div lineto" + "xsize ysize lineto" + "0.04 ft setlinewidth stroke" + } + @Graphic { 0.5f @Wide 2f @High ^/ 2f @High } + } + PDF @Yield { + { "__mul(__loutf, 0.04) w" + "__xsize 0 m" + "0 __div(__ysize, 2) l" + "__xsize __ysize l S" + } + @Graphic { 0.5f @Wide 2f @High ^/ 2f @High } + } + } + } + def brangle { @HContract @VContract + @BackEnd @Case { + PostScript @Yield { + { "0 0 moveto" + "xsize ysize 2 div lineto" + "0 ysize lineto" + "0.04 ft setlinewidth stroke" + } + @Graphic { 0.5f @Wide 2f @High ^/ 2f @High } + } + PDF @Yield { + { "__mul(__loutf, 0.04) w" + "0 0 m" + "__xsize __div(__ysize, 2) l" + "0 __ysize l S" + } + @Graphic { 0.5f @Wide 2f @High ^/ 2f @High } + } + } + } + + + ################################################################### + # # + # Group 13 - punctuation. # + # # + ################################################################### + + def ";" { punct semicolon } + def "," { punct comma } + def col { punct colon } + + + ################################################################### + # # + # Additional short symbols (Knuth p. 132) # + # # + ################################################################### + + def "!" { exclam } + def "?" { question } + def "%" { percent } + def "(" { parenleft } + def ")" { parenright } + def "[" { bracketleft } + def "]" { bracketright } + + + ################################################################### + # # + # Common mathematical functions (from Knuth p. 162). # + # mod is included, since @Rel mod is easily typed if needed. # + # # + ################################################################### + + def arccos { @Base "arccos" } + def arcsin { @Base "arcsin" } + def arctan { @Base "arctan" } + def arg { @Base "arg" } + def cos { @Base "cos" } + def cosh { @Base "cosh" } + def cot { @Base "cot" } + def coth { @Base "coth" } + def csc { @Base "csc" } + def deg { @Base "deg" } + def det { @Base "det" } + def dim { @Base "dim" } + def exp { @Base "exp" } + def gcd { @Base "gcd" } + def hom { @Base "hom" } + def inf { @Base "inf" } + def ker { @Base "ker" } + def lg { @Base "lg" } + def lim { @Base "lim" } + def liminf { @OneCol { @Base "lim" ` @Base "inf" } } + def limsup { @OneCol { @Base "lim" ` @Base "sup" } } + def ln { @Base "ln" } + def log { @Base "log" } + def max { @Base "max" } + def min { @Base "min" } + def Pr { @Base "Pr" } + def sec { @Base "sec" } + def sin { @Base "sin" } + def sinh { @Base "sinh" } + def supr { @Base "sup" } + def tan { @Base "tan" } + def tanh { @Base "tanh" } + def mod { @Base "mod" } + + + ################################################################### + # # + # Arrow symbols. # + # # + ################################################################### + + def leftarrow { arrowleft } + def longleftarrow { { 1.6 1 } @Scale arrowleft } + def dblleftarrow { arrowdblleft } + def dbllongleftarrow { { 1.6 1 } @Scale arrowdblleft } + def rightarrow { arrowright } + def longrightarrow { { 1.6 1 } @Scale arrowright } + def dblrightarrow { arrowdblright } + def dbllongrightarrow { { 1.6 1 } @Scale arrowdblright } + def leftrightarrow { arrowboth } + def longleftrightarrow { { 1.6 1 } @Scale arrowboth } + def dblleftrightarrow { arrowdblboth } + def dbllongleftrightarrow { { 1.6 1 } @Scale arrowdblboth } + + def mapsto + { + @HContract @VContract { + @BackEnd @Case { + PostScript @Yield { + "0 ymark 0.16 ft sub moveto 0 ymark 0.16 ft add lineto stroke" + @Graphic arrowright + } + PDF @Yield { + "0 __sub(__ymark, __mul(__loutf, 0.16)) m 0 __add(__ymark, __mul(__loutf, 0.16)) l S" + @Graphic arrowright + } + } + } + } + + def longmapsto + { + @HContract @VContract { + @BackEnd @Case { + PostScript @Yield { + "0 ymark 0.16 ft sub moveto 0 ymark 0.16 ft add lineto stroke" + @Graphic { { 1.6 1 } @Scale arrowright } + } + PDF @Yield { + "0 __sub(__ymark, __mul(__loutf, 0.16)) m 0 __add(__ymark, __mul(__loutf, 0.16)) l S" + @Graphic { { 1.6 1 } @Scale arrowright } + } + } + } + } + + def hookleftarrow + { + @HContract @VContract { + @BackEnd @Case { + + PostScript @Yield { + "xsize ymark moveto xsize ymark 0.1 ft add 0.1 ft -90 90 arc stroke" + @Graphic leftarrow + } + + PDF @Yield { +# +# VT: draws a counterclockwise 180 degree arc from -90 to +90 degree positions +# (straight down to straight up) with centre = (xsize, ymark + 0.1 ft) +# and radius = 0.1 ft +# +# the control points therefore are: +# pt1 = (xsize + (4/3 * 0.1 ft), ymark) and pt2 = (xsize + (4/3 * 0.1 ft), ymark + 0.2 ft) +# + { + "__xsize __ymark m" # pt0 + "__add(__xsize, __div(__mul(0.4, __loutf), 3)) __ymark" # pt1 + "__add(__xsize, __div(__mul(0.4, __loutf), 3)) __add(__ymark, __mul(0.2, __loutf))" # pt2 + "__xsize __add(__ymark, __mul(0.2, __loutf)) c S" # pt3 + } + @Graphic leftarrow + } + + } + } + } + + def hookrightarrow + { + @HContract @VContract { + @BackEnd @Case { + + PostScript @Yield { + "0 ymark moveto 0 0.1 ft ymark add 0.1 ft -90 90 arcn stroke" + @Graphic rightarrow + } + + PDF @Yield { +# +# VT: draws a clockwise 180 degree arc from -90 to +90 degree positions +# (straight down to straight up) with centre = (0, ymark + 0.1 ft) +# and radius = 0.1 ft +# +# the control points therefore are: +# pt1 = (-4/3 * 0.1 ft, ymark) and pt2 = (-4/3 * 0.1 ft, ymark + 0.2 ft) +# + { + "0 __ymark m" # pt0 + "__div(__mul(-0.4, __loutf), 3) __ymark" # pt1 + "__div(__mul(-0.4, __loutf), 3) __add(__ymark, __mul(0.2, __loutf))" # pt2 + "0 __add(__ymark, __mul(0.2, __loutf)) c S" # pt3 + } + @Graphic rightarrow + } + + } + } + } + + def @ClipToSize right x + { + @HContract @VContract + @BackEnd @Case { + PostScript @Yield { + { + "grestore newpath 0 0 moveto xsize 0 lineto xsize ysize lineto" + "0 ysize lineto closepath clip gsave" + } @Graphic x + } + PDF @Yield { + "Q n 0 0 __xsize __ysize re W n q" @Graphic x + } + } + } + + def @ClipAboveMark + left amount + right x + { + @ClipToSize { ^//{{amount}o} x } + } + + def @ClipBelowMark + left amount + right x + { + @ClipToSize { x //{{amount}o} } + } + + def leftharpoonup + { + 0.04f @ClipBelowMark leftarrow + } + + def rightharpoonup + { + 0.04f @ClipBelowMark rightarrow + } + + def leftharpoondown + { + 0.02f @ClipAboveMark leftarrow + } + + def rightharpoondown + { + 0.02f @ClipAboveMark rightarrow + } + + def rightleftharpoons + { + @HContract @VContract { + rightharpoonup + ^//0.1fo + //0.1fo + leftharpoondown + } + } + + def leadsto { @HContract { similar &0.4fo arrowright } } + + def uparrow { arrowup } + def dbluparrow { arrowdblup } + def downarrow { arrowdown } + def dbldownarrow { arrowdbldown } + def updownarrow { @HContract { arrowup &0io arrowdown } } + def dblupdownarrow { @VContract { arrowdblup ^//0.2fo arrowdbldown } } + def nearrow { 0.5w @VShift 0.5w @HShift 45d @Rotate arrowright } + def searrow { 0.5w @VShift 0.5w @HShift 315d @Rotate arrowright } + def swarrow { 0.5w @VShift 0.5w @HShift 225d @Rotate arrowright } + def nwarrow { 0.5w @VShift 0.5w @HShift 135d @Rotate arrowright } + + + ################################################################### + # # + # Other symbols taken from TeX. # + # # + ################################################################### + + def ldots { . &0.3f . &0.3f . } + def cdots { dotmath &0.3f dotmath &0.3f dotmath } + def vdots { @OneRow { dotmath ^/0.3f dotmath /0.3f dotmath } } + def ddots { @OneCol @OneRow + { dotmath + ^/0.3f |0.3f dotmath + /0.3f | |0.3f dotmath + } + } + + + ################################################################### + # # + # Symbols taken from eqn (Kernighan and Cherry 1975). # + # # + ################################################################### + + def del { gradient } + def grad { gradient } + def "..." { ellipsis } + def ",...," { , ellipsis ``` , } + def "'" { minute } + def "''" { minute minute } + def "'''" { minute minute minute } + def "''''" { minute minute minute minute } + def empty { emptyset } + + + + ################################################################### + # # + # Miscellaneous # + # # + ################################################################### + + ################################################################### + # # + # Symbols with parameters. # + # # + # These symbols are essentially those of eqn, with some # + # changes and additions. # + # # + ################################################################### + + def sup + precedence 60 + associativity left + left x + named gap { @SupGap } + right y + { + @HContract @VContract + { | 0.45w @VShift @Smaller @HSqueeze @VSqueeze y + ^/gap x + } + } + + def sub + precedence 60 + associativity left + left x + named gap { @SupGap } + right y + { + @HContract @VContract + { + # x + "." @KernShrink x + /gap | @Smaller @HSqueeze @VSqueeze y + } + } + + def tsub + precedence 60 + associativity left + left x + named gap { @SupGap } + right y + { + @HContract @VContract + { + x + /gap | &0io 0.2f @HShift @Smaller @HSqueeze @VSqueeze y + } + } + + def supp + precedence 60 + associativity left + left x + named gap { @SupGap } + right y + { + @HContract @VContract + { + { ^/gap x /gap } | y + } + } + + def on + precedence 61 + associativity left + left x + named gap { @SupGap } + right y + { + @Smaller @HSqueeze @VSqueeze x ^/ / + @Smaller @HSqueeze @VSqueeze y + } + + def ton + precedence 61 + associativity left + left x + named gap { @SupGap } + right y + { + @Smaller @HSqueeze @VSqueeze x ^/ / + &0io 0.3f @HShift @Smaller @HSqueeze @VSqueeze y + } + + def frac + precedence 54 + associativity left + left x + named gap { 0.2f } + right y + { + @HContract @VContract @Smaller @HSqueeze @VSqueeze + { 1w @VShift { x /gap } | fraction &0io | 0w @VShift { |gap y } + } + } + + def half { 1 frac 2 } + def third { 1 frac 3 } + + def over + precedence 54 + associativity left + left x + named gap { 0.2f } + right y + { + @HContract @VContract + { |0.5rt @OneCol @VSqueeze x + ^//gap @HLine + //gap |0.5rt @OneCol @VSqueeze @Strut y + } + } + + def from + precedence 58 + associativity left + left x + named gap { @ThinGap } + named skew { 0c } + right y + { + @HContract @VContract + { |0.5rt x + //gap |0.5rt &skew @Smaller @HSqueeze @VSqueeze y + } + } + + def to + precedence 58 + associativity left + left x + named gap { @ThinGap } + named skew { 0c } + right y + { + @HContract @VContract + { |0.5rt &skew @Smaller @HSqueeze @VSqueeze y + ^//gap |0.5rt x + } + } + + def widefrom + precedence 58 + associativity left + left x + named gap { @ThinGap } + right y + { + @HContract @VContract + { + x //gap @HScale y + } + } + + def wideto + precedence 58 + associativity left + left x + named gap { @ThinGap } + right y + { + @HContract @VContract + { + @HScale y ^//gap x + } + } + + def dot + precedence 62 + left x + named gap { @ThinGap } + { + x to gap { gap } skew { @SkewGap } . + } + + def dotdot + precedence 62 + left x + named gap { @ThinGap } + { + x to gap { gap } skew { @SkewGap } .. + } + + def hat + precedence 62 + left x + named gap { @ThinGap } + { + x to gap { gap } skew { @SkewGap } @Base "^" + } + + def tilde + precedence 62 + left x + named gap { @ThinGap } + { + x to gap { gap } skew { @SkewGap } @Base "~" + } + + def vec + precedence 62 + left x + named gap { @ThinGap } + { + x to gap { gap } skew { @SkewGap } arrowright + } + + def dyad + precedence 62 + left x + named gap { @ThinGap } + { + x to gap { gap } skew { @SkewGap } arrowboth + } + + def overbar + precedence 62 + left x + named gap { @ThinGap } + { + x wideto gap { gap } minus + } + + def underbar + precedence 62 + left x + named gap { @ThinGap } + { + x widefrom gap { gap } minus + } + + def sqrt + precedence 56 + named gap { @ThinGap } + right x + { + @BackEnd @Case { + PostScript @Yield { + @HContract @VContract + { + @VScale surd | @OneRow + { + @HLine line { "0.03 ft setlinewidth 2 setlinecap" } + ^//gap |gap @VSqueeze @Strut x # //gap + } + } + } + PDF @Yield { + @HContract @VContract + { +# +# VT: this PDF is correct but it renders badly in Acrobat (?problem +# with scaling by fractional factors) +# In other words, the @VScale value comes through correctly but it +# looks ugly; GhostScript's translation actually expands the +# "draw surd" instruction into raw moveto's and lineto's which +# it presumably gets from the font's definition of the glyph! +# + @VScale surd | @OneRow + { + @HLine line { "__mul(__loutf, 0.03) w 2 J" } + ^//gap |gap @VSqueeze @Strut x # //gap + } + } + } + } + } + + def root + precedence 56 + left x + right y + { + "" sup x &0io sqrt y + } + + def above + precedence 52 + left x + named gap { @RowGap } + right y + { + |0.5rt x //gap |0.5rt y + } + + def labove + precedence 52 + left x + named gap { @RowGap } + right y + { + x //gap y + } + + def cabove + precedence 52 + left x + named gap { @RowGap } + right y + { + |0.5rt x //gap |0.5rt y + } + + def rabove + precedence 52 + left x + named gap { @RowGap } + right y + { + |1rt x //gap |1rt y + } + + def mabove + precedence 52 + left x + named gap { @RowGap } + right y + { + x /gap y + } + + def nextcol + precedence 50 + left x + named gap { @ColGap } + right y + { + x |gap y + } + + export row axisrow col lcol ccol rcol mcol + def matrix + precedence 100 + named gap { @MedGap } + named strut + named no { } + named No { } + named yes { 0.5f } + named Yes { 0.5f } + { No } + named atleft {} + named atright {} + named userow { No } + named shiftdelim { Yes } + body x + { + def @Strut + { + strut @Case { + "" @Yield {} + else @Yield { @OneRow { strut @High ^/ strut @High } } + } + } + + def newrow + precedence 50 + associativity left + left x + right y + { + x @Case { + "" @Yield { y | @Strut } + else @Yield { x /@RowGap y | @Strut } + } + } + + macro row { newrow "" } + + def newaxisrow + precedence 50 + associativity left + left x + right y + { + x @Case { + "" @Yield { y | @Strut } + else @Yield { x ^/@RowGap y | @Strut } + } + } + + macro axisrow { newaxisrow "" } + + def col + precedence 52 + associativity left + left x + named indent { 0.5rt } + right y + { + x @Case { + "" @Yield { &indent @OneCol y } + else @Yield { x |@ColGap &indent @OneCol y } + } + } + + def lcol + precedence 52 + associativity left + left x + right y + { + x col indent { 0i } y + } + + def ccol + precedence 52 + associativity left + left x + right y + { + x col indent { 0.5rt } y + } + + def rcol + precedence 52 + associativity left + left x + right y + { + x col indent { 1rt } y + } + + def mcol + precedence 52 + associativity left + left x + right y + { + x @Case { + "" @Yield { @OneCol y } + else @Yield { x |@ColGap @OneCol y } + } + } + + def delim right x + { + x @Case + { + "" @Yield @Null + else @Yield + { + shiftdelim @Case { + { Yes yes } @Yield { @VScale x } + else @Yield { @VCover x } + } + } + } + } + + @HContract @VContract { + delim atleft &@ThinGap + userow @Case { + {Yes yes} @Yield @HContract @VContract {^//gap @OneRow x //gap} + else @Yield vctr @HContract @VContract { //gap x //gap } + } + &@ThinGap delim atright + } + } + + macro pmatrix { matrix atleft { "1.5f" @Font ( } atright { "1.5f" @Font ) }} + macro bmatrix { matrix atleft { blbrack } atright { brbrack } } + macro brmatrix { matrix atleft { blbrace } atright { brbrace } } + macro fmatrix { matrix atleft { blfloor } atright { brfloor } } + macro cmatrix { matrix atleft { blceil } atright { brceil } } + macro amatrix { matrix atleft { blangle } atright { brangle } } + + Slope @Font { separate @SpaceGap } @Space 1f @ZUnit 1f @YUnit @Body + +@End @Eq + +macro @E { @OneCol @Eq } diff --git a/include/fig b/include/fig new file mode 100644 index 0000000..dac333c --- /dev/null +++ b/include/fig @@ -0,0 +1,27 @@ +############################################################################### +# # +# Lout setup file for figure drawing (OBSOLETE: use @Diag instead) # +# # +# Jeffrey H. Kingston # +# 5 February 1999 # +# # +############################################################################### + + +############################################################################### +# # +# The @SysInclude { figf } line # +# # +# This line causes Lout to read the definitions for equations, and should # +# not be touched. # +# # +############################################################################### + +@SysInclude { figf } + + +############################################################################### +# # +# This package does not offer the ability to change default options. # +# # +############################################################################### diff --git a/include/figf b/include/figf new file mode 100644 index 0000000..c3cd15b --- /dev/null +++ b/include/figf @@ -0,0 +1,909 @@ + +############################################################################### +# # +# Lout @Fig package for drawing figures (Version 2.0) # +# # +# Version 1.0 by Jeffrey H. Kingston, October 1991. # +# Version 2.0 by Jeffrey H. Kingston, 22 December 1992. # +# Symbol names changed by JHK 5 March 1993 to avoid clashes with EPS files. # +# @CurveBox and @ShadowBox added by JHK April 1995. # +# # +# See "Fig - a Lout package for drawing figures" for user information. # +# # +# This package is now obsolete, having been replaced by @Diag. # +# # +############################################################################### + +@SysPrependGraphic { "figf.lpg" } + +export in cm pt em sp vs ft dg + "<<" "**" "++" "--" @Max @Min + @Distance @XDistance @YDistance @Angle + @Prev "::" @Label @BaseOf @MarkOf @ShowLabels @Figure + @Frame @Box @CurveBox @ShadowBox @Square @Diamond @Polygon @Ellipse + @Circle @HLine @VLine @Line @HArrow @VArrow @Arrow @Arc + +def @Fig + named maxlabels { 200 } + named linestyle { solid } + named linewidth { 0.5 pt } + named linecap { round } + named dashlength { 0.15 cm } + named paint { nopaint } + named margin { 0.4c } + named arrow { noarrow } + named headstyle { open } + named headwidth { 0.05 cm } + named headlength { 0.15 cm } + body @Body +@Begin + + # Like @Graphic, but affects the graphics state of right parameter + def @InnerGraphic + left ps + right x + { + @BackEnd @Case { + PostScript @Yield { { ps gsave // grestore } @Graphic x } + PDF @Yield { } + } + } + + def in precedence 39 left x { + @BackEnd @Case { + PostScript @Yield { x "in" } + PDF @Yield { "__mul(__in, "x")" } + } + } + + def cm precedence 39 left x { + @BackEnd @Case { + PostScript @Yield { x "cm" } + PDF @Yield { "__mul(__cm, "x")" } + } + } + + def pt precedence 39 left x { + @BackEnd @Case { + PostScript @Yield { x "pt" } + PDF @Yield { "__mul(__pt, "x")" } + } + } + + def em precedence 39 left x { + @BackEnd @Case { + PostScript @Yield { x "em" } + PDF @Yield { "__mul(__em, "x")" } + } + } + + def sp precedence 39 left x { + @BackEnd @Case { + PostScript @Yield { x "sp" } + PDF @Yield { "__mul(__louts, "x")" } + } + } + + def vs precedence 39 left x { + @BackEnd @Case { + PostScript @Yield { x "vs" } + PDF @Yield { "__mul(__loutv, "x")" } + } + } + + def ft precedence 39 left x { + @BackEnd @Case { + PostScript @Yield { x "ft" } + PDF @Yield { "__mul(__loutf, "x")" } + } + } + + def dg precedence 39 left x { + @BackEnd @Case { + PostScript @Yield { x "dg" } + PDF @Yield { } + } + } + + def "<<" + precedence 38 + left length + right angle + { + @BackEnd @Case { + PostScript @Yield { + 0 0 length angle "lfigatangle" + } + PDF @Yield { + } + } + } + + def "**" + precedence 37 + left point + right length + { + @BackEnd @Case { + PostScript @Yield { + point length "lfigpmul" + } + PDF @Yield { + } + } + } + + def "++" + precedence 36 + associativity left + left x + right y + { + @BackEnd @Case { + PostScript @Yield { + x y "lfigpadd" + } + PDF @Yield { + } + } + } + + def "--" + precedence 36 + associativity left + left x + right y + { + @BackEnd @Case { + PostScript @Yield { + y x "lfigpsub" + } + PDF @Yield { + } + } + } + + def @Max + precedence 36 + left x + right y + { + @BackEnd @Case { + PostScript @Yield { + x y "lfigpmax" + } + PDF @Yield { + } + } + } + + def @Min + precedence 36 + left x + right y + { + @BackEnd @Case { + PostScript @Yield { + x y "lfigpmin" + } + PDF @Yield { + } + } + } + + def @Distance + precedence 35 + left x + right y + { + @BackEnd @Case { + PostScript @Yield { + x y "lfigdistance" + } + PDF @Yield { + } + } + } + + def @XDistance + precedence 35 + left x + right y + { + @BackEnd @Case { + PostScript @Yield { + x y "lfigxdistance" + } + PDF @Yield { + } + } + } + + def @YDistance + precedence 35 + left x + right y + { + @BackEnd @Case { + PostScript @Yield { + x y "lfigydistance" + } + PDF @Yield { + } + } + } + + def @Angle + precedence 35 + left x + right y + { + @BackEnd @Case { + PostScript @Yield { + x y "lfigangle" + } + PDF @Yield { + } + } + } + + def @Prev + { + @BackEnd @Case { + PostScript @Yield { + "lfigprevious" + } + PDF @Yield { + } + } + } + + def "::" + precedence 33 + left name + right x + { + @BackEnd @Case { + PostScript @Yield { + { "currentdict end" maxlabels "dict begin begin" + // "("name") lfigpromotelabels" } @Graphic x + } + PDF @Yield { + } + } + } + + def @Label + right name + { + @BackEnd @Case { + PostScript @Yield { + "/"name "lfigpointdef" + } + PDF @Yield { + } + } + } + + def @MarkOf + precedence 32 + left point + right x + { + @BackEnd @Case { + PostScript @Yield { + { point "translate" } @InnerGraphic + { + /0io |0io @OneCol @OneRow x |0io /0io + } + } + PDF @Yield { + } + } + } + + def @BaseOf + precedence 32 + left point + right x + { + @BackEnd @Case { + PostScript @Yield { + { point "translate" } @InnerGraphic + { + /0io |0io @OneRow @OneCol { + | @OneCol @OneRow x ^/ + } |0io /0io + } + } + PDF @Yield { + } + } + } + + def @ShowLabels + { + @BackEnd @Case { + PostScript @Yield { + "lfigshowlabels" @Graphic + } + PDF @Yield { + } + } + } + + def @Figure + named shape { } + named linestyle { linestyle } + named linewidth { linewidth } + named linecap { linecap } + named dashlength { dashlength } + named arrow { arrow } + named headstyle { headstyle } + named headwidth { headwidth } + named headlength { headlength } + named paint { paint } + named margin { 0c } + right x + { + @BackEnd @Case { + PostScript @Yield { + @HContract @VContract + { + #fill the shape + paint @Case + { + nopaint @Yield {} + + { nochange darkblue blue lightblue darkgreen green lightgreen + darkred red lightred darkcyan cyan lightcyan darkmagenta + magenta lightmagenta darkyellow yellow lightyellow darkgray + gray lightgray darkgrey grey lightgrey black white } + @Yield + { "/lfig"paint "[" shape "] gsave lfigpaintpath grestore" } + } + + # stroke the path and add any arrowheads + linestyle @Case + { + { solid dashed cdashed dotted noline } @Yield + { + linewidth "setlinewidth" "lfig"linecap "setlinecap" + dashlength "/lfig"linestyle "[" shape "] lfigdopath" + arrow @Case + { + noarrow @Yield { pop pop } + { forward back both } @Yield + { dashlength "/lfig"linestyle "/"lfigblack + headstyle @Case + { { open halfopen closed } @Yield "lfig"headstyle } + headlength headwidth "lfig"arrow + } + } + } + } + } + @Graphic + { + ^/margin ^|margin @OneCol @OneRow x |margin + /margin + } + } + + PDF @Yield { + } + } + } + + def @Frame + right x + { + @Figure + shape {xsize 0 @Label X 0 ysize @Label Y} + { x } + } + + def @Box + named linestyle { linestyle } + named linewidth { linewidth } + named linecap { linecap } + named dashlength { dashlength } + named paint { paint } + named margin { margin } + right x + { + @Figure + shape { + # 0 0 @Label SW + # xsize 0 @Label SE + # xsize ysize @Label NE + # 0 ysize @Label NW + # SE ** 0.5 @Label S + # NW ** 0.5 @Label W + # W ++ SE @Label E + # S ++ NW @Label N + # NE ** 0.5 @Label CTR + # SW SE NE NW SW + lfigbox + } + linestyle { linestyle } + linewidth { linewidth } + linecap { linecap } + dashlength { dashlength } + paint { paint } + margin { margin } + x + } + + + def @CurveBox + named linestyle { linestyle } + named linewidth { linewidth } + named linecap { linecap } + named dashlength { dashlength } + named paint { paint } + named margin { margin } + right x + { + @Figure + shape { + lfigcurvebox + } + linestyle { linestyle } + linewidth { linewidth } + linecap { linecap } + dashlength { dashlength } + paint { paint } + margin { margin } + { 0c @HShift x } + } + + def @ShadowBox + named linestyle { linestyle } + named linewidth { linewidth } + named linecap { linecap } + named dashlength { dashlength } + named paint { paint } + named margin { margin } + named shadow { 0.2f } + right x + { + @BackEnd @Case { + PostScript @Yield { + @VContract @HContract 0c @HShift "lfigshadow" @Graphic + { + ^/shadow ^|shadow 0c @HShift + @Figure + shape { + lfigbox + } + linestyle { linestyle } + linewidth { linewidth } + linecap { linecap } + dashlength { dashlength } + paint { paint } + margin { margin } + 0c @HShift x + |shadow /shadow + } + } + PDF @Yield { + @VContract @HContract 0c @HShift + +# "lfigshadow" @Graphic is this: + { "__mul(__xmark, 2) 0 m __xsize 0 l" # xmark 2 mul 0 moveto xsize 0 lineto + "__xsize __sub(__ysize, __mul(__xmark, 2)) l" # xsize ysize xmark 2 mul sub lineto + "__sub(__xsize, __xmark) __sub(ysize, __mul(__xmark, 2)) l" # xsize xmark sub ysize xmark 2 mul sub lineto + "__sub(__xsize, __xmark) __xmark l" # xsize xmark sub xmark lineto + "__mul(__xmark, 2) __xmark l h f" # xmark 2 mul xmark lineto closepath fill + } @Graphic + + { + ^/shadow ^|shadow 0c @HShift + @Figure + shape { + lfigbox + } + linestyle { linestyle } + linewidth { linewidth } + linecap { linecap } + dashlength { dashlength } + paint { paint } + margin { margin } + 0c @HShift x + |shadow /shadow + } + } + } + } + + def @Square + named linestyle { linestyle } + named linewidth { linewidth } + named linecap { linecap } + named dashlength { dashlength } + named paint { paint } + named margin { margin } + right x + { + @Figure + shape { + # {xsize ysize} ** 0.5 @Label CTR + # CTR ++ {{xsize xsize} @Max {ysize ysize}}**0.5 @Label NE + # CTR ++ { {CTR @Distance NE} << 135 } @Label NW + # CTR ++ { {CTR @Distance NE} << 225 } @Label SW + # CTR ++ { {CTR @Distance NE} << 315 } @Label SE + # SW ** 0.5 ++ SE ** 0.5 @Label S + # NW ** 0.5 ++ NE ** 0.5 @Label N + # SW ** 0.5 ++ NW ** 0.5 @Label W + # SE ** 0.5 ++ NE ** 0.5 @Label E + # SW SE NE NW SW + lfigsquare + } + linestyle { linestyle } + linewidth { linewidth } + linecap { linecap } + dashlength { dashlength } + paint { paint } + margin { margin } + x + } + + def @Diamond + named linestyle { linestyle } + named linewidth { linewidth } + named linecap { linecap } + named dashlength { dashlength } + named paint { paint } + named margin { margin } + right x + { + @Figure + shape { + # {xsize 0} ** 0.5 @Label S + # {0 ysize} ** 0.5 @Label W + # S ++ W @Label CTR + # CTR ++ W @Label N + # CTR ++ S @Label E + # S E N W S + lfigdiamond + } + linestyle { linestyle } + linewidth { linewidth } + linecap { linecap } + dashlength { dashlength } + paint { paint } + margin { margin } + x + } + + def @Polygon + named linestyle { linestyle } + named linewidth { linewidth } + named linecap { linecap } + named dashlength { dashlength } + named paint { paint } + named margin { margin } + named sides { 3 } + named angle { "dup 180 exch div" } + right x + { + @Figure + shape { sides angle lfigpolygon } + linestyle { linestyle } + linewidth { linewidth } + linecap { linecap } + dashlength { dashlength } + paint { paint } + margin { margin } + x + } + + def @Ellipse + named linestyle { linestyle } + named linewidth { linewidth } + named linecap { linecap } + named dashlength { dashlength } + named paint { paint } + named margin { margin } + right x + { + @Figure + shape { + # {xsize 0} ** 0.5 @Label S + # {0 ysize} ** 0.5 @Label W + # S ++ W @Label CTR + # CTR ++ W @Label N + # CTR ++ S @Label E + # CTR ++ {xsize 0} ** 0.3536 ++ {0 ysize} ** 0.3536 @Label NE + # CTR ++ {xsize 0} ** 0.3536 -- {0 ysize} ** 0.3536 @Label SE + # CTR -- {xsize 0} ** 0.3536 ++ {0 ysize} ** 0.3536 @Label NW + # CTR -- {xsize 0} ** 0.3536 -- {0 ysize} ** 0.3536 @Label SW + # S [ CTR ] E [ CTR ] N [ CTR ] W [ CTR ] S + lfigellipse + } + linestyle { linestyle } + linewidth { linewidth } + linecap { linecap } + dashlength { dashlength } + paint { paint } + margin { margin } + x + } + + def @Circle + named linestyle { linestyle } + named linewidth { linewidth } + named linecap { linecap } + named dashlength { dashlength } + named paint { paint } + named margin { margin } + right x + { + @Figure + shape { + # {xsize ysize} **0.5 @Label CTR + # CTR ++ {{xsize 0} @Max {ysize 0}}**0.5 @Label E + # CTR ++ { {CTR @Distance E} << 45 } @Label NE + # CTR ++ { {CTR @Distance E} << 90 } @Label N + # CTR ++ { {CTR @Distance E} << 135 } @Label NW + # CTR ++ { {CTR @Distance E} << 180 } @Label W + # CTR ++ { {CTR @Distance E} << 225 } @Label SW + # CTR ++ { {CTR @Distance E} << 270 } @Label S + # CTR ++ { {CTR @Distance E} << 315 } @Label SE + # S [ CTR ] E [ CTR ] N [ CTR ] W [ CTR ] S + lfigcircle + } + linestyle { linestyle } + linewidth { linewidth } + linecap { linecap } + dashlength { dashlength } + paint { paint } + margin { margin } + x + } + + def @HLine + named linestyle { linestyle } + named linewidth { linewidth } + named linecap { linecap } + named dashlength { dashlength } + named paint { paint } + named margin { 0c } + named arrow { arrow } + named headstyle { headstyle } + named headwidth { headwidth } + named headlength { headlength } + right x + { + @Figure + shape { + # 0 ymark @Prev @Label FROM + # xsize ymark @Prev @Label TO + lfighline + } + linestyle { linestyle } + linewidth { linewidth } + linecap { linecap } + dashlength { dashlength } + paint { paint } + margin { margin } + arrow { arrow } + headstyle { headstyle } + headwidth { headwidth } + headlength { headlength } + x + } + + def @VLine + named linestyle { linestyle } + named linewidth { linewidth } + named linecap { linecap } + named dashlength { dashlength } + named paint { paint } + named margin { 0c } + named arrow { arrow } + named headstyle { headstyle } + named headwidth { headwidth } + named headlength { headlength } + right x + { + @Figure + shape { + # xmark ysize @Prev @Label FROM + # xmark 0 @Prev @Label TO + lfigvline + } + linestyle { linestyle } + linewidth { linewidth } + linecap { linecap } + dashlength { dashlength } + paint { paint } + margin { margin } + arrow { arrow } + headstyle { headstyle } + headwidth { headwidth } + headlength { headlength } + x + } + + def @HArrow + named linestyle { linestyle } + named linewidth { linewidth } + named linecap { linecap } + named dashlength { dashlength } + named paint { paint } + named margin { 0c } + named arrow { forward } + named headstyle { headstyle } + named headwidth { headwidth } + named headlength { headlength } + right x + { + @Figure + shape { + # 0 ymark @Prev @Label FROM + # xsize ymark @Prev @Label TO + lfighline + } + linestyle { linestyle } + linewidth { linewidth } + linecap { linecap } + dashlength { dashlength } + paint { paint } + margin { margin } + arrow { arrow } + headstyle { headstyle } + headwidth { headwidth } + headlength { headlength } + x + } + + def @VArrow + named linestyle { linestyle } + named linewidth { linewidth } + named linecap { linecap } + named dashlength { dashlength } + named paint { paint } + named margin { 0c } + named arrow { forward } + named headstyle { headstyle } + named headwidth { headwidth } + named headlength { headlength } + right x + { + @Figure + shape { + # xmark ysize @Prev @Label FROM + # xmark 0 @Prev @Label TO + lfigvline + } + linestyle { linestyle } + linewidth { linewidth } + linecap { linecap } + dashlength { dashlength } + paint { paint } + margin { margin } + arrow { arrow } + headstyle { headstyle } + headwidth { headwidth } + headlength { headlength } + x + } + + def @Line + named from { 0 ysize } + named to { xsize 0 } + named linestyle { linestyle } + named linewidth { linewidth } + named linecap { linecap } + named dashlength { dashlength } + named paint { paint } + named margin { 0c } + named arrow { arrow } + named headstyle { headstyle } + named headwidth { headwidth } + named headlength { headlength } + right x + { + @Figure + shape { + from @Prev @Label FROM + to @Prev @Label TO + } + linestyle { linestyle } + linewidth { linewidth } + linecap { linecap } + dashlength { dashlength } + paint { paint } + margin { margin } + arrow { arrow } + headstyle { headstyle } + headwidth { headwidth } + headlength { headlength } + x + } + + def @Arrow + named from { 0 ysize } + named to { xsize 0 } + named linestyle { linestyle } + named linewidth { linewidth } + named linecap { linecap } + named dashlength { dashlength } + named paint { paint } + named margin { 0c } + named arrow { forward } + named headstyle { headstyle } + named headwidth { headwidth } + named headlength { headlength } + right x + { + @Figure + shape { + from @Prev @Label FROM + to @Prev @Label TO + } + linestyle { linestyle } + linewidth { linewidth } + linecap { linecap } + dashlength { dashlength } + paint { paint } + margin { margin } + arrow { arrow } + headstyle { headstyle } + headwidth { headwidth } + headlength { headlength } + x + } + + def @Arc + named from { 0 ysize } + named to { xsize 0 } + named ctr { 0 0 } + named direction { clockwise } + named linestyle { linestyle } + named linewidth { linewidth } + named linecap { linecap } + named dashlength { dashlength } + named paint { paint } + named margin { 0c } + named arrow { noarrow } + named headstyle { headstyle } + named headwidth { headwidth } + named headlength { headlength } + right x + { + @Figure + shape { + from @Label FROM + to @Label TO + ctr @Label CTR + FROM [ CTR + direction @Case { {clockwise anticlockwise} @Yield direction } + ] TO + } + linestyle { linestyle } + linewidth { linewidth } + linecap { linecap } + dashlength { dashlength } + paint { paint } + margin { margin } + arrow { arrow } + headstyle { headstyle } + headwidth { headwidth } + headlength { headlength } + x + } + + @BackEnd @Case { + PostScript @Yield { + { "grestore save gsave" maxlabels "dict begin lfigdict begin" + // "end end restore" + } @Graphic @Body + } + PDF @Yield { + } + } + +@End @Fig diff --git a/include/figf.lpg b/include/figf.lpg new file mode 100644 index 0000000..2b64188 --- /dev/null +++ b/include/figf.lpg @@ -0,0 +1,1003 @@ +%%BeginResource: procset LoutFigPrependGraphic +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% PostScript @SysPrependGraphic file for @Fig Jeffrey H. Kingston % +% Version 2.0 (includes CIRCUM label) January 1992 % +% % +% To assist in avoiding name clashes, the names of all symbols % +% defined here begin with "lfig". However, this is not feasible % +% with user-defined labels and some labels used by users. % +% % +% <point> is two numbers, a point. % +% <length> is one number, a length % +% <angle> is one number, an angle in degrees % +% <dashlength> is one number, the preferred length of a dash % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +errordict begin + /handleerror + { + { /Times-Roman findfont 8 pt scalefont setfont + 0 setgray 4 pt 4 pt moveto + $error /errorname get + dup lfigdict exch known + { lfigdict exch get } + { 30 string cvs } ifelse + show + ( Command: ) show + $error /command get 30 string cvs show + } stopped {} if + showpage stop + } def +end + +% concat strings: <string> <string> lfigconcat <string> +% must be defined outside lfigdict since used in lfigpromotelabels +/lfigconcat +{ 2 copy length exch length add string + dup 0 4 index putinterval + dup 3 index length 3 index putinterval + 3 1 roll pop pop +} def + +% <string> lfigdebugprint - +% must be defined outside lfigdict since used in arbitrary places +% /lfigdebugprint +% { print +% (; operand stack:\n) print +% count copy +% count 2 idiv +% { == +% (\n) print +% } repeat +% (\n) print +% } def + +/lfigdict 120 dict def +lfigdict begin + +% error messages +/dictfull (dictfull error: too many labels?) def +/dictstackoverflow (dictstackoverflow error: labels nested too deeply?) def +/execstackoverflow (execstackoverflow error: figure nested too deeply?) def +/limitcheck (limitcheck error: figure nested too deeply or too large?) def +/syntaxerror (syntaxerror error: syntax error in text of figure?) def +/typecheck (typecheck error: syntax error in text of figure?) def +/undefined (undefined error: unknown or misspelt label?) def +/VMError (VMError error: run out of memory?) def + +% push pi onto stack: - lfigpi <num> +/lfigpi 3.14159 def + +% arc directions +/clockwise false def +/anticlockwise true def + +% maximum of two numbers: <num> <num> lfigmax <num> +/lfigmax { 2 copy gt { pop } { exch pop } ifelse } def + +% minimum of two numbers: <num> <num> lfigmin <num> +/lfigmin { 2 copy lt { pop } { exch pop } ifelse } def + +% add two points: <point> <point> lfigpadd <point> +/lfigpadd { exch 3 1 roll add 3 1 roll add exch } def + +% subtract first point from second: <point> <point> lfigpsub <point> +/lfigpsub { 3 2 roll sub 3 1 roll exch sub exch } def + +% max two points: <point> <point> lfigpmax <point> +/lfigpmax { exch 3 1 roll lfigmax 3 1 roll lfigmax exch } def + +% min two points: <point> <point> lfigpmin <point> +/lfigpmin { exch 3 1 roll lfigmin 3 1 roll lfigmin exch } def + +% scalar multiplication: <point> <num> lfigpmul <point> +/lfigpmul { dup 3 1 roll mul 3 1 roll mul exch } def + +% point at angle and distance: <point> <length> <angle> lfigatangle <point> +/lfigatangle { 2 copy cos mul 3 1 roll sin mul lfigpadd } def + +% angle from one point to another: <point> <point> lfigangle <angle> +/lfigangle { lfigpsub 2 copy 0 eq exch 0 eq and {pop} {exch atan} ifelse } def + +% distance between two points: <point> <point> lfigdistance <length> +/lfigdistance { lfigpsub dup mul exch dup mul add sqrt } def + +% difference in x coords: <point> <point> lfigxdistance <length> +/lfigxdistance { pop 3 1 roll pop sub } def + +%difference in y coords: <point> <point> lfigydistance <length> +/lfigydistance { 3 1 roll pop sub exch pop } def + +% stroke a solid line: <length> <dashlength> lfigsolid - +/lfigsolid +{ pop pop [] 0 setdash stroke +} def + +% stroke a lfigdashed line: <length> <dashlength> lfigdashed - +/lfigdashed +{ 2 copy div 2 le 1 index 0 le or + { exch pop 1 pt lfigmax [ exch dup ] 0 setdash } + { dup [ exch 4 2 roll 2 copy div + 1 sub 2 div ceiling dup 4 1 roll + 1 add mul sub exch div ] 0 setdash + } ifelse stroke +} def + +% stroke a lfigcdashed line: <length> <dashlength> lfigcdashed - +/lfigcdashed +{ 2 copy le 1 index 0 le or + { exch pop 1 pt lfigmax [ exch dup ] dup 0 get 2 div setdash } + { dup [ 4 2 roll exch 2 copy exch div + 2 div ceiling div 1 index sub + ] exch 2 div setdash + } ifelse stroke +} def + +% stroke a dotted line: <length> <dashlength> lfigdotted - +/lfigdotted +{ 2 copy le 1 index 0 le or + { exch pop 1 pt lfigmax [ exch 0 exch ] 0 setdash } + { 1 index exch div ceiling div + [ 0 3 2 roll ] 0 setdash + } ifelse stroke +} def + +% stroke a noline line: <length> <dashlength> lfignoline - +/lfignoline +{ pop pop +} def + +% painting (i.e. filling): - lfigwhite - (etc.) +/lfignopaint { } def +/lfignochange { fill } def +/lfigdarkblue { 0.0 0.0 0.5 setrgbcolor fill } def +/lfigblue { 0.0 0.0 1.0 setrgbcolor fill } def +/lfiglightblue { 0.5 0.5 1.0 setrgbcolor fill } def +/lfigdarkgreen { 0.0 0.5 0.0 setrgbcolor fill } def +/lfiggreen { 0.0 1.0 0.0 setrgbcolor fill } def +/lfiglightgreen { 0.5 1.0 0.5 setrgbcolor fill } def +/lfigdarkred { 0.5 0.0 0.0 setrgbcolor fill } def +/lfigred { 1.0 0.0 0.0 setrgbcolor fill } def +/lfiglightred { 1.0 0.5 0.5 setrgbcolor fill } def +/lfigdarkcyan { 0.0 0.5 0.5 setrgbcolor fill } def +/lfigcyan { 0.0 1.0 1.0 setrgbcolor fill } def +/lfiglightcyan { 0.5 1.0 1.0 setrgbcolor fill } def +/lfigdarkmagenta { 0.5 0.0 0.5 setrgbcolor fill } def +/lfigmagenta { 1.0 0.0 1.0 setrgbcolor fill } def +/lfiglightmagenta { 1.0 0.5 1.0 setrgbcolor fill } def +/lfigdarkyellow { 0.5 0.5 0.0 setrgbcolor fill } def +/lfigyellow { 1.0 1.0 0.0 setrgbcolor fill } def +/lfiglightyellow { 1.0 1.0 0.5 setrgbcolor fill } def +/lfigdarkgray { 0.2 0.2 0.2 setrgbcolor fill } def +/lfiggray { 0.5 0.5 0.5 setrgbcolor fill } def +/lfiglightgray { 0.8 0.8 0.8 setrgbcolor fill } def +/lfigdarkgrey { 0.2 0.2 0.2 setrgbcolor fill } def +/lfiggrey { 0.5 0.5 0.5 setrgbcolor fill } def +/lfiglightgrey { 0.8 0.8 0.8 setrgbcolor fill } def +/lfigblack { 0.0 0.0 0.0 setrgbcolor fill } def +/lfigwhite { 1.0 1.0 1.0 setrgbcolor fill } def + +% line caps (and joins, not currently used) +/lfigbutt 0 def +/lfiground 1 def +/lfigprojecting 2 def +/lfigmiter 0 def +/lfigbevel 2 def + +% shape and labels of the @Box symbol +/lfigbox +{ + 0 0 /SW lfigpointdef + xsize 0 /SE lfigpointdef + xsize ysize /NE lfigpointdef + 0 ysize /NW lfigpointdef + SE 0.5 lfigpmul /S lfigpointdef + NW 0.5 lfigpmul /W lfigpointdef + W SE lfigpadd /E lfigpointdef + S NW lfigpadd /N lfigpointdef + NE 0.5 lfigpmul /CTR lfigpointdef + [ CTR NE lfigpsub /lfigboxcircum cvx ] lfigcircumdef + SW SE NE NW SW +} def + +% shape and labels of the @CurveBox symbol +/lfigcurvebox +{ + + xsize 0.5 mul ysize 0.5 mul /CTR lfigpointdef + xsize 0.5 mul 0 /S lfigpointdef + xsize ysize 0.5 mul /E lfigpointdef + xsize 0.5 mul ysize /N lfigpointdef + 0 ysize 0.5 mul /W lfigpointdef + + xmark 0.293 mul xmark 0.293 mul /SW lfigpointdef + xsize xmark 0.293 mul sub xmark 0.293 mul /SE lfigpointdef + xsize xmark 0.293 mul sub ysize xmark 0.293 mul sub /NE lfigpointdef + xmark 0.293 mul ysize xmark 0.293 mul sub /NW lfigpointdef + + [ xsize ysize 0.5 lfigpmul xmark /lfigcurveboxcircum cvx ] lfigcircumdef + + xmark 0 + xsize xmark sub 0 + [ xsize xmark sub xmark ] + xsize xmark + xsize ysize xmark sub + [ xsize xmark sub ysize xmark sub ] + xsize xmark sub ysize + xmark ysize + [ xmark ysize xmark sub ] + 0 ysize xmark sub + 0 xmark + [ xmark xmark ] + xmark 0 +} def + +% shadow of the @ShadowBox symbol +% its shape and labels are done, somewhat inaccurately, with lfigbox +/lfigshadow +{ xmark 2 mul 0 moveto xsize 0 lineto + xsize ysize xmark 2 mul sub lineto + xsize xmark sub ysize xmark 2 mul sub lineto + xsize xmark sub xmark lineto + xmark 2 mul xmark lineto closepath fill +} def + +% shape and labels of the @Square symbol +/lfigsquare +{ + xsize ysize 0.5 lfigpmul /CTR lfigpointdef + CTR xsize xsize ysize ysize lfigpmax 0.5 lfigpmul lfigpadd /NE lfigpointdef + CTR 0 0 CTR NE lfigdistance 135 lfigatangle lfigpadd /NW lfigpointdef + CTR 0 0 CTR NE lfigdistance 225 lfigatangle lfigpadd /SW lfigpointdef + CTR 0 0 CTR NE lfigdistance 315 lfigatangle lfigpadd /SE lfigpointdef + SW 0.5 lfigpmul SE 0.5 lfigpmul lfigpadd /S lfigpointdef + NW 0.5 lfigpmul NE 0.5 lfigpmul lfigpadd /N lfigpointdef + SW 0.5 lfigpmul NW 0.5 lfigpmul lfigpadd /W lfigpointdef + SE 0.5 lfigpmul NE 0.5 lfigpmul lfigpadd /E lfigpointdef + [ CTR NE lfigpsub /lfigboxcircum cvx ] lfigcircumdef + SW SE NE NW SW +} def + +% shape and labels of the @Diamond symbol +/lfigdiamond +{ + xsize 0 0.5 lfigpmul /S lfigpointdef + 0 ysize 0.5 lfigpmul /W lfigpointdef + S W lfigpadd /CTR lfigpointdef + CTR W lfigpadd /N lfigpointdef + CTR S lfigpadd /E lfigpointdef + [ xsize ysize 0.5 lfigpmul /lfigdiamondcircum cvx ] lfigcircumdef + S E N W S +} def + +% shape and labels of the @Ellipse symbol +/lfigellipse +{ + xsize 0 0.5 lfigpmul /S lfigpointdef + 0 ysize 0.5 lfigpmul /W lfigpointdef + S W lfigpadd /CTR lfigpointdef + CTR W lfigpadd /N lfigpointdef + CTR S lfigpadd /E lfigpointdef + CTR xsize 0 0.3536 lfigpmul lfigpadd 0 ysize 0.3536 lfigpmul lfigpadd /NE lfigpointdef + 0 ysize 0.3536 lfigpmul CTR xsize 0 0.3536 lfigpmul lfigpadd lfigpsub /SE lfigpointdef + xsize 0 0.3536 lfigpmul CTR lfigpsub 0 ysize 0.3536 lfigpmul lfigpadd /NW lfigpointdef + 0 ysize 0.3536 lfigpmul xsize 0 0.3536 lfigpmul CTR lfigpsub lfigpsub /SW lfigpointdef + [ xsize ysize 0.5 lfigpmul /lfigellipsecircum cvx ] lfigcircumdef + S [ CTR ] E [ CTR ] N [ CTR ] W [ CTR ] S +} def + +% shape and labels of the @Circle symbol +/lfigcircle +{ + xsize ysize 0.5 lfigpmul /CTR lfigpointdef + CTR xsize 0 ysize 0 lfigpmax 0.5 lfigpmul lfigpadd /E lfigpointdef + CTR 0 0 CTR E lfigdistance 45 lfigatangle lfigpadd /NE lfigpointdef + CTR 0 0 CTR E lfigdistance 90 lfigatangle lfigpadd /N lfigpointdef + CTR 0 0 CTR E lfigdistance 135 lfigatangle lfigpadd /NW lfigpointdef + CTR 0 0 CTR E lfigdistance 180 lfigatangle lfigpadd /W lfigpointdef + CTR 0 0 CTR E lfigdistance 225 lfigatangle lfigpadd /SW lfigpointdef + CTR 0 0 CTR E lfigdistance 270 lfigatangle lfigpadd /S lfigpointdef + CTR 0 0 CTR E lfigdistance 315 lfigatangle lfigpadd /SE lfigpointdef + [ S E lfigpsub /lfigellipsecircum cvx ] lfigcircumdef + S [ CTR ] E [ CTR ] N [ CTR ] W [ CTR ] S +} def + +% shape and labels of the @HLine and @HArrow symbols +/lfighline +{ + 0 ymark lfigprevious /FROM lfigpointdef + xsize ymark lfigprevious /TO lfigpointdef +} def + +% shape and labels of the @VLine and @VArrow symbols +/lfigvline +{ + xmark ysize lfigprevious /FROM lfigpointdef + xmark 0 lfigprevious /TO lfigpointdef +} def + +% points of a polygon around base with given no of sides, vert init angle: +% <sides> <angle> figpolygon <point> ... <point> +/lfigpolygon +{ xsize ysize 0.5 lfigpmul /CTR lfigpointdef + 90 sub CTR 2 copy lfigmax 5 3 roll + [ 4 copy pop /lfigpolycircum cvx ] lfigcircumdef + exch dup 360 exch div exch + 1 1 3 2 roll + { 4 string cvs (P) exch lfigconcat cvn + 6 copy pop pop lfigatangle 2 copy 10 2 roll + 3 2 roll lfigpointdef + dup 3 1 roll add exch + } for + pop lfigatangle +} def + +% next array element: <array> <index> lfiggetnext <array> <index> <any> true +% or <array> <index> false +/lfiggetnext +{ 2 copy exch length ge + { false } + { 2 copy get exch 1 add exch true } ifelse +} def + +% check whether thing is number: <any> lfigisnumbertype <any> <bool> +/lfigisnumbertype +{ dup type dup + /integertype eq exch /realtype eq or +} def + +% check whether thing is an array: <any> lfigisarraytype <any> <bool> +/lfigisarraytype { dup type /arraytype eq } def + +% get next item: <array> <index> lfiggetnextitem <array> <index> 0 +% or <array> <index> <array> 1 +% or <array> <index> <point> 2 +/lfiggetnextitem +{ lfiggetnext + { lfigisarraytype + { 1 + } + { lfigisnumbertype + { 3 1 roll + lfiggetnext + { lfigisnumbertype + { 4 3 roll exch 2 + } + { pop 3 2 roll pop 0 + } ifelse + } + { 3 2 roll pop 0 + } ifelse + } + { pop 0 + } ifelse + } ifelse + } + { 0 + } ifelse +} def + +% set arc path: bool x1 y1 x2 y2 x0 y0 lfigsetarc <angle> <angle> <dist> +% the path goes from x1 y1 to x2 y2 about centre x0 y0, +% anticlockwise if bool is true else clockwise. +% The orientations of backwards pointing and forwards pointing +% arrowheads are returned in the two angles, and +% the length of the arc is returned in <dist>. +/lfigsetarc +{ + 20 dict begin + matrix currentmatrix 8 1 roll + 2 copy translate 2 copy 8 2 roll + 4 2 roll lfigpsub 6 2 roll lfigpsub + dup /y1 exch def dup mul /y1s exch def + dup /x1 exch def dup mul /x1s exch def + dup /y2 exch def dup mul /y2s exch def + dup /x2 exch def dup mul /x2s exch def + + y1s y2s eq + { -1 + } + { y1s x2s mul y2s x1s mul sub y1s y2s sub div + } ifelse + /da exch def + + x1s x2s eq + { -1 + } + { x1s y2s mul x2s y1s mul sub x1s x2s sub div + } ifelse + /db exch def + + da 0 gt db 0 gt and + { /LMax da sqrt db sqrt lfigmax def + /scalex da sqrt LMax div def + /scaley db sqrt LMax div def + scalex scaley scale + 0 0 LMax + 0 0 x1 scalex mul y1 scaley mul lfigangle + 0 0 x2 scalex mul y2 scaley mul lfigangle + 2 copy eq { 360 add } if + 2 copy 8 2 roll + 5 index { arc } { arcn } ifelse + 2 index 1 index + { 90 sub } { 90 add } ifelse + dup sin scaley mul exch cos scalex mul atan + 2 index 2 index + { 90 add } { 90 sub } ifelse + dup sin scaley mul exch cos scalex mul atan + 5 2 roll % res1 res2 ang1 ang2 anticlockwise + { exch sub } { sub } ifelse + dup 0 le { 360 add } if lfigpi mul LMax mul 180 div + } + { 0 0 x1 y1 lfigdistance 0 0 x2 y2 lfigdistance eq + 0 0 x1 y1 lfigdistance 0 gt and + { 0 0 + 0 0 x1 y1 lfigdistance + 0 0 x1 y1 lfigangle + 0 0 x2 y2 lfigangle + 2 copy eq { 360 add } if + 2 copy 8 2 roll + 5 index { arc } { arcn } ifelse + 2 index 1 index + { 90 sub } { 90 add } ifelse + 2 index 2 index + { 90 add } { 90 sub } ifelse + 5 2 roll % res1 res2 ang1 ang2 clockwise + { exch sub } { sub } ifelse + dup 0 le { 360 add } if lfigpi mul 0 0 x1 y1 lfigdistance mul 180 div + } + { x2 y2 lineto pop + x2 y2 x1 y1 lfigangle + x1 y1 x2 y2 lfigangle + x1 y1 x2 y2 lfigdistance + } ifelse + } ifelse + 4 -1 roll setmatrix + end +} def + +% lfigsetcurve: set up a Bezier curve from x0 y0 to x3 y3 +% and return arrowhead angles and length of curve (actually 0) +% x0 y0 x1 y1 x2 y2 x3 y3 lfigsetcurve <angle> <angle> <length> +/lfigsetcurve +{ 8 copy curveto pop pop + lfigangle + 5 1 roll + 4 2 roll lfigangle + exch + 0 +} def + +% lfigpaintpath: paint a path of the given shape +% /paint [ shape ] lfigpaintpath - +/lfigpaintpath +{ + 10 dict begin + 0 newpath + /prevseen false def + /curveseen false def + { lfiggetnextitem + dup 0 eq { pop exit } + { 1 eq + { /curveseen true def + /curve exch def + curve length 0 eq { /curveseen false def } if + } + { /ycurr exch def + /xcurr exch def + prevseen + { curveseen + { curve length 4 eq + { xprev yprev + curve 0 get curve 1 get + curve 2 get curve 3 get + xcurr ycurr + lfigsetcurve pop pop pop + } + { xprev yprev xcurr ycurr + curve length 1 ge { curve 0 get } { 0 } ifelse + curve length 2 ge { curve 1 get } { 0 } ifelse + curve length 3 ge { curve 2 get } { true } ifelse + 7 1 roll + lfigsetarc pop pop pop + } ifelse + } + { xcurr ycurr lineto + } ifelse + } + { xcurr ycurr moveto + } ifelse + /xprev xcurr def + /yprev ycurr def + /prevseen true def + /curveseen false def + } ifelse + } ifelse + } loop pop pop cvx exec + end +} def + +% stroke a path of the given shape in the given linestyle and dash length. +% Return the origin and angle of the backward and forward arrow heads. +% dashlength /linestyle [shape] lfigdopath [<point> <angle>] [<point> <angle>] +/lfigdopath +{ + 10 dict begin + 0 + /prevseen false def + /curveseen false def + /backarrow [] def + /fwdarrow [] def + { + lfiggetnextitem + dup 0 eq { pop exit } + { + 1 eq + { /curveseen true def + /curve exch def + curve length 0 eq { /prevseen false def } if + } + { /ycurr exch def + /xcurr exch def + prevseen + { newpath xprev yprev moveto + curveseen + { curve length 4 eq + { xprev yprev + curve 0 get curve 1 get + curve 2 get curve 3 get + xcurr ycurr lfigsetcurve + } + { xprev yprev xcurr ycurr + curve length 1 ge { curve 0 get } { 0 } ifelse + curve length 2 ge { curve 1 get } { 0 } ifelse + curve length 3 ge { curve 2 get } { true } ifelse + 7 1 roll + lfigsetarc + } ifelse + } + { xcurr ycurr lineto + xcurr ycurr xprev yprev lfigangle dup 180 sub + xprev yprev xcurr ycurr lfigdistance + } ifelse + 6 index 6 index cvx exec + [ xprev yprev 5 -1 roll ] + backarrow length 0 eq + { /backarrow exch def } + { pop } ifelse + [ xcurr ycurr 4 -1 roll ] /fwdarrow exch def + } if + /xprev xcurr def + /yprev ycurr def + /prevseen true def + /curveseen false def + } ifelse + } ifelse + } loop + pop pop pop pop + backarrow length 0 eq { [ 0 0 0 ] } { backarrow } ifelse + fwdarrow length 0 eq { [ 0 0 0 ] } { fwdarrow } ifelse + end +} def + +% lfigdoarrow: draw an arrow head of given form +% dashlength /lstyle /pstyle hfrac height width [ <point> <angle> ] lfigdoarrow - +/lfigdoarrow +{ matrix currentmatrix 8 1 roll + dup 0 get 1 index 1 get translate + 2 get rotate + [ 2 index neg 2 index 0 0 + 3 index 3 index neg + 1 index 10 index mul 0 + 7 index 7 index ] + 4 1 roll pop pop pop + dup 3 1 roll + gsave lfigpaintpath grestore lfigdopath pop pop + setmatrix +} def + +% arrow head styles +/lfigopen 0.0 def +/lfighalfopen 0.5 def +/lfigclosed 1.0 def + +% stroke no arrows, forward, back, and both +/lfignoarrow { pop pop pop pop pop pop pop pop } def +/lfigforward { 7 -1 roll lfigdoarrow pop } def +/lfigback { 8 -2 roll pop lfigdoarrow } def +/lfigboth { 8 -1 roll 7 copy lfigdoarrow pop 7 -1 roll lfigdoarrow } def + +% lfigprevious: return previous point on path +/lfigprevious +{ lfigisnumbertype + { 2 copy } + { lfigisarraytype + { 2 index 2 index } + { 0 0 } + ifelse + } ifelse +} def + +% label a point in 2nd top dictionary: <point> /name lfigpointdef - +/lfigpointdef +{ + % (Entering lfigpointdef) lfigdebugprint + [ 4 2 roll transform + /itransform cvx ] cvx + currentdict end + 3 1 roll + % currentdict length currentdict maxlength lt + % { def } + % { exec moveto (too many labels) show stop } + % ifelse + def + begin + % (Leaving lfigpointdef) lfigdebugprint +} def + +% promote labels from second top to third top dictionary +% <string> lfigpromotelabels - +/lfigpromotelabels +{ + % (Entering lfigpromotelabels) lfigdebugprint + currentdict end exch currentdict end + { exch 20 string cvs 2 index + (@) lfigconcat exch lfigconcat cvn exch def + } forall pop begin + % (Leaving lfigpromotelabels) lfigdebugprint +} def + +% show labels (except CIRCUM): - lfigshowlabels - +/lfigshowlabels +{ + % (Entering lfigshowlabels) lfigdebugprint + currentdict end + currentdict + { 1 index 20 string cvs (CIRCUM) search % if CIRCUM in key + { pop pop pop pop pop } + { pop cvx exec 2 copy + newpath 1.5 pt 0 360 arc + 0 setgray fill + /Times-Roman findfont 8 pt scalefont setfont + moveto 0.2 cm 0.1 cm rmoveto 20 string cvs show + } + ifelse + } forall + begin + % (Leaving lfigshowlabels) lfigdebugprint +} def + +% fix an angle to 0 <= res < 360: <angle> lfigfixangle <angle> +/lfigfixangle +{ + % (Entering lfigfixangle) lfigdebugprint + { dup 0 ge { exit } if + 360 add + } loop + { dup 360 lt { exit } if + 360 sub + } loop + % (Leaving lfigfixangle) lfigdebugprint +} def + +% find point on circumference of box: alpha a b lfigboxcircum x y +/lfigboxcircum +{ + % (Entering lfigboxcircum) lfigdebugprint + 4 dict begin + /b exch def + /a exch def + lfigfixangle /alpha exch def + 0 0 a b lfigangle /theta exch def + + % if alpha <= theta, return (a, a*tan(alpha)) + alpha theta le + { a a alpha sin mul alpha cos div } + { + % else if alpha <= 180 - theta, return (b*cot(alpha), b) + alpha 180 theta sub le + { b alpha cos mul alpha sin div b } + { + % else if alpha <= 180 + theta, return (-a, -a*tan(alpha)) + alpha 180 theta add le + { a neg a neg alpha sin mul alpha cos div } + { + % else if alpha <= 360 - theta, return (-b*cot(alpha), -b) + alpha 360 theta sub le + { b neg alpha cos mul alpha sin div b neg } + { + % else 360 - theta <= alpha, return (a, a*tan(alpha)) + a a alpha sin mul alpha cos div + } ifelse + } ifelse + } ifelse + } ifelse + end + % (Leaving lfigboxcircum) lfigdebugprint +} def + +% find quadratic roots (assume a != 0): a b c lfigqroots x1 x2 2 +% or x2 1 +% or 0 +/lfigqroots +{ + 4 dict begin + /c exch def + /b exch def + /a exch def + /disc b b mul 4 a c mul mul sub def + disc 0 lt + { 0 + } + { disc 0 eq + { b neg 2 a mul div + 1 + } + { b neg disc sqrt add 2 a mul div + b neg disc sqrt sub 2 a mul div + 2 + } + ifelse + } + ifelse + end +} def + +% work our which quadrant: <angle> lfigquadrant <0-3> +/lfigquadrant +{ dup 90 lt + { pop 0 + } + { dup 180 lt + { pop 1 + } + { 270 lt + { 2 + } + { 3 + } ifelse + } ifelse + } ifelse +} def + +% find curvebox circum, assuming upper right quadrant: alpha a b xmk lfigcb x y +/lfigcb +{ + 6 dict begin + /xmk exch def + /b exch def + /a exch def + /alpha exch def + /theta1 0 0 a b xmk sub lfigangle def + /theta2 0 0 a xmk sub b lfigangle def + alpha theta1 le + { % if alpha <= theta1, return (a, a*tan(alpha)) + a a alpha sin mul alpha cos div + } + { alpha theta2 ge + { % else if alpha > theta2, return (b*cot(alpha), b) + b alpha cos mul alpha sin div b + } + { + % else, return the intersection of line and circle + a xmk sub b xmk sub xmk 0 0 alpha lfigcircleintersect + dup 0 eq + { % should never happen, just return any reasonable point + pop + a b 0.5 lfigpmul + } + { 1 eq + { % should never happen, just return the point on top of stack + } + { % the usual case, two points on stack, return the larger + lfigpmax + } ifelse + } ifelse + } ifelse + } ifelse + end +} def + +% find point on circumference of curvebox: alpha a b xmk lfigcurveboxcircum x y +/lfigcurveboxcircum +{ + % (Entering lfigcurveboxcircum) lfigdebugprint + 5 dict begin + /xmk exch def + /b exch def + /a exch def + lfigfixangle /alpha exch def + + % work out which quadrant we are in, and reflect accordingly + /quad alpha lfigquadrant def + quad 0 eq + { alpha a b xmk lfigcb + } + { quad 1 eq + { 180 alpha sub a b xmk lfigcb exch neg exch + } + { quad 2 eq + { alpha 180 sub a b xmk lfigcb neg exch neg exch + } + { 360 alpha sub a b xmk lfigcb neg + } ifelse + } ifelse + } ifelse + end + % (Leaving lfigcurveboxcircum) lfigdebugprint +} def + +% find point on circumference of diamond: alpha a b lfigdiamondcircum x y +/lfigdiamondcircum +{ + % (Entering lfigdiamondcircum) lfigdebugprint + 4 dict begin + /b exch def + /a exch def + lfigfixangle /alpha exch def + b alpha cos abs mul a alpha sin abs mul add /denom exch def + a b mul alpha cos mul denom div + a b mul alpha sin mul denom div + end + % (Leaving lfigdiamondcircum) lfigdebugprint +} def + +% find point on circumference of ellipse: alpha a b lfigellipsecircum x y +/lfigellipsecircum +{ + % (Entering lfigellipsecircum) lfigdebugprint + 4 dict begin + /b exch def + /a exch def + lfigfixangle /alpha exch def + b alpha cos mul dup mul a alpha sin mul dup mul add sqrt /denom exch def + a b mul alpha cos mul denom div + a b mul alpha sin mul denom div + end + % (Leaving lfigellipsecircum) lfigdebugprint +} def + +% find point of intersection of two lines each defined by two points +% x1 y1 x2 y2 x3 y3 x4 y4 lfiglineintersect x y +/lfiglineintersect +{ + % (Entering lfiglineintersect) lfigdebugprint + 13 dict begin + /y4 exch def + /x4 exch def + /y3 exch def + /x3 exch def + /y2 exch def + /x2 exch def + /y1 exch def + /x1 exch def + x2 x1 sub /x21 exch def + x4 x3 sub /x43 exch def + y2 y1 sub /y21 exch def + y4 y3 sub /y43 exch def + y21 x43 mul y43 x21 mul sub /det exch def + + % calculate x + y21 x43 mul x1 mul + y43 x21 mul x3 mul sub + y3 y1 sub x21 mul x43 mul add + det div + + % calculate y + x21 y43 mul y1 mul + x43 y21 mul y3 mul sub + x3 x1 sub y21 mul y43 mul add + det neg div + + end + % (Leaving lfiglineintersect) lfigdebugprint +} def + +% find point on circumference of polygon +% alpha radius num theta lfigpolycircum x y +/lfigpolycircum +{ + % (Entering lfigpolycircum) lfigdebugprint + 13 dict begin + /theta exch def + /num exch def + /radius exch def + /alpha exch def + + % calculate delta, the angle from theta to alpha + alpha theta sub lfigfixangle + + % calculate the angle which is the multiple of 360/num closest to delta + 360 num div div truncate 360 num div mul theta add /anglea exch def + + % calculate the next multiple of 360/num after anglea + anglea 360 num div add /angleb exch def + + % intersect the line through these two points with the alpha line + anglea cos anglea sin angleb cos angleb sin + 0 0 alpha cos 2 mul alpha sin 2 mul + lfiglineintersect radius lfigpmul + + end + % (Leaving lfigpolycircum) lfigdebugprint +} def + +% find point of intersection of a point and a circle +% x0 y0 r x1 y1 theta lfigcircleintersect xa ya xb yb 2 +% or xb yb 1 +% or 0 +/lfigcircleintersect +{ + % (Entering lfigcircleintersect) lfigdebugprint + 15 dict begin + /theta exch def + /y1 exch def + /x1 exch def + /r exch def + /y0 exch def + /x0 exch def + + % if sin(theta) = 0 then line is horizontal and y must be y1 + theta sin abs 0.00001 lt + { + /a 1 def + /b -2 x0 mul def + /c x0 dup mul y1 y0 sub dup mul add r dup mul sub def + a b c lfigqroots dup + 0 eq + { pop + 0 + } + { 1 eq + { y1 1 + } + { y1 exch y1 2 + } ifelse + } ifelse + } + { + /ct theta cos theta sin div def + /a ct ct mul 1 add def + /b ct x1 x0 sub mul y1 add y0 sub 2 mul def + /c x1 x0 sub dup mul y1 y0 sub dup mul add r dup mul sub def + a b c lfigqroots dup + 0 eq + { pop + 0 + } + { 1 eq + { y1 add /yb exch def + yb y1 sub ct mul x1 add /xb exch def + xb yb 1 + } + { y1 add /ya exch def + ya y1 sub ct mul x1 add /xa exch def + y1 add /yb exch def + yb y1 sub ct mul x1 add /xb exch def + xa ya xb yb 2 + } ifelse + } ifelse + } ifelse + end + % (Leaving lfigcircleintersect) lfigdebugprint +} def + +% add CIRCUM operator with this body: <array> lfigcircumdef - +/lfigcircumdef +{ % (Entering lfigcircumdef) lfigdebugprint + /CIRCUM exch cvx + currentdict end + 3 1 roll + % currentdict length currentdict maxlength lt + % { def } + % { exec moveto (too many labels) show stop } + % ifelse + def + begin + % (Leaving lfigcircumdef) lfigdebugprint +} def + +end +%%EndResource diff --git a/include/fontdefs b/include/fontdefs new file mode 100644 index 0000000..0001b97 --- /dev/null +++ b/include/fontdefs @@ -0,0 +1,156 @@ +################################################################################################################## +# # +# Font definitions. Use a very wide window to see them clearly. # +# # +# Lout font Lout font PostScript PostScript font metrics Lout character Recode/ # +# family name face name font name (formerly .AFM) file name mapping file NoRecode # +# # +################################################################################################################## + + +fontdef AvantGarde Base { AvantGarde-Medium AG-Md LtLatin1.LCM Recode } +fontdef AvantGarde Slope { AvantGarde-MediumObl AG-MdO LtLatin1.LCM Recode } +fontdef AvantGarde Bold { AvantGarde-Bold AG-Bd LtLatin1.LCM Recode } +fontdef AvantGarde BoldSlope { AvantGarde-BoldObl AG-BdO LtLatin1.LCM Recode } + +fontdef AvantGarde Bold { AvantGarde-Bold AG-Bd LtLatin1.LCM Recode } +fontdef AvantGarde BoldObl { AvantGarde-BoldObl AG-BdO LtLatin1.LCM Recode } +fontdef AvantGarde Book { AvantGarde-Book AG-Bk LtLatin1.LCM Recode } +fontdef AvantGarde BookOblique { AvantGarde-BookOblique AG-BkO LtLatin1.LCM Recode } +fontdef AvantGarde CondBold { AvantGarde-CondBold AG-CnBd LtLatin1.LCM Recode } +fontdef AvantGarde CondBook { AvantGarde-CondBook AG-CnBk LtLatin1.LCM Recode } +fontdef AvantGarde CondDemi { AvantGarde-CondDemi AG-CnDm LtLatin1.LCM Recode } +fontdef AvantGarde CondMedium { AvantGarde-CondMedium AG-CnMd LtLatin1.LCM Recode } +fontdef AvantGarde Demi { AvantGarde-Demi AG-Dm LtLatin1.LCM Recode } +fontdef AvantGarde DemiOblique { AvantGarde-DemiOblique AG-DmO LtLatin1.LCM Recode } +fontdef AvantGarde ExtraLight { AvantGarde-ExtraLight AG-ExLt LtLatin1.LCM Recode } +fontdef AvantGarde ExtraLightObl { AvantGarde-ExtraLightObl AG-ExLtO LtLatin1.LCM Recode } +fontdef AvantGarde Medium { AvantGarde-Medium AG-Md LtLatin1.LCM Recode } +fontdef AvantGarde MediumObl { AvantGarde-MediumObl AG-MdO LtLatin1.LCM Recode } + + +fontdef Bookman Base { Bookman-Medium Bk-Md LtLatin1.LCM Recode } +fontdef Bookman Slope { Bookman-MediumItalic Bk-MdIt LtLatin1.LCM Recode } +fontdef Bookman Bold { Bookman-Bold Bk-Bd LtLatin1.LCM Recode } +fontdef Bookman BoldSlope { Bookman-BoldItalic Bk-BdIt LtLatin1.LCM Recode } + +fontdef Bookman Bold { Bookman-Bold Bk-Bd LtLatin1.LCM Recode } +fontdef Bookman BoldItalic { Bookman-BoldItalic Bk-BdIt LtLatin1.LCM Recode } +fontdef Bookman Demi { Bookman-Demi Bk-Dm LtLatin1.LCM Recode } +fontdef Bookman DemiItalic { Bookman-DemiItalic Bk-DmIt LtLatin1.LCM Recode } +fontdef Bookman Light { Bookman-Light Bk-Lt LtLatin1.LCM Recode } +fontdef Bookman LightItalic { Bookman-LightItalic Bk-LtIt LtLatin1.LCM Recode } +fontdef Bookman Medium { Bookman-Medium Bk-Md LtLatin1.LCM Recode } +fontdef Bookman MediumItalic { Bookman-MediumItalic Bk-MdIt LtLatin1.LCM Recode } + + +fontdef Courier Base { Courier Cr LtLatin1.LCM Recode } +fontdef Courier Slope { Courier-Oblique Cr-O LtLatin1.LCM Recode } +fontdef Courier Bold { Courier-Bold Cr-Bd LtLatin1.LCM Recode } +fontdef Courier BoldSlope { Courier-BoldOblique Cr-BdO LtLatin1.LCM Recode } + +fontdef Courier Base { Courier Cr LtLatin1.LCM Recode } +fontdef Courier Bold { Courier-Bold Cr-Bd LtLatin1.LCM Recode } +fontdef Courier BoldOblique { Courier-BoldOblique Cr-BdO LtLatin1.LCM Recode } +fontdef Courier Oblique { Courier-Oblique Cr-O LtLatin1.LCM Recode } + + +fontdef Helvetica Base { Helvetica He LtLatin1.LCM Recode } +fontdef Helvetica Slope { Helvetica-Oblique He-O LtLatin1.LCM Recode } +fontdef Helvetica Bold { Helvetica-Bold He-Bd LtLatin1.LCM Recode } +fontdef Helvetica BoldSlope { Helvetica-BoldOblique He-BdO LtLatin1.LCM Recode } + +fontdef Helvetica Base { Helvetica He LtLatin1.LCM Recode } +fontdef Helvetica Black { Helvetica-Black He-Bl LtLatin1.LCM Recode } +fontdef Helvetica BlackOblique { Helvetica-BlackOblique He-BlO LtLatin1.LCM Recode } +fontdef Helvetica Bold { Helvetica-Bold He-Bd LtLatin1.LCM Recode } +fontdef Helvetica BoldOblique { Helvetica-BoldOblique He-BdO LtLatin1.LCM Recode } +fontdef Helvetica Compressed { Helvetica-Compressed He-Cm LtLatin1.LCM Recode } +fontdef Helvetica Cond { Helvetica-Condensed He-Cn LtLatin1.LCM Recode } +fontdef Helvetica CondBlack { Helvetica-Condensed-Black He-CnBl LtLatin1.LCM Recode } +fontdef Helvetica CondBlackObl { Helvetica-Condensed-BlackObl He-CnBlO LtLatin1.LCM Recode } +fontdef Helvetica CondBold { Helvetica-Condensed-Bold He-CnBd LtLatin1.LCM Recode } +fontdef Helvetica CondBoldObl { Helvetica-Condensed-BoldObl He-CnBdO LtLatin1.LCM Recode } +fontdef Helvetica CondLight { Helvetica-Condensed-Light He-CnLi LtLatin1.LCM Recode } +fontdef Helvetica CondLightObl { Helvetica-Condensed-LightObl He-CnLiO LtLatin1.LCM Recode } +fontdef Helvetica CondOblique { Helvetica-Condensed-Oblique He-CnO LtLatin1.LCM Recode } +fontdef Helvetica ExtraCompressed { Helvetica-ExtraCompressed He-ExtC LtLatin1.LCM Recode } +fontdef Helvetica Light { Helvetica-Light He-Lt LtLatin1.LCM Recode } +fontdef Helvetica LightOblique { Helvetica-LightOblique He-LtO LtLatin1.LCM Recode } +fontdef Helvetica Narrow { Helvetica-Narrow He-Nr LtLatin1.LCM Recode } +fontdef Helvetica NarrowBold { Helvetica-Narrow-Bold He-NrBd LtLatin1.LCM Recode } +fontdef Helvetica NarrowBoldObl { Helvetica-Narrow-BoldOblique He-NrBdO LtLatin1.LCM Recode } +fontdef Helvetica NarrowObl { Helvetica-Narrow-Oblique He-NrO LtLatin1.LCM Recode } +fontdef Helvetica Oblique { Helvetica-Oblique He-O LtLatin1.LCM Recode } +fontdef Helvetica UltraCompressed { Helvetica-UltraCompressed He-UlCm LtLatin1.LCM Recode } + + +fontdef Schoolbook Base { NewCenturySchlbk-Roman NCS-Rm LtLatin1.LCM Recode } +fontdef Schoolbook Slope { NewCenturySchlbk-Italic NCS-It LtLatin1.LCM Recode } +fontdef Schoolbook Bold { NewCenturySchlbk-Bold NCS-Bd LtLatin1.LCM Recode } +fontdef Schoolbook BoldSlope { NewCenturySchlbk-BoldItalic NCS-BdIt LtLatin1.LCM Recode } + +fontdef Schoolbook Bold { NewCenturySchlbk-Bold NCS-Bd LtLatin1.LCM Recode } +fontdef Schoolbook BoldItalic { NewCenturySchlbk-BoldItalic NCS-BdIt LtLatin1.LCM Recode } +fontdef Schoolbook Italic { NewCenturySchlbk-Italic NCS-It LtLatin1.LCM Recode } +fontdef Schoolbook Roman { NewCenturySchlbk-Roman NCS-Rm LtLatin1.LCM Recode } + + +fontdef Palatino Base { Palatino-Roman Pa-Rm LtLatin1.LCM Recode } +fontdef Palatino Slope { Palatino-Italic Pa-It LtLatin1.LCM Recode } +fontdef Palatino Bold { Palatino-Bold Pa-Bd LtLatin1.LCM Recode } +fontdef Palatino BoldSlope { Palatino-BoldItalic Pa-BdIt LtLatin1.LCM Recode } + +fontdef Palatino Bold { Palatino-Bold Pa-Bd LtLatin1.LCM Recode } +fontdef Palatino BoldItalic { Palatino-BoldItalic Pa-BdIt LtLatin1.LCM Recode } +fontdef Palatino BoldItalicOsF { Palatino-BoldItalicOsF Pa-BdItF LtLatin1.LCM Recode } +fontdef Palatino BoldOsF { Palatino-BoldOsF Pa-BdF LtLatin1.LCM Recode } +fontdef Palatino Italic { Palatino-Italic Pa-It LtLatin1.LCM Recode } +fontdef Palatino ItalicOsF { Palatino-ItalicOsF Pa-ItF LtLatin1.LCM Recode } +fontdef Palatino Roman { Palatino-Roman Pa-Rm LtLatin1.LCM Recode } +fontdef Palatino SC { Palatino-SC Pa-SC LtLatin1.LCM Recode } + + +fontdef Symbol Base { Symbol Symbol Symb.LCM NoRecode } +fontdef Symbol Slope { Symbol Symbol Symb.LCM NoRecode } +fontdef Symbol Bold { Symbol Symbol Symb.LCM NoRecode } +fontdef Symbol BoldSlope { Symbol Symbol Symb.LCM NoRecode } + + +fontdef Times Base { Times-Roman Ti-Rm LtLatin1.LCM Recode } +fontdef Times Slope { Times-Italic Ti-It LtLatin1.LCM Recode } +fontdef Times Bold { Times-Bold Ti-Bd LtLatin1.LCM Recode } +fontdef Times BoldSlope { Times-BoldItalic Ti-BdIt LtLatin1.LCM Recode } + +fontdef Times Bold { Times-Bold Ti-Bd LtLatin1.LCM Recode } +fontdef Times BoldItalic { Times-BoldItalic Ti-BdIt LtLatin1.LCM Recode } +fontdef Times BoldItalicOsF { Times-BoldItalicOsF Ti-BdItF LtLatin1.LCM Recode } +fontdef Times BoldSC { Times-BoldSC Ti-BdSC LtLatin1.LCM Recode } +fontdef Times ExtraBold { Times-ExtraBold Ti-ExBd LtLatin1.LCM Recode } +fontdef Times Italic { Times-Italic Ti-It LtLatin1.LCM Recode } +fontdef Times ItalicOsF { Times-ItalicOsF Ti-ItF LtLatin1.LCM Recode } +fontdef Times Roman { Times-Roman Ti-Rm LtLatin1.LCM Recode } +fontdef Times RomanSC { Times-RomanSC Ti-RmSC LtLatin1.LCM Recode } +fontdef Times Semibold { Times-Semibold Ti-Sm LtLatin1.LCM Recode } +fontdef Times SemiboldItalic { Times-SemiboldItalic Ti-SmIt LtLatin1.LCM Recode } + + +fontdef Chancery Base { ZapfChancery-Roman ZC-Rm LtLatin1.LCM Recode } +fontdef Chancery Slope { ZapfChancery-Italic ZC-It LtLatin1.LCM Recode } +fontdef Chancery Bold { ZapfChancery-Bold ZC-Bd LtLatin1.LCM Recode } +fontdef Chancery BoldSlope { ZapfChancery-MediumItalic ZC-MdIt LtLatin1.LCM Recode } + +fontdef Chancery Roman { ZapfChancery-Roman ZC-Rm LtLatin1.LCM Recode } +fontdef Chancery Bold { ZapfChancery-Bold ZC-Bd LtLatin1.LCM Recode } +fontdef Chancery Italic { ZapfChancery-Italic ZC-It LtLatin1.LCM Recode } +fontdef Chancery Light { ZapfChancery-Light ZC-Lt LtLatin1.LCM Recode } +fontdef Chancery Demi { ZapfChancery-Demi ZC-Dm LtLatin1.LCM Recode } +fontdef Chancery LightItalic { ZapfChancery-LightItalic ZC-LtIt LtLatin1.LCM Recode } +fontdef Chancery MediumItalic { ZapfChancery-MediumItalic ZC-MdIt LtLatin1.LCM Recode } + + +fontdef Dingbats Base { ZapfDingbats ZD Ding.LCM NoRecode } +fontdef Dingbats Slope { ZapfDingbats ZD Ding.LCM NoRecode } +fontdef Dingbats Bold { ZapfDingbats ZD Ding.LCM NoRecode } +fontdef Dingbats BoldSlope { ZapfDingbats ZD Ding.LCM NoRecode } + diff --git a/include/graph b/include/graph new file mode 100644 index 0000000..f346317 --- /dev/null +++ b/include/graph @@ -0,0 +1,27 @@ +############################################################################### +# # +# Lout setup file for graph drawing # +# # +# Jeffrey H. Kingston # +# 5 February 1999 # +# # +############################################################################### + + +############################################################################### +# # +# The @SysInclude { graphf } line # +# # +# This line causes Lout to read the definitions for graphs, and should # +# not be touched. # +# # +############################################################################### + +@SysInclude { graphf } + + +############################################################################### +# # +# This package does not offer default options that can be changed. # +# # +############################################################################### diff --git a/include/graphf b/include/graphf new file mode 100644 index 0000000..dfd69df --- /dev/null +++ b/include/graphf @@ -0,0 +1,1084 @@ + +############################################################################### +# # +# Lout @Graph package for drawing graphs (Version 1.0) # +# # +# Version 1.0 by Jeffrey H. Kingston, December 1993. # +# # +# This package draws graphs, the statistical kind not the graph-theoretical # +# kind. See the User's Guide (Advanced Graphics) for user info. # +# # +############################################################################### + +@SysPrependGraphic { graphf.lpg } +@SysInclude { graphf.etc } + +def @GraphObj + left p + named margin { 0c } + named adj { 0 0 } + right x +{ + @BackEnd @Case { + PostScript @Yield { + @Null & # kills previous white space + @HContract @VContract { + //0io ||0io @HContract @VContract + { p "trpoint translate" adj "translate gsave" // "grestore" } + @Graphic { //margin ||margin x ||margin //margin } + ||0io //0io + } + } +# VT: PDF does nothing + PDF @Yield { + @Null & # kills previous white space + @HContract @VContract { + //0io ||0io @HContract @VContract + { "% @GraphObj UNIMPLEMENTED" } + @Graphic { //margin ||margin x ||margin //margin } + ||0io //0io + } + } + } +} + +def @GraphCross + named symbolsize + named cm left x { x"c" } + named in left x { x"i" } + named em left x { x"m" } + named pt left x { x"p" } + named ft left x { x"f" } + named sp left x { x"s" } + named vs left x { x"v" } + { 0.15 ft } +{ + @BackEnd @Case { + + PostScript @Yield { + @HContract @VContract + { "newpath 0 0 moveto xsize ysize lineto 0 ysize moveto" + "xsize 0 lineto [] 0 setdash stroke" + } + @Graphic + {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High} + } + + PDF @Yield { + @HContract @VContract + {"n [] 0 d 0 0 m __xsize __ysize l 0 __ysize m __xsize 0 l S"} # uses S because PostScript version does NOT use closepath + @Graphic + {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High} + } + + } +} + +def @GraphPlus + named symbolsize + named cm left x { x"c" } + named in left x { x"i" } + named em left x { x"m" } + named pt left x { x"p" } + named ft left x { x"f" } + named sp left x { x"s" } + named vs left x { x"v" } + { 0.15 ft } +{ + @BackEnd @Case { + + PostScript @Yield { + @HContract @VContract + { "newpath xmark 0 moveto xmark ysize lineto 0 ymark moveto" + "xsize ymark lineto [] 0 setdash stroke" + } + @Graphic + {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High} + } + + PDF @Yield { + @HContract @VContract + {"n [] 0 d __xmark 0 m __xmark __ysize l 0 __ymark m __xsize __ymark l S"} # uses S because PostScript version does NOT use closepath + @Graphic + {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High} + } + + } +} + +def @GraphSquare + named symbolsize + named cm left x { x"c" } + named in left x { x"i" } + named em left x { x"m" } + named pt left x { x"p" } + named ft left x { x"f" } + named sp left x { x"s" } + named vs left x { x"v" } + { 0.15 ft } +{ + @BackEnd @Case { + + PostScript @Yield { + @HContract @VContract + { "newpath 0 0 moveto xsize 0 lineto xsize ysize lineto" + "0 ysize lineto closepath [] 0 setdash stroke" + } + @Graphic + {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High} + } + + PDF @Yield { + @HContract @VContract + {"n [] 0 d 0 0 __xsize __ysize re s"} + @Graphic + {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High} + } + + } +} + +def @GraphFilledSquare + named symbolsize + named cm left x { x"c" } + named in left x { x"i" } + named em left x { x"m" } + named pt left x { x"p" } + named ft left x { x"f" } + named sp left x { x"s" } + named vs left x { x"v" } + { 0.15 ft } +{ + @BackEnd @Case { + + PostScript @Yield { + @HContract @VContract + { "newpath 0 0 moveto xsize 0 lineto xsize ysize lineto" + "0 ysize lineto closepath gsave [] 0 setdash stroke grestore fill" + } + @Graphic + {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High} + } + + PDF @Yield { + @HContract @VContract + {"n [] 0 d 0 0 __xsize __ysize re b"} + @Graphic + {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High} + } + + } +} + +def @GraphDiamond + named symbolsize + named cm left x { x"c" } + named in left x { x"i" } + named em left x { x"m" } + named pt left x { x"p" } + named ft left x { x"f" } + named sp left x { x"s" } + named vs left x { x"v" } + { 0.15 ft } +{ + @BackEnd @Case { + + PostScript @Yield { + @HContract @VContract + { "newpath 0 ymark moveto xmark 0 lineto xsize ymark lineto" + "xmark ysize lineto closepath [] 0 setdash stroke" + } + @Graphic + {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High} + } + + PDF @Yield { + @HContract @VContract + {"n [] 0 d 0 __ymark m __xmark 0 l __xsize __ymark l __xmark __ysize l s"} + @Graphic + {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High} + } + + } +} + +def @GraphFilledDiamond + named symbolsize + named cm left x { x"c" } + named in left x { x"i" } + named em left x { x"m" } + named pt left x { x"p" } + named ft left x { x"f" } + named sp left x { x"s" } + named vs left x { x"v" } + { 0.15 ft } +{ + @BackEnd @Case { + + PostScript @Yield { + @HContract @VContract + { "newpath 0 ymark moveto xmark 0 lineto xsize ymark lineto" + "xmark ysize lineto closepath gsave [] 0 setdash stroke grestore fill" + } + @Graphic + {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High} + } + + PDF @Yield { + @HContract @VContract + {"n [] 0 d 0 __ymark m __xmark 0 l __xsize __ymark l __xmark __ysize l b" + } + @Graphic + {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High} + } + + } +} + +def @GraphCircle + named symbolsize + named cm left x { x"c" } + named in left x { x"i" } + named em left x { x"m" } + named pt left x { x"p" } + named ft left x { x"f" } + named sp left x { x"s" } + named vs left x { x"v" } + { 0.15 ft } +{ + @BackEnd @Case { + + PostScript @Yield { + @HContract @VContract + { "newpath xmark ymark xmark 0 360 arc" + "[] 0 setdash stroke" + } + @Graphic + {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High} + } + + PDF @Yield { + @HContract @VContract +# +# draw a circle whose centre is at (xmark, ymark) and whose radius is xmark units; +# +# for curveto to work, we need to calculate the control points of the Bezier curve +# as well as move the pen to the correct initial point. The circle is drawn as two +# arcs of 180 degrees +# +# pt0 = (xmark + xmark, ymark) +# pt1 = (xmark + xmark, ymark + 4/3 * xmark) +# pt2 = (0, ymark + 4/3 * xmark) +# pt3 = (0, ymark) +# +# pt0 = (0, ymark) +# pt1 = (0, ymark - 4/3 * xmark) +# pt2 = (xmark + xmark, ymark - 4/3 * xmark) +# pt3 = (xmark + xmark, ymark) +# + {"n [] 0 d" + "__mul(2, __xmark) __ymark m" + "__mul(2, __xmark) __add(__ymark, __div(__mul(4, __xmark), 3))" # pt1 + "0 __add(__ymark, __div(__mul(4, __xmark), 3))" # pt2 + "0 __ymark c" # pt3 + + "0 __sub(__ymark, __div(__mul(4, __xmark), 3))" # pt1 + "__mul(2, __xmark) __sub(__ymark, __div(__mul(4, __xmark), 3))" # pt2 + "__mul(2, __xmark) __ymark c S" # pt3 + } + @Graphic + {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High} + } + + } +} + +def @GraphFilledCircle + named symbolsize + named cm left x { x"c" } + named in left x { x"i" } + named em left x { x"m" } + named pt left x { x"p" } + named ft left x { x"f" } + named sp left x { x"s" } + named vs left x { x"v" } + { 0.15 ft } +{ + @BackEnd @Case { + PostScript @Yield { + @HContract @VContract + { "newpath xmark ymark xmark 0 360 arc" + "gsave [] 0 setdash stroke grestore fill" + } + @Graphic + {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High} + } + + PDF @Yield { + @HContract @VContract +# +# draw a filled circle whose centre is at (xmark, ymark) and whose radius is xmark units; +# +# for curveto to work, we need to calculate the control points of the Bezier curve +# as well as move the pen to the correct initial point. The circle is drawn as two +# arcs of 180 degrees +# +# pt0 = (xmark + xmark, ymark) +# pt1 = (xmark + xmark, ymark + 4/3 * xmark) +# pt2 = (0, ymark + 4/3 * xmark) +# pt3 = (0, ymark) +# +# pt0 = (0, ymark) +# pt1 = (0, ymark - 4/3 * xmark) +# pt2 = (xmark + xmark, ymark - 4/3 * xmark) +# pt3 = (xmark + xmark, ymark) +# +# Note: this is not a strict translation because there is a setdash bracketed by +# gsave/grestore in the above PostScript but there is no closepath before it; +# but in PDF, it is not possible to execute a setdash within a path definition. +# + {"n [] 0 d" + "__mul(2, __xmark) __ymark m" + "__mul(2, __xmark) __add(__ymark, __div(__mul(4, __xmark), 3))" # pt1 + "0 __add(__ymark, __div(__mul(4, __xmark), 3))" # pt2 + "0 __ymark c" # pt3 + + "0 __sub(__ymark, __div(__mul(4, __xmark), 3))" # pt1 + "__mul(2, __xmark) __sub(__ymark, __div(__mul(4, __xmark), 3))" # pt2 + "__mul(2, __xmark) __ymark c b" # pt3 + } + @Graphic + {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High} + } + + } +} + +def @GraphTriangle + named symbolsize + named cm left x { x"c" } + named in left x { x"i" } + named em left x { x"m" } + named pt left x { x"p" } + named ft left x { x"f" } + named sp left x { x"s" } + named vs left x { x"v" } + { 0.15 ft } +{ + @BackEnd @Case { + + PostScript @Yield { + @HContract @VContract + { "newpath 0 0 moveto xsize 0 lineto xmark ysize 1.25 mul lineto" + "closepath [] 0 setdash stroke" + } + @Graphic + {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High} + } + + PDF @Yield { + @HContract @VContract + {"n [] 0 d 0 0 m __xsize 0 l __xmark __mul(__ysize, 1.25) l s"} + @Graphic + {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High} + } + + } +} + +def @GraphFilledTriangle + named symbolsize + named cm left x { x"c" } + named in left x { x"i" } + named em left x { x"m" } + named pt left x { x"p" } + named ft left x { x"f" } + named sp left x { x"s" } + named vs left x { x"v" } + { 0.15 ft } +{ + @BackEnd @Case { + + PostScript @Yield { + @HContract @VContract + { "newpath 0 0 moveto xsize 0 lineto xmark ysize 1.25 mul lineto" + "closepath gsave [] 0 setdash stroke grestore fill" + } + @Graphic + {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High} + } + + PDF @Yield { + @HContract @VContract + {"n [] 0 d 0 0 m __xsize 0 l __xmark __mul(__ysize, 1.25) l h b"} + @Graphic + {symbolsize @High symbolsize @Wide ^| symbolsize @Wide ^/ symbolsize @High} + } + + } +} + +def @GraphNoLine + named dashlength { 0.2 ft } + named linewidth { "currentlinewidth" } + named length + named cm left x { x"c" } + named in left x { x"i" } + named em left x { x"m" } + named pt left x { x"p" } + named ft left x { x"f" } + named sp left x { x"s" } + named vs left x { x"v" } + { 1.0 ft } +{ + length @Wide {} +} + +def @GraphSolid + named dashlength { 0.2 ft } + named linewidth { "currentlinewidth" } + named length + named cm left x { x"c" } + named in left x { x"i" } + named em left x { x"m" } + named pt left x { x"p" } + named ft left x { x"f" } + named sp left x { x"s" } + named vs left x { x"v" } + { 1.0 ft } +{ + @BackEnd @Case { + PostScript @Yield { + @HContract @VContract + { "xsize 0 lgraphdict begin newpath 0 0 moveto lineto" + "/linewidth" linewidth "def xsize" dashlength "solid end" + } @Graphic { length @Wide } + } +# VT: PDF does nothing + PDF @Yield { + @HContract @VContract + { "% @GraphSolid UNIMPLEMENTED" } @Graphic { length @Wide } + } + } +} + +def @GraphDashed + named dashlength { 0.2 ft } + named linewidth { "currentlinewidth" } + named length + named cm left x { x"c" } + named in left x { x"i" } + named em left x { x"m" } + named pt left x { x"p" } + named ft left x { x"f" } + named sp left x { x"s" } + named vs left x { x"v" } + { 1.0 ft } +{ + @BackEnd @Case { + PostScript @Yield { + @HContract @VContract + { "xsize 0 lgraphdict begin newpath 0 0 moveto lineto" + "/linewidth" linewidth "def xsize" dashlength "dashed end" + } @Graphic { length @Wide } + } +# VT: PDF does nothing + PDF @Yield { + @HContract @VContract + { "% @GraphDashed UNIMPLEMENTED" } @Graphic { length @Wide } + } + } +} + +def @GraphDotted + named dashlength { 0.2 ft } + named linewidth { "currentlinewidth" } + named length + named cm left x { x"c" } + named in left x { x"i" } + named em left x { x"m" } + named pt left x { x"p" } + named ft left x { x"f" } + named sp left x { x"s" } + named vs left x { x"v" } + { 1.0 ft } +{ + @BackEnd @Case { + PostScript @Yield { + @HContract @VContract + { "xsize 0 lgraphdict begin newpath 0 0 moveto lineto" + "/linewidth" linewidth "def xsize" dashlength "dotted end" + } @Graphic { length @Wide } + } +# VT: PDF does nothing + PDF @Yield { + @HContract @VContract + { "% @GraphDotted UNIMPLEMENTED" } @Graphic { length @Wide } + } + } +} + + +export @Data +def @Graph + named save { no } + named style { frame } + named width + named cm left x { x"c" } + named in left x { x"i" } + named em left x { x"m" } + named pt left x { x"p" } + named ft left x { x"f" } + named sp left x { x"s" } + named vs left x { x"v" } + { 6.0 cm } + named height + named cm left x { x"c" } + named in left x { x"i" } + named em left x { x"m" } + named pt left x { x"p" } + named ft left x { x"f" } + named sp left x { x"s" } + named vs left x { x"v" } + { 4.0 cm } + named xextra { "none" } + named yextra { "none" } + named xdecreasing { no } + named ydecreasing { no } + named leftcaption { } + named rightcaption { } + named abovecaption { } + named belowcaption { } + named leftgap + named cm left x { x"c" } + named in left x { x"i" } + named em left x { x"m" } + named pt left x { x"p" } + named ft left x { x"f" } + named sp left x { x"s" } + named vs left x { x"v" } + { 1.5 cm } + named rightgap + named cm left x { x"c" } + named in left x { x"i" } + named em left x { x"m" } + named pt left x { x"p" } + named ft left x { x"f" } + named sp left x { x"s" } + named vs left x { x"v" } + { 0.5 cm } + named abovegap + named cm left x { x"c" } + named in left x { x"i" } + named em left x { x"m" } + named pt left x { x"p" } + named ft left x { x"f" } + named sp left x { x"s" } + named vs left x { x"v" } + { 0.5 cm } + named belowgap + named cm left x { x"c" } + named in left x { x"i" } + named em left x { x"m" } + named pt left x { x"p" } + named ft left x { x"f" } + named sp left x { x"s" } + named vs left x { x"v" } + { 0.5 cm } + named hidecaptions { yes } + named objects + named @NW + import @GraphMath named at { 0 0 } + named margin + named cm left x { x"c" } + named in left x { x"i" } + named em left x { x"m" } + named pt left x { x"p" } + named ft left x { x"f" } + named sp left x { x"s" } + named vs left x { x"v" } + { 0.3 ft } + right x + { at @GraphObj adj { "xsize neg ysize" } margin { margin } x } + named @SW + import @GraphMath named at { 0 0 } + named margin + named cm left x { x"c" } + named in left x { x"i" } + named em left x { x"m" } + named pt left x { x"p" } + named ft left x { x"f" } + named sp left x { x"s" } + named vs left x { x"v" } + { 0.3 ft } + right x + { at @GraphObj adj { "xsize neg 0" } margin { margin } x } + named @SE + import @GraphMath named at { 0 0 } + named margin + named cm left x { x"c" } + named in left x { x"i" } + named em left x { x"m" } + named pt left x { x"p" } + named ft left x { x"f" } + named sp left x { x"s" } + named vs left x { x"v" } + { 0.3 ft } + right x + { at @GraphObj adj { "0 0" } margin { margin } x } + named @NE + import @GraphMath named at { 0 0 } + named margin + named cm left x { x"c" } + named in left x { x"i" } + named em left x { x"m" } + named pt left x { x"p" } + named ft left x { x"f" } + named sp left x { x"s" } + named vs left x { x"v" } + { 0.3 ft } + right x + { at @GraphObj adj { "0 ysize" } margin { margin } x } + named @W + import @GraphMath named at { 0 0 } + named margin + named cm left x { x"c" } + named in left x { x"i" } + named em left x { x"m" } + named pt left x { x"p" } + named ft left x { x"f" } + named sp left x { x"s" } + named vs left x { x"v" } + { 0.3 ft } + right x + { at @GraphObj adj { "xsize neg ysize 2 div" } margin { margin } x } + named @S + import @GraphMath named at { 0 0 } + named margin + named cm left x { x"c" } + named in left x { x"i" } + named em left x { x"m" } + named pt left x { x"p" } + named ft left x { x"f" } + named sp left x { x"s" } + named vs left x { x"v" } + { 0.3 ft } + right x + { at @GraphObj adj { "xsize neg 2 div 0" } margin { margin } x } + named @E + import @GraphMath named at { 0 0 } + named margin + named cm left x { x"c" } + named in left x { x"i" } + named em left x { x"m" } + named pt left x { x"p" } + named ft left x { x"f" } + named sp left x { x"s" } + named vs left x { x"v" } + { 0.3 ft } + right x + { at @GraphObj adj { "0 ysize 2 div" } margin { margin } x } + named @N + import @GraphMath named at { 0 0 } + named margin + named cm left x { x"c" } + named in left x { x"i" } + named em left x { x"m" } + named pt left x { x"p" } + named ft left x { x"f" } + named sp left x { x"s" } + named vs left x { x"v" } + { 0.3 ft } + right x + { at @GraphObj adj { "xsize neg 2 div ysize" } margin { margin } x } + named @CTR + import @GraphMath named at { 0 0 } + named margin + named cm left x { x"c" } + named in left x { x"i" } + named em left x { x"m" } + named pt left x { x"p" } + named ft left x { x"f" } + named sp left x { x"s" } + named vs left x { x"v" } + { 0.3 ft } + right x + { at @GraphObj adj { "xsize neg 2 div ysize 2 div" } margin {margin} x } + {} + named xorigin named none { "false" } { none } + named yorigin named none { "false" } { none } + named xlog named none { "0" } { none } + named ylog named none { "0" } { none } + named points named none { "none" } { none } + named pairs named none { "none" } { none } + named colour named none { "none" } { none } + named color named none { "none" } { none } + named paint named none { "none" } { none } + named xmin named none { "false" } { none } + named xmax named none { "false" } { none } + named ymin named none { "false" } { none } + named ymax named none { "false" } { none } + named xticksep named none { "0" } { none } + named yticksep named none { "0" } { none } + named rticksep named none { "0" } { none } + import @GraphMath named xticks + named none { "false" } + named auto { "false" } + named "@" { " lgen" } + named "^" { "^" } + { false } + import @GraphMath named yticks + named none { "false" } + named auto { "false" } + named "@" { " lgen" } + named "^" { "^" } + { false } + import @GraphMath named rticks + named none { "false" } + named auto { "false" } + named "@" { " lgen" } + named "^" { "^" } + { } + named xticklength { 0.5 ft } + named yticklength { 0.5 ft } + named rticklength { 0.5 ft } + named dataformat { xandy } + named dashlength { 0.2 ft } + named linewidth { "currentlinewidth" } + named symbolsize { 0.15 ft } + body @Body +@Begin + + def @Above + { + abovecaption @Case { + "" @Yield {} + else @Yield @OneCol { ||0.5rt clines @Break abovecaption || //abovegap } + } + } + + def @Below + { + belowcaption @Case { + "" @Yield {} + else @Yield @OneCol { //belowgap ||0.5rt clines @Break belowcaption || } + } + } + + def @Left + { + leftcaption @Case { + "" @Yield {} + else @Yield @OneCol @OneRow { + { //0.5rt @OneRow clines @Break leftcaption // } ^||leftgap } + } + } + + def @Right + { + rightcaption @Case { + "" @Yield {} + else @Yield @OneCol @OneRow { + ||rightgap { //0.5rt @OneRow lines @Break rightcaption // } } + } + } + + def @ZeroWidth + right x + { + hidecaptions @Case { + { No no } @Yield x + { Yes yes } @Yield @OneCol { ||0io x ||0io } + } + } + + def @AddCaptions right x + { + def belowextra + { + xticks @Case { + "" @Yield { 0i } + else @Yield { 1.7f } + } + } + + @HContract @VContract + { + | @Above | + / @ZeroWidth @Left | &0.5rt x | @ZeroWidth @Right + /belowextra | @Below | + } + } + + export pi e sqrt abs ceiling floor truncate round cos sin atan exp log rand + "*" "/" idiv mod "-" "-0" "-1" "-2" "-3" "-4" "-5" "-6" "-7" "-8" + "-9" "-." "+" "=" "!=" "<" "<=" ">" ">=" not and xor or + if xloop yloop zloop + + def @Data + named points named none { "none" } { points } + named pairs named none { "none" } { pairs } + named colour named none { "none" } { colour } + named color named none { "none" } { color } + named paint named none { "none" } { paint } + named dashlength { dashlength } + named linewidth { linewidth } + named symbolsize { symbolsize } + named dataformat { dataformat } + body data + { + def pi { "3.14159" } + def e { "2.71828" } + def sqrt precedence 40 right y { y "sqrt" } + def abs precedence 40 right y { y "abs" } + def ceiling precedence 40 right y { y "ceiling" } + def floor precedence 40 right y { y "floor" } + def truncate precedence 40 right y { y "truncate" } + def round precedence 40 right y { y "round" } + def cos precedence 40 right y { y "cos" } + def sin precedence 40 right y { y "sin" } + def atan precedence 39 left x right y { x y "atan" } + def exp precedence 38 left x right y { x y "exp" } + def log precedence 37 left x right y { x y "dolog" } + def rand precedence 36 left x right y { x y "dorand" } + def "*" precedence 35 left x right y { x y "mul" } + def "/" precedence 34 left x right y { x y "div" } + def idiv precedence 34 left x right y { x y "idiv" } + def mod precedence 34 left x right y { x y "mod" } + def "-" precedence 33 left x right y + { x @Case { "" @Yield {y "neg"} else @Yield { x y "sub" } } } + def "-0" { "-0" } + def "-1" { "-1" } + def "-2" { "-2" } + def "-3" { "-3" } + def "-4" { "-4" } + def "-5" { "-5" } + def "-6" { "-6" } + def "-7" { "-7" } + def "-8" { "-8" } + def "-9" { "-9" } + def "-." { "-." } + def "+" precedence 32 left x right y + { x @Case { "" @Yield { y } else @Yield { x y "add" } } } + def "=" precedence 30 left x right y { x y "eq" } + def "!=" precedence 30 left x right y { x y "ne" } + def "<" precedence 30 left x right y { x y "lt" } + def "<=" precedence 30 left x right y { x y "le" } + def ">" precedence 30 left x right y { x y "gt" } + def ">=" precedence 30 left x right y { x y "ge" } + def not precedence 25 right y { y "not" } + def and precedence 24 left x right y { x y "and" } + def xor precedence 23 left x right y { x y "xor" } + def or precedence 22 left x right y { x y "or" } + def if + named cond { true } + named then {} + named else {} + { cond "{" then "} {" else "} ifelse" } + def xloop + named from { 0 } + named to { 0 } + named by { 1 } + named do named x { "xval" } {} + { from by to "{ /xval exch def" do "} for" } + def yloop + named from { 0 } + named to { 0 } + named by { 1 } + named do named y { "yval" } {} + { from by to "{ /yval exch def" do "} for" } + def zloop + named from { 0 } + named to { 0 } + named by { 1 } + named do named z { "zval" } {} + { from by to "{ /zval exch def" do "} for" } + + def @IfPt + left no + right yes + { + points @Case { + none @Yield no + else @Yield yes + } + } + + def @Points + { + points @Case { + none @Yield "" + plus @Yield "plus" + cross @Yield "cross" + square @Yield "square" + filledsquare @Yield "filledsquare" + diamond @Yield "diamond" + filleddiamond @Yield "filleddiamond" + circle @Yield "circle" + filledcircle @Yield "filledcircle" + triangle @Yield "triangle" + filledtriangle @Yield "filledtriangle" + } + } + + def @Pairs + { + pairs @Case { + none @Yield {} + solid @Yield { "linesetup solid" @IfPt "ilinesetup solid" } + dashed @Yield { "linesetup cdashed" @IfPt "ilinesetup dashed" } + dotted @Yield { "linesetup dotted" @IfPt "ilinesetup dotted" } + surfacexhisto @Yield { "surfacexhisto" } + surfaceyhisto @Yield { "surfaceyhisto" } + xhisto @Yield { "xhisto" } + yhisto @Yield { "yhisto" } + filledxhisto @Yield { "filledxhisto" } + filledyhisto @Yield { "filledyhisto" } + } + } + + def @DataFormat + { + dataformat @Case { + xandy @Yield xandy + yonly @Yield yonly + xonly @Yield xonly + } + } + + def @Col + { + { colour @Case { "none" @Yield color else @Yield colour } } @Case { + none @Yield { } + nochange @Yield { } + 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.7 0.7 0.7 setrgbcolor } + darkgrey @Yield { 0.2 0.2 0.2 setrgbcolor } + grey @Yield { 0.5 0.5 0.5 setrgbcolor } + lightgrey @Yield { 0.7 0.7 0.7 setrgbcolor } + black @Yield { 0.0 0.0 0.0 setrgbcolor } + white @Yield { 1.0 1.0 1.0 setrgbcolor } + } + } + + def @Paint + { + paint @Case { + { none no No } @Yield "false" + { yes Yes } @Yield "true" + } + } + + "[ [" data "]" dataformat + "{" @Points "}" + "{" @Pairs "}" + "{ /dashlength" dashlength "def" + " /linewidth" linewidth "def" @Col + " /symbolsize" symbolsize "def }" + "{" @Paint "}" + "]" + } + + def @Style + { + style @Case { + frame @Yield { "framestyle" } + none @Yield { "nonestyle" } + axes @Yield { "axesstyle" } + } + } + + def @XExtra + { + xextra @Case { + "none" @Yield { + style @Case { + frame @Yield { "0.5 cm" } + none @Yield { "0" } + axes @Yield { "0" } + } + } + else @Yield xextra + } + } + + def @YExtra + { + yextra @Case { + "none" @Yield { + style @Case { + frame @Yield { "0.5 cm" } + none @Yield { "0" } + axes @Yield { "0" } + } + } + else @Yield yextra + } + } + + def @XDecreasing + { + xdecreasing @Case { + { No no } @Yield "false" + { Yes yes } @Yield "true" + } + } + + def @YDecreasing + { + ydecreasing @Case { + { No no } @Yield "false" + { Yes yes } @Yield "true" + } + } + + @AddCaptions width @Wide height @High + @BackEnd @Case { + PostScript @Yield { + { + "grestore" + save @Case { { Yes yes } @Yield "save" else @Yield {} } + "gsave xsize ysize lgraphdict begin /ysize exch def /xsize exch def" + "/alldata [" @Body "] def" + xticksep "[" xticks "] 0 alldata" xmin xmax xlog + @XExtra @XDecreasing xorigin xticklength "xset" + yticksep "[" yticks "] 1 alldata" ymin ymax ylog + @YExtra @YDecreasing yorigin yticklength "yset" + + rticks @Case { + + "" @Yield "norset" + + else @Yield { + rticksep "[" rticks "] 1 alldata" ymin ymax ylog + @YExtra @YDecreasing yorigin rticklength "rset" + } + } + + "rundata" @Style // "end" + save @Case { { Yes yes } @Yield "restore" else @Yield {} } + } @Graphic { //1rt objects } + } + PDF @Yield { {"% @Graph UNIMPLEMENTED"} @Graphic { //1rt objects } } + } + +@End @Graph diff --git a/include/graphf.etc b/include/graphf.etc new file mode 100644 index 0000000..3e3a6cb --- /dev/null +++ b/include/graphf.etc @@ -0,0 +1,295 @@ + +############################################################################### +# # +# Lout @GraphMath package for @Graph (Version 1.1) # +# # +# Version 1.0 by Jeffrey H. Kingston, December 1993. # +# Version 1.1 by Jeffrey H. Kingston, October 1996. # +# # +# This package provides mathematics for the @Graph graph drawing package. # +# # +############################################################################### + +export + + "-0" "-1" "-2" "-3" "-4" "-5" "-6" "-7" "-8" "-9" "-." + pi e sqrt abs ceiling floor truncate round cos sin atan + exp log rand "*" "/" idiv mod "+" "-" + "=" "!=" "<" "<=" ">" ">=" not and xor or + if xloop yloop zloop + +def @GraphMath +{ + def "-0" { "-0" } + def "-1" { "-1" } + def "-2" { "-2" } + def "-3" { "-3" } + def "-4" { "-4" } + def "-5" { "-5" } + def "-6" { "-6" } + def "-7" { "-7" } + def "-8" { "-8" } + def "-9" { "-9" } + def "-." { "-." } + + def pi { "3.14159" } + + def e { "2.71828" } + + def sqrt + precedence 40 + right y + { + y "sqrt" + } + + def abs + precedence 40 + right y + { + y "abs" + } + + def ceiling + precedence 40 + right y + { + y "ceiling" + } + + def floor + precedence 40 + right y + { + y "floor" + } + + def truncate + precedence 40 + right y + { + y "truncate" + } + + def round + precedence 40 + right y + { + y "round" + } + + def cos + precedence 40 + right y + { + y "cos" + } + + def sin + precedence 40 + right y + { + y "sin" + } + + def atan + precedence 39 + left x + right y + { + x y "atan" + } + + def exp + precedence 38 + left x + right y + { + x y "exp" + } + + def log + precedence 37 + left x + right y + { + x y "dolog" + } + + def rand + precedence 36 + left x + right y + { + x y "dorand" + } + + def "*" + precedence 35 + left x + right y + { + x y "mul" + } + + def "/" + precedence 35 + left x + right y + { + x y "div" + } + + def "idiv" + precedence 34 + left x + right y + { + x y "idiv" + } + + def "mod" + precedence 34 + left x + right y + { + x y "mod" + } + + def "-" + precedence 33 + left x + right y + { + x @Case { + "" @Yield { y "neg" } + else @Yield { x y "sub" } + } + } + + def "+" + precedence 32 + left x + right y + { + x @Case { + "" @Yield { y } + else @Yield { x y "add" } + } + } + + def "=" + precedence 30 + left x + right y + { + x y "eq" + } + + def "!=" + precedence 30 + left x + right y + { + x y "ne" + } + + def "<" + precedence 30 + left x + right y + { + x y "lt" + } + + def "<=" + precedence 30 + left x + right y + { + x y "le" + } + + def ">" + precedence 30 + left x + right y + { + x y "gt" + } + + def ">=" + precedence 30 + left x + right y + { + x y "ge" + } + + def "not" + precedence 25 + right y + { + y "not" + } + + def "and" + precedence 24 + left x + right y + { + x y "and" + } + + def "xor" + precedence 23 + left x + right y + { + x y "xor" + } + + def "or" + precedence 22 + left x + right y + { + x y "or" + } + + def if + named cond { true } + named then {} + named else {} + { + cond "{" then "} {" else "} ifelse" + } + + def xloop + named from { 0 } + named to { 0 } + named by { 1 } + named do named x { "xval" } {} + { + from by to "{ /xval exch def" do "} for" + } + + def yloop + named from { 0 } + named to { 0 } + named by { 1 } + named do named y { "yval" } {} + { + from by to "{ /yval exch def" do "} for" + } + + def zloop + named from { 0 } + named to { 0 } + named by { 1 } + named do named z { "zval" } {} + { + from by to "{ /zval exch def" do "} for" + } + +} diff --git a/include/graphf.lpg b/include/graphf.lpg new file mode 100644 index 0000000..60447f0 --- /dev/null +++ b/include/graphf.lpg @@ -0,0 +1,768 @@ +%%BeginResource: procset LoutGraphPrependGraphic +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% PostScript @SysPrependGraphic file for @Graph (Version 1.0) % +% % +% Version 1.0 by Jeffrey H. Kingston, December 1993. % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +errordict begin + /handleerror + { + { /Times-Roman findfont 8 pt scalefont setfont + 0 setgray 4 pt 4 pt moveto + $error /errorname get + dup lgraphdict exch known + { lgraphdict exch get } + { 30 string cvs } ifelse + show + ( Command: ) show + $error /command get 30 string cvs show + } stopped {} if + showpage stop + } def +end + +/lgraphdict 200 dict def +lgraphdict begin + +% error messages +/dictfull (dictfull error) def +/dictstackoverflow (dictstackoverflow error) def +/execstackoverflow (execstackoverflow error: expression too complex?) def +/limitcheck (limitcheck error: graph too complex or too large?) def +/syntaxerror (syntaxerror error: syntax error in text of graph?) def +/typecheck (typecheck error: syntax error in text of graph?) def +/undefined (undefined error: unknown or misspelt symbol?) def +/rangecheck (rangecheck error: undefined expression (e.g. divide by zero)?) def +/VMError (VMError error: run out of memory?) def + +% random number between x and y inclusive: x y dorand num +/dorand { 1 index sub 1 add rand exch mod add } def + +% log to given base: base num dolog num +/dolog { ln exch ln div } def + +% maximum of two numbers: <num> <num> max <num> +/max { 2 copy gt { pop } { exch pop } ifelse } def + +% add two points: <point> <point> padd <point> +/padd { exch 3 1 roll add 3 1 roll add exch } def + +% subtract first point from second: <point> <point> psub <point> +/psub { 3 2 roll sub 3 1 roll exch sub exch } def + +% distance between two points: <point> <point> distance <length> +/distance { psub dup mul exch dup mul add sqrt } def + +% point at angle and distance: <point> <length> <angle> atangle <point> +/atangle { 2 copy cos mul 3 1 roll sin mul padd } def + +% angle from one point to another: <point> <point> angle <angle> +/angle { psub 2 copy 0 eq exch 0 eq and {pop} {exch atan} ifelse } def + + +% set up for line +% - linesetup <length> <dashlength> +/linesetup +{ newpath + xcurr ycurr trpoint xprev yprev trpoint + 4 copy moveto lineto distance dashlength +} def + +% set up for icon-avoiding line +% - ilinesetup <length> <dashlength> +/ilinesetup +{ newpath + xprev yprev trpoint xcurr ycurr trpoint 4 copy + 4 copy angle symbolsize 1.5 mul exch 4 2 roll pop pop atangle + 6 2 roll 4 2 roll + 4 copy angle symbolsize 1.5 mul exch 4 2 roll pop pop atangle + 4 copy moveto lineto distance dashlength +} def + + +% stroke a solid line: <length> <dashlength> solid - +/solid +{ pop pop [] 0 setdash linewidth setlinewidth stroke +} def + +% stroke a dashed line: <length> <dashlength> dashed - +/dashed +{ 2 copy 2 mul le 1 index 0 le or + { exch pop 1 pt max [ exch dup ] 0 setdash } + { dup [ exch 4 2 roll 2 copy div + 1 sub 2 div ceiling dup 4 1 roll + 1 add mul sub exch div ] 0 setdash + } ifelse linewidth setlinewidth stroke +} def + +% stroke a cdashed line: <length> <dashlength> cdashed - +/cdashed +{ 2 copy le 1 index 0 le or + { exch pop 1 pt max [ exch dup ] dup 0 get 2 div setdash } + { dup [ 4 2 roll exch 2 copy exch div + 2 div ceiling div 1 index sub + ] exch 2 div setdash + } ifelse linewidth setlinewidth stroke +} def + +% stroke a dotted line: <length> <dashlength> dotted - +/dotted +{ 2 copy le 1 index 0 le or + { exch pop 1 pt max [ exch 0 exch ] 0 setdash } + { 1 index exch div ceiling div 0.99999 mul + [ 0 3 2 roll ] 0 setdash + } ifelse gsave 1 setlinecap linewidth setlinewidth stroke grestore newpath +} def + +% stroke a noline line: <length> <dashlength> noline - +/noline +{ pop pop +} def + +% stroke a y histogram: - yhisto - +/yhisto +{ xprev yleft trpoint yextra sub moveto + xprev yprev trpoint lineto + xcurr yprev trpoint lineto + xcurr yleft trpoint yextra sub lineto + linewidth setlinewidth stroke +} def + +% stroke an x histogram: - xhisto - +/xhisto +{ xleft yprev trpoint exch xextra sub exch moveto + xcurr yprev trpoint lineto + xcurr ycurr trpoint lineto + xleft ycurr trpoint exch xextra sub exch lineto + linewidth setlinewidth stroke +} def + +% stroke a surface y histogram: - surfaceyhisto - +/surfaceyhisto +{ firstpair + { xprev yleft trpoint yextra sub moveto + xprev yprev trpoint lineto + } + { xprev yprev trpoint moveto + } ifelse + xcurr yprev trpoint lineto + lastpair + { xcurr yleft trpoint yextra sub lineto + } + { xcurr ycurr trpoint lineto + } ifelse + linewidth setlinewidth stroke +} def + +% stroke a surface x histogram: - surfacexhisto - +/surfacexhisto +{ firstpair + { xleft yprev trpoint exch xextra sub exch moveto + } + { xprev yprev trpoint moveto + } ifelse + xcurr yprev trpoint lineto + xcurr ycurr trpoint lineto + lastpair + { xleft ycurr trpoint exch xextra sub exch lineto + } if + linewidth setlinewidth stroke +} def + +% stroke a filled y histogram: - filledyhisto - +/filledyhisto +{ + linewidth setlinewidth + xprev yleft trpoint exch currentlinewidth 2 div add exch yextra sub moveto + xprev yprev trpoint exch currentlinewidth 2 div add exch lineto + xcurr yprev trpoint exch currentlinewidth 2 div sub exch lineto + xcurr yleft trpoint exch currentlinewidth 2 div sub exch yextra sub lineto + closepath fill +} def + +% stroke a filled x histogram: - filledxhisto - +/filledxhisto +{ + linewidth setlinewidth + xleft yprev trpoint currentlinewidth 2 div add exch xextra sub exch moveto + xcurr yprev trpoint currentlinewidth 2 div add lineto + xcurr ycurr trpoint currentlinewidth 2 div sub lineto + xleft ycurr trpoint currentlinewidth 2 div sub exch xextra sub exch lineto + closepath fill +} def + + +% cross: show a small cross +/cross +{ newpath + xcurr ycurr trpoint moveto + symbolsize neg symbolsize neg rmoveto + symbolsize 2 mul symbolsize 2 mul rlineto + 0 symbolsize -2 mul rmoveto + symbolsize -2 mul symbolsize 2 mul rlineto + [] 0 setdash stroke +} def + +% plus: show a small plus +/plus +{ newpath + xcurr ycurr trpoint moveto + symbolsize neg 0 rmoveto + symbolsize 2 mul 0 rlineto + symbolsize neg symbolsize neg rmoveto + 0 symbolsize 2 mul rlineto + [] 0 setdash stroke +} def + +% square: show a small square +/square +{ newpath + xcurr ycurr trpoint moveto + symbolsize neg symbolsize neg rmoveto + symbolsize 2 mul 0 rlineto + 0 symbolsize 2 mul rlineto + symbolsize -2 mul 0 rlineto + closepath [] 0 setdash stroke +} def + +% filledsquare: show a small filled square +/filledsquare +{ newpath + xcurr ycurr trpoint moveto + symbolsize neg symbolsize neg rmoveto + symbolsize 2 mul 0 rlineto + 0 symbolsize 2 mul rlineto + symbolsize -2 mul 0 rlineto + closepath gsave [] 0 setdash stroke grestore fill +} def + +% diamond: show a small diamond +/diamond +{ newpath + xcurr ycurr trpoint moveto + symbolsize neg 0 rmoveto + symbolsize symbolsize neg rlineto + symbolsize symbolsize rlineto + symbolsize neg symbolsize rlineto + closepath [] 0 setdash stroke +} def + +% filleddiamond: show a small filled diamond +/filleddiamond +{ newpath + xcurr ycurr trpoint moveto + symbolsize neg 0 rmoveto + symbolsize symbolsize neg rlineto + symbolsize symbolsize rlineto + symbolsize neg symbolsize rlineto + closepath gsave [] 0 setdash stroke grestore fill +} def + +% circle: show a small circle +/circle +{ newpath + xcurr ycurr trpoint symbolsize 0 360 arc [] 0 setdash stroke +} def + +% filledcircle: show a small filled circle +/filledcircle +{ newpath + xcurr ycurr trpoint symbolsize 0 360 arc gsave [] 0 setdash stroke grestore fill +} def + +% triangle: show a small triangle +/triangle +{ newpath + xcurr ycurr trpoint moveto + 0 symbolsize 1.5 mul rmoveto + symbolsize neg symbolsize -2.5 mul rlineto + symbolsize 2 mul 0 rlineto + closepath [] 0 setdash stroke +} def + +% filledtriangle: show a small filled triangle +/filledtriangle +{ newpath + xcurr ycurr trpoint moveto + 0 symbolsize 1.5 mul rmoveto + symbolsize neg symbolsize -2.5 mul rlineto + symbolsize 2 mul 0 rlineto + closepath gsave [] 0 setdash stroke grestore fill +} def + + +%plog: like log only with a base, and protected from failing if <= 0 +% base x plog res +/plog { dup 0 le { pop pop 0 } { ln exch ln div } ifelse } def + +% xtr: transform one x value logarithmically if xlog > 1 +% <num> xtr <num> +/xtr +{ xlog 1 gt + { xlog exch plog + } if +} def + +% ytr: transform one y value logarithmically if ylog > 1 +% <num> ytr <num> +/ytr +{ ylog 1 gt + { ylog exch plog + } if +} def + +% % trpoint: transform (x, y) in graph space into (x', y') in print space +% % x y trpoint x' y' +% /trpoint +% { exch xtr trxmin sub trxmax trxmin sub div xwidth mul xextra add +% exch ytr trymin sub trymax trymin sub div ywidth mul yextra add +% } def + + +% trpoint: transform (x, y) in graph space into (x', y') in print space +% x y trpoint x' y' +/trpoint +{ exch xtr xdecr { trxmax exch sub } { trxmin sub } ifelse + trxmax trxmin sub div xwidth mul xextra add + + exch ytr ydecr { trymax exch sub } { trymin sub } ifelse + trymax trymin sub div ywidth mul yextra add +} def + + +% yonly: interpolate x values 1, 2, ... into data +% [ data ] yonly [ newdata ] +/yonly +{ dup /tmp exch def + length [ exch 1 exch 1 exch + { dup tmp exch 1 sub get + } for + ] +} def + +% xonly: interpolate y values 1, 2, ... into data +% [ data ] yonly [ newdata ] +/xonly +{ dup /tmp exch def + length [ exch 1 exch 1 exch + { dup tmp exch 1 sub get exch + } for + ] +} def + +% xandy: no interpolation of x or y values +% [ data ] xandy [ data ] +/xandy {} def + + +% expstringwidth: calculate width of string containing optional exponent +% <string> expstringwidth <width> +/expstringwidth +{ (^) search + { exch pop stringwidth pop exch stringwidth pop 0.7 mul add } + { stringwidth pop } + ifelse +} def + +% expstringshow: show string containing optional exponent +% <string> expstringshow - +/expstringshow +{ (^) search + { exch pop show 0 0.5 ft rmoveto + gsave currentfont 0.7 scalefont setfont show grestore + } + { show + } + ifelse +} def + +% concatenate two strings: <string> <string> strconcat <string> +/strconcat +{ 2 copy length exch length add string + dup 0 4 index putinterval + dup 3 index length 3 index putinterval + 3 1 roll pop pop +} def + +% lgen: generate one label automatically +% num lgen num string +/lgen { dup 20 string cvs } def + +% loglgen: generate one logarithmic label (with exponent) +% <base> <exponent> loglgen <string> +/loglgen +{ 20 string cvs exch 20 string cvs + (^) strconcat exch strconcat +} def + + +% printxtick: print one x tick +% xpos printxtick - +/printxtick +{ newpath + yleft trpoint moveto 0 yextra neg rmoveto + 0 xticklength neg rlineto [] 0 setdash stroke +} def + +% printxlabel: print one x label +% (xlabel) xpos printxlabel - +/printxlabel +{ yleft trpoint moveto 0 yextra neg rmoveto + 0 xticklength neg rmoveto 0 0.9 ft neg rmoveto + xlog 1 gt { 0 0.3 ft neg rmoveto } if + dup expstringwidth -2 div 0 rmoveto expstringshow +} def + +% printytick: print one y tick +% ypos printytick - +/printytick +{ newpath + xleft exch trpoint moveto xextra neg 0 rmoveto + yticklength neg 0 rlineto [] 0 setdash stroke +} def + +% printylabel: print one y label +% (ylabel) ypos printylabel - +/printylabel +{ xleft exch trpoint moveto xextra neg 0 rmoveto + yticklength neg 0 rmoveto -0.3 ft -0.3 ft rmoveto + dup expstringwidth neg 0 rmoveto expstringshow +} def + +% printrtick: print one r tick +% ypos printrtick - +/printrtick +{ newpath + xright exch trpoint moveto xextra 0 rmoveto + rticklength 0 rlineto [] 0 setdash stroke +} def + +% printrlabel: print one r label +% (rlabel) ypos printrlabel - +/printrlabel +{ xright exch trpoint moveto xextra 0 rmoveto + rticklength 0 rmoveto 0.3 ft -0.3 ft rmoveto + expstringshow +} def + +% printticks: print ticks and labels +% /tickproc /labelproc [ tickandlabeldata ] min printticks - +/printticks +{ /prev exch def + { dup type dup dup /integertype eq exch /realtype eq or + { pop dup /prev exch def 2 index cvx exec + } + { /stringtype eq + { prev 2 index cvx exec + } + { pop + } ifelse + } ifelse + } forall + pop pop +} def + + +% printxaxistick: print one x axis tick +% xpos printxaxistick - +/printxaxistick +{ newpath + yaxis trpoint moveto 0 xticklength -2 div rmoveto + 0 xticklength rlineto [] 0 setdash stroke +} def + +% printxaxislabel: print one x axis label +% (xlabel) xpos printxaxislabel - +/printxaxislabel +{ yaxis trpoint moveto + 0 xticklength -2 div rmoveto 0 0.9 ft neg rmoveto + xlog 1 gt { 0 0.3 ft neg rmoveto } if + dup expstringwidth -2 div 0 rmoveto expstringshow +} def + +% printyaxistick: print one y axis tick +% ypos printyaxistick - +/printyaxistick +{ newpath + xaxis exch trpoint moveto + yticklength -2 div 0 rmoveto + yticklength 0 rlineto [] 0 setdash stroke +} def + +% printyaxislabel: print one y axis label +% (ylabel) ypos printyaxislabel - +/printyaxislabel +{ xaxis exch trpoint moveto + yticklength -2 div 0 rmoveto -0.3 ft -0.3 ft rmoveto + dup expstringwidth neg 0 rmoveto expstringshow +} def + + +% <val> minmax - +% perform minv := min(minv, val); maxv := max(maxv, val) +% allowing for the possibility of minv, maxv, val being false (undefined) +/minmax +{ dup false eq + { pop } + { minv false eq + { dup /minv exch def /maxv exch def } + { dup minv lt + { /minv exch def } + { dup maxv gt + { /maxv exch def } + { pop } + ifelse + } ifelse + } ifelse + } ifelse +} def + +% <ticks> ticksundef <ticks> <bool> +% returns true iff the ticks array is undefined (one false entry) +/ticksundef +{ dup length 1 eq + { dup 0 get false eq + } + { false } + ifelse +} def + +% <number> integral <boolean> +% true if the number has an integral value +/integral { dup round eq } def + +% ticksep ticks xory alldata minval maxval axis base ticksandlimits ticks min max base +% ticksandlimits: sort out value of x or y ticks and limits and log base +/ticksandlimits +{ /base exch def + /minv false def + /maxv false def + + % min and max of user-supplied minval, maxval, and axis + minmax minmax minmax + + % min and max of data points + { 0 get dup dup length 1 sub 3 index exch 2 exch + { get minmax dup + } for pop pop + } forall + pop dup + + % min and max of tick values + { dup type /stringtype eq + { pop } { minmax } ifelse + } forall + + % fix minv and maxv if undefined (false) or equal + minv false eq + { /minv -1 def /maxv 1 def } + { minv maxv eq + { minv 0 lt + { /minv 2 minv mul def /maxv 0 def + } + { minv 0 eq + { /minv -1 def /maxv 1 def + } + { /minv 0 def /maxv 2 maxv mul def + } ifelse + } ifelse + } if + } ifelse + + % invent ticks if undefined + ticksundef + { pop /ticksep exch def + + % if base is reasonable and minv is positive, logarithmic ticks + base 1 gt minv 0 gt and + { + % get integral log of minv and maxv + /logminv base minv plog floor cvi def + /logmaxv base maxv plog ceiling cvi def + + % if minv close to base, make it 1; reset minv and maxv + logminv 1 eq logmaxv 4 ge and { /logminv 0 def } if + /minv base logminv exp def + /maxv base logmaxv exp def + + % ticks := [ base**logminv, ... , base**logmaxv ] + [ logminv 1 logmaxv + { dup base exch exp + exch base exch loglgen + } for + ] + } + { % non-logarithmic ticks + { + % fix tick separation if undefined (0) or too small + /base 0 def + /delta maxv minv sub def + ticksep delta 30 div le + { /ticksep 10 delta log 1 sub ceiling exp def + ticksep delta 2 div ge + { /ticksep ticksep 2 div def } + { ticksep delta 5 div lt + { /ticksep 2 ticksep mul def + } if + } ifelse + } if + + % adjust minv and maxv to be multiples of ticksep + /minv minv ticksep div floor ticksep mul def + /maxv maxv ticksep div ceiling ticksep mul def + /delta maxv minv sub def + + % if minv or maxv near zero, move to zero and redo + minv ticksep eq + { /minv 0 def } + { maxv ticksep neg eq { /maxv 0 def } { exit } ifelse + } ifelse + } loop + + % if minv, maxv, and ticksep are all integral, set "makeint" to true + /makeint minv integral maxv integral ticksep integral and and def + + % ticks := [ minv, minv+ticksep, ... , maxv ] + [ 0 1 delta ticksep div round + { ticksep mul minv add makeint { cvi } if lgen } + for + ] + } ifelse + } + { exch pop + } ifelse + minv maxv base +} def + +% xset: set up all data for x axis, including limits and ticks +% xticksep xticks 0 alldata xmin xmax xlog xextra xdecr xaxis xticklength xset - +/xset +{ /xticklength exch def + /xaxis exch def + /xdecr exch def + /xextra exch def + xaxis exch ticksandlimits + /xlog exch def /xmax exch def /xmin exch def /xticks exch def + /xleft xdecr { xmax } { xmin } ifelse def + /xright xdecr { xmin } { xmax } ifelse def + /xwidth xsize xextra 2 mul sub def + /trxmin xmin xtr def /trxmax xmax xtr def +} def + +% yset: set up all data for y axis, including limits and yticks +% yticksep yticks 0 alldata ymin ymax ylog yextra ydecr yaxis yticklength yset - +/yset +{ /yticklength exch def + /yaxis exch def + /ydecr exch def + /yextra exch def + yaxis exch ticksandlimits + /ylog exch def /ymax exch def /ymin exch def /yticks exch def + /yleft ydecr { ymax } { ymin } ifelse def + /yright ydecr { ymin } { ymax } ifelse def + /ywidth ysize yextra 2 mul sub def + /trymin ymin ytr def /trymax ymax ytr def +} def + +% rset: set up all data for y axis (again), but including limits and rticks +% rticksep rticks 0 alldata ymin ymax ylog yextra ydecr yaxis rticklength rset - +/rset +{ /rticklength exch def + /yaxis exch def + /ydecr exch def + /yextra exch def + yaxis exch ticksandlimits + /ylog exch def /ymax exch def /ymin exch def /rticks exch def + /yleft ydecr { ymax } { ymin } ifelse def + /yright ydecr { ymin } { ymax } ifelse def + /ywidth ysize yextra 2 mul sub def + /trymin ymin ytr def /trymax ymax ytr def +} def + +% norset: set up data for no rticks +% - norset - +/norset +{ /rticklength 0 def + /rticks [] def +} def + +% framestyle: print a frame around the graph +/framestyle +{ 0 0 moveto xsize 0 lineto xsize ysize lineto + 0 ysize lineto closepath stroke + /printxtick /printxlabel xticks xleft printticks + /printytick /printylabel yticks ymin printticks + /printrtick /printrlabel rticks ymin printticks +} def + +% nonestyle: print nothing around the graph +/nonestyle +{ +} def + +% axesstyle: print axes for the graph (unless axis values missing) +/axesstyle +{ + xaxis false eq yaxis false eq or + { framestyle } + { xaxis yaxis trpoint dup 0 exch moveto xsize exch lineto + dup 0 moveto ysize lineto stroke + /printxaxistick /printxaxislabel xticks xleft printticks + /printyaxistick /printyaxislabel yticks ymin printticks + } ifelse +} def + +% rundata: run all data sets +/rundata +{ alldata + { gsave + dup dup dup dup + 4 get /dopaint exch def + 3 get /initrun exch def + 2 get /pairs exch def + 1 get /points exch def + 0 get /data exch def + dopaint + { data length 4 ge + { initrun + newpath + data 0 get ymin trpoint yextra sub moveto + 0 2 data length 2 sub + { dup 1 add + data exch get /ycurr exch def + data exch get /xcurr exch def + xcurr ycurr trpoint lineto + } for + data dup length 2 sub get ymin trpoint yextra sub lineto + closepath fill + } if + } if + initrun + data length 2 ge + { + /xcurr data 0 get def + /ycurr data 1 get def + points + data length 4 ge + { 2 2 data length 2 sub + { /xprev xcurr def + /yprev ycurr def + dup dup 2 eq /firstpair exch def + data length 2 sub eq /lastpair exch def + dup 1 add + data exch get /ycurr exch def + data exch get /xcurr exch def + pairs + points + } for + } if + } if + grestore + } forall +} def + +end +%%EndResource diff --git a/include/init b/include/init new file mode 100644 index 0000000..2718c22 --- /dev/null +++ b/include/init @@ -0,0 +1,34 @@ + +############################################################################### +# # +# init # +# # +# Lout file for initializing run. # +# # +# Jeffrey H. Kingston # +# 21 September 1994 # +# # +############################################################################### + + +@SysInclude { fontdefs } # font definitions +@SysInclude { langdefs } # language definitions +@SysInclude { bsf } # BasicSetup package +@SysInclude { dsf } # DocumentSetup package + # including standard.ld +def @TeX +{ + @OneCol { T &0.4fo {-0.2f @VShift E} &0.45fo X } +} + +def @LaTeX +{ + @OneCol { L &0.3fo { +0.1f @VShift 0.8f @Font A } &0.4fo @TeX } +} + +@Use { @BasicSetup } +@Use { @DocumentSetup } + +@SysDatabase @Reference { loutrefs } # references about Lout +@SysDatabase @Reference { oldrefs } # old references about Lout +@SysDatabase @RefStyle { refstyle } # reference printing styles diff --git a/include/langdefs b/include/langdefs new file mode 100644 index 0000000..ec3ac3a --- /dev/null +++ b/include/langdefs @@ -0,0 +1,16 @@ +langdef Czech Cesky Cestina { czech . : ! ? .) ?) !) .' !' ?' } +langdef Danish Dansk { danish . : ! ? .) ?) !) .' !' ?' } +langdef Dutch Nederlands { dutch . : ! ? .) ?) !) .' !' ?' } +langdef English { english . : ! ? .) ?) !) .' !' ?' } +langdef EnglishUK { engluk . : ! ? .) ?) !) .' !' ?' } +langdef Finnish Suomi { finnish . : ! ? .) ?) !) .' !' ?' } +langdef French Francais "Fran\347ais" { french } +langdef German Deutsch { german . : ! ? .) ?) !) .' !' ?' } +langdef Hungarian Magyar { - . : ! ? .) ?) !) .' !' ?' } +langdef Italian Italiano { italian . : ! ? .) ?) !) .' !' ?' } +langdef Norwegian Norsk { norweg . : ! ? .) ?) !) .' !' ?' } +langdef Polish Polski { polish . : ! ? .) ?) !) .' !' ?' } +langdef Russian "\362\325\323\323\313\311\312" { russian . : ! ? .) ?) !) .' !' ?' } +langdef Slovenian Slovenia Slovenija { slovenia . : ! ? .) ?) !) .' !' ?' } +langdef Spanish "Espa\361ol" { spanish . : ! ? .) ?) !) .' !' ?' } +langdef Swedish Svenska { swedish . : ! ? .) ?) !) .' !' ?' } diff --git a/include/latin2 b/include/latin2 new file mode 100644 index 0000000..35ddf2c --- /dev/null +++ b/include/latin2 @@ -0,0 +1,9 @@ +################################################################# +# # +# latin2 # +# # +# This file includes everything you need for Latin2. # +# # +################################################################# + +@SysInclude { latin2.fd } diff --git a/include/latin2.fd b/include/latin2.fd new file mode 100644 index 0000000..5bc648b --- /dev/null +++ b/include/latin2.fd @@ -0,0 +1,143 @@ +################################################################################################################## +# # +# Latin2 Font definitions. Use a very wide window to see them clearly. # +# # +# Lout font Lout font PostScript PostScript font metrics Lout character Recode/ # +# family name face name font name (formerly .AFM) file name mapping file NoRecode # +# # +################################################################################################################## + + +fontdef AvantGardeCE Base { AvantGarde-Medium AG-Md LtLatin2.LCM Recode } +fontdef AvantGardeCE Slope { AvantGarde-MediumObl AG-MdO LtLatin2.LCM Recode } +fontdef AvantGardeCE Bold { AvantGarde-Bold AG-Bd LtLatin2.LCM Recode } +fontdef AvantGardeCE BoldSlope { AvantGarde-BoldObl AG-BdO LtLatin2.LCM Recode } + +fontdef AvantGardeCE Bold { AvantGarde-Bold AG-Bd LtLatin2.LCM Recode } +fontdef AvantGardeCE BoldObl { AvantGarde-BoldObl AG-BdO LtLatin2.LCM Recode } +fontdef AvantGardeCE Book { AvantGarde-Book AG-Bk LtLatin2.LCM Recode } +fontdef AvantGardeCE BookOblique { AvantGarde-BookOblique AG-BkO LtLatin2.LCM Recode } +fontdef AvantGardeCE CondBold { AvantGarde-CondBold AG-CnBd LtLatin2.LCM Recode } +fontdef AvantGardeCE CondBook { AvantGarde-CondBook AG-CnBk LtLatin2.LCM Recode } +fontdef AvantGardeCE CondDemi { AvantGarde-CondDemi AG-CnDm LtLatin2.LCM Recode } +fontdef AvantGardeCE CondMedium { AvantGarde-CondMedium AG-CnMd LtLatin2.LCM Recode } +fontdef AvantGardeCE Demi { AvantGarde-Demi AG-Dm LtLatin2.LCM Recode } +fontdef AvantGardeCE DemiOblique { AvantGarde-DemiOblique AG-DmO LtLatin2.LCM Recode } +fontdef AvantGardeCE ExtraLight { AvantGarde-ExtraLight AG-ExLt LtLatin2.LCM Recode } +fontdef AvantGardeCE ExtraLightObl { AvantGarde-ExtraLightObl AG-ExLtO LtLatin2.LCM Recode } +fontdef AvantGardeCE Medium { AvantGarde-Medium AG-Md LtLatin2.LCM Recode } +fontdef AvantGardeCE MediumObl { AvantGarde-MediumObl AG-MdO LtLatin2.LCM Recode } + + +fontdef BookmanCE Base { Bookman-Medium Bk-Md LtLatin2.LCM Recode } +fontdef BookmanCE Slope { Bookman-MediumItalic Bk-MdIt LtLatin2.LCM Recode } +fontdef BookmanCE Bold { Bookman-Bold Bk-Bd LtLatin2.LCM Recode } +fontdef BookmanCE BoldSlope { Bookman-BoldItalic Bk-BdIt LtLatin2.LCM Recode } + +fontdef BookmanCE Bold { Bookman-Bold Bk-Bd LtLatin2.LCM Recode } +fontdef BookmanCE BoldItalic { Bookman-BoldItalic Bk-BdIt LtLatin2.LCM Recode } +fontdef BookmanCE Demi { Bookman-Demi Bk-Dm LtLatin2.LCM Recode } +fontdef BookmanCE DemiItalic { Bookman-DemiItalic Bk-DmIt LtLatin2.LCM Recode } +fontdef BookmanCE Light { Bookman-Light Bk-Lt LtLatin2.LCM Recode } +fontdef BookmanCE LightItalic { Bookman-LightItalic Bk-LtIt LtLatin2.LCM Recode } +fontdef BookmanCE Medium { Bookman-Medium Bk-Md LtLatin2.LCM Recode } +fontdef BookmanCE MediumItalic { Bookman-MediumItalic Bk-MdIt LtLatin2.LCM Recode } + + +fontdef CourierCE Base { Courier Cr LtLatin2.LCM Recode } +fontdef CourierCE Slope { Courier-Oblique Cr-O LtLatin2.LCM Recode } +fontdef CourierCE Bold { Courier-Bold Cr-Bd LtLatin2.LCM Recode } +fontdef CourierCE BoldSlope { Courier-BoldOblique Cr-BdO LtLatin2.LCM Recode } + +fontdef CourierCE Base { Courier Cr LtLatin2.LCM Recode } +fontdef CourierCE Bold { Courier-Bold Cr-Bd LtLatin2.LCM Recode } +fontdef CourierCE BoldOblique { Courier-BoldOblique Cr-BdO LtLatin2.LCM Recode } +fontdef CourierCE Oblique { Courier-Oblique Cr-O LtLatin2.LCM Recode } + + +fontdef HelveticaCE Base { Helvetica He LtLatin2.LCM Recode } +fontdef HelveticaCE Slope { Helvetica-Oblique He-O LtLatin2.LCM Recode } +fontdef HelveticaCE Bold { Helvetica-Bold He-Bd LtLatin2.LCM Recode } +fontdef HelveticaCE BoldSlope { Helvetica-BoldOblique He-BdO LtLatin2.LCM Recode } + +fontdef HelveticaCE Base { Helvetica He LtLatin2.LCM Recode } +fontdef HelveticaCE Black { Helvetica-Black He-Bl LtLatin2.LCM Recode } +fontdef HelveticaCE BlackOblique { Helvetica-BlackOblique He-BlO LtLatin2.LCM Recode } +fontdef HelveticaCE Bold { Helvetica-Bold He-Bd LtLatin2.LCM Recode } +fontdef HelveticaCE BoldOblique { Helvetica-BoldOblique He-BdO LtLatin2.LCM Recode } +fontdef HelveticaCE Compressed { Helvetica-Compressed He-Cm LtLatin2.LCM Recode } +fontdef HelveticaCE Cond { Helvetica-Condensed He-Cn LtLatin2.LCM Recode } +fontdef HelveticaCE CondBlack { Helvetica-Condensed-Black He-CnBl LtLatin2.LCM Recode } +fontdef HelveticaCE CondBlackObl { Helvetica-Condensed-BlackObl He-CnBlO LtLatin2.LCM Recode } +fontdef HelveticaCE CondBold { Helvetica-Condensed-Bold He-CnBd LtLatin2.LCM Recode } +fontdef HelveticaCE CondBoldObl { Helvetica-Condensed-BoldObl He-CnBdO LtLatin2.LCM Recode } +fontdef HelveticaCE CondLight { Helvetica-Condensed-Light He-CnLi LtLatin2.LCM Recode } +fontdef HelveticaCE CondLightObl { Helvetica-Condensed-LightObl He-CnLiO LtLatin2.LCM Recode } +fontdef HelveticaCE CondOblique { Helvetica-Condensed-Oblique He-CnO LtLatin2.LCM Recode } +fontdef HelveticaCE ExtraCompressed { Helvetica-ExtraCompressed He-ExtC LtLatin2.LCM Recode } +fontdef HelveticaCE Light { Helvetica-Light He-Lt LtLatin2.LCM Recode } +fontdef HelveticaCE LightOblique { Helvetica-LightOblique He-LtO LtLatin2.LCM Recode } +fontdef HelveticaCE Narrow { Helvetica-Narrow He-Nr LtLatin2.LCM Recode } +fontdef HelveticaCE NarrowBold { Helvetica-Narrow-Bold He-NrBd LtLatin2.LCM Recode } +fontdef HelveticaCE NarrowBoldObl { Helvetica-Narrow-BoldOblique He-NrBdO LtLatin2.LCM Recode } +fontdef HelveticaCE NarrowObl { Helvetica-Narrow-Oblique He-NrO LtLatin2.LCM Recode } +fontdef HelveticaCE Oblique { Helvetica-Oblique He-O LtLatin2.LCM Recode } +fontdef HelveticaCE UltraCompressed { Helvetica-UltraCompressed He-UlCm LtLatin2.LCM Recode } + + +fontdef SchoolbookCE Base { NewCenturySchlbk-Roman NCS-Rm LtLatin2.LCM Recode } +fontdef SchoolbookCE Slope { NewCenturySchlbk-Italic NCS-It LtLatin2.LCM Recode } +fontdef SchoolbookCE Bold { NewCenturySchlbk-Bold NCS-Bd LtLatin2.LCM Recode } +fontdef SchoolbookCE BoldSlope { NewCenturySchlbk-BoldItalic NCS-BdIt LtLatin2.LCM Recode } + +fontdef SchoolbookCE Bold { NewCenturySchlbk-Bold NCS-Bd LtLatin2.LCM Recode } +fontdef SchoolbookCE BoldItalic { NewCenturySchlbk-BoldItalic NCS-BdIt LtLatin2.LCM Recode } +fontdef SchoolbookCE Italic { NewCenturySchlbk-Italic NCS-It LtLatin2.LCM Recode } +fontdef SchoolbookCE Roman { NewCenturySchlbk-Roman NCS-Rm LtLatin2.LCM Recode } + + +fontdef PalatinoCE Base { Palatino-Roman Pa-Rm LtLatin2.LCM Recode } +fontdef PalatinoCE Slope { Palatino-Italic Pa-It LtLatin2.LCM Recode } +fontdef PalatinoCE Bold { Palatino-Bold Pa-Bd LtLatin2.LCM Recode } +fontdef PalatinoCE BoldSlope { Palatino-BoldItalic Pa-BdIt LtLatin2.LCM Recode } + +fontdef PalatinoCE Bold { Palatino-Bold Pa-Bd LtLatin2.LCM Recode } +fontdef PalatinoCE BoldItalic { Palatino-BoldItalic Pa-BdIt LtLatin2.LCM Recode } +fontdef PalatinoCE BoldItalicOsF { Palatino-BoldItalicOsF Pa-BdItF LtLatin2.LCM Recode } +fontdef PalatinoCE BoldOsF { Palatino-BoldOsF Pa-BdF LtLatin2.LCM Recode } +fontdef PalatinoCE Italic { Palatino-Italic Pa-It LtLatin2.LCM Recode } +fontdef PalatinoCE ItalicOsF { Palatino-ItalicOsF Pa-ItF LtLatin2.LCM Recode } +fontdef PalatinoCE Roman { Palatino-Roman Pa-Rm LtLatin2.LCM Recode } +fontdef PalatinoCE SC { Palatino-SC Pa-SC LtLatin2.LCM Recode } + + +fontdef TimesCE Base { Times-Roman Ti-Rm LtLatin2.LCM Recode } +fontdef TimesCE Slope { Times-Italic Ti-It LtLatin2.LCM Recode } +fontdef TimesCE Bold { Times-Bold Ti-Bd LtLatin2.LCM Recode } +fontdef TimesCE BoldSlope { Times-BoldItalic Ti-BdIt LtLatin2.LCM Recode } + +fontdef TimesCE Bold { Times-Bold Ti-Bd LtLatin2.LCM Recode } +fontdef TimesCE BoldItalic { Times-BoldItalic Ti-BdIt LtLatin2.LCM Recode } +fontdef TimesCE BoldItalicOsF { Times-BoldItalicOsF Ti-BdItF LtLatin2.LCM Recode } +fontdef TimesCE BoldSC { Times-BoldSC Ti-BdSC LtLatin2.LCM Recode } +fontdef TimesCE ExtraBold { Times-ExtraBold Ti-ExBd LtLatin2.LCM Recode } +fontdef TimesCE Italic { Times-Italic Ti-It LtLatin2.LCM Recode } +fontdef TimesCE ItalicOsF { Times-ItalicOsF Ti-ItF LtLatin2.LCM Recode } +fontdef TimesCE Roman { Times-Roman Ti-Rm LtLatin2.LCM Recode } +fontdef TimesCE RomanSC { Times-RomanSC Ti-RmSC LtLatin2.LCM Recode } +fontdef TimesCE Semibold { Times-Semibold Ti-Sm LtLatin2.LCM Recode } +fontdef TimesCE SemiboldItalic { Times-SemiboldItalic Ti-SmIt LtLatin2.LCM Recode } + + +fontdef ChanceryCE Base { ZapfChancery-Roman ZC-Rm LtLatin2.LCM Recode } +fontdef ChanceryCE Slope { ZapfChancery-Italic ZC-It LtLatin2.LCM Recode } +fontdef ChanceryCE Bold { ZapfChancery-Bold ZC-Bd LtLatin2.LCM Recode } +fontdef ChanceryCE BoldSlope { ZapfChancery-MediumItalic ZC-MdIt LtLatin2.LCM Recode } + +fontdef ChanceryCE Roman { ZapfChancery-Roman ZC-Rm LtLatin2.LCM Recode } +fontdef ChanceryCE Bold { ZapfChancery-Bold ZC-Bd LtLatin2.LCM Recode } +fontdef ChanceryCE Italic { ZapfChancery-Italic ZC-It LtLatin2.LCM Recode } +fontdef ChanceryCE Light { ZapfChancery-Light ZC-Lt LtLatin2.LCM Recode } +fontdef ChanceryCE Demi { ZapfChancery-Demi ZC-Dm LtLatin2.LCM Recode } +fontdef ChanceryCE LightItalic { ZapfChancery-LightItalic ZC-LtIt LtLatin2.LCM Recode } +fontdef ChanceryCE MediumItalic { ZapfChancery-MediumItalic ZC-MdIt LtLatin2.LCM Recode } diff --git a/include/modula b/include/modula new file mode 100644 index 0000000..0f84ad6 --- /dev/null +++ b/include/modula @@ -0,0 +1,27 @@ +############################################################################### +# # +# Lout setup file for Modula-2 program printing # +# # +# Jeffrey H. Kingston # +# 5 February 1999 # +# # +############################################################################### + + +############################################################################### +# # +# The @SysInclude { modulaf } line # +# # +# This line causes Lout to read the definitions for Modula-2, and should # +# not be touched. # +# # +############################################################################### + +@SysInclude { modulaf } + + +############################################################################### +# # +# This package does not offer the ability to change default options. # +# # +############################################################################### diff --git a/include/modulaf b/include/modulaf new file mode 100644 index 0000000..2f1221d --- /dev/null +++ b/include/modulaf @@ -0,0 +1,137 @@ + +############################################################################### +# # +# Lout @Modula package for formatting Modula-2 programs (Version 1.0) # +# # +# Version 1.0 by Jeffrey H. Kingston, September 1993. # +# # +# This package implements the complete Modula-2 language (in a style which # +# claims only to reflect its author's taste) with the following caveats: # +# # +# * The symbol { must be given as lbrace # +# # +# * The symbol } must be given as rbrace # +# # +# * The symbol # must be given as numbersign # +# # +# * Double quotes are used by Lout to delimit literal strings, so they # +# need to be quoted (Modula-2 allows single quoted strings wherever # +# double quoted strings can go; we recommend these be used) # +# # +# * Literal strings should be enclosed in double quotes # +# # +# * The symbols B, H, C, and E as used in numeric literals will appear # +# in italic font # +# # +############################################################################### + +export "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" + + "*" "/" "~" "+" "-" "=" "<>" ">" ">=" "<" "<=" "(" + ")" "[" "]" "," ";" "." ":" "..." ".." "|" "^" ":=" "'" "`" + "&" + + lbrace rbrace numbersign + + AND ARRAY BEGIN BY CASE CONST DEFINITION DIV DO ELSE ELSIF + END EXPORT EXIT FOR FROM IF IMPLEMENTATION IMPORT IN LOOP + MOD MODULE NOT OF OR POINTER PROCEDURE QUALIFIED RECORD + REPEAT RETURN SET TO THEN TYPE UNTIL VAR WHILE WITH @Com + +def @Modula + body @Body +@Begin + + def @R right x { Base @Font x } + def @B right x { Bold @Font x } + def @S right x { { Symbol Base } @Font x } + + def "0" { @R "0" } + def "1" { @R "1" } + def "2" { @R "2" } + def "3" { @R "3" } + def "4" { @R "4" } + def "5" { @R "5" } + def "6" { @R "6" } + def "7" { @R "7" } + def "8" { @R "8" } + def "9" { @R "9" } + + def "*" { @S @Char "asteriskmath" } + def "/" { @R @Char "fraction" } + def "~" { @R "~" } + def "+" { @S "+" } + def "-" { @S "-" } + def "=" { @S @Char "equal" } + def "<>" { @S @Char "notequal" } + def ">" { @S @Char "greater" } + def ">=" { @S @Char "greaterequal" } + def "<" { @S @Char "less" } + def "<=" { @S @Char "lessequal" } + def "(" { @R "(" } + def ")" { @R ")" } + def "[" { @R "[" } + def "]" { @R "]" } + def "," { @R "," } + def ";" { @R ";" } + def "." { @R "." } + def ":" { @R ":" } + def ".." { @R ".." &0.1f } + def "..." { @R "..." } + def "|" { @R "|" } + def "^" { @S 0.8f @Font @Char "arrowup" } + def ":=" { :{//0.03fo =} } + def "'" { @R "'" } + def "`" { @R "`" } + def "&" { @R "&" } + + def lbrace { @R "{" } + def rbrace { @R "}" } + def numbersign { @R "#" } + + def AND { @B "and" } + def ARRAY { @B "array" } + def BEGIN { @B "begin" } + def BY { @B "by" } + def CASE { @B "case" } + def CONST { @B "const" } + def DEFINITION { @B "definition" } + def DIV { @B "div" } + def DO { @B "do" } + def ELSE { @B "else" } + def ELSIF { @B "elsif" } + def END { @B "end" } + def EXPORT { @B "export" } + def EXIT { @B "exit" } + def FOR { @B "for" } + def FROM { @B "from" } + def IF { @B "if" } + def IMPLEMENTATION { @B "implementation" } + def IMPORT { @B "import" } + def IN { @B "in" } + def LOOP { @B "loop" } + def MOD { @B "mod" } + def MODULE { @B "module" } + def NOT { @B "not" } + def OF { @B "of" } + def OR { @B "or" } + def POINTER { @B "pointer" } + def PROCEDURE { @B "procedure" } + def QUALIFIED { @B "qualified" } + def RECORD { @B "record" } + def REPEAT { @B "repeat" } + def RETURN { @B "return" } + def SET { @B "set" } + def TO { @B "to" } + def THEN { @B "then" } + def TYPE { @B "type" } + def UNTIL { @B "until" } + def VAR { @B "var" } + def WHILE { @B "while" } + def WITH { @B "with" } + + def @Com right x { @R "{" x @R "}" } + + Slope @Font lines @Break @Body + +@End @Modula diff --git a/include/mydefs b/include/mydefs new file mode 100644 index 0000000..e7b7ebb --- /dev/null +++ b/include/mydefs @@ -0,0 +1,9 @@ + +############################################################################### +# # +# mydefs # +# # +# This empty Lout file is a placeholder which is read by the standard setup # +# files when there is no mydefs file in the user's current directory. # +# # +############################################################################### diff --git a/include/pas b/include/pas new file mode 100644 index 0000000..b62b24a --- /dev/null +++ b/include/pas @@ -0,0 +1,27 @@ +############################################################################### +# # +# Lout setup file for Pascal program printing # +# # +# Jeffrey H. Kingston # +# 5 February 1999 # +# # +############################################################################### + + +############################################################################### +# # +# The @SysInclude { pasf } line # +# # +# This line causes Lout to read the definitions for Pascal, and should # +# not be touched. # +# # +############################################################################### + +@SysInclude { pasf } + + +############################################################################### +# # +# This package does not offer default options that can be changed. # +# # +############################################################################### diff --git a/include/pasf b/include/pasf new file mode 100644 index 0000000..84dba18 --- /dev/null +++ b/include/pasf @@ -0,0 +1,110 @@ + +############################################################################### +# # +# Lout @Pas package for formatting Pascal programs (Version 2.0) # +# # +# Version 1.0 by Jeffrey H. Kingston, June 1991. # +# Version 2.0 by Jeffrey H. Kingston, 22 December 1992. # +# # +# See "Eq - a Lout package for typesetting mathematics" for user # +# information. # +# # +# Reference: Jensen, K. and Wirth, N. Pascal User Manual and Report. # +# Second Edition, Springer-Verlag, 1975. # +# # +############################################################################### + +export "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" + "." "," ":" ";" "'" "`" "+" "-" "*" "/" "(" ")" + "[" "]" "^" ".." "=" "<" ">" "<>" "<=" ">=" ":=" + + and array begin case const div do downto else end + file for forward function goto if in label mod nil not + of or otherwise packed procedure program record repeat + set then to type until var while with @Com + +def @Pas + body @Body +@Begin + + def @R right x { Base @Font x } + def @B right x { Bold @Font x } + def @S right x { { Symbol Base } @Font x } + + def "0" { @R "0" } + def "1" { @R "1" } + def "2" { @R "2" } + def "3" { @R "3" } + def "4" { @R "4" } + def "5" { @R "5" } + def "6" { @R "6" } + def "7" { @R "7" } + def "8" { @R "8" } + def "9" { @R "9" } + def "." { @R "." } + def "," { @R "," } + def ":" { @R ":" } + def ";" { @R ";" } + def "'" { @R "'" } + def "`" { @R "`" } + def "+" { @S "+" } + def "-" { @S "-" } + def "*" { @S @Char "asteriskmath" } + def "/" { @R @Char "fraction" } + def "(" { @R "(" } + def ")" { @R ")" } + def "[" { @R "[" } + def "]" { @R "]" } + def "^" { @S 0.8f @Font @Char "arrowup" } + def ".." { @R ".." &0.1f } + def "=" { @S @Char "equal" } + def "<" { @S @Char "less" } + def ">" { @S @Char "greater" } + def "<>" { @S @Char "notequal" } + def "<=" { @S @Char "lessequal" } + def ">=" { @S @Char "greaterequal" } + def ":=" { :{//0.03fo &0.1f =} } + + def and { @B "and" } + def array { @B "array" } + def begin { @B "begin" } + def case { @B "case" } + def const { @B "const" } + def div { @B "div" } + def do { @B "do" } + def downto { @B "downto" } + def else { @B "else" } + def end { @B "end" } + def file { @B "file" } + def for { @B "for" } + def forward { @B "forward" } + def function { @B "function" } + def goto { @B "goto" } + def if { @B "if" } + def in { @B "in" } + def label { @B "label" } + def mod { @B "mod" } + def nil { @B "nil" } + def not { @B "not" } + def of { @B "of" } + def or { @B "or" } + def otherwise { @B "otherwise" } + def packed { @B "packed" } + def procedure { @B "procedure" } + def program { @B "program" } + def record { @B "record" } + def repeat { @B "repeat" } + def set { @B "set" } + def then { @B "then" } + def to { @B "to" } + def type { @B "type" } + def until { @B "until" } + def var { @B "var" } + def while { @B "while" } + def with { @B "with" } + + def @Com right x { @R "{" x @R "}" } + + Slope @Font lines @Break @Body + +@End @Pas diff --git a/include/picture b/include/picture new file mode 100644 index 0000000..55d2f3e --- /dev/null +++ b/include/picture @@ -0,0 +1,254 @@ +############################################################################### +# # +# Lout setup file for stand-alone illustrations # +# # +# Jeffrey H. Kingston # +# 5 February 1999 # +# # +############################################################################### + + +############################################################################### +# # +# @SysInclude commands for standard packages. # +# # +############################################################################### + + @SysInclude { fontdefs } # font definitions + @SysInclude { langdefs } # language definitions + @SysInclude { bsf } # BasicSetup package + @SysInclude { dsf } # DocumentSetup package + @SysInclude { picturef } # IllustrationSetup extension + + +############################################################################### +# # +# @Include command for reading personal definitions from current directory. # +# # +############################################################################### + + @Include { mydefs } + + +############################################################################### +# # +# The @BasicSetup @Use clause - basics, lists, paragraphs, displays. # +# # +# To change the default value of any option, delete the # at the start of # +# its line and change the value between braces. # +# # +############################################################################### + +@Use { @BasicSetup + # @InitialFont { Times Base 12p } # initial font + # @InitialBreak {{adjust 1.2fx hyphen} @OrIfPlain {ragged 1fx nohyphen}} + # @InitialSpace { lout } # initial space style + # @InitialLanguage { English } # initial language + # @InitialColour { black } # initial colour + # @OptimizePages { No } # optimize page breaks? + # @HeadingFont { Bold } # font for @Heading + # @ParaGap { 1.3vx @OrIfPlain 1f } # gap between paragraphs + # @ParaIndent { 2.00f @OrIfPlain 5s } # first-line indent for @PP + # @DisplayGap { 1.00v @OrIfPlain 1f } # gap above, below displays + # @DisplayIndent { 2.00f @OrIfPlain 5s } # @IndentedDisplay indent + # @DefaultIndent { 0.5rt } # @Display indent + # @DisplayNumStyle { (num) } # style of display numbers + # @WideIndent { 4.00f @OrIfPlain 10s } # @WideTaggedList indent + # @VeryWideIndent { 8.00f @OrIfPlain 20s } # @VeryWideTaggedList indent + # @ListOuterGap { 1.00v @OrIfPlain 1f } # gap before, after lists + # @ListGap { 1.00v @OrIfPlain 1f } # gap between list items + # @ListIndent { 0s } # indent of list items + # @ListRightIndent { 0s } # right indent of list items + # @ListLabelWidth { 2.00f @OrIfPlain 5s } # width allowed for list tags + # @NumberSeparator { . } # separates nums like 2.3.7 +} + + +############################################################################### +# # +# The @DocumentSetup @Use clause - page layout plus figures, tables, etc. # +# # +# To change the default value of any option, delete the # at the start of # +# its line and change the value between braces. # +# # +############################################################################### + +@Use { @DocumentSetup + # @PageType { A4 @OrIfPlain Other} # page type (width, height) + # @PageWidth { 80s } # page width if type Other + # @PageHeight { 66f } # page height if type Other + # @PageOrientation { Portrait } # Portrait, Landscape, etc. + # @PageBackground { } # background of each page + # @TopMargin { 2.5c @OrIfPlain 6f } # top margin of all pages + # @FootMargin { 2.5c @OrIfPlain 6f } # bottom margin of all pages + # @OddLeftMargin { 2.5c @OrIfPlain 10s } # left margin of odd pages + # @OddRightMargin { 2.5c @OrIfPlain 10s } # right margin of odd pages + # @EvenLeftMargin { 2.5c @OrIfPlain 10s } # left margin of even pages + # @EvenRightMargin { 2.5c @OrIfPlain 10s } # right margin of even pages + # @PageBoxType { None } # None Box CurveBox ShadowBox + # @PageBoxMargin { 1.00c } # page box margin + # @PageBoxLineWidth { } # page box line thickness + # @PageBoxPaint { none } # page box paint + # @PageBoxShadow { 0.60c } # shadow margin if ShadowBox + # @ColumnNumber { 1 } # number of columns (1 to 10) + # @ColumnGap { 1.00c @OrIfPlain 6s } # column gap + # @FigureLocation { PageTop } # default figure location + # @TableLocation { PageTop } # default table location + # @FigureFormat { @CC @Body } # default figure format + # @TableFormat { @CC @Body } # default table format + # @FigureWord { figure } # "Figure" word else anything + # @TableWord { table } # "Table" word else anything + # @FigureNumbers { Arabic } # method of numbering figures + # @TableNumbers { Arabic } # method of numbering tables + # @FigureCaptionPos { Below } # Above or Below + # @TableCaptionPos { Below } # Above or Below + # @CaptionFont { } # figure, table caption font + # @CaptionBreak { } # figure, table caption break + # @CaptionFormat { @B { number @DotSep @OneCol } } # figure, table caption format + # @MakeFigureContents { No } # list of figures at start + # @MakeTableContents { No } # list of tables at start + # @MakeContents { No } # make contents? Yes or No + # @ContentsGap { 0.20v @OrIfPlain 0f } # extra gap above minor entry + # @ContentsGapAbove { 0.80v @OrIfPlain 1f } # extra gap above major entry + # @ContentsGapBelow { 0.00v @OrIfPlain 0f } # extra gap below major entry + # @ContentsFont { Bold } # font for major entry + # @ContentsPartGapAbove { 1.00v @OrIfPlain 1f } # extra gap above `part' entry + # @ContentsPartGapBelow { 0.00v @OrIfPlain 0f } # extra gap below `part' entry + # @ContentsFormat { number @DotSep title } # contents entry format + # @ContentsLeader { .. } # leader symbol in contents + # @ContentsLeaderGap { 4s @OrIfPlain 2s } # gap between leaders + # @ContentsRightWidth { 3f @OrIfPlain 6s } # page numbers column width + # @MakeReferences { Yes } # make references? Yes or No + # @RefCiteStyle { [cite] } # citation style + # @RefCiteLabels { @RefNum } # citation items + # @RefNumbers { Arabic } # reference numbers + # @RefListFormat { Labels } # NoLabels, Labels, etc. + # @RefListLabels { [@RefNum] } # ref list label format + # @RefListTitle { references } # title of reference list + # @ChapRefListTitle { references } # title of chapter ref list + # @RefListIndent { 0s } # indent to left of labels + # @RefListRightIndent { 0s } # indent to right of items + # @RefListGap { @ListGap } # gap between ref list items + # @RefListFont { } # font used in reference list + # @RefListBreak { } # break style of ref list + # @RefListLabelWidth { @ListLabelWidth } # Labels column width + # @RefListSortKey { @Tag } # sorting key + # @MakeIndex { No } # make index? Yes or No + # @IndexFont { } # index entries font + # @IndexBreak { {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break + # @IndexColumnNumber { 2 } # index columns (1 to 10) + # @IndexColumnGap { 1.00c @OrIfPlain 6s } # index column gap + # @MakeIndexA { No } # make index A? Yes or No + # @IndexAFont { } # index A entries font + # @IndexABreak { {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break + # @IndexAColumnNumber { 2 } # index A columns (1 to 10) + # @IndexAColumnGap { 1.00c @OrIfPlain 6s } # index A column gap + # @MakeIndexB { No } # make index B? Yes or No + # @IndexBFont { } # index B entries font + # @IndexBBreak { {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break + # @IndexBColumnNumber { 2 } # index B columns (1 to 10) + # @IndexBColumnGap { 1.00c @OrIfPlain 6s } # index B column gap + # @TopGap { 0.75c @OrIfPlain 2f } # gap between figures + # @MidGap { 0.75c @OrIfPlain 2f } # gap above/below body text + # @FootNoteNumbers { Arabic } # footnote numbers + # @FootNoteThrough { No } # numbered through chapter? + # @FootNoteLocation { ColFoot } # where the footnote appears + # @FootNoteFont { 0.80f } # font for footnotes + # @FootNoteBreak { 1.2fx @OrIfPlain 1fx } # break for footnotes + # @FootNoteFormat { { number &0.05f } @Insert body } # footnote format + # @FootLen { 2.00c @OrIfPlain 10s } # length of footnote line + # @FootAboveGap { @DisplayGap } # gap above footnote line + # @FootGap { 0.20c @OrIfPlain 1fx } # gap between footnotes + # @MarginNoteFont { 0.80f } # font of margin notes + # @MarginNoteBreak { ragged 1.10fx } # break style of margin notes + # @MarginNoteHGap { 0.5c } # horizontal gap to notes + # @MarginNoteVGap { @DisplayGap } # min vertical gap between + # @MarginNoteWidth { 1.50c } # width of margin notes + # @EndNoteNumbers { Arabic } # endnote numbers + # @EndNoteFont { 0.80f } # font of endnotes + # @EndNoteBreak { 1.2fx @OrIfPlain 1fx } # break for endnotes + # @EndNoteFormat { { number &0.05f } @Insert body } # endnote format + # @EndNoteGap { 0.20c @OrIfPlain 1f } # gap between endnotes + # @TheoremWord { theorem } # "Theorem" word, etc. + # @TheoremTitleFormat { (title) } # only if title present + # @TheoremFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @DefinitionWord { definition } # "Definition" word, etc. + # @DefinitionTitleFormat { (title) } # only if title present + # @DefinitionFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @ClaimWord { claim } # "Claim" word, etc. + # @ClaimTitleFormat { (title) } # only if title present + # @ClaimFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @PropositionWord { proposition } # "Proposition" word, etc. + # @PropositionTitleFormat { (title) } # only if title present + # @PropositionFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @LemmaWord { lemma } # "Lemma" word, etc. + # @LemmaTitleFormat { (title) } # only if title present + # @LemmaFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @CorollaryWord { corollary } # "Corollary" word, etc. + # @CorollaryTitleFormat { (title) } # only if title present + # @CorollaryFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @ExampleWord { example } # "Example" word, etc. + # @ExampleTitleFormat { (title) } # only if title present + # @ExampleFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @ProofWord { proof } # "Proof" word, etc. + # @PageHeaders { Simple } # None Simple Titles NoTitles + # @PageNumbers { Arabic } # page numbers + # @FirstPageNumber { 1 } # number of first page + # @IntroPageNumbers { Roman } # intro page numbers + # @IntroFirstPageNumber{ 1 } # number of first intro page + # @StructPageNums { No } # make structured page numbers + + # @OddTop { @Centre{- @PageNum -} } # Simple page headers + # @OddFoot { @Null } + # @EvenTop { @Centre{- @PageNum -} } + # @EvenFoot { @Null } + # @StartOddTop { @Null } + # @StartOddFoot { @Null } + # @StartEvenTop { @Null } + # @StartEvenFoot { @Null } + # @IntroOddTop { @Null } + # @IntroOddFoot { @Centre @PageNum } + # @IntroEvenTop { @Null } + # @IntroEvenFoot { @Centre @PageNum } + # @IntroStartOddTop { @Null } + # @IntroStartOddFoot { @Null } + # @IntroStartEvenTop { @Null } + # @IntroStartEvenFoot { @Null } + + # Titles, NoTitles headers + # @RunningOddTop { @I {@MinorNum @DotSep @MinorTitle} @Right @B @PageNum } + # @RunningOddFoot { @Null } + # @RunningEvenTop { @B @PageNum @Right @I {@MajorNum @DotSep @MajorTitle} } + # @RunningEvenFoot { @Null } + # @RunningStartOddTop { @Null } + # @RunningStartOddFoot { @Centre { Bold 0.8f } @Font @PageNum } + # @RunningStartEvenTop { @Null } + # @RunningStartEvenFoot { @Centre { Bold 0.8f } @Font @PageNum } + # @RunningIntroOddTop { @Null } + # @RunningIntroOddFoot { @Right @PageNum } + # @RunningIntroEvenTop { @Null } + # @RunningIntroEvenFoot { @PageNum } + # @RunningIntroStartOddTop { @Null } + # @RunningIntroStartOddFoot { @Null } + # @RunningIntroStartEvenTop { @Null } + # @RunningIntroStartEvenFoot { @Null } +} + + +############################################################################### +# # +# The @IllustrationSetup @Use clause - there are no options for this. # +# # +############################################################################### + +@Use { @IllustrationSetup +} + + +############################################################################### +# # +# @Database (and @SysDatabase) clauses go here. # +# # +############################################################################### + +@SysDatabase @RefStyle { refstyle } # reference printing styles diff --git a/include/picturef b/include/picturef new file mode 100644 index 0000000..fd9177d --- /dev/null +++ b/include/picturef @@ -0,0 +1,37 @@ + +########################################################################### +# # +# @IllustrationSetup extension to @DocumentSetup. # +# # +# Jeffrey H. Kingston # +# August 1994 # +# # +# This package extends DocumentSetup for illustrations. # +# # +########################################################################### + +extend @BasicSetup @DocumentSetup +export @Illustration +def @IllustrationSetup +@Begin + + ####################################################################### + # # + # @Illustration # + # # + ####################################################################### + + def @Illustration + named @InitialFont { @InitialFont } + named @InitialBreak { @InitialBreak } + named @InitialSpace { @InitialSpace } + named @InitialLanguage { @InitialLanguage } + named @InitialColour { @InitialColour } + right x + { + @InitialFont @Font @InitialBreak @Break @InitialLanguage @Language + @InitialSpace @Space { @ColourCommand @InitialColour } @SetColour + @OneCol @OneRow x + } + +@End @IllustrationSetup diff --git a/include/report b/include/report new file mode 100644 index 0000000..01fdcc6 --- /dev/null +++ b/include/report @@ -0,0 +1,372 @@ +############################################################################### +# # +# Lout setup file for technical reports # +# # +# Jeffrey H. Kingston # +# 5 February 1999 # +# 17 September 1999 # +# # +# Note: this version, released with Lout Version 3.13, is not upwardly # +# compatible with previous versions: the @Abstract symbol must now # +# be placed before the //, not after. # +# # +############################################################################### + + +############################################################################### +# # +# @SysInclude commands for standard packages. # +# # +############################################################################### + + @SysInclude { fontdefs } # font definitions + @SysInclude { langdefs } # language definitions + @SysInclude { bsf } # BasicSetup package + @SysInclude { dsf } # DocumentSetup package + @SysInclude { reportf } # ReportSetup extension + + +############################################################################### +# # +# @Include command for reading personal definitions from current directory. # +# # +############################################################################### + + @Include { mydefs } + + +############################################################################### +# # +# The @BasicSetup @Use clause - basics, lists, paragraphs, displays. # +# # +# To change the default value of any option, delete the # at the start of # +# its line and change the value between braces. # +# # +############################################################################### + +@Use { @BasicSetup + # @InitialFont { Times Base 12p } # initial font + # @InitialBreak {{adjust 1.2fx hyphen} @OrIfPlain {ragged 1fx nohyphen}} + # @InitialSpace { lout } # initial space style + # @InitialLanguage { English } # initial language + # @InitialColour { black } # initial colour + # @OptimizePages { No } # optimize page breaks? + # @HeadingFont { Bold } # font for @Heading + # @ParaGap { 1.3vx @OrIfPlain 1f } # gap between paragraphs + # @ParaIndent { 2.00f @OrIfPlain 5s } # first-line indent for @PP + # @DisplayGap { 1.00v @OrIfPlain 1f } # gap above, below displays + # @DisplayIndent { 2.00f @OrIfPlain 5s } # @IndentedDisplay indent + # @DefaultIndent { 0.5rt } # @Display indent + # @DisplayNumStyle { (num) } # style of display numbers + # @WideIndent { 4.00f @OrIfPlain 10s } # @WideTaggedList indent + # @VeryWideIndent { 8.00f @OrIfPlain 20s } # @VeryWideTaggedList indent + # @ListOuterGap { 1.00v @OrIfPlain 1f } # gap before, after lists + # @ListGap { 1.00v @OrIfPlain 1f } # gap between list items + # @ListIndent { 0s } # indent of list items + # @ListRightIndent { 0s } # right indent of list items + # @ListLabelWidth { 2.00f @OrIfPlain 5s } # width allowed for list tags + # @NumberSeparator { . } # separates nums like 2.3.7 +} + + +############################################################################### +# # +# The @DocumentSetup @Use clause - page layout plus figures, tables, etc. # +# # +# To change the default value of any option, delete the # at the start of # +# its line and change the value between braces. # +# # +############################################################################### + +@Use { @DocumentSetup + # @PageType { A4 @OrIfPlain Other} # page type (width, height) + # @PageWidth { 80s } # page width if type Other + # @PageHeight { 66f } # page height if type Other + # @PageOrientation { Portrait } # Portrait, Landscape, etc. + # @PageBackground { } # background of each page + # @TopMargin { 2.5c @OrIfPlain 6f } # top margin of all pages + # @FootMargin { 2.5c @OrIfPlain 6f } # bottom margin of all pages + # @OddLeftMargin { 2.5c @OrIfPlain 10s } # left margin of odd pages + # @OddRightMargin { 2.5c @OrIfPlain 10s } # right margin of odd pages + # @EvenLeftMargin { 2.5c @OrIfPlain 10s } # left margin of even pages + # @EvenRightMargin { 2.5c @OrIfPlain 10s } # right margin of even pages + # @PageBoxType { None } # None Box CurveBox ShadowBox + # @PageBoxMargin { 1.00c } # page box margin + # @PageBoxLineWidth { } # page box line thickness + # @PageBoxPaint { none } # page box paint + # @PageBoxShadow { 0.60c } # shadow margin if ShadowBox + # @ColumnNumber { 1 } # number of columns (1 to 10) + # @ColumnGap { 1.00c @OrIfPlain 6s } # column gap + # @FigureLocation { PageTop } # default figure location + # @TableLocation { PageTop } # default table location + # @FigureFormat { @CC @Body } # default figure format + # @TableFormat { @CC @Body } # default table format + # @FigureWord { figure } # "Figure" word else anything + # @TableWord { table } # "Table" word else anything + # @FigureNumbers { Arabic } # method of numbering figures + # @TableNumbers { Arabic } # method of numbering tables + # @FigureCaptionPos { Below } # Above or Below + # @TableCaptionPos { Below } # Above or Below + # @CaptionFont { } # figure, table caption font + # @CaptionBreak { } # figure, table caption break + # @CaptionFormat { @B { number @DotSep @OneCol } } # figure, table caption format + # @MakeFigureContents { No } # list of figures at start + # @MakeTableContents { No } # list of tables at start + # @MakeContents { No } # make contents? Yes or No + # @ContentsGap { 0.20v @OrIfPlain 0f } # extra gap above minor entry + # @ContentsGapAbove { 0.80v @OrIfPlain 1f } # extra gap above major entry + # @ContentsGapBelow { 0.00v @OrIfPlain 0f } # extra gap below major entry + # @ContentsFont { Bold } # font for major entry + # @ContentsPartGapAbove { 1.00v @OrIfPlain 1f } # extra gap above `part' entry + # @ContentsPartGapBelow { 0.00v @OrIfPlain 0f } # extra gap below `part' entry + # @ContentsFormat { number @DotSep title } # contents entry format + # @ContentsLeader { .. } # leader symbol in contents + # @ContentsLeaderGap { 4s @OrIfPlain 2s } # gap between leaders + # @ContentsRightWidth { 3f @OrIfPlain 6s } # page numbers column width + # @MakeReferences { Yes } # make references? Yes or No + # @RefCiteStyle { [cite] } # citation style + # @RefCiteLabels { @RefNum } # citation items + # @RefNumbers { Arabic } # reference numbers + # @RefListFormat { Labels } # NoLabels, Labels, etc. + # @RefListLabels { [@RefNum] } # ref list label format + # @RefListTitle { references } # title of reference list + # @ChapRefListTitle { references } # title of chapter ref list + # @RefListIndent { 0s } # indent to left of labels + # @RefListRightIndent { 0s } # indent to right of items + # @RefListGap { @ListGap } # gap between ref list items + # @RefListFont { } # font used in reference list + # @RefListBreak { } # break style of ref list + # @RefListLabelWidth { @ListLabelWidth } # Labels column width + # @RefListSortKey { @Tag } # sorting key + # @MakeIndex { No } # make index? Yes or No + # @IndexFont { } # index entries font + # @IndexBreak { {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break + # @IndexColumnNumber { 2 } # index columns (1 to 10) + # @IndexColumnGap { 1.00c @OrIfPlain 6s } # index column gap + # @MakeIndexA { No } # make index A? Yes or No + # @IndexAFont { } # index A entries font + # @IndexABreak { {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break + # @IndexAColumnNumber { 2 } # index A columns (1 to 10) + # @IndexAColumnGap { 1.00c @OrIfPlain 6s } # index A column gap + # @MakeIndexB { No } # make index B? Yes or No + # @IndexBFont { } # index B entries font + # @IndexBBreak { {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break + # @IndexBColumnNumber { 2 } # index B columns (1 to 10) + # @IndexBColumnGap { 1.00c @OrIfPlain 6s } # index B column gap + # @TopGap { 0.75c @OrIfPlain 2f } # gap between figures + # @MidGap { 0.75c @OrIfPlain 2f } # gap above/below body text + # @FootNoteNumbers { Arabic } # footnote numbers + # @FootNoteThrough { No } # numbered through chapter? + # @FootNoteLocation { ColFoot } # where the footnote appears + # @FootNoteFont { 0.80f } # font for footnotes + # @FootNoteBreak { 1.2fx @OrIfPlain 1fx } # break for footnotes + # @FootNoteFormat { { number &0.05f } @Insert body } # footnote format + # @FootLen { 2.00c @OrIfPlain 10s } # length of footnote line + # @FootAboveGap { @DisplayGap } # gap above footnote line + # @FootGap { 0.20c @OrIfPlain 1fx } # gap between footnotes + # @MarginNoteFont { 0.80f } # font of margin notes + # @MarginNoteBreak { ragged 1.10fx } # break style of margin notes + # @MarginNoteHGap { 0.5c } # horizontal gap to notes + # @MarginNoteVGap { @DisplayGap } # min vertical gap between + # @MarginNoteWidth { 1.50c } # width of margin notes + # @EndNoteNumbers { Arabic } # endnote numbers + # @EndNoteFont { 0.80f } # font of endnotes + # @EndNoteBreak { 1.2fx @OrIfPlain 1fx } # break for endnotes + # @EndNoteFormat { { number &0.05f } @Insert body } # endnote format + # @EndNoteGap { 0.20c @OrIfPlain 1f } # gap between endnotes + # @TheoremWord { theorem } # "Theorem" word, etc. + # @TheoremTitleFormat { (title) } # only if title present + # @TheoremFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @DefinitionWord { definition } # "Definition" word, etc. + # @DefinitionTitleFormat { (title) } # only if title present + # @DefinitionFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @ClaimWord { claim } # "Claim" word, etc. + # @ClaimTitleFormat { (title) } # only if title present + # @ClaimFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @PropositionWord { proposition } # "Proposition" word, etc. + # @PropositionTitleFormat { (title) } # only if title present + # @PropositionFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @LemmaWord { lemma } # "Lemma" word, etc. + # @LemmaTitleFormat { (title) } # only if title present + # @LemmaFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @CorollaryWord { corollary } # "Corollary" word, etc. + # @CorollaryTitleFormat { (title) } # only if title present + # @CorollaryFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @ExampleWord { example } # "Example" word, etc. + # @ExampleTitleFormat { (title) } # only if title present + # @ExampleFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @ProofWord { proof } # "Proof" word, etc. + # @PageHeaders { Simple } # None Simple Titles NoTitles + # @PageNumbers { Arabic } # page numbers + # @FirstPageNumber { 1 } # number of first page + # @IntroPageNumbers { Roman } # intro page numbers + # @IntroFirstPageNumber{ 1 } # number of first intro page + # @StructPageNums { No } # make structured page numbers + + # @OddTop { @Centre{- @PageNum -} } # Simple page headers + # @OddFoot { @Null } + # @EvenTop { @Centre{- @PageNum -} } + # @EvenFoot { @Null } + # @StartOddTop { @Null } + # @StartOddFoot { @Null } + # @StartEvenTop { @Null } + # @StartEvenFoot { @Null } + # @IntroOddTop { @Null } + # @IntroOddFoot { @Centre @PageNum } + # @IntroEvenTop { @Null } + # @IntroEvenFoot { @Centre @PageNum } + # @IntroStartOddTop { @Null } + # @IntroStartOddFoot { @Null } + # @IntroStartEvenTop { @Null } + # @IntroStartEvenFoot { @Null } + + # Titles, NoTitles headers + # @RunningOddTop { @I {@MinorNum @DotSep @MinorTitle} @Right @B @PageNum } + # @RunningOddFoot { @Null } + # @RunningEvenTop { @B @PageNum @Right @I {@MajorNum @DotSep @MajorTitle} } + # @RunningEvenFoot { @Null } + # @RunningStartOddTop { @Null } + # @RunningStartOddFoot { @Centre { Bold 0.8f } @Font @PageNum } + # @RunningStartEvenTop { @Null } + # @RunningStartEvenFoot { @Centre { Bold 0.8f } @Font @PageNum } + # @RunningIntroOddTop { @Null } + # @RunningIntroOddFoot { @Right @PageNum } + # @RunningIntroEvenTop { @Null } + # @RunningIntroEvenFoot { @PageNum } + # @RunningIntroStartOddTop { @Null } + # @RunningIntroStartOddFoot { @Null } + # @RunningIntroStartEvenTop { @Null } + # @RunningIntroStartEvenFoot { @Null } +} + + +############################################################################### +# # +# The @ReportSetup @Use clause - options specific to technical reports. # +# # +############################################################################### + +@Use { @ReportSetup + # @CoverSheet { Yes } # make cover sheet + # @DisplayAbstract { No } # abstract full width display + # @ContentsSeparate { No } # contents on separate pages + # @DateLine { No } # Yes, No, or a date + # @ReferencesBeforeAppendices { No } # references before appendices + # @AbstractWord { abstract } # word for "Abstract" + # @ContentsWord { contents } # word for "Contents" + # @AppendixWord { appendix } # word for "Appendix" + # @IndexWord { index } # word for "Index" + # @IndexAWord { index } # word for "Index" (A) + # @IndexBWord { index } # word for "Index" (B) + # @SectionNumbers { Arabic } # kind of section numbers + # @FirstSectionNumber { 1 } # first section num (Arabic) + # @SubSectionNumbers { Arabic } # kind of subsection numbers + # @FirstSubSectionNumber { 1 } # first subsect num (Arabic) + # @SubSubSectionNumbers { Arabic } # kind of sub-subsect numbers + # @FirstSubSubSectionNumber { 1 } # first subsub. num (Arabic) + # @AppendixNumbers { UCAlpha } # kind of appendix numbers + # @FirstAppendixNumber { 1 } # first appendix num (Arabic) + # @SubAppendixNumbers { Arabic } # kind of subappendix numbers + # @FirstSubAppendixNumber { 1 } # first sub-app. num (Arabic) + # @SubSubAppendixNumbers { Arabic } # kind of sub-subapp. numbers + # @FirstSubSubAppendixNumber { 1 } # first sub-sub. num (Arabic) + # @AbstractHeadingFont { Bold } # abstract head font + # @AbstractHeadingBreak { ragged 1.2fx nohyphen } # abstract head break + # @AbstractHeadingFormat { title } # abstract head fmt + # @ContentsHeadingFont { Bold } # contents head font + # @ContentsHeadingBreak { ragged 1.2fx nohyphen } # contents head break + # @ContentsHeadingFormat { title } # contents head fmt + # @SectionHeadingFont { Bold } # section head font + # @SectionHeadingBreak { ragged 1.2fx nohyphen } # section head break + # @SectionHeadingFormat { number @DotSep title } # section head fmt + # @SubSectionHeadingFont { Bold } # subsection head font + # @SubSectionHeadingBreak { ragged 1.2fx nohyphen } # subsection head break + # @SubSectionHeadingFormat { number @DotSep title } # subsection head fmt + # @SubSubSectionHeadingFont { Slope } # sub-subs. head font + # @SubSubSectionHeadingBreak { ragged 1.2fx nohyphen } # sub-subs. head break + # @SubSubSectionHeadingFormat { number @DotSep title } # sub-subs. head fmt + # @AppendixHeadingFont { Bold } # appendix head font + # @AppendixHeadingBreak { ragged 1.2fx nohyphen } # appendix head break + # @AppendixHeadingFormat { number @DotSep title } # appendix head fmt + # @SubAppendixHeadingFont { Bold } # subapp. head font + # @SubAppendixHeadingBreak { ragged 1.2fx nohyphen } # subapp. head break + # @SubAppendixHeadingFormat { number @DotSep title } # subapp. head fmt + # @SubSubAppendixHeadingFont { Slope } # sub-subapp. head font + # @SubSubAppendixHeadingBreak { ragged 1.2fx nohyphen } # sub-subapp head break + # @SubSubAppendixHeadingFormat{ number @DotSep title } # sub-subapp. head fmt + # @ReferencesHeadingFont { Bold } # references head font + # @ReferencesHeadingBreak { ragged 1.2fx nohyphen } # references head break + # @ReferencesHeadingFormat { title } # references head fmt + # @IndexHeadingFont { Bold } # index head font + # @IndexHeadingBreak { ragged 1.2fx nohyphen } # index head break + # @IndexHeadingFormat { title } # index head fmt + # @IndexAHeadingFont { Bold } # index A head font + # @IndexAHeadingBreak { ragged 1.2fx nohyphen } # index A head break + # @IndexAHeadingFormat { title } # index A head fmt + # @IndexBHeadingFont { Bold } # index B head font + # @IndexBHeadingBreak { ragged 1.2fx nohyphen } # index B head break + # @IndexBHeadingFormat { title } # index B head fmt + # @SectionGap { 2.0v @OrIfPlain 3f } # between sections + # @SubSectionGap { 1.5v @OrIfPlain 2f } # between subsects + # @SubSubSectionGap { 1.5v @OrIfPlain 2f } # between sub-subs. + # @AppendixGap { 2.0v @OrIfPlain 3f } # between appendices + # @SubAppendixGap { 1.5v @OrIfPlain 2f } # between subappendices + # @SubSubAppendixGap { 1.5v @OrIfPlain 2f } # between sub-subapps + # @SectionInContents { Yes } # add sections to contents + # @SubSectionInContents { Yes } # add subsections to contents + # @SubSubSectionInContents { No } # add sub-subsects to contents + # @AppendixInContents { Yes } # add appendices to contents + # @SubAppendixInContents { Yes } # add subappendices to contents + # @SubSubAppendixInContents { No } # add sub-subapps to contents + # @ReferencesInContents { Yes } # add references to contents + # @IndexInContents { Yes } # add index to contents + # @IndexAInContents { Yes } # add index A to contents + # @IndexBInContents { Yes } # add index B to contents + # @SectionNumInTheorems { No } # theorem num has section num + # @SubSectionNumInTheorems { No } # theorem num has subsect num + # @SubSubSectionNumInTheorems { No } # theorem num has sub-ss. num + # @AppendixNumInTheorems { No } # theorem num has appendix num + # @SubAppendixNumInTheorems { No } # theorem num has sub-app num + # @SubSubAppendixNumInTheorems{ No } # theorem num has sub-sa. num + # @SectionNumInDisplays { Yes } # display num has section num + # @SubSectionNumInDisplays { No } # display num has subsect num + # @SubSubSectionNumInDisplays { No } # display num has sub-ss. num + # @AppendixNumInDisplays { Yes } # display num has appendix num + # @SubAppendixNumInDisplays { No } # display num has sub-app num + # @SubSubAppendixNumInDisplays{ No } # display num has sub-sa. num + # @SectionNumInFigures { No } # figure num has section num + # @SubSectionNumInFigures { No } # figure num has subsect num + # @SubSubSectionNumInFigures { No } # figure num has sub-ss. num + # @AppendixNumInFigures { No } # figure num has appendix num + # @SubAppendixNumInFigures { No } # figure num has sub-app num + # @SubSubAppendixNumInFigures { No } # figure num has sub-sa. num + # @SectionNumInTables { No } # table num has section num + # @SubSectionNumInTables { No } # table num has subsect num + # @SubSubSectionNumInTables { No } # table num has sub-ss. num + # @AppendixNumInTables { No } # table num has appendix num + # @SubAppendixNumInTables { No } # table num has sub-app num + # @SubSubAppendixNumInTables { No } # table num has sub-sa. num + # @SectionNumInRunners { Yes } # runners have section num + # @SubSectionNumInRunners { No } # runners have subsect num + # @SubSubSectionNumInRunners { No } # runners have sub-ss. num + # @AppendixNumInRunners { Yes } # runners have appendix num + # @SubAppendixNumInRunners { No } # runners have sub-app num + # @SubSubAppendixNumInRunners { No } # runners have sub-sa. num + # @FigureContentsPrefix { } # for structured page nums + # @TableContentsPrefix { } # for structured page nums + # @SectionPrefix { } # for structured page nums + # @AppendixPrefix { } # for structured page nums + # @ReferencesPrefix { } # for structured page nums + # @IndexPrefix { } # for structured page nums + # @IndexAPrefix { } # for structured page nums + # @IndexBPrefix { } # for structured page nums +} + + +############################################################################### +# # +# @Database (and @SysDatabase) clauses go here. # +# # +############################################################################### + +@SysDatabase @RefStyle { refstyle } # reference printing styles diff --git a/include/reportf b/include/reportf new file mode 100644 index 0000000..f1a62a9 --- /dev/null +++ b/include/reportf @@ -0,0 +1,895 @@ + +########################################################################### +# # +# @ReportSetup extension to @DocumentSetup. # +# # +# Jeffrey H. Kingston # +# August 1994 # +# # +# This package extends DocumentSetup with definitions for reports. # +# # +########################################################################### + +extend @BasicSetup @DocumentSetup +export @Report @Section @Appendix +def @ReportSetup + named @CoverSheet { Yes } + named @ContentsSeparate { No } + named @DateLine { No } + named @AbstractDisplay { Yes } + named @AbstractTitle { dft } + named @ReferencesBeforeAppendices { No } + + named @AbstractWord { abstract } + named @ContentsWord { contents } + named @AppendixWord { appendix } + named @IndexWord { index } + named @IndexAWord { index } + named @IndexBWord { index } + + named @SectionNumbers { Arabic } + named @FirstSectionNumber { 1 } + named @SubSectionNumbers { Arabic } + named @FirstSubSectionNumber { 1 } + named @SubSubSectionNumbers { Arabic } + named @FirstSubSubSectionNumber { 1 } + named @AppendixNumbers { UCAlpha } + named @FirstAppendixNumber { 1 } + named @SubAppendixNumbers { Arabic } + named @FirstSubAppendixNumber { 1 } + named @SubSubAppendixNumbers { Arabic } + named @FirstSubSubAppendixNumber { 1 } + + named @AbstractHeadingFont { Bold } + named @AbstractHeadingBreak { ragged 1.2fx nohyphen } + named @AbstractHeadingFormat + right title { title } + + named @ContentsHeadingFont { Bold } + named @ContentsHeadingBreak { ragged 1.2fx nohyphen } + named @ContentsHeadingFormat + right title { title } + + named @SectionHeadingFont { Bold } + named @SectionHeadingBreak { ragged 1.2fx nohyphen } + named @SectionHeadingFormat + left number right title { number @DotSep title } + + named @SubSectionHeadingFont { Bold } + named @SubSectionHeadingBreak { ragged 1.2fx nohyphen } + named @SubSectionHeadingFormat + left number right title { number @DotSep title } + + named @SubSubSectionHeadingFont { Slope } + named @SubSubSectionHeadingBreak { ragged 1.2fx nohyphen } + named @SubSubSectionHeadingFormat + left number right title { number @DotSep title } + + named @AppendixHeadingFont { Bold } + named @AppendixHeadingBreak { ragged 1.2fx nohyphen } + named @AppendixHeadingFormat + left number right title { number @DotSep title } + + named @SubAppendixHeadingFont { Bold } + named @SubAppendixHeadingBreak { ragged 1.2fx nohyphen } + named @SubAppendixHeadingFormat + left number right title { number @DotSep title } + + named @SubSubAppendixHeadingFont { Slope } + named @SubSubAppendixHeadingBreak { ragged 1.2fx nohyphen } + named @SubSubAppendixHeadingFormat + left number right title { number @DotSep title } + + named @ReferencesHeadingFont { Bold } + named @ReferencesHeadingBreak { ragged 1.2fx nohyphen } + named @ReferencesHeadingFormat + right title { title } + + named @IndexHeadingFont { Bold } + named @IndexHeadingBreak { ragged 1.2fx nohyphen } + named @IndexHeadingFormat + right title { title } + + named @IndexAHeadingFont { Bold } + named @IndexAHeadingBreak { ragged 1.2fx nohyphen } + named @IndexAHeadingFormat + right title { title } + + named @IndexBHeadingFont { Bold } + named @IndexBHeadingBreak { ragged 1.2fx nohyphen } + named @IndexBHeadingFormat + right title { title } + + named @SectionGap { 2.0v @OrIfPlain 3f } + named @SubSectionGap { 1.5v @OrIfPlain 2f } + named @SubSubSectionGap { 1.5v @OrIfPlain 2f } + named @AppendixGap { 2.0v @OrIfPlain 3f } + named @SubAppendixGap { 1.5v @OrIfPlain 2f } + named @SubSubAppendixGap { 1.5v @OrIfPlain 2f } + + named @SectionInContents { Yes } + named @SubSectionInContents { Yes } + named @SubSubSectionInContents { No } + named @AppendixInContents { Yes } + named @SubAppendixInContents { Yes } + named @SubSubAppendixInContents { No } + named @ReferencesInContents { Yes } + named @IndexInContents { Yes } + named @IndexAInContents { Yes } + named @IndexBInContents { Yes } + + named @SectionNumInTheorems { No } + named @SubSectionNumInTheorems { No } + named @SubSubSectionNumInTheorems { No } + named @AppendixNumInTheorems { No } + named @SubAppendixNumInTheorems { No } + named @SubSubAppendixNumInTheorems { No } + + named @SectionNumInDisplays { Yes } + named @SubSectionNumInDisplays { No } + named @SubSubSectionNumInDisplays { No } + named @AppendixNumInDisplays { Yes } + named @SubAppendixNumInDisplays { No } + named @SubSubAppendixNumInDisplays { No } + + named @SectionNumInFigures { No } + named @SubSectionNumInFigures { No } + named @SubSubSectionNumInFigures { No } + named @AppendixNumInFigures { No } + named @SubAppendixNumInFigures { No } + named @SubSubAppendixNumInFigures { No } + + named @SectionNumInTables { No } + named @SubSectionNumInTables { No } + named @SubSubSectionNumInTables { No } + named @AppendixNumInTables { No } + named @SubAppendixNumInTables { No } + named @SubSubAppendixNumInTables { No } + + named @SectionNumInRunners { Yes } + named @SubSectionNumInRunners { No } + named @SubSubSectionNumInRunners { No } + named @AppendixNumInRunners { Yes } + named @SubAppendixNumInRunners { No } + named @SubSubAppendixNumInRunners { No } + + named @FigureContentsPrefix { } + named @TableContentsPrefix { } + named @SectionPrefix { } + named @AppendixPrefix { } + named @ReferencesPrefix { } + named @IndexPrefix { } + named @IndexAPrefix { } + named @IndexBPrefix { } +@Begin + + ####################################################################### + # # + # Lists of sections, subsections, etc. # + # # + ####################################################################### + + export num + def @SectionList named @Tag {} right num + { + @Galley + //@SectionGap @SectionList @Next num + } + + export num + def @SubSectionList named @Tag {} right num + { + @Galley + //@SubSectionGap @SubSectionList @Next num + } + + export num + def @SubSubSectionList named @Tag {} right num + { + @Galley + //@SubSubSectionGap @SubSubSectionList @Next num + } + + export num + def @AppendixList named @Tag {} right num + { + @Galley + //@AppendixGap @AppendixList @Next num + } + + export num + def @SubAppendixList named @Tag {} right num + { + @Galley + //@SubAppendixGap @SubAppendixList @Next num + } + + export num + def @SubSubAppendixList named @Tag {} right num + { + @Galley + //@SubSubAppendixGap @SubSubAppendixList @Next num + } + + + ####################################################################### + # # + # @Full - this sends text to a full-width place. # + # # + ####################################################################### + + def @Full force into { @FullPlace&&following } right x + { + x + } + + def @NoForceFull into { @FullPlace&&following } right x + { + x + } + + + ####################################################################### + # # + # @Report # + # # + ####################################################################### + + def @Report + named @Title {} + named @Author {} + named @Institution {} + named @DateLine { @DateLine } + named @CoverSheet { @CoverSheet } + named @ContentsSeparate { @ContentsSeparate } + named @AtEnd { dft } + named @InitialFont { @InitialFont } + named @InitialBreak { @InitialBreak } + named @InitialSpace { @InitialSpace } + named @InitialLanguage { @InitialLanguage } + named @PageOrientation { @PageOrientation } + named @PageHeaders { @PageHeaders } + named @ColumnNumber { @ColumnNumber } + named @FirstPageNumber { @FirstPageNumber } + named @OptimizePages { @OptimizePages } + named @AbstractDisplay { @AbstractDisplay } + named @AbstractTitle { @AbstractTitle } + named @Abstract {} + { + + def @Cntr right x + { + x @Case { + "" @Yield @Null + else @Yield { |0.5rt x | } + } + } + + def @DateValue right indent + { + @DateLine @Case { + No @Yield {} + Yes @Yield @Date + else @Yield @DateLine + } + } + + def @TitleMaterial + { + //1i @B {clines 1.4vx} @Break @Cntr @Title + //1.00v @I clines @Break { |0.5rt @Author | } + //1.00v clines @Break @Cntr @Institution + //1.00v clines @Break @Cntr @DateValue + } + + def @AbstractPart + { + def @Title + { + @AbstractHeadingFont @Font @AbstractHeadingBreak @Break + @AbstractHeadingFormat { + @AbstractTitle @Dft { abstract @WordVal @AbstractWord } + } + } + + @Abstract @Case { + + "" @Yield @Null + + else @Yield @AbstractDisplay @Case { + + No @Yield { @Title @DP @Abstract } + + Yes @Yield { |0.5rt @Title | + @DP + |@DisplayIndent @Abstract |@DisplayIndent + } + } + } + } + + def @ContentsPart + { + // |0.5rt @ContentsHeadingFont @Font @ContentsHeadingBreak @Break + @ContentsHeadingFormat { contents @WordVal @ContentsWord } | + //@DisplayGap @ContentsSection + // NonStart @Runner @MajorTitle {contents @WordVal @ContentsWord} + } + + def @ReferencesPart + named @Tag {} + { + + @LargeScaleStructure + tag { @Tag } + type { Major } + initiallanguage { @InitialLanguage } + title { @RefHeading @RefListTitle } + sendheader { @Body } + headingfont { @ReferencesHeadingFont } + headingbreak { @ReferencesHeadingBreak } + headingformat { @ReferencesHeadingFormat @Body } + incontents { @ReferencesInContents } + majornum {} + majortitle {} + minornum {} + minortitle { @RefHeading @RefListTitle } + prefix { @ReferencesPrefix } + inrunners { Yes } + { //@RefListGap @ReferencesSection } + } + + def @IndexPart + named @Tag {} + { + + def @Run + { + NonStart @Runner + @MajorNum {} + @MajorTitle { index @WordVal @IndexWord } + @MinorNum {} + @MinorTitle {} + @Owner { @Tag } + @Prefix { @IndexPrefix } + } + + @LargeScaleStructure + tag { @Tag } + type { Major } + initiallanguage { @InitialLanguage } + title { index @WordVal @IndexWord } + headingfont { @IndexHeadingFont } + headingbreak { @IndexHeadingBreak } + headingformat { @IndexHeadingFormat @Body } + incontents { @IndexInContents } + prefix { @IndexPrefix } + inrunners { Yes } + majornum {} + majortitle {} + minornum {} + minortitle { index @WordVal @IndexWord } + sendheader { @Full @Body } + innergap { @SectionGap } + wantindefinite { Yes } + @IndexSection @Run + + } + + def @IndexAPart + named @Tag {} + { + def @Run + { + NonStart @Runner + @MajorNum {} + @MajorTitle { index @WordVal @IndexAWord } + @MinorNum {} + @MinorTitle {} + @Owner { @Tag } + @Prefix { @IndexAPrefix } + } + + @LargeScaleStructure + tag { @Tag } + type { Major } + initiallanguage { @InitialLanguage } + title { index @WordVal @IndexAWord } + headingfont { @IndexAHeadingFont } + headingbreak { @IndexAHeadingBreak } + headingformat { @IndexAHeadingFormat @Body } + incontents { @IndexAInContents } + prefix { @IndexAPrefix } + inrunners { Yes } + majornum {} + majortitle {} + minornum {} + minortitle { index @WordVal @IndexAWord } + sendheader { @Full @Body } + innergap { @SectionGap } + wantindefinite { Yes } + @IndexASection @Run + + } + + def @IndexBPart + named @Tag {} + { + def @Run + { + NonStart @Runner + @MajorNum {} + @MajorTitle { index @WordVal @IndexBWord } + @MinorNum {} + @MinorTitle {} + @Owner { @Tag } + @Prefix { @IndexBPrefix } + } + + @LargeScaleStructure + tag { @Tag } + type { Major } + initiallanguage { @InitialLanguage } + title { index @WordVal @IndexBWord } + headingfont { @IndexBHeadingFont } + headingbreak { @IndexBHeadingBreak } + headingformat { @IndexBHeadingFormat @Body } + incontents { @IndexBInContents } + prefix { @IndexBPrefix } + inrunners { Yes } + majornum {} + majortitle {} + minornum {} + minortitle { index @WordVal @IndexBWord } + sendheader { @Full @Body } + innergap { @SectionGap } + wantindefinite { Yes } + @IndexBSection @Run + + } + + def @ContentsGap + { + @ContentsSeparate @Case { + No @Yield @SectionGap + Yes @Yield 2b + } + } + + def @ReportBodyWithoutCoverSheet force into { @ColPlace&&following } + named @Optimize { @OptimizePages } + { + + Start @Runner + // @AbstractDisplay @NoDo @AbstractPart + //@ContentsGap @ContentsPart + //@ContentsGap @SectionList @FirstSectionNumber + //@SectionGap @ReferencesBeforeAppendices @Do { + @MakeReferences @Do @ReferencesPart + } + //@AppendixGap @AppendixList @FirstAppendixNumber + //@SectionGap @EndFigureList + //@SectionGap @EndNoteList 1 + //@SectionGap @ReferencesBeforeAppendices @NoDo { + @MakeReferences @Do @ReferencesPart + } + // @MakeIndexA @Do @IndexAPart + // @MakeIndexB @Do @IndexBPart + // @MakeIndex @Do @IndexPart + } + + def @ReportCoverSheet into { @IntroColPlace&&preceding } + named @Optimize { @OptimizePages } + { + // Start @Runner + // @TitleMaterial + //@DisplayGap @DP @AbstractPart + } + + def @ReportBodyWithCoverSheet force into { @ColPlace&&preceding } + named @Optimize { @OptimizePages } + { + + Start @Runner + //@SectionGap @ContentsPart + //@SectionGap @SectionList @FirstSectionNumber + //@SectionGap @ReferencesBeforeAppendices @Do { + @MakeReferences @Do @ReferencesPart + } + //@AppendixGap @AppendixList @FirstAppendixNumber + //@SectionGap @ReferencesBeforeAppendices @NoDo { + @MakeReferences @Do @ReferencesPart + } + //@SectionGap @EndFigureList + //@SectionGap @EndNoteList 1 + // @MakeIndexA @Do @IndexAPart + // @MakeIndexB @Do @IndexBPart + // @MakeIndex @Do @IndexPart + } + + @InitialFont @Font @InitialBreak @Break @InitialLanguage @Language + @InitialSpace @Space { @ColourCommand @InitialColour } @SetColour + { + @CoverSheet @Case { + + No @Yield { + @FootNoteThrough @Do @BeginFootNoteCounter + // Yes @BeginAllCounters {} + // Yes @BeginDisplayCounter {} + // Yes @BeginFigureCounter {} + // Yes @BeginTableCounter {} + // @AbstractDisplay @Do { @NoForceFull @AbstractPart } + // @ReportBodyWithoutCoverSheet + // @PageList + @ColumnNumber { @ColumnNumber } + @PageHeaders { @PageHeaders } + @Orient { @PageOrientation } + # extra { Yes } + @AtTop { @TitleMaterial } + @FirstPageNumber + // NonStart @Runner + // @AtEnd @Case { + dft @Yield @Null + else @Yield + @EvenPage @Orient { @PageOrientation } @AtEnd + } + } + + Yes @Yield { + @FootNoteThrough @Do @BeginFootNoteCounter + // Yes @BeginAllCounters {} + // Yes @BeginDisplayCounter {} + // Yes @BeginFigureCounter {} + // Yes @BeginTableCounter {} + // @SimpleOddOrEvenIntroPageList + @ColumnNumber { 1 } + @PageHeaders { Simple } + @Orient { @PageOrientation } + 1 + // @ReportCoverSheet + // @PageList + @ColumnNumber { @ColumnNumber } + @PageHeaders { @PageHeaders } + @Orient { @PageOrientation } + # extra { Yes } + @AtTop { @TitleMaterial } + @FirstPageNumber + // @ReportBodyWithCoverSheet + // NonStart @Runner + // @AtEnd @Case { + dft @Yield @Null + else @Yield + @EvenPage @Orient { @PageOrientation } @AtEnd + } + } + } + } + } + + + ####################################################################### + # # + # Sections. # + # # + ####################################################################### + + export @BeginSubSections @EndSubSections @SubSection + def @Section force into { @SectionList&&preceding } + named @Tag {} + named @Title {} + named @RunningTitle { dft } + named @InitialLanguage {} + named @BypassNumber { dft } + body @Body + { + + def @EndSubSectionsPlace { @Galley } + + def @EndSubSections force into { @EndSubSectionsPlace&&preceding } + {} + + macro @BeginSubSections + { + //@SubSectionGap @SubSectionList @FirstSubSectionNumber + // @EndSubSectionsPlace // + } + + def @SectionShortNum + { + @SectionNumbers @Then { + @BypassNumber @Dft { + @SectionNumbers @Num @SectionList&&@Tag @Open { num } + } + } + } + + export @BeginSubSubSections @EndSubSubSections @SubSubSection + def @SubSection force into { @SubSectionList&&preceding } + named @Tag {} + named @Title {} + named @RunningTitle { dft } + named @InitialLanguage { @InitialLanguage } + named @BypassNumber { dft } + body @Body + { + + def @EndSubSubSectionsPlace { @Galley } + + def @EndSubSubSections force into + { @EndSubSubSectionsPlace&&preceding } + {} + + macro @BeginSubSubSections + { + //@SubSubSectionGap @SubSubSectionList @FirstSubSubSectionNumber + // @EndSubSubSectionsPlace // + } + + def @SubSectionShortNum + { + @SubSectionNumbers @Then { + @BypassNumber @Dft { + @SectionShortNum @Join @SubSectionNumbers @Num + { @SubSectionList&&@Tag @Open { num } } + } + } + } + + def @SubSubSection force into { @SubSubSectionList&&preceding } + named @Tag {} + named @Title {} + named @RunningTitle { dft } + named @InitialLanguage { @InitialLanguage } + named @BypassNumber { dft } + body @Body + { + + @LargeScaleStructure + tag { @Tag } + type { Minor } + initiallanguage { @InitialLanguage } + title { @Title } + runningtitle { @RunningTitle } + headingfont { @SubSubSectionHeadingFont } + headingbreak { @SubSubSectionHeadingBreak } + headingformat { @Num @SubSubSectionHeadingFormat @Body } + incontents { @SubSubSectionInContents } + contentsindent { 6f } + numbers { @SubSubSectionNumbers } + attachnum { @SubSubSectionList&&preceding @Tagged @Tag } + retrievenum { @SubSubSectionList&&@Tag @Open { num } } + bypassnumber { @BypassNumber } + prefix { @SubSectionShortNum } + majornum {} + majortitle {} + intheorems { @SubSubSectionNumInTheorems } + indisplays { @SubSubSectionNumInDisplays } + infigures { @SubSubSectionNumInFigures } + intables { @SubSubSectionNumInTables } + inrunners { @SubSubSectionNumInRunners } + @Body + + } + + @LargeScaleStructure + tag { @Tag } + type { Minor } + initiallanguage { @InitialLanguage } + title { @Title } + runningtitle { @RunningTitle } + headingfont { @SubSectionHeadingFont } + headingbreak { @SubSectionHeadingBreak } + headingformat { @Num @SubSectionHeadingFormat @Body } + incontents { @SubSectionInContents } + contentsindent { 3f } + numbers { @SubSectionNumbers } + attachnum { @SubSectionList&&preceding @Tagged @Tag } + retrievenum { @SubSectionList&&@Tag @Open { num } } + bypassnumber { @BypassNumber } + prefix { @SectionShortNum } + majornum {} + majortitle {} + intheorems { @SubSectionNumInTheorems } + indisplays { @SubSectionNumInDisplays } + infigures { @SubSectionNumInFigures } + intables { @SubSectionNumInTables } + inrunners { @SubSectionNumInRunners } + @Body + } + + @LargeScaleStructure + tag { @Tag } + type { Minor } + initiallanguage { @InitialLanguage } + title { @Title } + runningtitle { @RunningTitle } + headingfont { @SectionHeadingFont } + headingbreak { @SectionHeadingBreak } + headingformat { @Num @SectionHeadingFormat @Body } + incontents { @SectionInContents } + contentsindent { 0f } + numbers { @SectionNumbers } + attachnum { @SectionList&&preceding @Tagged @Tag } + retrievenum { @SectionList&&@Tag @Open { num } } + bypassnumber { @BypassNumber } + prefix { @SectionPrefix } + majornum {} + majortitle {} + intheorems { @SectionNumInTheorems } + indisplays { @SectionNumInDisplays } + infigures { @SectionNumInFigures } + intables { @SectionNumInTables } + inrunners { @SectionNumInRunners } + @Body + + } + + + ####################################################################### + # # + # Appendices. # + # # + ####################################################################### + + export @BeginSubAppendices @EndSubAppendices @SubAppendix + def @Appendix force into { @AppendixList&&preceding } + named @Tag {} + named @Title {} + named @RunningTitle { dft } + named @InitialLanguage {} + named @BypassNumber { dft } + body @Body + { + def @EndSubAppendicesPlace { @Galley } + + def @EndSubAppendices force into { @EndSubAppendicesPlace&&preceding } + {} + + macro @BeginSubAppendices + { + //@SubAppendixGap @SubAppendixList @FirstSubAppendixNumber + // @EndSubAppendicesPlace // + } + + def @AppendixShortNum + { + @AppendixNumbers @Then { + @BypassNumber @Dft { + @AppendixNumbers @Num @AppendixList&&@Tag @Open { num } + } + } + } + + def @AppendixLongNum + { + @AppendixNumbers @Then { + @InitialLanguage @Language { + appendix @WordVal @AppendixWord @AppendixShortNum + } + } + } + + export @BeginSubSubAppendices @EndSubSubAppendices @SubSubAppendix + def @SubAppendix force into { @SubAppendixList&&preceding } + named @Tag {} + named @Title {} + named @RunningTitle { dft } + named @InitialLanguage { @InitialLanguage } + named @BypassNumber { dft } + body @Body + { + + def @EndSubSubAppendicesPlace { @Galley } + + def @EndSubSubAppendices force into + { @EndSubSubAppendicesPlace&&preceding } + {} + + macro @BeginSubSubAppendices + { + //@SubSubAppendixGap + @SubSubAppendixList @FirstSubSubAppendixNumber + // @EndSubSubAppendicesPlace // + } + + def @SubAppendixShortNum + { + @SubAppendixNumbers @Then { + @BypassNumber @Dft { + @AppendixShortNum @Join @SubAppendixNumbers @Num + { @SubAppendixList&&@Tag @Open { num } } + } + } + } + + def @SubSubAppendix force into { @SubSubAppendixList&&preceding } + named @Tag {} + named @Title {} + named @RunningTitle { dft } + named @InitialLanguage { @InitialLanguage } + named @BypassNumber { dft } + body @Body + { + + @LargeScaleStructure + tag { @Tag } + type { Minor } + initiallanguage { @InitialLanguage } + title { @Title } + runningtitle { @RunningTitle } + headingfont { @SubSubAppendixHeadingFont } + headingbreak { @SubSubAppendixHeadingBreak } + headingformat { @Num @SubSubAppendixHeadingFormat @Body } + incontents { @SubSubAppendixInContents } + contentsindent { 6f } + numbers { @SubSubAppendixNumbers } + attachnum { @SubSubAppendixList&&preceding @Tagged @Tag } + retrievenum { @SubSubAppendixList&&@Tag @Open { num } } + bypassnumber { @BypassNumber } + prefix { @SubAppendixShortNum } + majornum {} + majortitle {} + intheorems { @SubSubAppendixNumInTheorems } + indisplays { @SubSubAppendixNumInDisplays } + infigures { @SubSubAppendixNumInFigures } + intables { @SubSubAppendixNumInTables } + inrunners { @SubSubAppendixNumInRunners } + @Body + + } + + @LargeScaleStructure + tag { @Tag } + type { Minor } + initiallanguage { @InitialLanguage } + title { @Title } + runningtitle { @RunningTitle } + headingfont { @SubAppendixHeadingFont } + headingbreak { @SubAppendixHeadingBreak } + headingformat { @Num @SubAppendixHeadingFormat @Body } + incontents { @SubAppendixInContents } + contentsindent { 3f } + numbers { @SubAppendixNumbers } + attachnum { @SubAppendixList&&preceding @Tagged @Tag } + retrievenum { @SubAppendixList&&@Tag @Open { num } } + bypassnumber { @BypassNumber } + prefix { @AppendixShortNum } + majornum {} + majortitle {} + intheorems { @SubAppendixNumInTheorems } + indisplays { @SubAppendixNumInDisplays } + infigures { @SubAppendixNumInFigures } + intables { @SubAppendixNumInTables } + inrunners { @SubAppendixNumInRunners } + @Body + + } + + @LargeScaleStructure + tag { @Tag } + type { Minor } + initiallanguage { @InitialLanguage } + title { @Title } + runningtitle { @RunningTitle } + headingfont { @AppendixHeadingFont } + headingbreak { @AppendixHeadingBreak } + headingformat { @Num @AppendixHeadingFormat @Body } + incontents { @AppendixInContents } + contentsindent { 0f } + word { appendix @WordVal @AppendixWord } + numbers { @AppendixNumbers } + attachnum { @AppendixList&&preceding @Tagged @Tag } + retrievenum { @AppendixList&&@Tag @Open { num } } + bypassnumber { @BypassNumber } + prefix { @AppendixPrefix } + majornum {} + majortitle {} + intheorems { @AppendixNumInTheorems } + indisplays { @AppendixNumInDisplays } + infigures { @AppendixNumInFigures } + intables { @AppendixNumInTables } + inrunners { Yes } + @Body + } + +@End @ReportSetup diff --git a/include/russian b/include/russian new file mode 100644 index 0000000..d0f5a53 --- /dev/null +++ b/include/russian @@ -0,0 +1,10 @@ +################################################################# +# # +# russian # +# # +# This file includes everything you need for Russian. # +# # +################################################################# + +# Commented out because these fonts are not distributed with Lout. +# @SysInclude { russian.fd } diff --git a/include/russian.fd b/include/russian.fd new file mode 100644 index 0000000..f145530 --- /dev/null +++ b/include/russian.fd @@ -0,0 +1,38 @@ +################################################################################################################## +# # +# Russian font definitions. Use a very wide window to see them clearly. # +# # +# Lout font Lout font PostScript PostScript font metrics Lout character Recode/ # +# family name face name font name (formerly .AFM) file name mapping file NoRecode # +# # +################################################################################################################## + +fontdef Academy Base { Academy Aca koi8r.LCM Recode } +fontdef Academy Slope { Academy-Italic Aca-It koi8r.LCM Recode } +fontdef Academy Bold { Academy-Bold Aca-Bd koi8r.LCM Recode } +fontdef Academy BoldSlope { Academy-Italic Aca-It koi8r.LCM Recode } +fontdef Academy Italic { Academy-Italic Aca-It koi8r.LCM Recode } + +fontdef Antiqua Base { Antiqua Ant koi8r.LCM Recode } +fontdef Antiqua Slope { Antiqua-Italic Ant-It koi8r.LCM Recode } +fontdef Antiqua Bold { Antiqua-Bold Ant-Bd koi8r.LCM Recode } +fontdef Antiqua BoldSlope { Antiqua-Italic Ant-It koi8r.LCM Recode } +fontdef Antiqua Italic { Antiqua-Italic Ant-It koi8r.LCM Recode } + +fontdef College Base { College Col koi8r.LCM Recode } +fontdef College Slope { College-Italic Col-It koi8r.LCM Recode } +fontdef College Bold { College-Bold Col-Bd koi8r.LCM Recode } +fontdef College BoldSlope { College-Italic Col-It koi8r.LCM Recode } +fontdef College Italic { College-Italic Col-It koi8r.LCM Recode } + +fontdef Magazine Base { Magazine Mag koi8r.LCM Recode } +fontdef Magazine Slope { Magazine-Italic Mag-It koi8r.LCM Recode } +fontdef Magazine Bold { Magazine-Bold Mag-Bd koi8r.LCM Recode } +fontdef Magazine BoldSlope { Magazine-Italic Mag-It koi8r.LCM Recode } +fontdef Magazine Italic { Magazine-Italic Mag-It koi8r.LCM Recode } + +fontdef Textbook Base { Textbook Txt koi8r.LCM Recode } +fontdef Textbook Slope { Textbook-Italic Txt-It koi8r.LCM Recode } +fontdef Textbook Bold { Textbook-Bold Txt-Bd koi8r.LCM Recode } +fontdef Textbook BoldSlope { Textbook-Italic Txt-It koi8r.LCM Recode } +fontdef Textbook Italic { Textbook-Italic Txt-It koi8r.LCM Recode } diff --git a/include/slides b/include/slides new file mode 100644 index 0000000..7833f60 --- /dev/null +++ b/include/slides @@ -0,0 +1,299 @@ +############################################################################### +# # +# Lout setup file for overhead transparencies # +# # +# Jeffrey H. Kingston # +# 5 February 1999 # +# # +############################################################################### + + +############################################################################### +# # +# @SysInclude commands for standard packages. # +# # +############################################################################### + + @SysInclude { fontdefs } # font definitions + @SysInclude { langdefs } # language definitions + @SysInclude { bsf } # BasicSetup package + @SysInclude { dsf } # DocumentSetup package + @SysInclude { slidesf } # OverheadSetup extension + + +############################################################################### +# # +# @Include command for reading personal definitions from current directory. # +# # +############################################################################### + + @Include { mydefs } + + +############################################################################### +# # +# The @BasicSetup @Use clause - basics, lists, paragraphs, displays. # +# # +# To change the default value of any option, delete the # at the start of # +# its line and change the value between braces. # +# # +############################################################################### + +@Use { @BasicSetup + # @InitialFont { Times Base 12p } # initial font + @InitialFont { Times Base 20p } # initial font + # @InitialBreak {{adjust 1.2fx hyphen} @OrIfPlain {ragged 1fx nohyphen}} + @InitialBreak { ragged 1.20fx nohyphen} # initial break + # @InitialSpace { lout } # initial space style + # @InitialLanguage { English } # initial language + # @InitialColour { black } # initial colour + # @OptimizePages { No } # optimize page breaks? + # @HeadingFont { Bold } # font for @Heading + # @ParaGap { 1.3vx @OrIfPlain 1f } # gap between paragraphs + # @ParaIndent { 2.00f @OrIfPlain 5s } # first-line indent for @PP + # @DisplayGap { 1.00v @OrIfPlain 1f } # gap above, below displays + # @DisplayIndent { 2.00f @OrIfPlain 5s } # @IndentedDisplay indent + # @DefaultIndent { 0.5rt } # @Display indent + # @DisplayNumStyle { (num) } # style of display numbers + # @WideIndent { 4.00f @OrIfPlain 10s } # @WideTaggedList indent + # @VeryWideIndent { 8.00f @OrIfPlain 20s } # @VeryWideTaggedList indent + # @ListOuterGap { 1.00v @OrIfPlain 1f } # gap before, after lists + # @ListGap { 1.00v @OrIfPlain 1f } # gap between list items + # @ListIndent { 0s } # indent of list items + # @ListRightIndent { 0s } # right indent of list items + # @ListLabelWidth { 2.00f @OrIfPlain 5s } # width allowed for list tags + # @NumberSeparator { . } # separates nums like 2.3.7 +} + + +############################################################################### +# # +# The @DocumentSetup @Use clause - page layout plus figures, tables, etc. # +# # +# To change the default value of any option, delete the # at the start of # +# its line and change the value between braces. # +# # +############################################################################### + +@Use { @DocumentSetup + # @PageType { A4 @OrIfPlain Other} # page type (width, height) + # @PageWidth { 80s } # page width if type Other + # @PageHeight { 66f } # page height if type Other + # @PageOrientation { Portrait } # Portrait, Landscape, etc. + # @PageBackground { } # background of each page + # @TopMargin { 2.5c @OrIfPlain 6f } # top margin of all pages + # @FootMargin { 2.5c @OrIfPlain 6f } # bottom margin of all pages + @FootMargin { 5.00c } # bottom margin of all pages + # @OddLeftMargin { 2.5c @OrIfPlain 10s } # left margin of odd pages + # @OddRightMargin { 2.5c @OrIfPlain 10s } # right margin of odd pages + # @EvenLeftMargin { 2.5c @OrIfPlain 10s } # left margin of even pages + # @EvenRightMargin { 2.5c @OrIfPlain 10s } # right margin of even pages + # @PageBoxType { None } # None Box CurveBox ShadowBox + # @PageBoxMargin { 1.00c } # page box margin + # @PageBoxLineWidth { } # page box line thickness + # @PageBoxPaint { none } # page box paint + # @PageBoxShadow { 0.60c } # shadow margin if ShadowBox + # @ColumnNumber { 1 } # number of columns (1 to 10) + # @ColumnGap { 1.00c @OrIfPlain 6s } # column gap + # @FigureLocation { PageTop } # default figure location + # @TableLocation { PageTop } # default table location + # @FigureFormat { @CC @Body } # default figure format + # @TableFormat { @CC @Body } # default table format + # @FigureWord { figure } # "Figure" word else anything + # @TableWord { table } # "Table" word else anything + # @FigureNumbers { Arabic } # method of numbering figures + # @TableNumbers { Arabic } # method of numbering tables + # @FigureCaptionPos { Below } # Above or Below + # @TableCaptionPos { Below } # Above or Below + # @CaptionFont { } # figure, table caption font + # @CaptionBreak { } # figure, table caption break + # @CaptionFormat { @B { number @DotSep @OneCol } } # figure, table caption format + # @MakeFigureContents { No } # list of figures at start + # @MakeTableContents { No } # list of tables at start + # @MakeContents { No } # make contents? Yes or No + # @ContentsGap { 0.20v @OrIfPlain 0f } # extra gap above minor entry + @ContentsGapAbove { 0.00v @OrIfPlain 1f } # extra gap above major entry + # @ContentsGapBelow { 0.00v @OrIfPlain 0f } # extra gap below major entry + @ContentsFont { Base } # font for major entry + # @ContentsPartGapAbove { 1.00v @OrIfPlain 1f } # extra gap above `part' entry + # @ContentsPartGapBelow { 0.00v @OrIfPlain 0f } # extra gap below `part' entry + # @ContentsFormat { number @DotSep title } # contents entry format + # @ContentsLeader { .. } # leader symbol in contents + # @ContentsLeaderGap { 4s @OrIfPlain 2s } # gap between leaders + # @ContentsRightWidth { 3f @OrIfPlain 6s } # page numbers column width + # @MakeReferences { Yes } # make references? Yes or No + # @RefCiteStyle { [cite] } # citation style + # @RefCiteLabels { @RefNum } # citation items + # @RefNumbers { Arabic } # reference numbers + # @RefListFormat { Labels } # NoLabels, Labels, etc. + # @RefListLabels { [@RefNum] } # ref list label format + # @RefListTitle { references } # title of reference list + # @ChapRefListTitle { references } # title of chapter ref list + # @RefListIndent { 0s } # indent to left of labels + # @RefListRightIndent { 0s } # indent to right of items + # @RefListGap { @ListGap } # gap between ref list items + # @RefListFont { } # font used in reference list + # @RefListBreak { } # break style of ref list + # @RefListLabelWidth { @ListLabelWidth } # Labels column width + # @RefListSortKey { @Tag } # sorting key + # @MakeIndex { No } # make index? Yes or No + # @IndexFont { } # index entries font + # @IndexBreak { {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break + # @IndexColumnNumber { 2 } # index columns (1 to 10) + # @IndexColumnGap { 1.00c @OrIfPlain 6s } # index column gap + # @MakeIndexA { No } # make index A? Yes or No + # @IndexAFont { } # index A entries font + # @IndexABreak { {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break + # @IndexAColumnNumber { 2 } # index A columns (1 to 10) + # @IndexAColumnGap { 1.00c @OrIfPlain 6s } # index A column gap + # @MakeIndexB { No } # make index B? Yes or No + # @IndexBFont { } # index B entries font + # @IndexBBreak { {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break + # @IndexBColumnNumber { 2 } # index B columns (1 to 10) + # @IndexBColumnGap { 1.00c @OrIfPlain 6s } # index B column gap + # @TopGap { 0.75c @OrIfPlain 2f } # gap between figures + # @MidGap { 0.75c @OrIfPlain 2f } # gap above/below body text + # @FootNoteNumbers { Arabic } # footnote numbers + # @FootNoteThrough { No } # numbered through chapter? + # @FootNoteLocation { ColFoot } # where the footnote appears + # @FootNoteFont { 0.80f } # font for footnotes + # @FootNoteBreak { 1.2fx @OrIfPlain 1fx } # break for footnotes + # @FootNoteFormat { { number &0.05f } @Insert body } # footnote format + # @FootLen { 2.00c @OrIfPlain 10s } # length of footnote line + # @FootAboveGap { @DisplayGap } # gap above footnote line + # @FootGap { 0.20c @OrIfPlain 1fx } # gap between footnotes + # @MarginNoteFont { 0.80f } # font of margin notes + # @MarginNoteBreak { ragged 1.10fx } # break style of margin notes + # @MarginNoteHGap { 0.5c } # horizontal gap to notes + # @MarginNoteVGap { @DisplayGap } # min vertical gap between + # @MarginNoteWidth { 1.50c } # width of margin notes + # @EndNoteNumbers { Arabic } # endnote numbers + # @EndNoteFont { 0.80f } # font of endnotes + # @EndNoteBreak { 1.2fx @OrIfPlain 1fx } # break for endnotes + # @EndNoteFormat { { number &0.05f } @Insert body } # endnote format + # @EndNoteGap { 0.20c @OrIfPlain 1f } # gap between endnotes + # @TheoremWord { theorem } # "Theorem" word, etc. + # @TheoremTitleFormat { (title) } # only if title present + # @TheoremFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @DefinitionWord { definition } # "Definition" word, etc. + # @DefinitionTitleFormat { (title) } # only if title present + # @DefinitionFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @ClaimWord { claim } # "Claim" word, etc. + # @ClaimTitleFormat { (title) } # only if title present + # @ClaimFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @PropositionWord { proposition } # "Proposition" word, etc. + # @PropositionTitleFormat { (title) } # only if title present + # @PropositionFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @LemmaWord { lemma } # "Lemma" word, etc. + # @LemmaTitleFormat { (title) } # only if title present + # @LemmaFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @CorollaryWord { corollary } # "Corollary" word, etc. + # @CorollaryTitleFormat { (title) } # only if title present + # @CorollaryFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @ExampleWord { example } # "Example" word, etc. + # @ExampleTitleFormat { (title) } # only if title present + # @ExampleFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @ProofWord { proof } # "Proof" word, etc. + # @PageHeaders { Simple } # None Simple Titles NoTitles + @PageHeaders { Titles } # None Simple Titles NoTitles + # @PageNumbers { Arabic } # page numbers + # @FirstPageNumber { 1 } # number of first page + # @IntroPageNumbers { Roman } # intro page numbers + # @IntroFirstPageNumber{ 1 } # number of first intro page + # @StructPageNums { No } # make structured page numbers + + # @OddTop { @Centre{- @PageNum -} } # Simple page headers + # @OddFoot { @Null } + # @EvenTop { @Centre{- @PageNum -} } + # @EvenFoot { @Null } + # @StartOddTop { @Null } + # @StartOddFoot { @Null } + # @StartEvenTop { @Null } + # @StartEvenFoot { @Null } + # @IntroOddTop { @Null } + # @IntroOddFoot { @Centre @PageNum } + # @IntroEvenTop { @Null } + # @IntroEvenFoot { @Centre @PageNum } + # @IntroStartOddTop { @Null } + # @IntroStartOddFoot { @Null } + # @IntroStartEvenTop { @Null } + # @IntroStartEvenFoot { @Null } + + # Titles, NoTitles headers + # @RunningOddTop { @I {@MinorNum @DotSep @MinorTitle} @Right @B @PageNum } + @RunningOddTop { 8p @Font {@MajorTitle @MinorNum @Right @PageNum} } + # @RunningOddFoot { @Null } + @RunningOddFoot { @Null } + # @RunningEvenTop { @B @PageNum @Right @I {@MajorNum @DotSep @MajorTitle} } + @RunningEvenTop { 8p @Font {@MajorTitle @MinorNum @Right @PageNum} } + # @RunningEvenFoot { @Null } + @RunningEvenFoot { @Null } + # @RunningStartOddTop { @Null } + @RunningStartOddTop { 8p @Font { @MajorTitle @MinorNum @Right @PageNum } } + # @RunningStartOddFoot { @Centre { Bold 0.8f } @Font @PageNum } + @RunningStartOddFoot { @Null } + # @RunningStartEvenTop { @Null } + @RunningStartEvenTop { 8p @Font { @MajorTitle @MinorNum @Right @PageNum } } + # @RunningStartEvenFoot { @Centre { Bold 0.8f } @Font @PageNum } + @RunningStartEvenFoot { @Null } + # @RunningIntroOddTop { @Null } + # @RunningIntroOddFoot { @Right @PageNum } + # @RunningIntroEvenTop { @Null } + # @RunningIntroEvenFoot { @PageNum } + # @RunningIntroStartOddTop { @Null } + # @RunningIntroStartOddFoot { @Null } + # @RunningIntroStartEvenTop { @Null } + # @RunningIntroStartEvenFoot { @Null } +} + + +############################################################################### +# # +# The @OverheadSetup @Use clause - options specific to overheads. # +# # +############################################################################### + +@Use { @OverheadSetup + # @DateLine { No } # No, Yes, or a date + # @ContentsWord { contents } # word for "Contents" + # @LectureWord { lecture } # word for "Lecture" + # @OverheadWord { } # word for "Overhead" + # @LectureNumbers { Arabic } # kind of lecture numbers + # @FirstLectureNumber { 1 } # first lecture num + # @OverheadNumbers { Arabic } # kind of overhead numbers + # @FirstOverheadNumber { 1 } # first overhead num + # @TitlePageFont { Helvetica Base 1.5f } # title page font + # @LectureHeadingFont { Bold 1.20f } # lecture head font + # @LectureHeadingBreak { clines 1.2fx nohyphen } # lecture head break + # @LectureHeadingFormat { @Centre number @DP @Centre title @DP } + # @AboveLectureGap { 3.0f } # gap above lec head + # @OverheadHeadingFont { Bold } # overhead head font + # @OverheadHeadingBreak { 1.2fx nohyphen } # overhead head break + # @OverheadHeadingFormat { @Centre title @DP } # overhead head format + # @OverheadFormat { @Body } # overhead body format + # @AboveOverheadGap { 1.0f } # gap above over head + # @LectureInContents { Yes } # add lectures to contents + # @OverheadInContents { No } # add overheads to contents + # @ReferencesInContents { Yes } # add references to contents + # @LectureNumInTheorems { Yes } # theorem num has lecture num + # @OverheadNumInTheorems { No } # theorem num has overhead num + # @LectureNumInDisplays { Yes } # display num has lecture num + # @OverheadNumInDisplays { No } # display num has overhead num + # @LectureNumInFigures { Yes } # figure num has lecture num + # @OverheadNumInFigures { No } # figure num has overhead num + # @LectureNumInTables { Yes } # table num has lecture num + # @OverheadNumInTables { No } # table num has overhead num + # @LectureNumInRunners { Yes } # running head has lecture num + # @OverheadNumInRunners { Yes } # running head has overhd num + # @LecturePrefix { } # for structured page nums + # @OverheadPrefix { } # for structured page nums +} + + +############################################################################### +# # +# @Database (and @SysDatabase) clauses go here. # +# # +############################################################################### + +@SysDatabase @RefStyle { refstyle } # reference printing styles diff --git a/include/slidesf b/include/slidesf new file mode 100644 index 0000000..e39f804 --- /dev/null +++ b/include/slidesf @@ -0,0 +1,371 @@ + +########################################################################### +# # +# @OverheadSetup extension to @DocumentSetup. # +# # +# Jeffrey H. Kingston # +# August 1994 # +# # +# This package extends DocumentSetup with definitions for overheads. # +# # +########################################################################### + +extend @BasicSetup @DocumentSetup +export @OverheadTransparencies @Lecture @Overhead +def @OverheadSetup + named @DateLine { No } + named @ContentsWord { contents } + named @LectureWord { lecture } + named @OverheadWord { } + named @LectureNumbers { Arabic } + named @FirstLectureNumber { 1 } + named @OverheadNumbers { Arabic } + named @FirstOverheadNumber { 1 } + named @TitlePageFont { Helvetica Base } + named @LectureHeadingFont { Bold 1.20f } + named @LectureHeadingBreak { 1.2fx nohyphen } + named @LectureHeadingFormat + left number right title { @Centre number @DP @Centre title @DP } + named @AboveLectureGap { 3.0f } + named @OverheadHeadingFont { Bold } + named @OverheadHeadingBreak { 1.2fx nohyphen } + named @OverheadHeadingFormat + left number right title { @Centre title @DP } + named @OverheadFormat + named @II right x { |@DisplayIndent x | } + named @QQ right x { |@DisplayIndent x |@DisplayIndent } + named @CC right x { |0.5rt x | } + named @RR right x { |1.0rt x | } + right @Body + { @Body } + named @AboveOverheadGap { 1.0f } + named @LectureInContents { Yes } + named @OverheadInContents { No } + named @ReferencesInContents { Yes } + named @LectureNumInTheorems { Yes } + named @OverheadNumInTheorems { No } + named @LectureNumInDisplays { Yes } + named @OverheadNumInDisplays { No } + named @LectureNumInFigures { Yes } + named @OverheadNumInFigures { No } + named @LectureNumInTables { Yes } + named @OverheadNumInTables { No } + named @LectureNumInRunners { Yes } + named @OverheadNumInRunners { Yes } + named @LecturePrefix { } + named @OverheadPrefix { } +@Begin + + ####################################################################### + # # + # Symbols for passing full title to running headers. # + # # + ####################################################################### + + export @Val + def @StoreTitle left @Tag named @Val {} { @Null } + + def @SaveTitle right x { save @StoreTitle @Val { x } } + + def @GetTitle { @StoreTitle&&save @Open { @Val } } + + + ####################################################################### + # # + # Lists of lectures and overheads. # + # # + ####################################################################### + + export num + def @LectureList named @Tag {} right num + { + @Galley + //1.1b @LectureList @Next num + } + + export num + def @OverheadsList named @Tag {} right num + { + @Galley + //1.1b @OverheadsList @Next num + } + + export num + def @LecOverheadsList named @Tag {} right num + { + @Galley + //1.1b @LecOverheadsList @Next num + } + + + ####################################################################### + # # + # @Full - this sends text to a full-width place. # + # # + ####################################################################### + + def @Full force into { @FullPlace&&following } right x { x } + + + ####################################################################### + # # + # @OverheadTransparencies. # + # # + ####################################################################### + + def @OverheadTransparencies + named @Title {} + named @RunningTitle { dft } + named @Author {} + named @Institution {} + named @DateLine { @DateLine } + named @InitialFont { @InitialFont } + named @InitialBreak { @InitialBreak } + named @InitialSpace { @InitialSpace } + named @InitialLanguage { @InitialLanguage } + named @PageOrientation { @PageOrientation } + named @PageHeaders { @PageHeaders } + named @FirstPageNumber { @FirstPageNumber } + named @FirstOverheadNumber { @FirstOverheadNumber } + named @FirstLectureNumber { @FirstLectureNumber } + named @OptimizePages { @OptimizePages } + { + + def @DatePart + { + @DateLine @Case { + No @Yield { @Null } + Yes @Yield { |0.5rt @Date | } + else @Yield { |0.5rt @DateLine | } + } + } + + def @TitlePart + { + @TitlePageFont @Font @InitialBreak @Break + @InitialSpace @Space clines @Break { + //0.5i |0.5rt 1.5f @Font @InitialBreak @Break + @InitialSpace @Space clines @Break @Title | + //1i |0.5rt clines @Break @Author | + //0.5i |0.5rt clines @Break @I @Institution | + //0.5i @DatePart + } + } + + def @ContentsPart + { + @DP |0.5rt @LectureHeadingFont @Font @LectureHeadingBreak @Break + @LectureHeadingFormat { contents @WordVal @ContentsWord } | + @DP @ContentsSection + } + + def @ReferencesPart + named @Tag {} + { + @DP |0.5rt @LectureHeadingFont @Font @LectureHeadingBreak @Break + @LectureHeadingFormat { @RefHeading @RefListTitle } | + // @PageMark @Tag + // @ReferencesInContents @ContentsEntry + title { @RefHeading @RefListTitle } + pagenum { @PageOf @Tag } + // Start @Runner @MajorTitle { @GetTitle } + @DP @ReferencesSection + // NonStart @Runner @MajorTitle { @GetTitle } + } + + def @OverheadsBody force into { @ColPlace&&preceding } + named @Optimize { @OptimizePages } + { + @Title @Case { + "" @Yield @Null + else @Yield @TitlePart + } + //1.1b @MakeContents @Case { + { Yes Bypass } @Yield @ContentsPart + else @Yield @Null + } + // Start @Runner @MajorTitle { @GetTitle } + //1.1b @OverheadsList @FirstOverheadNumber + //1.1b @LectureList @FirstLectureNumber + //1.1b @ReferencesPart + } + + @InitialFont @Font @InitialBreak @Break @InitialLanguage @Language + @InitialSpace @Space { @ColourCommand @InitialColour } @SetColour + { + @SaveTitle { + @InitialLanguage @Language { @RunningTitle @Dft @Title } + } + + // Yes @BeginAllCounters {} + // Yes @BeginDisplayCounter {} + // Yes @BeginFigureCounter {} + // Yes @BeginFigureCounter {} + // @PageList + @ColumnNumber { 1 } + @PageHeaders { @PageHeaders } + @Orient { @PageOrientation } + extra { Yes } + @FirstPageNumber + // @OverheadsBody + // Start @Runner + } + } + + + ####################################################################### + # # + # Overheads. # + # # + ####################################################################### + + def @Overhead force into { @OverheadsList&&preceding } + named @Tag {} + named @Title {} + named @RunningTitle { dft } + named @Format + named @II right x { |@DisplayIndent x | } + named @QQ right x { |@DisplayIndent x |@DisplayIndent } + named @CC right x { |0.5rt x | } + named @RR right x { |1.0rt x | } + right @Body { @OverheadFormat @Body } + named @InitialLanguage {} + named @BypassNumber { dft } + body @Body + { + + @LargeScaleStructure + tag { @Tag } + type { Major } + initiallanguage { @InitialLanguage } + title { @Title } + majortitle { @GetTitle } + runningtitle { @RunningTitle } + aboveheadinggap { @AboveOverheadGap } + headingfont { @OverheadHeadingFont } + headingbreak { @OverheadHeadingBreak } + headingformat { @Num @OverheadHeadingFormat @Body } + incontents { @OverheadInContents } + contentsindent { 0f } + numbers { @OverheadNumbers } + attachnum { @OverheadsList&&preceding @Tagged @Tag } + retrievenum { @OverheadsList&&@Tag @Open { num } } + bypassnumber { @BypassNumber } + pnprefix { @OverheadPrefix } + intheorems { @OverheadNumInTheorems } + indisplays { @OverheadNumInDisplays } + infigures { @OverheadNumInFigures } + intables { @OverheadNumInTables } + sendheader { @Full @Body } + innergap { @DisplayGap } + inrunners { @OverheadNumInRunners } + @Format @Body + } + + + ####################################################################### + # # + # Lectures containing overheads. # + # # + ####################################################################### + + export @BeginOverheads @EndOverheads @Overhead + def @Lecture force into { @LectureList&&preceding } + named @Tag {} + named @Title {} + named @RunningTitle { dft } + named @InitialLanguage {} + named @BypassNumber { dft } + body @Body + { + def @EndOverheadsPlace { @Galley } + + def @EndOverheads force into { @EndOverheadsPlace&&preceding } + {} + + macro @BeginOverheads + { //1.1b @LecOverheadsList 1 + // @EndOverheadsPlace // + } + + def @LectureNum + { + @LectureNumbers @Then { + @BypassNumber @Dft { + @LectureNumbers @Num @LectureList&&@Tag @Open { num } + } + } + } + + def @Overhead force into { @LecOverheadsList&&preceding } + named @Tag {} + named @Title {} + named @RunningTitle { dft } + named @Format + named @II right x { |@DisplayIndent x | } + named @QQ right x { |@DisplayIndent x |@DisplayIndent } + named @CC right x { |0.5rt x | } + named @RR right x { |1.0rt x | } + right @Body { @OverheadFormat @Body } + named @InitialLanguage { @InitialLanguage } + named @BypassNumber { dft } + body @Body + { + + @LargeScaleStructure + tag { @Tag } + type { Minor } + initiallanguage { @InitialLanguage } + title { @Title } + runningtitle { @RunningTitle } + headingfont { @OverheadHeadingFont } + headingbreak { @OverheadHeadingBreak } + headingformat { @Num @OverheadHeadingFormat @Body } + incontents { @OverheadInContents } + contentsindent { 2f } + numbers { @OverheadNumbers } + attachnum { @LecOverheadsList&&preceding @Tagged @Tag } + retrievenum { @LecOverheadsList&&@Tag @Open { num } } + bypassnumber { @BypassNumber } + prefix { @LectureNum } + majornum { @LectureNum } + majortitle { @GetTitle } + intheorems { @OverheadNumInTheorems } + indisplays { OverheadNumInDisplays } + infigures { @OverheadNumInFigures } + inrunners { @OverheadNumInRunners } + @Format @Body + + } + + @LargeScaleStructure + tag { @Tag } + type { Major } + initiallanguage { @InitialLanguage } + title { @Title } + runningtitle { @RunningTitle } + aboveheadinggap { @AboveLectureGap } + headingfont { @LectureHeadingFont } + headingbreak { @LectureHeadingBreak } + headingformat { @Num @LectureHeadingFormat @Body } + incontents { @LectureInContents } + contentsindent { 0f } + word { lecture @WordVal @LectureWord } + numbers { @LectureNumbers } + attachnum { @LectureList&&preceding @Tagged @Tag } + retrievenum { @LectureList&&@Tag @Open { num } } + bypassnumber { @BypassNumber } + pnprefix { @LecturePrefix } + majortitle { @GetTitle } + intheorems { @LectureNumInTheorems } + indisplays { @LectureNumInDisplays } + infigures { @LectureNumInFigures } + intables { @LectureNumInTables } + sendheader { @Full @Body } + innergap { @DisplayGap } + inrunners { @LectureNumInRunners } + @Body + + } + +@End @OverheadSetup diff --git a/include/tab b/include/tab new file mode 100644 index 0000000..02311d4 --- /dev/null +++ b/include/tab @@ -0,0 +1,29 @@ +############################################################################### +# # +# Lout setup file for table printing # +# # +# Jeffrey H. Kingston # +# 5 February 1999 # +# # +# This package is OBSOLETE; use tbl instead. # +# # +############################################################################### + + +############################################################################### +# # +# The @SysInclude { tabf } line # +# # +# This line causes Lout to read the definitions for tables, and should # +# not be touched. # +# # +############################################################################### + +@SysInclude { tabf } + + +############################################################################### +# # +# This package does not offer default options that can be changed. # +# # +############################################################################### diff --git a/include/tabf b/include/tabf new file mode 100644 index 0000000..bc1e0c8 --- /dev/null +++ b/include/tabf @@ -0,0 +1,936 @@ + +############################################################################### +# # +# Lout @Tab package for formatting tables (Version 2.0) # +# # +# Version 1.0 by Jeffrey H. Kingston, September 1991. # +# Version 2.0 by Jeffrey H. Kingston, 22 December 1992. # +# Version 3.0 by Jeffrey H. Kingston, 13 September 1993. # +# # +# The only change between Versions 2 and 3 is to make the linewidth # +# option accept a Lout length rather than a Fig length. See the User's # +# Guide for user information. # +# # +############################################################################### + +@SysPrependGraphic { "tabf.lpg" } + +export @CC @RR @Rule @DoubleRule @Line @DoubleLine @NP + @Rowa @Rowb @Rowc @Rowd @Rowe @Rowf @Rowg @Rowh @Rowi @Rowj + @MarkRowa @MarkRowb @MarkRowc @MarkRowd @MarkRowe @MarkRowf + @MarkRowg @MarkRowh @MarkRowi @MarkRowj + @FirstRowa @FirstRowb @FirstRowc @FirstRowd @FirstRowe @FirstRowf + @FirstRowg @FirstRowh @FirstRowi @FirstRowj + +def @Tab + + named above { no } + named below { no } + named between { no } + named side { no } + named hmargin { 0.3c } + named vmargin { + @BackEnd @Case { + PostScript @Yield 0.2v + PDF @Yield 0.2v # VT: PDF case added + PlainText @Yield 0.5v + } + } + + named linewidth + named c left x { + @BackEnd @Case { + PostScript @Yield { x" cm" } + PDF @Yield { "__mul(__cm, "x")" } + } + } + named i left x { + @BackEnd @Case { + PostScript @Yield { x" in" } + PDF @Yield { "__mul(__in, "x")" } + } + } + named e left x { + @BackEnd @Case { + PostScript @Yield { x" em" } + PDF @Yield { "__mul(__em, "x")" } + } + } + named p left x { + @BackEnd @Case { + PostScript @Yield { x" pt" } + PDF @Yield { "__mul(__pt, "x")" } + } + } + named f left x { + @BackEnd @Case { + PostScript @Yield { x" ft" } + PDF @Yield { "__mul(__loutf, "x")" } + } + } + named s left x { + @BackEnd @Case { + PostScript @Yield { x" sp" } + PDF @Yield { "__mul(__louts, "x")" } + } + } + named v left x { + @BackEnd @Case { + PostScript @Yield { x" vs" } + PDF @Yield { "__mul(__loutv, "x")" } + } + } + { 0.5p } + + named @Fmta + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + named "!" precedence 10 left x named between { dft } right y {} + named "!!" precedence 10 left x right y {} + named "!!!" precedence 10 left x right y {} + named "@Over" precedence 11 left x right y { x // y } + named "," precedence 12 left x right y {} + named @Col precedence 12 right x {} + named @CC right x { clines @Break { & x & } } + named @RR right x { rlines @Break { & x & } } + {} + + named @Fmtb + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + named "!" precedence 10 left x named between { dft } right y {} + named "!!" precedence 10 left x right y {} + named "!!!" precedence 10 left x right y {} + named "@Over" precedence 11 left x right y { x // y } + named "," precedence 12 left x right y {} + named @Col precedence 12 right x {} + named @CC right x { clines @Break { & x & } } + named @RR right x { rlines @Break { & x & } } + {} + + named @Fmtc + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + named "!" precedence 10 left x named between { dft } right y {} + named "!!" precedence 10 left x right y {} + named "!!!" precedence 10 left x right y {} + named "@Over" precedence 11 left x right y { x // y } + named "," precedence 12 left x right y {} + named @Col precedence 12 right x {} + named @CC right x { clines @Break { & x & } } + named @RR right x { rlines @Break { & x & } } + {} + + named @Fmtd + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + named "!" precedence 10 left x named between { dft } right y {} + named "!!" precedence 10 left x right y {} + named "!!!" precedence 10 left x right y {} + named "@Over" precedence 11 left x right y { x // y } + named "," precedence 12 left x right y {} + named @Col precedence 12 right x {} + named @CC right x { clines @Break { & x & } } + named @RR right x { rlines @Break { & x & } } + {} + + named @Fmte + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + named "!" precedence 10 left x named between { dft } right y {} + named "!!" precedence 10 left x right y {} + named "!!!" precedence 10 left x right y {} + named "@Over" precedence 11 left x right y { x // y } + named "," precedence 12 left x right y {} + named @Col precedence 12 right x {} + named @CC right x { clines @Break { & x & } } + named @RR right x { rlines @Break { & x & } } + {} + + named @Fmtf + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + named "!" precedence 10 left x named between { dft } right y {} + named "!!" precedence 10 left x right y {} + named "!!!" precedence 10 left x right y {} + named "@Over" precedence 11 left x right y { x // y } + named "," precedence 12 left x right y {} + named @Col precedence 12 right x {} + named @CC right x { clines @Break { & x & } } + named @RR right x { rlines @Break { & x & } } + {} + + named @Fmtg + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + named "!" precedence 10 left x named between { dft } right y {} + named "!!" precedence 10 left x right y {} + named "!!!" precedence 10 left x right y {} + named "@Over" precedence 11 left x right y { x // y } + named "," precedence 12 left x right y {} + named @Col precedence 12 right x {} + named @CC right x { clines @Break { & x & } } + named @RR right x { rlines @Break { & x & } } + {} + + named @Fmth + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + named "!" precedence 10 left x named between { dft } right y {} + named "!!" precedence 10 left x right y {} + named "!!!" precedence 10 left x right y {} + named "@Over" precedence 11 left x right y { x // y } + named "," precedence 12 left x right y {} + named @Col precedence 12 right x {} + named @CC right x { clines @Break { & x & } } + named @RR right x { rlines @Break { & x & } } + {} + + named @Fmti + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + named "!" precedence 10 left x named between { dft } right y {} + named "!!" precedence 10 left x right y {} + named "!!!" precedence 10 left x right y {} + named "@Over" precedence 11 left x right y { x // y } + named "," precedence 12 left x right y {} + named @Col precedence 12 right x {} + named @CC right x { clines @Break { & x & } } + named @RR right x { rlines @Break { & x & } } + {} + + named @Fmtj + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + named "!" precedence 10 left x named between { dft } right y {} + named "!!" precedence 10 left x right y {} + named "!!!" precedence 10 left x right y {} + named "@Over" precedence 11 left x right y { x // y } + named "," precedence 12 left x right y {} + named @Col precedence 12 right x {} + named @CC right x { clines @Break { & x & } } + named @RR right x { rlines @Break { & x & } } + {} + + body @Body + +@Begin + + macro @NP { /1.1b } + + def @CC right x { clines @Break { & x & } } + def @RR right x { rlines @Break { & x & } } +# +# VT: these definitions have been modified for PDF support +# + def @HSingle { + @BackEnd @Case { + PostScript @Yield { linewidth ltabhs } + PDF @Yield { "0 0 m __xsize 0 l" linewidth "w 0 J S" } + } + } + + def @HSingleProject { + @BackEnd @Case { + PostScript @Yield { linewidth ltabhsp } + PDF @Yield { "0 0 m __xsize 0 l" linewidth "w 2 J S" } + } + } + + def @HDouble { + @BackEnd @Case { + PostScript @Yield { linewidth ltabhd } + PDF @Yield { # dup dup + "0 0 m __xsize 0 l" # 0 0 moveto xsize 0 lineto + "0 __mul(3, " linewidth ") m __xsize __mul(3, " linewidth ") l" # 0 exch 3 mul moveto xsize exch 3 mul lineto + linewidth "w 0 J S" # setlinewidth 0 setlinecap stroke + } + } + } + + def @HDoubleBelow { + @BackEnd @Case { + PostScript @Yield { linewidth ltabhdb } + PDF @Yield { # dup dup + "0 0 m __xsize 0 l" # 0 0 moveto xsize 0 lineto + "0 __mul(-3, "linewidth") m __xsize __mul(-3, "linewidth") l" # 0 exch -3 mul moveto xsize exch -3 mul lineto + linewidth "w 0 J S" # setlinewidth 0 setlinecap stroke + } + } + } + + def @HDoubleNW { + @BackEnd @Case { + PostScript @Yield { linewidth ltabhdnw } + PDF @Yield { # dup dup dup dup + "0 0 m __xsize 0 l" # 0 0 moveto xsize 0 lineto + "__xsize __mul(3, "linewidth") m" # xsize exch 3 mul moveto + "__mul(-3, "linewidth") __mul(3, "linewidth") l" # -3 mul exch 3 mul lineto + "__mul(-3, "linewidth") 0 l" # -3 mul 0 lineto + linewidth "w 0 j 2 J S" # setlinewidth 0 setlinejoin 2 setlinecap stroke + } + } + } + + def @HDoubleNE { + @BackEnd @Case { + PostScript @Yield { linewidth ltabhdne } + PDF @Yield { # dup dup dup dup + "0 0 m __xsize 0 l" # 0 0 moveto xsize 0 lineto + "0 __mul(3, "linewidth") m" # 0 exch 3 mul moveto + "__add(__xsize, __mul(3, "linewidth")) __mul(3, "linewidth") l" # 3 mul xsize add exch 3 mul lineto + "__add(__xsize, __mul(3, "linewidth")) 0 l" # 3 mul xsize add 0 lineto + linewidth "w 0 j 2 J S" # setlinewidth 0 setlinejoin 2 setlinecap stroke + } + } + } + + def @HDoubleSW { + @BackEnd @Case { + PostScript @Yield { linewidth ltabhdsw } + PDF @Yield { # dup dup dup dup + "0 0 m __xsize 0 l" # 0 0 moveto xsize 0 lineto + "__xsize __mul(-3, "linewidth") m" # xsize exch -3 mul moveto + "__mul(-3, "linewidth") __mul(-3, "linewidth") l" # -3 mul exch -3 mul lineto + "__mul(-3, "linewidth") 0 l" # -3 mul 0 lineto + linewidth "w 0 j 2 J S" # setlinewidth 0 setlinejoin 2 setlinecap stroke + } + } + } + + def @HDoubleSE { + @BackEnd @Case { + PostScript @Yield { linewidth ltabhdse } + PDF @Yield { # dup dup dup dup + "0 0 m __xsize 0 l" # 0 0 moveto xsize 0 lineto + "0 __mul(-3, "linewidth") m" # 0 exch -3 mul moveto + "__add(__xsize, __mul(-3, "linewidth")) __mul(-3, "linewidth") l" # 3 mul xsize add exch -3 mul lineto + "__add(__xsize, __mul( 3, "linewidth")) 0 l" # 3 mul xsize add 0 lineto + linewidth "w 0 j 2 J S" # setlinewidth 0 setlinejoin 2 setlinecap stroke + } + } + } + + def @VSingle { + @BackEnd @Case { + PostScript @Yield { linewidth ltabvs } + PDF @Yield { + "0 0 m 0 __ysize l" # 0 0 moveto 0 ysize lineto + linewidth "w 0 J S" # setlinewidth 0 setlinecap stroke + } + } + } + + def @VDouble { + @BackEnd @Case { + PostScript @Yield { linewidth ltabvd } + PDF @Yield { # dup dup + "0 0 m 0 __ysize l" # 0 0 moveto 0 ysize lineto + "__mul(-3, "linewidth") 0 m __mul(-3, "linewidth") __ysize l" # -3 mul 0 moveto -3 mul ysize lineto + linewidth "w 0 J S" # setlinewidth 0 setlinecap stroke + } + } + } + + def @VDoubleRight { + @BackEnd @Case { + PostScript @Yield { linewidth ltabvdr } + PDF @Yield { # dup dup + "0 0 m 0 __ysize l" # 0 0 moveto 0 ysize lineto + "__mul(3, "linewidth") 0 m __mul(3, "linewidth") __ysize l" # 3 mul 0 moveto 3 mul ysize lineto + linewidth "w 0 J S" # setlinewidth 0 setlinecap stroke + } + } + } + + def @MidHRule + left rule + right x + { + rule @Case + { + no @Yield { @OneCol x } + { yes single } @Yield { @HSingle @Graphic x } + { double doubleboxabove } @Yield { @HDouble @Graphic x } + doubleboxbelow @Yield { @HDoubleBelow @Graphic x } + } + } + + def @LeftHRule + left rule + right x + { + rule @Case + { + no @Yield { @OneCol x } + { yes single } @Yield { @HSingleProject @Graphic x } + double @Yield { @HDouble @Graphic x } + doubleboxabove @Yield { @HDoubleNW @Graphic x } + doubleboxbelow @Yield { @HDoubleSW @Graphic x } + } + } + + def @RightHRule + left rule + right x + { + rule @Case + { + no @Yield { @OneCol x } + { yes single } @Yield { @HSingleProject @Graphic x } + double @Yield { @HDouble @Graphic x } + doubleboxabove @Yield { @HDoubleNE @Graphic x } + doubleboxbelow @Yield { @HDoubleSE @Graphic x } + } + } + + def @HSRule + left rule + { + rule @Case + { + no @Yield {} + { yes single } @Yield { @HSingle @Graphic {} } + double @Yield { @HDouble @Graphic {} } + doubleboxabove @Yield { @HDouble @Graphic {} } + doubleboxbelow @Yield { @HDoubleBelow @Graphic {} } + } + } + + def @ZeroWidth + right x + { @OneCol { |0io x |0io } + } + + def @Line + { single @HSRule + } + + def @DoubleLine + { double @HSRule + } + + def @Rule + { + @OneRow + { + @ZeroWidth @HSingle @Graphic { ^|hmargin } + / @Line / + &1rt @ZeroWidth @HSingle @Graphic { |hmargin } + } + } + + def @DoubleRule + { + @OneRow + { + @ZeroWidth @HDouble @Graphic { ^|hmargin } + / @DoubleLine / + &1rt @ZeroWidth @HDouble @Graphic { |hmargin } + } + } + + def @VRule + left rule + right x + { + rule @Case + { + no @Yield {} + { yes single } @Yield @OneRow { /0io @VSingle @Graphic x /0io } + double @Yield @OneRow { /0io @VDouble @Graphic x /0io } + } + } + + def @VRuleRight + left rule + right x + { + rule @Case + { + no @Yield {} + {yes single} @Yield @OneRow { /0io @VSingle @Graphic x /0io } + double @Yield @OneRow { /0io @VDoubleRight @Graphic x /0io } + } + } + + def @VSRule + left rule + { + rule @Case + { + no @Yield {} + { yes single } @Yield { @VSingle @Graphic {} } + double @Yield { @VDouble @Graphic {} } + } + } + + def @VSRuleRight + left rule + { + rule @Case + { + no @Yield {} + {yes single} @Yield { @VSingle @Graphic {} } + double @Yield { @VDoubleRight @Graphic {} } + } + } + + def @Wrap + named ur { no } # Rule up above entry + named dr { no } # Rule down below entry + named vm { vmargin } # Vertical margin + right x # The object to be wrapped + { + ur @HSRule + ^/vm @OneCol @OneRow x + /vm dr @HSRule + } + + def @Sep + left x + named ur { no } # Rule up above entry + named dr { no } # Rule down below entry + named sr { no } # Rule separating x from y + named hm { hmargin } # Horizontal margin + named vm { vmargin } # Vertical margin + right y + { + def vr + { + sr @Case + { dft @Yield between + else @Yield sr + } + } + + x | @OneCol + { ur @MidHRule {|hm} + /vm + /vm dr @MidHRule {|hm} + } + | @OneCol + { vr @VRule { /vm } | ur @MidHRule {|hm} + /vm vr @VSRule | + /vm vr @VRule {^/vm } | dr @MidHRule {|hm} + } + | y + } + + def @NSep + left x + named hm { hmargin } + right y + { + x | @OneCol { |hm } | @OneCol { |hm } | y + } + + def @LeftEdge + named ur { no } # Rule up above entry + named dr { no } # Rule down below entry + named sr { no } # Rule separating x from y + named hm { hmargin } # Horizontal margin + named vm { vmargin } # Vertical margin + right x + { + sr @Case + { + no @Yield { x } + else @Yield + { @OneCol + { + sr @VRule { /vm } | ur @LeftHRule { |hm } + ^/vm sr @VSRule | + /vm sr @VRule { ^/vm } | dr @LeftHRule { |hm } + } + | x + } + } + } + + def @RightEdge + left x + named ur { no } # Rule up above entry + named dr { no } # Rule down below entry + named sr { no } # Rule separating x from y + named hm { hmargin } # Horizontal margin + named vm { vmargin } # Vertical margin + { + sr @Case + { + no @Yield { x } + else @Yield + { + x | @OneCol + { + ur @RightHRule { |hm } + /vm + /vm dr @RightHRule { |hm } + } + | @OneCol + { + sr @VRuleRight { /vm } + /vm sr @VSRuleRight + /vm sr @VRuleRight { ^/vm } + } + } + } + } + + def @DoRowa + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + named above { above } + named below { below } + named side { side } + named vmargin { vmargin } + { + @LeftEdge ur { above } dr { below } sr { side } vm { vmargin } + @Fmta + A { A } B { B } C { C } D { D } E { E } + F { F } G { G } H { H } I { I } J { J } + K { K } L { L } M { M } N { N } O { O } + P { P } Q { Q } R { R } S { S } T { T } + U { U } V { V } W { W } X { X } Y { Y } + Z { Z } + @Col { @Wrap ur {above} dr {below} vm {vmargin} x} + ! { x @Sep ur {above} dr {below} sr { between } vm {vmargin} y} + !! { x @Sep ur {above} dr {below} sr { single } vm {vmargin} y} + !!! { x @Sep ur {above} dr {below} sr { double } vm {vmargin} y} + , { x @NSep y } + @RightEdge ur { above } dr { below } sr { side } vm { vmargin } + } + + def @DoRowb + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + named above { above } + named below { below } + named side { side } + named vmargin { vmargin } + { + @LeftEdge ur { above } dr { below } sr { side } vm { vmargin } + @Fmtb + A { A } B { B } C { C } D { D } E { E } + F { F } G { G } H { H } I { I } J { J } + K { K } L { L } M { M } N { N } O { O } + P { P } Q { Q } R { R } S { S } T { T } + U { U } V { V } W { W } X { X } Y { Y } + Z { Z } + @Col { @Wrap ur {above} dr {below} vm {vmargin} x} + ! { x @Sep ur {above} dr {below} sr { between } vm {vmargin} y} + !! { x @Sep ur {above} dr {below} sr { single } vm {vmargin} y} + !!! { x @Sep ur {above} dr {below} sr { double } vm {vmargin} y} + , { x @NSep y } + @RightEdge ur { above } dr { below } sr { side } vm { vmargin } + } + + def @DoRowc + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + named above { above } + named below { below } + named side { side } + named vmargin { vmargin } + { + @LeftEdge ur { above } dr { below } sr { side } vm { vmargin } + @Fmtc + A { A } B { B } C { C } D { D } E { E } + F { F } G { G } H { H } I { I } J { J } + K { K } L { L } M { M } N { N } O { O } + P { P } Q { Q } R { R } S { S } T { T } + U { U } V { V } W { W } X { X } Y { Y } + Z { Z } + @Col { @Wrap ur {above} dr {below} vm {vmargin} x} + ! { x @Sep ur {above} dr {below} sr { between } vm {vmargin} y} + !! { x @Sep ur {above} dr {below} sr { single } vm {vmargin} y} + !!! { x @Sep ur {above} dr {below} sr { double } vm {vmargin} y} + , { x @NSep y } + @RightEdge ur { above } dr { below } sr { side } vm { vmargin } + } + + def @DoRowd + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + named above { above } + named below { below } + named side { side } + named vmargin { vmargin } + { + @LeftEdge ur { above } dr { below } sr { side } vm { vmargin } + @Fmtd + A { A } B { B } C { C } D { D } E { E } + F { F } G { G } H { H } I { I } J { J } + K { K } L { L } M { M } N { N } O { O } + P { P } Q { Q } R { R } S { S } T { T } + U { U } V { V } W { W } X { X } Y { Y } + Z { Z } + @Col { @Wrap ur {above} dr {below} vm {vmargin} x} + ! { x @Sep ur {above} dr {below} sr { between } vm {vmargin} y} + !! { x @Sep ur {above} dr {below} sr { single } vm {vmargin} y} + !!! { x @Sep ur {above} dr {below} sr { double } vm {vmargin} y} + , { x @NSep y } + @RightEdge ur { above } dr { below } sr { side } vm { vmargin } + } + + def @DoRowe + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + named above { above } + named below { below } + named side { side } + named vmargin { vmargin } + { + @LeftEdge ur { above } dr { below } sr { side } vm { vmargin } + @Fmte + A { A } B { B } C { C } D { D } E { E } + F { F } G { G } H { H } I { I } J { J } + K { K } L { L } M { M } N { N } O { O } + P { P } Q { Q } R { R } S { S } T { T } + U { U } V { V } W { W } X { X } Y { Y } + Z { Z } + @Col { @Wrap ur {above} dr {below} vm {vmargin} x} + ! { x @Sep ur {above} dr {below} sr { between } vm {vmargin} y} + !! { x @Sep ur {above} dr {below} sr { single } vm {vmargin} y} + !!! { x @Sep ur {above} dr {below} sr { double } vm {vmargin} y} + , { x @NSep y } + @RightEdge ur { above } dr { below } sr { side } vm { vmargin } + } + + def @DoRowf + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + named above { above } + named below { below } + named side { side } + named vmargin { vmargin } + { + @LeftEdge ur { above } dr { below } sr { side } vm { vmargin } + @Fmtf + A { A } B { B } C { C } D { D } E { E } + F { F } G { G } H { H } I { I } J { J } + K { K } L { L } M { M } N { N } O { O } + P { P } Q { Q } R { R } S { S } T { T } + U { U } V { V } W { W } X { X } Y { Y } + Z { Z } + @Col { @Wrap ur {above} dr {below} vm {vmargin} x} + ! { x @Sep ur {above} dr {below} sr { between } vm {vmargin} y} + !! { x @Sep ur {above} dr {below} sr { single } vm {vmargin} y} + !!! { x @Sep ur {above} dr {below} sr { double } vm {vmargin} y} + , { x @NSep y } + @RightEdge ur { above } dr { below } sr { side } vm { vmargin } + } + + def @DoRowg + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + named above { above } + named below { below } + named side { side } + named vmargin { vmargin } + { + @LeftEdge ur { above } dr { below } sr { side } vm { vmargin } + @Fmtg + A { A } B { B } C { C } D { D } E { E } + F { F } G { G } H { H } I { I } J { J } + K { K } L { L } M { M } N { N } O { O } + P { P } Q { Q } R { R } S { S } T { T } + U { U } V { V } W { W } X { X } Y { Y } + Z { Z } + @Col { @Wrap ur {above} dr {below} vm {vmargin} x} + ! { x @Sep ur {above} dr {below} sr { between } vm {vmargin} y} + !! { x @Sep ur {above} dr {below} sr { single } vm {vmargin} y} + !!! { x @Sep ur {above} dr {below} sr { double } vm {vmargin} y} + , { x @NSep y } + @RightEdge ur { above } dr { below } sr { side } vm { vmargin } + } + + def @DoRowh + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + named above { above } + named below { below } + named side { side } + named vmargin { vmargin } + { + @LeftEdge ur { above } dr { below } sr { side } vm { vmargin } + @Fmth + A { A } B { B } C { C } D { D } E { E } + F { F } G { G } H { H } I { I } J { J } + K { K } L { L } M { M } N { N } O { O } + P { P } Q { Q } R { R } S { S } T { T } + U { U } V { V } W { W } X { X } Y { Y } + Z { Z } + @Col { @Wrap ur {above} dr {below} vm {vmargin} x} + ! { x @Sep ur {above} dr {below} sr { between } vm {vmargin} y} + !! { x @Sep ur {above} dr {below} sr { single } vm {vmargin} y} + !!! { x @Sep ur {above} dr {below} sr { double } vm {vmargin} y} + , { x @NSep y } + @RightEdge ur { above } dr { below } sr { side } vm { vmargin } + } + + def @DoRowi + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + named above { above } + named below { below } + named side { side } + named vmargin { vmargin } + { + @LeftEdge ur { above } dr { below } sr { side } vm { vmargin } + @Fmti + A { A } B { B } C { C } D { D } E { E } + F { F } G { G } H { H } I { I } J { J } + K { K } L { L } M { M } N { N } O { O } + P { P } Q { Q } R { R } S { S } T { T } + U { U } V { V } W { W } X { X } Y { Y } + Z { Z } + @Col { @Wrap ur {above} dr {below} vm {vmargin} x} + ! { x @Sep ur {above} dr {below} sr { between } vm {vmargin} y} + !! { x @Sep ur {above} dr {below} sr { single } vm {vmargin} y} + !!! { x @Sep ur {above} dr {below} sr { double } vm {vmargin} y} + , { x @NSep y } + @RightEdge ur { above } dr { below } sr { side } vm { vmargin } + } + + def @DoRowj + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + named above { above } + named below { below } + named side { side } + named vmargin { vmargin } + { + @LeftEdge ur { above } dr { below } sr { side } vm { vmargin } + @Fmtj + A { A } B { B } C { C } D { D } E { E } + F { F } G { G } H { H } I { I } J { J } + K { K } L { L } M { M } N { N } O { O } + P { P } Q { Q } R { R } S { S } T { T } + U { U } V { V } W { W } X { X } Y { Y } + Z { Z } + @Col { @Wrap ur {above} dr {below} vm {vmargin} x} + ! { x @Sep ur {above} dr {below} sr { between } vm {vmargin} y} + !! { x @Sep ur {above} dr {below} sr { single } vm {vmargin} y} + !!! { x @Sep ur {above} dr {below} sr { double } vm {vmargin} y} + , { x @NSep y } + @RightEdge ur { above } dr { below } sr { side } vm { vmargin } + } + + macro @Rowa { / @DoRowa } + macro @Rowb { / @DoRowb } + macro @Rowc { / @DoRowc } + macro @Rowd { / @DoRowd } + macro @Rowe { / @DoRowe } + macro @Rowf { / @DoRowf } + macro @Rowg { / @DoRowg } + macro @Rowh { / @DoRowh } + macro @Rowi { / @DoRowi } + macro @Rowj { / @DoRowj } + + macro @FirstRowa { @DoRowa } + macro @FirstRowb { @DoRowb } + macro @FirstRowc { @DoRowc } + macro @FirstRowd { @DoRowd } + macro @FirstRowe { @DoRowe } + macro @FirstRowf { @DoRowf } + macro @FirstRowg { @DoRowg } + macro @FirstRowh { @DoRowh } + macro @FirstRowi { @DoRowi } + macro @FirstRowj { @DoRowj } + + macro @MarkRowa { ^/ @DoRowa } + macro @MarkRowb { ^/ @DoRowb } + macro @MarkRowc { ^/ @DoRowc } + macro @MarkRowd { ^/ @DoRowd } + macro @MarkRowe { ^/ @DoRowe } + macro @MarkRowf { ^/ @DoRowf } + macro @MarkRowg { ^/ @DoRowg } + macro @MarkRowh { ^/ @DoRowh } + macro @MarkRowi { ^/ @DoRowi } + macro @MarkRowj { ^/ @DoRowj } + + + @Body + +@End @Tab diff --git a/include/tabf.lpg b/include/tabf.lpg new file mode 100644 index 0000000..c0dd9a0 --- /dev/null +++ b/include/tabf.lpg @@ -0,0 +1,115 @@ +%%BeginResource: procset LoutTabPrependGraphic +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% PostScript @SysPrependGraphic file for @Tab % +% % +% To assist in avoiding name clashes, the names % +% of all these symbols begin with "ltab". % +% % +% Jeffrey H. Kingston % +% 24 September 1991 % +% 22 December 1992 % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% linewidth ltabhs - +% horizontal single line +/ltabhs +{ 0 0 moveto xsize 0 lineto + setlinewidth 0 setlinecap stroke +} def + +% linewidth ltabhsp - +% horizontal single line with projecting ends +/ltabhsp +{ 0 0 moveto xsize 0 lineto + setlinewidth 2 setlinecap stroke +} def + +% linewidth ltabhd - +% horizontal double line +/ltabhd +{ dup dup + 0 0 moveto xsize 0 lineto + 0 exch 3 mul moveto xsize exch 3 mul lineto + setlinewidth 0 setlinecap stroke +} def + +% linewidth ltabhdb - +% horizontal double line below mark +/ltabhdb +{ dup dup + 0 0 moveto xsize 0 lineto + 0 exch -3 mul moveto xsize exch -3 mul lineto + setlinewidth 0 setlinecap stroke +} def + +% linewidth ltabhdnw - +% horizontal double line with northwest corner +/ltabhdnw +{ dup dup dup dup + 0 0 moveto xsize 0 lineto + xsize exch 3 mul moveto + -3 mul exch 3 mul lineto + -3 mul 0 lineto + setlinewidth 0 setlinejoin 2 setlinecap stroke +} def + +% linewidth ltabhdne - +% horizontal double line with northeast corner +/ltabhdne +{ dup dup dup dup + 0 0 moveto xsize 0 lineto + 0 exch 3 mul moveto + 3 mul xsize add exch 3 mul lineto + 3 mul xsize add 0 lineto + setlinewidth 0 setlinejoin 2 setlinecap stroke +} def + +% linewidth ltabhdsw - +% horizontal double line with southwest corner +/ltabhdsw +{ dup dup dup dup + 0 0 moveto xsize 0 lineto + xsize exch -3 mul moveto + -3 mul exch -3 mul lineto + -3 mul 0 lineto + setlinewidth 0 setlinejoin 2 setlinecap stroke +} def + +% linewidth ltabhdse - +% horizontal double line with southeast corner +/ltabhdse +{ dup dup dup dup + 0 0 moveto xsize 0 lineto + 0 exch -3 mul moveto + 3 mul xsize add exch -3 mul lineto + 3 mul xsize add 0 lineto + setlinewidth 0 setlinejoin 2 setlinecap stroke +} def + +% linewidth ltabvs - +% vertical single line +/ltabvs +{ 0 0 moveto 0 ysize lineto + setlinewidth 0 setlinecap stroke +} def + +% linewidth ltabvd - +% vertical double line +/ltabvd +{ dup dup + 0 0 moveto 0 ysize lineto + -3 mul 0 moveto -3 mul ysize lineto + setlinewidth 0 setlinecap stroke +} def + +% linewidth ltabvdr - +% vertical double line to right of mark +/ltabvdr +{ dup dup + 0 0 moveto 0 ysize lineto + 3 mul 0 moveto 3 mul ysize lineto + setlinewidth 0 setlinecap stroke +} def +%%EndResource diff --git a/include/tbl b/include/tbl new file mode 100644 index 0000000..0574bf0 --- /dev/null +++ b/include/tbl @@ -0,0 +1,79 @@ + +############################################################################### +# # +# Lout setup file for table printing # +# # +# Jeffrey H. Kingston # +# 5 February 1999 # +# # +############################################################################### + +############################################################################### +# # +# The @SysInclude { tblf } line # +# # +# This line causes Lout to read the definitions for diagrams, and should # +# not be touched. # +# # +############################################################################### + +@SysInclude { tblf } + + +############################################################################### +# # +# The @TbleSetup @Use clause # +# # +# To change the default value of any option, delete the # at the start of # +# its line and change the value between braces. # +# # +############################################################################### + +@Use { @TblSetup + # paint { nopaint } # colour of background + # background { } # object in background + # font { } # font + # break { } # paragraph breaking style + # width { } # fixed width or "expand" + # height { } # fixed height + # indent { } # horizontal indent + # indentvertical { } # vertical indent + # strut { yes } # vertical strut + # struthorizontal { no } # horizontal strut + # margin { } # margin all round + # marginhorizontal { 0.6f @OrIfPlain 2s } # margin left, right of entry + # marginleft { } # margin left of entry + # marginright { } # margin right of entry + # marginvertical { 0.3f @OrIfPlain 2f } # margin above, below entry + # marginabove { } # margin above entry + # marginbelow { } # margin below entry + # rule { no } # rule all round cell + # rulehorizontal { } # rule above and below cell + # ruleabove { } # rule above cell + # rulebelow { } # rule below cell + # rulevertical { } # rule left and right of cell + # ruleleft { } # rule left of cell + # ruleright { } # rule right of cell + # rulewidth { 0.05f } # width (thickness) of rule + # rulehorizontalwidth { {} @OrIfPlain 1f } # width of above, below rules + # ruleabovewidth { } # width of above rule + # rulebelowwidth { } # width of below rule + # ruleverticalwidth { {} @OrIfPlain 1s } # width of left, right rules + # ruleleftwidth { } # width of left rule + # rulerightwidth { } # width of right rule + # rulegap { 0.15f } # gap between double rules + # rulehorizontalgap { {} @OrIfPlain 0f } # gap between dbl a&b rules + # ruleabovegap { } # gap between dbl above rules + # rulebelowgap { } # gap between dbl below rules + # ruleverticalgap { {} @OrIfPlain 0s } # gap between dbl l&r rules + # ruleleftgap { } # gap between dbl left rules + # rulerightgap { } # gap between dbl right rules + # rulecolour { black } # color of rules + # rulehorizontalcolour { } # color of above, below rules + # ruleabovecolour { } # color of above rules + # rulebelowcolour { } # color of below rules + # ruleverticalcolour { } # color of left, right rules + # ruleleftcolour { } # color of left rules + # rulerightcolour { } # color of right rules + # ruleplainchar { . } # plain text rule characters +} diff --git a/include/tblf b/include/tblf new file mode 100644 index 0000000..c8f0019 --- /dev/null +++ b/include/tblf @@ -0,0 +1,3127 @@ + +############################################################################### +# # +# Lout @Tbl package for tables # +# # +# Version 1.0 (22 November 1998) # +# Jeffrey H. Kingston # +# # +# Based on the @Tab package (Jeffrey H. Kingston, September 1991). # +# # +############################################################################### + +@SysPrependGraphic { tblf.lpg } + +export @OrIfPlain +def @TOIP { + + def @OrIfPlain + left ps + right plain + { + @BackEnd @Case { + PlainText @Yield plain + else @Yield ps + } + } +} + +export @Tbl +def @TblSetup + import @TOIP named paint p { nopaint } + import @TOIP named background bg {} + import @TOIP named font f {} + import @TOIP named break b {} + import @TOIP named width w {} + import @TOIP named height h {} + import @TOIP named indent i {} + import @TOIP named indentvertical iv {} + import @TOIP named strut s { yes } + import @TOIP named struthorizontal sh { no } + import @TOIP named margin m {} + import @TOIP named marginhorizontal mh { 0.6f @OrIfPlain 2s } + import @TOIP named marginleft ml {} + import @TOIP named marginright mr {} + import @TOIP named marginvertical mv { 0.3f @OrIfPlain 2f } + import @TOIP named marginabove ma {} + import @TOIP named marginbelow mb {} + import @TOIP named rule r { no } + import @TOIP named rulehorizontal rh {} + import @TOIP named ruleabove ra {} + import @TOIP named rulebelow rb {} + import @TOIP named rulevertical rv {} + import @TOIP named ruleleft rl {} + import @TOIP named ruleright rr {} + import @TOIP named rulewidth rw { 0.05f } + import @TOIP named rulehorizontalwidth rhw { {} @OrIfPlain 1f } + import @TOIP named ruleabovewidth raw {} + import @TOIP named rulebelowwidth rbw {} + import @TOIP named ruleverticalwidth rvw { {} @OrIfPlain 1s } + import @TOIP named ruleleftwidth rlw {} + import @TOIP named rulerightwidth rrw {} + import @TOIP named rulegap rg { 0.15f } + import @TOIP named rulehorizontalgap rhg { {} @OrIfPlain 0f } + import @TOIP named ruleabovegap rag {} + import @TOIP named rulebelowgap rbg {} + import @TOIP named ruleverticalgap rvg { {} @OrIfPlain 0s } + import @TOIP named ruleleftgap rlg {} + import @TOIP named rulerightgap rrg {} + import @TOIP named rulecolour rulecolor rc { black } + import @TOIP named rulehorizontalcolour rulehorizontalcolor rhc {} + import @TOIP named ruleabovecolour ruleabovecolor rac {} + import @TOIP named rulebelowcolour rulebelowcolor rbc {} + import @TOIP named ruleverticalcolour ruleverticalcolor rvc {} + import @TOIP named ruleleftcolour ruleleftcolor rlc {} + import @TOIP named rulerightcolour rulerightcolor rrc {} + import @TOIP named ruleplainchar rpc { . } + +@Begin + + def @Else + precedence 20 + associativity right + left x + right y + { + x @Case { + "" @Yield y + else @Yield x + } + } + + + ########################################################################### + # # + # Specific option values as the setup file knows them (i.e. Level 1) # + # # + ########################################################################### + + def setupp { p } + def setupbg { bg } + def setupf { f } + def setupb { b } + def setupw { w } + def setuph { h } + def setupi { i } + def setupiv { iv } + def setups { s } + def setupsh { sh } + def setupml { ml @Else mh @Else m } + def setupmr { mr @Else mh @Else m } + def setupma { ma @Else mv @Else m } + def setupmb { mb @Else mv @Else m } + def setupra { ra @Else rh @Else r } + def setuprb { rb @Else rh @Else r } + def setuprl { rl @Else rv @Else r } + def setuprr { rr @Else rv @Else r } + def setupraw { raw @Else rhw @Else rw } + def setuprbw { rbw @Else rhw @Else rw } + def setuprlw { rlw @Else rvw @Else rw } + def setuprrw { rrw @Else rvw @Else rw } + def setuprag { rag @Else rhg @Else rg } + def setuprbg { rbg @Else rhg @Else rg } + def setuprlg { rlg @Else rvg @Else rg } + def setuprrg { rrg @Else rvg @Else rg } + def setuprac { rac @Else rhc @Else rc } + def setuprbc { rbc @Else rhc @Else rc } + def setuprlc { rlc @Else rvc @Else rc } + def setuprrc { rrc @Else rvc @Else rc } + def setuprpc { rpc } + + + ########################################################################### + # # + # @Tbl symbol # + # # + ########################################################################### + + export + + @Row + @Rowa + @Rowb + @Rowc + @Rowd + @Rowe + @Rowf + @Rowg + @Rowh + + @FirstRow + @FirstRowa + @FirstRowb + @FirstRowc + @FirstRowd + @FirstRowe + @FirstRowf + @FirstRowg + @FirstRowh + + @MarkRow + @MarkRowa + @MarkRowb + @MarkRowc + @MarkRowd + @MarkRowe + @MarkRowf + @MarkRowg + @MarkRowh + + @NoBreakRow + @NoBreakRowa + @NoBreakRowb + @NoBreakRowc + @NoBreakRowd + @NoBreakRowe + @NoBreakRowf + @NoBreakRowg + @NoBreakRowh + + @NP + + def @Tbl + + # parameters for formatting the entire table + named paint p {} + named background bg {} + named font f {} + named break b {} + named width w {} + named height h {} + named indent i {} + named indentvertical iv {} + named strut s {} + named struthorizontal sh {} + named margin m {} + named marginhorizontal mh {} + named marginleft ml {} + named marginright mr {} + named marginvertical mv {} + named marginabove ma {} + named marginbelow mb {} + named rule r {} + named rulehorizontal rh {} + named ruleabove ra {} + named rulebelow rb {} + named rulevertical rv {} + named ruleleft rl {} + named ruleright rr {} + named rulewidth rw {} + named rulehorizontalwidth rhw {} + named ruleabovewidth raw {} + named rulebelowwidth rbw {} + named ruleverticalwidth rvw {} + named ruleleftwidth rlw {} + named rulerightwidth rrw {} + named rulegap rg {} + named rulehorizontalgap rhg {} + named ruleabovegap rag {} + named rulebelowgap rbg {} + named ruleverticalgap rvg {} + named ruleleftgap rlg {} + named rulerightgap rrg {} + named rulecolour rulecolor rc {} + named rulehorizontalcolour rulehorizontalcolor rhc {} + named ruleabovecolour ruleabovecolor rac {} + named rulebelowcolour rulebelowcolor rbc {} + named ruleverticalcolour ruleverticalcolor rvc {} + named ruleleftcolour ruleleftcolor rlc {} + named rulerightcolour rulerightcolor rrc {} + named ruleplainchar rpc {} + + # parameters for formatting @Rowa rows + named apaint ap {} + named abackground abg {} + named afont af {} + named abreak ab {} + named awidth aw {} + named aheight ah {} + named aindent ai {} + named aindentvertical aiv {} + named astrut as {} + named astruthorizontal ash {} + named amargin am {} + named amarginhorizontal amh {} + named amarginleft aml {} + named amarginright amr {} + named amarginvertical amv {} + named amarginabove ama {} + named amarginbelow amb {} + named arule ar {} + named arulehorizontal arh {} + named aruleabove ara {} + named arulebelow arb {} + named arulevertical arv {} + named aruleleft arl {} + named aruleright arr {} + named arulewidth arw {} + named arulehorizontalwidth arhw {} + named aruleabovewidth araw {} + named arulebelowwidth arbw {} + named aruleverticalwidth arvw {} + named aruleleftwidth arlw {} + named arulerightwidth arrw {} + named arulegap arg {} + named arulehorizontalgap arhg {} + named aruleabovegap arag {} + named arulebelowgap arbg {} + named aruleverticalgap arvg {} + named aruleleftgap arlg {} + named arulerightgap arrg {} + named arulecolour arulecolor arc {} + named arulehorizontalcolour arulehorizontalcolor arhc {} + named aruleabovecolour aruleabovecolor arac {} + named arulebelowcolour arulebelowcolor arbc {} + named aruleverticalcolour aruleverticalcolor arvc {} + named aruleleftcolour aruleleftcolor arlc {} + named arulerightcolour arulerightcolor arrc {} + named aruleplainchar arpc {} + named aformat + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + named @Cell + named paint p {} + named background bg {} + named font f {} + named break b {} + named width w {} + named height h {} + named indent i {} + named indentvertical iv {} + named strut s {} + named struthorizontal sh {} + named margin m {} + named marginhorizontal mh {} + named marginleft ml {} + named marginright mr {} + named marginvertical mv {} + named marginabove ma {} + named marginbelow mb {} + named rule r {} + named rulehorizontal rh {} + named ruleabove ra {} + named rulebelow rb {} + named rulevertical rv {} + named ruleleft rl {} + named ruleright rr {} + named rulewidth rw {} + named rulehorizontalwidth rhw {} + named ruleabovewidth raw {} + named rulebelowwidth rbw {} + named ruleverticalwidth rvw {} + named ruleleftwidth rlw {} + named rulerightwidth rrw {} + named rulegap rg {} + named rulehorizontalgap rhg {} + named ruleabovegap rag {} + named rulebelowgap rbg {} + named ruleverticalgap rvg {} + named ruleleftgap rlg {} + named rulerightgap rrg {} + named rulecolour rulecolor rc {} + named rulehorizontalcolour rulehorizontalcolor rhc {} + named ruleabovecolour ruleabovecolor rac {} + named rulebelowcolour rulebelowcolor rbc {} + named ruleverticalcolour ruleverticalcolor rvc {} + named ruleleftcolour ruleleftcolor rlc {} + named rulerightcolour rulerightcolor rrc {} + named ruleplainchar rpc {} + right x + {} + {} + + # parameters for formatting @Rowb rows + named bpaint bp {} + named bbackground bbg {} + named bfont bf {} + named bbreak bb {} + named bwidth bw {} + named bheight bh {} + named bindent bi {} + named bindentvertical biv {} + named bstrut bs {} + named bstruthorizontal bsh {} + named bmargin bm {} + named bmarginhorizontal bmh {} + named bmarginleft bml {} + named bmarginright bmr {} + named bmarginvertical bmv {} + named bmarginabove bma {} + named bmarginbelow bmb {} + named brule br {} + named brulehorizontal brh {} + named bruleabove bra {} + named brulebelow brb {} + named brulevertical brv {} + named bruleleft brl {} + named bruleright brr {} + named brulewidth brw {} + named brulehorizontalwidth brhw {} + named bruleabovewidth braw {} + named brulebelowwidth brbw {} + named bruleverticalwidth brvw {} + named bruleleftwidth brlw {} + named brulerightwidth brrw {} + named brulegap brg {} + named brulehorizontalgap brhg {} + named bruleabovegap brag {} + named brulebelowgap brbg {} + named bruleverticalgap brvg {} + named bruleleftgap brlg {} + named brulerightgap brrg {} + named brulecolour brulecolor brc {} + named brulehorizontalcolour brulehorizontalcolor brhc {} + named bruleabovecolour bruleabovecolor brac {} + named brulebelowcolour brulebelowcolor brbc {} + named bruleverticalcolour bruleverticalcolor brvc {} + named bruleleftcolour bruleleftcolor brlc {} + named brulerightcolour brulerightcolor brrc {} + named bruleplainchar brpc {} + named bformat + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + named @Cell + named paint p {} + named background bg {} + named font f {} + named break b {} + named width w {} + named height h {} + named indent i {} + named indentvertical iv {} + named strut s {} + named struthorizontal sh {} + named margin m {} + named marginhorizontal mh {} + named marginleft ml {} + named marginright mr {} + named marginvertical mv {} + named marginabove ma {} + named marginbelow mb {} + named rule r {} + named rulehorizontal rh {} + named ruleabove ra {} + named rulebelow rb {} + named rulevertical rv {} + named ruleleft rl {} + named ruleright rr {} + named rulewidth rw {} + named rulehorizontalwidth rhw {} + named ruleabovewidth raw {} + named rulebelowwidth rbw {} + named ruleverticalwidth rvw {} + named ruleleftwidth rlw {} + named rulerightwidth rrw {} + named rulegap rg {} + named rulehorizontalgap rhg {} + named ruleabovegap rag {} + named rulebelowgap rbg {} + named ruleverticalgap rvg {} + named ruleleftgap rlg {} + named rulerightgap rrg {} + named rulecolour rulecolor rc {} + named rulehorizontalcolour rulehorizontalcolor rhc {} + named ruleabovecolour ruleabovecolor rac {} + named rulebelowcolour rulebelowcolor rbc {} + named ruleverticalcolour ruleverticalcolor rvc {} + named ruleleftcolour ruleleftcolor rlc {} + named rulerightcolour rulerightcolor rrc {} + named ruleplainchar rpc {} + right x + {} + {} + + # parameters for formatting @Rowc rows + named cpaint cp {} + named cbackground cbg {} + named cfont cf {} + named cbreak cb {} + named cwidth cw {} + named cheight ch {} + named cindent ci {} + named cindentvertical civ {} + named cstrut cs {} + named cstruthorizontal csh {} + named cmargin cm {} + named cmarginhorizontal cmh {} + named cmarginleft cml {} + named cmarginright cmr {} + named cmarginvertical cmv {} + named cmarginabove cma {} + named cmarginbelow cmb {} + named crule cr {} + named crulehorizontal crh {} + named cruleabove cra {} + named crulebelow crb {} + named crulevertical crv {} + named cruleleft crl {} + named cruleright crr {} + named crulewidth crw {} + named crulehorizontalwidth crhw {} + named cruleabovewidth craw {} + named crulebelowwidth crbw {} + named cruleverticalwidth crvw {} + named cruleleftwidth crlw {} + named crulerightwidth crrw {} + named crulegap crg {} + named crulehorizontalgap crhg {} + named cruleabovegap crag {} + named crulebelowgap crbg {} + named cruleverticalgap crvg {} + named cruleleftgap crlg {} + named crulerightgap crrg {} + named crulecolour crulecolor crc {} + named crulehorizontalcolour crulehorizontalcolor crhc {} + named cruleabovecolour cruleabovecolor crac {} + named crulebelowcolour crulebelowcolor crbc {} + named cruleverticalcolour cruleverticalcolor crvc {} + named cruleleftcolour cruleleftcolor crlc {} + named crulerightcolour crulerightcolor crrc {} + named cruleplainchar crpc {} + named cformat + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + named @Cell + named paint p {} + named background bg {} + named font f {} + named break b {} + named width w {} + named height h {} + named indent i {} + named indentvertical iv {} + named strut s {} + named struthorizontal sh {} + named margin m {} + named marginhorizontal mh {} + named marginleft ml {} + named marginright mr {} + named marginvertical mv {} + named marginabove ma {} + named marginbelow mb {} + named rule r {} + named rulehorizontal rh {} + named ruleabove ra {} + named rulebelow rb {} + named rulevertical rv {} + named ruleleft rl {} + named ruleright rr {} + named rulewidth rw {} + named rulehorizontalwidth rhw {} + named ruleabovewidth raw {} + named rulebelowwidth rbw {} + named ruleverticalwidth rvw {} + named ruleleftwidth rlw {} + named rulerightwidth rrw {} + named rulegap rg {} + named rulehorizontalgap rhg {} + named ruleabovegap rag {} + named rulebelowgap rbg {} + named ruleverticalgap rvg {} + named ruleleftgap rlg {} + named rulerightgap rrg {} + named rulecolour rulecolor rc {} + named rulehorizontalcolour rulehorizontalcolor rhc {} + named ruleabovecolour ruleabovecolor rac {} + named rulebelowcolour rulebelowcolor rbc {} + named ruleverticalcolour ruleverticalcolor rvc {} + named ruleleftcolour ruleleftcolor rlc {} + named rulerightcolour rulerightcolor rrc {} + named ruleplainchar rpc {} + right x + {} + {} + + # parameters for formatting @Rowd rows + named dpaint dp {} + named dbackground dbg {} + named dfont df {} + named dbreak db {} + named dwidth dw {} + named dheight dh {} + named dindent di {} + named dindentvertical div {} + named dstrut ds {} + named dstruthorizontal dsh {} + named dmargin dm {} + named dmarginhorizontal dmh {} + named dmarginleft dml {} + named dmarginright dmr {} + named dmarginvertical dmv {} + named dmarginabove dma {} + named dmarginbelow dmb {} + named drule dr {} + named drulehorizontal drh {} + named druleabove dra {} + named drulebelow drb {} + named drulevertical drv {} + named druleleft drl {} + named druleright drr {} + named drulewidth drw {} + named drulehorizontalwidth drhw {} + named druleabovewidth draw {} + named drulebelowwidth drbw {} + named druleverticalwidth drvw {} + named druleleftwidth drlw {} + named drulerightwidth drrw {} + named drulegap drg {} + named drulehorizontalgap drhg {} + named druleabovegap drag {} + named drulebelowgap drbg {} + named druleverticalgap drvg {} + named druleleftgap drlg {} + named drulerightgap drrg {} + named drulecolour drulecolor drc {} + named drulehorizontalcolour drulehorizontalcolor drhc {} + named druleabovecolour druleabovecolor drac {} + named drulebelowcolour drulebelowcolor drbc {} + named druleverticalcolour druleverticalcolor drvc {} + named druleleftcolour druleleftcolor drlc {} + named drulerightcolour drulerightcolor drrc {} + named druleplainchar drpc {} + named dformat + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + named @Cell + named paint p {} + named background bg {} + named font f {} + named break b {} + named width w {} + named height h {} + named indent i {} + named indentvertical iv {} + named strut s {} + named struthorizontal sh {} + named margin m {} + named marginhorizontal mh {} + named marginleft ml {} + named marginright mr {} + named marginvertical mv {} + named marginabove ma {} + named marginbelow mb {} + named rule r {} + named rulehorizontal rh {} + named ruleabove ra {} + named rulebelow rb {} + named rulevertical rv {} + named ruleleft rl {} + named ruleright rr {} + named rulewidth rw {} + named rulehorizontalwidth rhw {} + named ruleabovewidth raw {} + named rulebelowwidth rbw {} + named ruleverticalwidth rvw {} + named ruleleftwidth rlw {} + named rulerightwidth rrw {} + named rulegap rg {} + named rulehorizontalgap rhg {} + named ruleabovegap rag {} + named rulebelowgap rbg {} + named ruleverticalgap rvg {} + named ruleleftgap rlg {} + named rulerightgap rrg {} + named rulecolour rulecolor rc {} + named rulehorizontalcolour rulehorizontalcolor rhc {} + named ruleabovecolour ruleabovecolor rac {} + named rulebelowcolour rulebelowcolor rbc {} + named ruleverticalcolour ruleverticalcolor rvc {} + named ruleleftcolour ruleleftcolor rlc {} + named rulerightcolour rulerightcolor rrc {} + named ruleplainchar rpc {} + right x + {} + {} + + # parameters for formatting @Rowe rows + named epaint ep {} + named ebackground ebg {} + named efont ef {} + named ebreak eb {} + named ewidth ew {} + named eheight eh {} + named eindent ei {} + named eindentvertical eiv {} + named estrut es {} + named estruthorizontal esh {} + named emargin em {} + named emarginhorizontal emh {} + named emarginleft eml {} + named emarginright emr {} + named emarginvertical emv {} + named emarginabove ema {} + named emarginbelow emb {} + named erule er {} + named erulehorizontal erh {} + named eruleabove era {} + named erulebelow erb {} + named erulevertical erv {} + named eruleleft erl {} + named eruleright err {} + named erulewidth erw {} + named erulehorizontalwidth erhw {} + named eruleabovewidth eraw {} + named erulebelowwidth erbw {} + named eruleverticalwidth ervw {} + named eruleleftwidth erlw {} + named erulerightwidth errw {} + named erulegap erg {} + named erulehorizontalgap erhg {} + named eruleabovegap erag {} + named erulebelowgap erbg {} + named eruleverticalgap ervg {} + named eruleleftgap erlg {} + named erulerightgap errg {} + named erulecolour erulecolor erc {} + named erulehorizontalcolour erulehorizontalcolor erhc {} + named eruleabovecolour eruleabovecolor erac {} + named erulebelowcolour erulebelowcolor erbc {} + named eruleverticalcolour eruleverticalcolor ervc {} + named eruleleftcolour eruleleftcolor erlc {} + named erulerightcolour erulerightcolor errc {} + named eruleplainchar erpc {} + named eformat + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + named @Cell + named paint p {} + named background bg {} + named font f {} + named break b {} + named width w {} + named height h {} + named indent i {} + named indentvertical iv {} + named strut s {} + named struthorizontal sh {} + named margin m {} + named marginhorizontal mh {} + named marginleft ml {} + named marginright mr {} + named marginvertical mv {} + named marginabove ma {} + named marginbelow mb {} + named rule r {} + named rulehorizontal rh {} + named ruleabove ra {} + named rulebelow rb {} + named rulevertical rv {} + named ruleleft rl {} + named ruleright rr {} + named rulewidth rw {} + named rulehorizontalwidth rhw {} + named ruleabovewidth raw {} + named rulebelowwidth rbw {} + named ruleverticalwidth rvw {} + named ruleleftwidth rlw {} + named rulerightwidth rrw {} + named rulegap rg {} + named rulehorizontalgap rhg {} + named ruleabovegap rag {} + named rulebelowgap rbg {} + named ruleverticalgap rvg {} + named ruleleftgap rlg {} + named rulerightgap rrg {} + named rulecolour rulecolor rc {} + named rulehorizontalcolour rulehorizontalcolor rhc {} + named ruleabovecolour ruleabovecolor rac {} + named rulebelowcolour rulebelowcolor rbc {} + named ruleverticalcolour ruleverticalcolor rvc {} + named ruleleftcolour ruleleftcolor rlc {} + named rulerightcolour rulerightcolor rrc {} + named ruleplainchar rpc {} + right x + {} + {} + + # parameters for formatting @Rowf rows + named fpaint fp {} + named fbackground fbg {} + named ffont ff {} + named fbreak fb {} + named fwidth fw {} + named fheight fh {} + named findent fi {} + named findentvertical fiv {} + named fstrut fs {} + named fstruthorizontal fsh {} + named fmargin fm {} + named fmarginhorizontal fmh {} + named fmarginleft fml {} + named fmarginright fmr {} + named fmarginvertical fmv {} + named fmarginabove fma {} + named fmarginbelow fmb {} + named frule fr {} + named frulehorizontal frh {} + named fruleabove fra {} + named frulebelow frb {} + named frulevertical frv {} + named fruleleft frl {} + named fruleright frr {} + named frulewidth frw {} + named frulehorizontalwidth frhw {} + named fruleabovewidth fraw {} + named frulebelowwidth frbw {} + named fruleverticalwidth frvw {} + named fruleleftwidth frlw {} + named frulerightwidth frrw {} + named frulegap frg {} + named frulehorizontalgap frhg {} + named fruleabovegap frag {} + named frulebelowgap frbg {} + named fruleverticalgap frvg {} + named fruleleftgap frlg {} + named frulerightgap frrg {} + named frulecolour frulecolor frc {} + named frulehorizontalcolour frulehorizontalcolor frhc {} + named fruleabovecolour fruleabovecolor frac {} + named frulebelowcolour frulebelowcolor frbc {} + named fruleverticalcolour fruleverticalcolor frvc {} + named fruleleftcolour fruleleftcolor frlc {} + named frulerightcolour frulerightcolor frrc {} + named fruleplainchar frpc {} + named fformat + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + named @Cell + named paint p {} + named background bg {} + named font f {} + named break b {} + named width w {} + named height h {} + named indent i {} + named indentvertical iv {} + named strut s {} + named struthorizontal sh {} + named margin m {} + named marginhorizontal mh {} + named marginleft ml {} + named marginright mr {} + named marginvertical mv {} + named marginabove ma {} + named marginbelow mb {} + named rule r {} + named rulehorizontal rh {} + named ruleabove ra {} + named rulebelow rb {} + named rulevertical rv {} + named ruleleft rl {} + named ruleright rr {} + named rulewidth rw {} + named rulehorizontalwidth rhw {} + named ruleabovewidth raw {} + named rulebelowwidth rbw {} + named ruleverticalwidth rvw {} + named ruleleftwidth rlw {} + named rulerightwidth rrw {} + named rulegap rg {} + named rulehorizontalgap rhg {} + named ruleabovegap rag {} + named rulebelowgap rbg {} + named ruleverticalgap rvg {} + named ruleleftgap rlg {} + named rulerightgap rrg {} + named rulecolour rulecolor rc {} + named rulehorizontalcolour rulehorizontalcolor rhc {} + named ruleabovecolour ruleabovecolor rac {} + named rulebelowcolour rulebelowcolor rbc {} + named ruleverticalcolour ruleverticalcolor rvc {} + named ruleleftcolour ruleleftcolor rlc {} + named rulerightcolour rulerightcolor rrc {} + named ruleplainchar rpc {} + right x + {} + {} + + # parameters for formatting @Rowg rows + named gpaint gp {} + named gbackground gbg {} + named gfont gf {} + named gbreak gb {} + named gwidth gw {} + named gheight gh {} + named gindent gi {} + named gindentvertical giv {} + named gstrut gs {} + named gstruthorizontal gsh {} + named gmargin gm {} + named gmarginhorizontal gmh {} + named gmarginleft gml {} + named gmarginright gmr {} + named gmarginvertical gmv {} + named gmarginabove gma {} + named gmarginbelow gmb {} + named grule gr {} + named grulehorizontal grh {} + named gruleabove gra {} + named grulebelow grb {} + named grulevertical grv {} + named gruleleft grl {} + named gruleright grr {} + named grulewidth grw {} + named grulehorizontalwidth grhw {} + named gruleabovewidth graw {} + named grulebelowwidth grbw {} + named gruleverticalwidth grvw {} + named gruleleftwidth grlw {} + named grulerightwidth grrw {} + named grulegap grg {} + named grulehorizontalgap grhg {} + named gruleabovegap grag {} + named grulebelowgap grbg {} + named gruleverticalgap grvg {} + named gruleleftgap grlg {} + named grulerightgap grrg {} + named grulecolour grulecolor grc {} + named grulehorizontalcolour grulehorizontalcolor grhc {} + named gruleabovecolour gruleabovecolor grac {} + named grulebelowcolour grulebelowcolor grbc {} + named gruleverticalcolour gruleverticalcolor grvc {} + named gruleleftcolour gruleleftcolor grlc {} + named grulerightcolour grulerightcolor grrc {} + named gruleplainchar grpc {} + named gformat + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + named @Cell + named paint p {} + named background bg {} + named font f {} + named break b {} + named width w {} + named height h {} + named indent i {} + named indentvertical iv {} + named strut s {} + named struthorizontal sh {} + named margin m {} + named marginhorizontal mh {} + named marginleft ml {} + named marginright mr {} + named marginvertical mv {} + named marginabove ma {} + named marginbelow mb {} + named rule r {} + named rulehorizontal rh {} + named ruleabove ra {} + named rulebelow rb {} + named rulevertical rv {} + named ruleleft rl {} + named ruleright rr {} + named rulewidth rw {} + named rulehorizontalwidth rhw {} + named ruleabovewidth raw {} + named rulebelowwidth rbw {} + named ruleverticalwidth rvw {} + named ruleleftwidth rlw {} + named rulerightwidth rrw {} + named rulegap rg {} + named rulehorizontalgap rhg {} + named ruleabovegap rag {} + named rulebelowgap rbg {} + named ruleverticalgap rvg {} + named ruleleftgap rlg {} + named rulerightgap rrg {} + named rulecolour rulecolor rc {} + named rulehorizontalcolour rulehorizontalcolor rhc {} + named ruleabovecolour ruleabovecolor rac {} + named rulebelowcolour rulebelowcolor rbc {} + named ruleverticalcolour ruleverticalcolor rvc {} + named ruleleftcolour ruleleftcolor rlc {} + named rulerightcolour rulerightcolor rrc {} + named ruleplainchar rpc {} + right x + {} + {} + + # parameters for formatting @Rowh rows + named hpaint hp {} + named hbackground hbg {} + named hfont hf {} + named hbreak hb {} + named hwidth hw {} + named hheight hh {} + named hindent hi {} + named hindentvertical hiv {} + named hstrut hs {} + named hstruthorizontal hsh {} + named hmargin hm {} + named hmarginhorizontal hmh {} + named hmarginleft hml {} + named hmarginright hmr {} + named hmarginvertical hmv {} + named hmarginabove hma {} + named hmarginbelow hmb {} + named hrule hr {} + named hrulehorizontal hrh {} + named hruleabove hra {} + named hrulebelow hrb {} + named hrulevertical hrv {} + named hruleleft hrl {} + named hruleright hrr {} + named hrulewidth hrw {} + named hrulehorizontalwidth hrhw {} + named hruleabovewidth hraw {} + named hrulebelowwidth hrbw {} + named hruleverticalwidth hrvw {} + named hruleleftwidth hrlw {} + named hrulerightwidth hrrw {} + named hrulegap hrg {} + named hrulehorizontalgap hrhg {} + named hruleabovegap hrag {} + named hrulebelowgap hrbg {} + named hruleverticalgap hrvg {} + named hruleleftgap hrlg {} + named hrulerightgap hrrg {} + named hrulecolour hrulecolor hrc {} + named hrulehorizontalcolour hrulehorizontalcolor hrhc {} + named hruleabovecolour hruleabovecolor hrac {} + named hrulebelowcolour hrulebelowcolor hrbc {} + named hruleverticalcolour hruleverticalcolor hrvc {} + named hruleleftcolour hruleleftcolor hrlc {} + named hrulerightcolour hrulerightcolor hrrc {} + named hruleplainchar hrpc {} + named hformat + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + named @Cell + named paint p {} + named background bg {} + named font f {} + named break b {} + named width w {} + named height h {} + named indent i {} + named indentvertical iv {} + named strut s {} + named struthorizontal sh {} + named margin m {} + named marginhorizontal mh {} + named marginleft ml {} + named marginright mr {} + named marginvertical mv {} + named marginabove ma {} + named marginbelow mb {} + named rule r {} + named rulehorizontal rh {} + named ruleabove ra {} + named rulebelow rb {} + named rulevertical rv {} + named ruleleft rl {} + named ruleright rr {} + named rulewidth rw {} + named rulehorizontalwidth rhw {} + named ruleabovewidth raw {} + named rulebelowwidth rbw {} + named ruleverticalwidth rvw {} + named ruleleftwidth rlw {} + named rulerightwidth rrw {} + named rulegap rg {} + named rulehorizontalgap rhg {} + named ruleabovegap rag {} + named rulebelowgap rbg {} + named ruleverticalgap rvg {} + named ruleleftgap rlg {} + named rulerightgap rrg {} + named rulecolour rulecolor rc {} + named rulehorizontalcolour rulehorizontalcolor rhc {} + named ruleabovecolour ruleabovecolor rac {} + named rulebelowcolour rulebelowcolor rbc {} + named ruleverticalcolour ruleverticalcolor rvc {} + named ruleleftcolour ruleleftcolor rlc {} + named rulerightcolour rulerightcolor rrc {} + named ruleplainchar rpc {} + right x + {} + {} + + body @Body # this is the right parameter of @Tbl + + { + + ####################################################################### + # # + # Specific option values as @Tbl knows them (i.e. Level 2) # + # # + ####################################################################### + + def tblp { p @Else setupp } + def tblbg { bg @Else setupbg } + def tblf { f @Else setupf } + def tblb { b @Else setupb } + def tblw { w @Else setupw } + def tblh { h @Else setuph } + def tbli { i @Else setupi } + def tbliv { iv @Else setupiv } + def tbls { s @Else setups } + def tblsh { sh @Else setupsh } + def tblml { ml @Else mh @Else m @Else setupml } + def tblmr { mr @Else mh @Else m @Else setupmr } + def tblma { ma @Else mv @Else m @Else setupma } + def tblmb { mb @Else mv @Else m @Else setupmb } + def tblra { ra @Else rh @Else r @Else setupra } + def tblrb { rb @Else rh @Else r @Else setuprb } + def tblrl { rl @Else rv @Else r @Else setuprl } + def tblrr { rr @Else rv @Else r @Else setuprr } + def tblraw { raw @Else rhw @Else rw @Else setupraw } + def tblrbw { rbw @Else rhw @Else rw @Else setuprbw } + def tblrlw { rlw @Else rvw @Else rw @Else setuprlw } + def tblrrw { rrw @Else rvw @Else rw @Else setuprrw } + def tblrag { rag @Else rhg @Else rg @Else setuprag } + def tblrbg { rbg @Else rhg @Else rg @Else setuprbg } + def tblrlg { rlg @Else rvg @Else rg @Else setuprlg } + def tblrrg { rrg @Else rvg @Else rg @Else setuprrg } + def tblrac { rac @Else rhc @Else rc @Else setuprac } + def tblrbc { rbc @Else rhc @Else rc @Else setuprbc } + def tblrlc { rlc @Else rvc @Else rc @Else setuprlc } + def tblrrc { rrc @Else rvc @Else rc @Else setuprrc } + def tblrpc { rpc @Else setuprpc } + + + def @DoCell + named compulsory p {} + named compulsory bg {} + named compulsory f {} + named compulsory b {} + named compulsory w {} + named compulsory h {} + named compulsory i {} + named compulsory iv {} + named compulsory s {} + named compulsory sh {} + named compulsory ml {} + named compulsory mr {} + named compulsory ma {} + named compulsory mb {} + named compulsory ra {} + named compulsory rb {} + named compulsory rl {} + named compulsory rr {} + named compulsory raw {} + named compulsory rbw {} + named compulsory rlw {} + named compulsory rrw {} + named compulsory rag {} + named compulsory rbg {} + named compulsory rlg {} + named compulsory rrg {} + named compulsory rac {} + named compulsory rbc {} + named compulsory rlc {} + named compulsory rrc {} + named compulsory rpc {} + right @Body + { + + def @ZeroWidth right x + { + @OneCol { |0io x |0io } + } + + def @ZeroHeight right x + { + @OneRow { /0io x /0io } + } + + def @PDFColourCommand right col + { + def @ColourCoords + { + col @Case { + nochange @Yield { nochange } + darkblue @Yield { 0.0 0.0 0.5 } + blue @Yield { 0.0 0.0 1.0 } + lightblue @Yield { 0.5 0.5 1.0 } + darkgreen @Yield { 0.0 0.5 0.0 } + green @Yield { 0.0 1.0 0.0 } + lightgreen @Yield { 0.5 1.0 0.5 } + darkred @Yield { 0.5 0.0 0.0 } + red @Yield { 1.0 0.0 0.0 } + lightred @Yield { 1.0 0.5 0.5 } + darkcyan @Yield { 0.0 0.5 0.5 } + cyan @Yield { 0.0 1.0 1.0 } + lightcyan @Yield { 0.5 1.0 1.0 } + darkmagenta @Yield { 0.5 0.0 0.5 } + magenta @Yield { 1.0 0.0 1.0 } + lightmagenta @Yield { 1.0 0.5 1.0 } + darkyellow @Yield { 0.5 0.5 0.0 } + yellow @Yield { 1.0 1.0 0.0 } + lightyellow @Yield { 1.0 1.0 0.5 } + darkgray @Yield { 0.2 0.2 0.2 } + gray @Yield { 0.5 0.5 0.5 } + lightgray @Yield { 0.8 0.8 0.8 } + darkgrey @Yield { 0.2 0.2 0.2 } + grey @Yield { 0.5 0.5 0.5 } + lightgrey @Yield { 0.8 0.8 0.8 } + black @Yield { 0.0 0.0 0.0 } + white @Yield { 1.0 1.0 1.0 } + } + } + + @ColourCoords "rg" @ColourCoords "RG" + } + + def @PDFAddPaint right col + { + col @Case { + none @Yield "" + nochange @Yield "q f Q" + else @Yield { "q" @PDFColourCommand col "f Q" } + } + } + + def @FillBox left col right x + { + @BackEnd @Case { + PostScript @Yield {{"LoutBox ltbl"col} @Graphic x} + PDF @Yield {{ + "0 0 m __xsize 0 l __xsize __ysize l 0 __ysize l h" + @PDFAddPaint col "S" + } @Graphic x} + PlainText @Yield { rpc @PlainGraphic x } + } + } + + def @PaintBox left col right x + { + @BackEnd @Case { + PostScript @Yield {{"LoutBox ltbl"col} @Graphic x} + PDF @Yield {{ + "0 0 m __xsize 0 l __xsize __ysize l 0 __ysize l h" + @PDFAddPaint col "S" + } @Graphic x} + PlainText @Yield { x } + } + } + + def @HRule left col right thick + { + @ZeroHeight thick @High col @FillBox {} + # thick @High col @FillBox {} + } + + def @VRule left col right thick + { + @ZeroWidth thick @Wide col @FillBox {} + # thick @Wide col @FillBox {} + } + + def @DoubleHRule + left col + named gap {} + right thick + { + @OneCol { col @HRule thick /gap col @HRule thick } + } + + def @DoubleVRule + left col + named gap {} + right thick + { + @OneRow { col @VRule thick /gap col @VRule thick } + } + + def @MakeHRule + left col + named thick {} + named gap {} + right type + { + type @Case { + { none "" no } @Yield {} + { yes single } @Yield col @HRule thick + { double } @Yield col @DoubleHRule gap { gap } thick + } + } + + def @MakeVRule + left col + named thick {} + named gap {} + right type + { + type @Case { + { none "" no } @Yield {} + { yes single } @Yield col @VRule thick + { double } @Yield col @DoubleVRule gap { gap } thick + } + } + + def @RuleBox + left col + named hthick {} + named vthick {} + named htype {} + named vtype {} + { + htype @Case { + { none "" no } @Yield {} + else @Yield vtype @Case { + { none "" no } @Yield {} + else @Yield { + @ZeroWidth @ZeroHeight hthick @Wide vthick @High + col @FillBox {} + } + } + } + } + + def @AddRules + right x + { + { + rlc @MakeVRule thick { rlw } gap { rlg } rl + |0rt |1rt + rrc @MakeVRule thick { rrw } gap { rrg } rr + } @Background + { rac @MakeHRule thick { raw } gap { rag } ra + /0rt + /1rt + rbc @MakeHRule thick { rbw } gap { rbg } rb + } @Background + { + |1rt rac @RuleBox hthick { rrw } vthick { raw } htype { rr } vtype { ra } + /0rt + /1rt |1rt + rbc @RuleBox hthick { rrw } vthick { rbw } htype { rr } vtype { rb } + } @Background x + + } + + def @AddMargins + right x + { + @OneCol @OneRow { + ^|ml |mr + ^/ma | x | + /mb | | + } + } + + def @AddPaint + right x + { + p @Case { + { none nopaint no } @Yield x + else @Yield { p @PaintBox x } + } + } + + def @Strut right x + { + def strutval right x + { + x @Case { + { no No "" } @Yield "0.0f" + { yes Yes } @Yield "1.0f" + else @Yield x + } + } + + def vs { "0.5w" @VShift { { strutval s } @High } } + def hs { { strutval sh } @Wide } + + @OneCol @OneRow { ^| hs ^/ vs | x } + } + + def @VSize right x + { + h @Case { + "" @Yield x + else @Yield { h @High x } + } + } + + def @HSize right x + { + w @Case { + "" @Yield x + "expand" @Yield { "40c" @Wide x } + else @Yield { w @Wide x } + } + } + + def @HIndent right x + { + i @Case { + left @Yield @OneCol { | x } + ctr @Yield @OneCol { |"0.5rt" x } + right @Yield @OneCol { |"1.0rt" x } + mctr @Yield @OneCol { |"0.5bx" x } + "" @Yield @OneCol x + else @Yield @OneCol { |i x } + } + } + + def @VIndent right x + { + iv @Case { + top @Yield @OneRow { / x } + ctr @Yield @OneRow { /"0.5rt" x } + foot @Yield @OneRow { /"1.0rt" x } + mctr @Yield @OneRow { /"0.5bx" x } + "" @Yield @OneRow x + else @Yield @OneRow { /iv x } + } + } + + @HSize @VSize @AddPaint bg @Background @AddRules + @HIndent @VIndent @AddMargins f @Font b @Break @Strut @Body + } + + # symbol for producing @Row rows + def @DoRow + named paint p {} + named background bg {} + named font f {} + named break b {} + named width w {} + named height h {} + named indent i {} + named indentvertical iv {} + named strut s {} + named struthorizontal sh {} + named margin m {} + named marginhorizontal mh {} + named marginleft ml {} + named marginright mr {} + named marginvertical mv {} + named marginabove ma {} + named marginbelow mb {} + named rule r {} + named rulehorizontal rh {} + named ruleabove ra {} + named rulebelow rb {} + named rulevertical rv {} + named ruleleft rl {} + named ruleright rr {} + named rulewidth rw {} + named rulehorizontalwidth rhw {} + named ruleabovewidth raw {} + named rulebelowwidth rbw {} + named ruleverticalwidth rvw {} + named ruleleftwidth rlw {} + named rulerightwidth rrw {} + named rulegap rg {} + named rulehorizontalgap rhg {} + named ruleabovegap rag {} + named rulebelowgap rbg {} + named ruleverticalgap rvg {} + named ruleleftgap rlg {} + named rulerightgap rrg {} + named rulecolour rulecolor rc {} + named rulehorizontalcolour rulehorizontalcolor rhc {} + named ruleabovecolour ruleabovecolor rac {} + named rulebelowcolour rulebelowcolor rbc {} + named ruleverticalcolour ruleverticalcolor rvc {} + named ruleleftcolour ruleleftcolor rlc {} + named rulerightcolour rulerightcolor rrc {} + named ruleplainchar rpc {} + named compulsory format + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + named @Cell + named paint p {} + named background bg {} + named font f {} + named break b {} + named width w {} + named height h {} + named indent i {} + named indentvertical iv {} + named strut s {} + named struthorizontal sh {} + named margin m {} + named marginhorizontal mh {} + named marginleft ml {} + named marginright mr {} + named marginvertical mv {} + named marginabove ma {} + named marginbelow mb {} + named rule r {} + named rulehorizontal rh {} + named ruleabove ra {} + named rulebelow rb {} + named rulevertical rv {} + named ruleleft rl {} + named ruleright rr {} + named rulewidth rw {} + named rulehorizontalwidth rhw {} + named ruleabovewidth raw {} + named rulebelowwidth rbw {} + named ruleverticalwidth rvw {} + named ruleleftwidth rlw {} + named rulerightwidth rrw {} + named rulegap rg {} + named rulehorizontalgap rhg {} + named ruleabovegap rag {} + named rulebelowgap rbg {} + named ruleverticalgap rvg {} + named ruleleftgap rlg {} + named rulerightgap rrg {} + named rulecolour rulecolor rc {} + named rulehorizontalcolour rulehorizontalcolor rhc {} + named ruleabovecolour ruleabovecolor rac {} + named rulebelowcolour rulebelowcolor rbc {} + named ruleverticalcolour ruleverticalcolor rvc {} + named ruleleftcolour ruleleftcolor rlc {} + named rulerightcolour rulerightcolor rrc {} + named ruleplainchar rpc {} + right x + {} + {} + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + { + + ################################################################### + # # + # Specific option values as @Row knows them (i.e. Level 6) # + # # + ################################################################### + + def rowp { p @Else tblp } + def rowbg { bg @Else tblbg } + def rowf { f @Else tblf } + def rowb { b @Else tblb } + def roww { w @Else tblw } + def rowh { h @Else tblh } + def rowi { i @Else tbli } + def rowiv { iv @Else tbliv } + def rows { s @Else tbls } + def rowsh { sh @Else tblsh } + def rowml { ml @Else mh @Else m @Else tblml } + def rowmr { mr @Else mh @Else m @Else tblmr } + def rowma { ma @Else mv @Else m @Else tblma } + def rowmb { mb @Else mv @Else m @Else tblmb } + def rowra { ra @Else rh @Else r @Else tblra } + def rowrb { rb @Else rh @Else r @Else tblrb } + def rowrl { rl @Else rv @Else r @Else tblrl } + def rowrr { rr @Else rv @Else r @Else tblrr } + def rowraw { raw @Else rhw @Else rw @Else tblraw } + def rowrbw { rbw @Else rhw @Else rw @Else tblrbw } + def rowrlw { rlw @Else rvw @Else rw @Else tblrlw } + def rowrrw { rrw @Else rvw @Else rw @Else tblrrw } + def rowrag { rag @Else rhg @Else rg @Else tblrag } + def rowrbg { rbg @Else rhg @Else rg @Else tblrbg } + def rowrlg { rlg @Else rvg @Else rg @Else tblrlg } + def rowrrg { rrg @Else rvg @Else rg @Else tblrrg } + def rowrac { rac @Else rhc @Else rc @Else tblrac } + def rowrbc { rbc @Else rhc @Else rc @Else tblrbc } + def rowrlc { rlc @Else rvc @Else rc @Else tblrlc } + def rowrrc { rrc @Else rvc @Else rc @Else tblrrc } + def rowrpc { rpc @Else tblrpc } + + format + A { A } B { B } C { C } D { D } E { E } F { F } + G { G } H { H } I { I } J { J } K { K } L { L } + M { M } N { N } O { O } P { P } Q { Q } R { R } + S { S } T { T } U { U } V { V } W { W } X { X } + Y { Y } Z { Z } + @Cell { + + @DoCell + + ####################################################### + # # + # Specific option values to @Cell (i.e. Level 7) # + # # + ####################################################### + + p { p @Else rowp } + bg { bg @Else rowbg } + f { f @Else rowf } + b { b @Else rowb } + w { w @Else roww } + h { h @Else rowh } + i { i @Else rowi } + iv { iv @Else rowiv } + s { s @Else rows } + sh { sh @Else rowsh } + ml { ml @Else mh @Else m @Else rowml } + mr { mr @Else mh @Else m @Else rowmr } + ma { ma @Else mv @Else m @Else rowma } + mb { mb @Else mv @Else m @Else rowmb } + ra { ra @Else rh @Else r @Else rowra } + rb { rb @Else rh @Else r @Else rowrb } + rl { rl @Else rv @Else r @Else rowrl } + rr { rr @Else rv @Else r @Else rowrr } + raw { raw @Else rhw @Else rw @Else rowraw } + rbw { rbw @Else rhw @Else rw @Else rowrbw } + rlw { rlw @Else rvw @Else rw @Else rowrlw } + rrw { rrw @Else rvw @Else rw @Else rowrrw } + rag { rag @Else rhg @Else rg @Else rowrag } + rbg { rbg @Else rhg @Else rg @Else rowrbg } + rlg { rlg @Else rvg @Else rg @Else rowrlg } + rrg { rrg @Else rvg @Else rg @Else rowrrg } + rac { rac @Else rhc @Else rc @Else rowrac } + rbc { rbc @Else rhc @Else rc @Else rowrbc } + rlc { rlc @Else rvc @Else rc @Else rowrlc } + rrc { rrc @Else rvc @Else rc @Else rowrrc } + rpc { rpc @Else rowrpc } + + x + } + } + + # symbol for producing @Rowa rows + def @DoRowa + named paint p {} + named background bg {} + named font f {} + named break b {} + named width w {} + named height h {} + named indent i {} + named indentvertical iv {} + named strut s {} + named struthorizontal sh {} + named margin m {} + named marginhorizontal mh {} + named marginleft ml {} + named marginright mr {} + named marginvertical mv {} + named marginabove ma {} + named marginbelow mb {} + named rule r {} + named rulehorizontal rh {} + named ruleabove ra {} + named rulebelow rb {} + named rulevertical rv {} + named ruleleft rl {} + named ruleright rr {} + named rulewidth rw {} + named rulehorizontalwidth rhw {} + named ruleabovewidth raw {} + named rulebelowwidth rbw {} + named ruleverticalwidth rvw {} + named ruleleftwidth rlw {} + named rulerightwidth rrw {} + named rulegap rg {} + named rulehorizontalgap rhg {} + named ruleabovegap rag {} + named rulebelowgap rbg {} + named ruleverticalgap rvg {} + named ruleleftgap rlg {} + named rulerightgap rrg {} + named rulecolour rulecolor rc {} + named rulehorizontalcolour rulehorizontalcolor rhc {} + named ruleabovecolour ruleabovecolor rac {} + named rulebelowcolour rulebelowcolor rbc {} + named ruleverticalcolour ruleverticalcolor rvc {} + named ruleleftcolour ruleleftcolor rlc {} + named rulerightcolour rulerightcolor rrc {} + named ruleplainchar rpc {} + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + { + + ################################################################### + # # + # Specific option values at "aoption" level (i.e. Level 3) # + # # + ################################################################### + + def tbxp { ap @Else tblp } + def tbxbg { abg @Else tblbg } + def tbxf { af @Else tblf } + def tbxb { ab @Else tblb } + def tbxw { aw @Else tblw } + def tbxh { ah @Else tblh } + def tbxi { ai @Else tbli } + def tbxiv { aiv @Else tbliv } + def tbxs { as @Else tbls } + def tbxsh { ash @Else tblsh } + def tbxml { aml @Else amh @Else am @Else tblml } + def tbxmr { amr @Else amh @Else am @Else tblmr } + def tbxma { ama @Else amv @Else am @Else tblma } + def tbxmb { amb @Else amv @Else am @Else tblmb } + def tbxra { ara @Else arh @Else ar @Else tblra } + def tbxrb { arb @Else arh @Else ar @Else tblrb } + def tbxrl { arl @Else arv @Else ar @Else tblrl } + def tbxrr { arr @Else arv @Else ar @Else tblrr } + def tbxraw { araw @Else arhw @Else arw @Else tblraw } + def tbxrbw { arbw @Else arhw @Else arw @Else tblrbw } + def tbxrlw { arlw @Else arvw @Else arw @Else tblrlw } + def tbxrrw { arrw @Else arvw @Else arw @Else tblrrw } + def tbxrag { arag @Else arhg @Else arg @Else tblrag } + def tbxrbg { arbg @Else arhg @Else arg @Else tblrbg } + def tbxrlg { arlg @Else arvg @Else arg @Else tblrlg } + def tbxrrg { arrg @Else arvg @Else arg @Else tblrrg } + def tbxrac { arac @Else arhc @Else arc @Else tblrac } + def tbxrbc { arbc @Else arhc @Else arc @Else tblrbc } + def tbxrlc { arlc @Else arvc @Else arc @Else tblrlc } + def tbxrrc { arrc @Else arvc @Else arc @Else tblrrc } + def tbxrpc { arpc @Else tblrpc } + + ################################################################### + # # + # Specific option values at @Rowa level (i.e. Level 4) # + # # + ################################################################### + + def rowp { p @Else tbxp } + def rowbg { bg @Else tbxbg } + def rowf { f @Else tbxf } + def rowb { b @Else tbxb } + def roww { w @Else tbxw } + def rowh { h @Else tbxh } + def rowi { i @Else tbxi } + def rowiv { iv @Else tbxiv } + def rows { s @Else tbxs } + def rowsh { sh @Else tbxsh } + def rowml { ml @Else mh @Else m @Else tbxml } + def rowmr { mr @Else mh @Else m @Else tbxmr } + def rowma { ma @Else mv @Else m @Else tbxma } + def rowmb { mb @Else mv @Else m @Else tbxmb } + def rowra { ra @Else rh @Else r @Else tbxra } + def rowrb { rb @Else rh @Else r @Else tbxrb } + def rowrl { rl @Else rv @Else r @Else tbxrl } + def rowrr { rr @Else rv @Else r @Else tbxrr } + def rowraw { raw @Else rhw @Else rw @Else tbxraw } + def rowrbw { rbw @Else rhw @Else rw @Else tbxrbw } + def rowrlw { rlw @Else rvw @Else rw @Else tbxrlw } + def rowrrw { rrw @Else rvw @Else rw @Else tbxrrw } + def rowrag { rag @Else rhg @Else rg @Else tbxrag } + def rowrbg { rbg @Else rhg @Else rg @Else tbxrbg } + def rowrlg { rlg @Else rvg @Else rg @Else tbxrlg } + def rowrrg { rrg @Else rvg @Else rg @Else tbxrrg } + def rowrac { rac @Else rhc @Else rc @Else tbxrac } + def rowrbc { rbc @Else rhc @Else rc @Else tbxrbc } + def rowrlc { rlc @Else rvc @Else rc @Else tbxrlc } + def rowrrc { rrc @Else rvc @Else rc @Else tbxrrc } + def rowrpc { rpc @Else tbxrpc } + + aformat + A { A } B { B } C { C } D { D } E { E } F { F } + G { G } H { H } I { I } J { J } K { K } L { L } + M { M } N { N } O { O } P { P } Q { Q } R { R } + S { S } T { T } U { U } V { V } W { W } X { X } + Y { Y } Z { Z } + @Cell { + + @DoCell + + ####################################################### + # # + # Specific option values to @Cell (i.e. Level 5) # + # # + ####################################################### + + p { p @Else rowp } + bg { bg @Else rowbg } + f { f @Else rowf } + b { b @Else rowb } + w { w @Else roww } + h { h @Else rowh } + i { i @Else rowi } + iv { iv @Else rowiv } + s { s @Else rows } + sh { sh @Else rowsh } + ml { ml @Else mh @Else m @Else rowml } + mr { mr @Else mh @Else m @Else rowmr } + ma { ma @Else mv @Else m @Else rowma } + mb { mb @Else mv @Else m @Else rowmb } + ra { ra @Else rh @Else r @Else rowra } + rb { rb @Else rh @Else r @Else rowrb } + rl { rl @Else rv @Else r @Else rowrl } + rr { rr @Else rv @Else r @Else rowrr } + raw { raw @Else rhw @Else rw @Else rowraw } + rbw { rbw @Else rhw @Else rw @Else rowrbw } + rlw { rlw @Else rvw @Else rw @Else rowrlw } + rrw { rrw @Else rvw @Else rw @Else rowrrw } + rag { rag @Else rhg @Else rg @Else rowrag } + rbg { rbg @Else rhg @Else rg @Else rowrbg } + rlg { rlg @Else rvg @Else rg @Else rowrlg } + rrg { rrg @Else rvg @Else rg @Else rowrrg } + rac { rac @Else rhc @Else rc @Else rowrac } + rbc { rbc @Else rhc @Else rc @Else rowrbc } + rlc { rlc @Else rvc @Else rc @Else rowrlc } + rrc { rrc @Else rvc @Else rc @Else rowrrc } + rpc { rpc @Else rowrpc } + + x + } + } + + # symbol for producing @Rowb rows + def @DoRowb + named paint p {} + named background bg {} + named font f {} + named break b {} + named width w {} + named height h {} + named indent i {} + named indentvertical iv {} + named strut s {} + named struthorizontal sh {} + named margin m {} + named marginhorizontal mh {} + named marginleft ml {} + named marginright mr {} + named marginvertical mv {} + named marginabove ma {} + named marginbelow mb {} + named rule r {} + named rulehorizontal rh {} + named ruleabove ra {} + named rulebelow rb {} + named rulevertical rv {} + named ruleleft rl {} + named ruleright rr {} + named rulewidth rw {} + named rulehorizontalwidth rhw {} + named ruleabovewidth raw {} + named rulebelowwidth rbw {} + named ruleverticalwidth rvw {} + named ruleleftwidth rlw {} + named rulerightwidth rrw {} + named rulegap rg {} + named rulehorizontalgap rhg {} + named ruleabovegap rag {} + named rulebelowgap rbg {} + named ruleverticalgap rvg {} + named ruleleftgap rlg {} + named rulerightgap rrg {} + named rulecolour rulecolor rc {} + named rulehorizontalcolour rulehorizontalcolor rhc {} + named ruleabovecolour ruleabovecolor rac {} + named rulebelowcolour rulebelowcolor rbc {} + named ruleverticalcolour ruleverticalcolor rvc {} + named ruleleftcolour ruleleftcolor rlc {} + named rulerightcolour rulerightcolor rrc {} + named ruleplainchar rpc {} + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + { + + ################################################################### + # # + # Specific option values at "boption" level (i.e. Level 3) # + # # + ################################################################### + + def tbxp { bp @Else tblp } + def tbxbg { bbg @Else tblbg } + def tbxf { bf @Else tblf } + def tbxb { bb @Else tblb } + def tbxw { bw @Else tblw } + def tbxh { bh @Else tblh } + def tbxi { bi @Else tbli } + def tbxiv { biv @Else tbliv } + def tbxs { bs @Else tbls } + def tbxsh { bsh @Else tblsh } + def tbxml { bml @Else bmh @Else bm @Else tblml } + def tbxmr { bmr @Else bmh @Else bm @Else tblmr } + def tbxma { bma @Else bmv @Else bm @Else tblma } + def tbxmb { bmb @Else bmv @Else bm @Else tblmb } + def tbxra { bra @Else brh @Else br @Else tblra } + def tbxrb { brb @Else brh @Else br @Else tblrb } + def tbxrl { brl @Else brv @Else br @Else tblrl } + def tbxrr { brr @Else brv @Else br @Else tblrr } + def tbxraw { braw @Else brhw @Else brw @Else tblraw } + def tbxrbw { brbw @Else brhw @Else brw @Else tblrbw } + def tbxrlw { brlw @Else brvw @Else brw @Else tblrlw } + def tbxrrw { brrw @Else brvw @Else brw @Else tblrrw } + def tbxrag { brag @Else brhg @Else brg @Else tblrag } + def tbxrbg { brbg @Else brhg @Else brg @Else tblrbg } + def tbxrlg { brlg @Else brvg @Else brg @Else tblrlg } + def tbxrrg { brrg @Else brvg @Else brg @Else tblrrg } + def tbxrac { brac @Else brhc @Else brc @Else tblrac } + def tbxrbc { brbc @Else brhc @Else brc @Else tblrbc } + def tbxrlc { brlc @Else brvc @Else brc @Else tblrlc } + def tbxrrc { brrc @Else brvc @Else brc @Else tblrrc } + def tbxrpc { brpc @Else tblrpc } + + ################################################################### + # # + # Specific option values at @Rowb level (i.e. Level 4) # + # # + ################################################################### + + def rowp { p @Else tbxp } + def rowbg { bg @Else tbxbg } + def rowf { f @Else tbxf } + def rowb { b @Else tbxb } + def roww { w @Else tbxw } + def rowh { h @Else tbxh } + def rowi { i @Else tbxi } + def rowiv { iv @Else tbxiv } + def rows { s @Else tbxs } + def rowsh { sh @Else tbxsh } + def rowml { ml @Else mh @Else m @Else tbxml } + def rowmr { mr @Else mh @Else m @Else tbxmr } + def rowma { ma @Else mv @Else m @Else tbxma } + def rowmb { mb @Else mv @Else m @Else tbxmb } + def rowra { ra @Else rh @Else r @Else tbxra } + def rowrb { rb @Else rh @Else r @Else tbxrb } + def rowrl { rl @Else rv @Else r @Else tbxrl } + def rowrr { rr @Else rv @Else r @Else tbxrr } + def rowraw { raw @Else rhw @Else rw @Else tbxraw } + def rowrbw { rbw @Else rhw @Else rw @Else tbxrbw } + def rowrlw { rlw @Else rvw @Else rw @Else tbxrlw } + def rowrrw { rrw @Else rvw @Else rw @Else tbxrrw } + def rowrag { rag @Else rhg @Else rg @Else tbxrag } + def rowrbg { rbg @Else rhg @Else rg @Else tbxrbg } + def rowrlg { rlg @Else rvg @Else rg @Else tbxrlg } + def rowrrg { rrg @Else rvg @Else rg @Else tbxrrg } + def rowrac { rac @Else rhc @Else rc @Else tbxrac } + def rowrbc { rbc @Else rhc @Else rc @Else tbxrbc } + def rowrlc { rlc @Else rvc @Else rc @Else tbxrlc } + def rowrrc { rrc @Else rvc @Else rc @Else tbxrrc } + def rowrpc { rpc @Else tbxrpc } + + bformat + A { A } B { B } C { C } D { D } E { E } F { F } + G { G } H { H } I { I } J { J } K { K } L { L } + M { M } N { N } O { O } P { P } Q { Q } R { R } + S { S } T { T } U { U } V { V } W { W } X { X } + Y { Y } Z { Z } + @Cell { + + @DoCell + + ####################################################### + # # + # Specific option values to @Cell (i.e. Level 5) # + # # + ####################################################### + + p { p @Else rowp } + bg { bg @Else rowbg } + f { f @Else rowf } + b { b @Else rowb } + w { w @Else roww } + h { h @Else rowh } + i { i @Else rowi } + iv { iv @Else rowiv } + s { s @Else rows } + sh { sh @Else rowsh } + ml { ml @Else mh @Else m @Else rowml } + mr { mr @Else mh @Else m @Else rowmr } + ma { ma @Else mv @Else m @Else rowma } + mb { mb @Else mv @Else m @Else rowmb } + ra { ra @Else rh @Else r @Else rowra } + rb { rb @Else rh @Else r @Else rowrb } + rl { rl @Else rv @Else r @Else rowrl } + rr { rr @Else rv @Else r @Else rowrr } + raw { raw @Else rhw @Else rw @Else rowraw } + rbw { rbw @Else rhw @Else rw @Else rowrbw } + rlw { rlw @Else rvw @Else rw @Else rowrlw } + rrw { rrw @Else rvw @Else rw @Else rowrrw } + rag { rag @Else rhg @Else rg @Else rowrag } + rbg { rbg @Else rhg @Else rg @Else rowrbg } + rlg { rlg @Else rvg @Else rg @Else rowrlg } + rrg { rrg @Else rvg @Else rg @Else rowrrg } + rac { rac @Else rhc @Else rc @Else rowrac } + rbc { rbc @Else rhc @Else rc @Else rowrbc } + rlc { rlc @Else rvc @Else rc @Else rowrlc } + rrc { rrc @Else rvc @Else rc @Else rowrrc } + rpc { rpc @Else rowrpc } + + x + } + } + + # symbol for producing @Rowc rows + def @DoRowc + named paint p {} + named background bg {} + named font f {} + named break b {} + named width w {} + named height h {} + named indent i {} + named indentvertical iv {} + named strut s {} + named struthorizontal sh {} + named margin m {} + named marginhorizontal mh {} + named marginleft ml {} + named marginright mr {} + named marginvertical mv {} + named marginabove ma {} + named marginbelow mb {} + named rule r {} + named rulehorizontal rh {} + named ruleabove ra {} + named rulebelow rb {} + named rulevertical rv {} + named ruleleft rl {} + named ruleright rr {} + named rulewidth rw {} + named rulehorizontalwidth rhw {} + named ruleabovewidth raw {} + named rulebelowwidth rbw {} + named ruleverticalwidth rvw {} + named ruleleftwidth rlw {} + named rulerightwidth rrw {} + named rulegap rg {} + named rulehorizontalgap rhg {} + named ruleabovegap rag {} + named rulebelowgap rbg {} + named ruleverticalgap rvg {} + named ruleleftgap rlg {} + named rulerightgap rrg {} + named rulecolour rulecolor rc {} + named rulehorizontalcolour rulehorizontalcolor rhc {} + named ruleabovecolour ruleabovecolor rac {} + named rulebelowcolour rulebelowcolor rbc {} + named ruleverticalcolour ruleverticalcolor rvc {} + named ruleleftcolour ruleleftcolor rlc {} + named rulerightcolour rulerightcolor rrc {} + named ruleplainchar rpc {} + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + { + + ################################################################### + # # + # Specific option values at "coption" level (i.e. Level 3) # + # # + ################################################################### + + def tbxp { cp @Else tblp } + def tbxbg { cbg @Else tblbg } + def tbxf { cf @Else tblf } + def tbxb { cb @Else tblb } + def tbxw { cw @Else tblw } + def tbxh { ch @Else tblh } + def tbxi { ci @Else tbli } + def tbxiv { civ @Else tbliv } + def tbxs { cs @Else tbls } + def tbxsh { csh @Else tblsh } + def tbxml { cml @Else cmh @Else cm @Else tblml } + def tbxmr { cmr @Else cmh @Else cm @Else tblmr } + def tbxma { cma @Else cmv @Else cm @Else tblma } + def tbxmb { cmb @Else cmv @Else cm @Else tblmb } + def tbxra { cra @Else crh @Else cr @Else tblra } + def tbxrb { crb @Else crh @Else cr @Else tblrb } + def tbxrl { crl @Else crv @Else cr @Else tblrl } + def tbxrr { crr @Else crv @Else cr @Else tblrr } + def tbxraw { craw @Else crhw @Else crw @Else tblraw } + def tbxrbw { crbw @Else crhw @Else crw @Else tblrbw } + def tbxrlw { crlw @Else crvw @Else crw @Else tblrlw } + def tbxrrw { crrw @Else crvw @Else crw @Else tblrrw } + def tbxrag { crag @Else crhg @Else crg @Else tblrag } + def tbxrbg { crbg @Else crhg @Else crg @Else tblrbg } + def tbxrlg { crlg @Else crvg @Else crg @Else tblrlg } + def tbxrrg { crrg @Else crvg @Else crg @Else tblrrg } + def tbxrac { crac @Else crhc @Else crc @Else tblrac } + def tbxrbc { crbc @Else crhc @Else crc @Else tblrbc } + def tbxrlc { crlc @Else crvc @Else crc @Else tblrlc } + def tbxrrc { crrc @Else crvc @Else crc @Else tblrrc } + def tbxrpc { crpc @Else tblrpc } + + ################################################################### + # # + # Specific option values at @Rowc level (i.e. Level 4) # + # # + ################################################################### + + def rowp { p @Else tbxp } + def rowbg { bg @Else tbxbg } + def rowf { f @Else tbxf } + def rowb { b @Else tbxb } + def roww { w @Else tbxw } + def rowh { h @Else tbxh } + def rowi { i @Else tbxi } + def rowiv { iv @Else tbxiv } + def rows { s @Else tbxs } + def rowsh { sh @Else tbxsh } + def rowml { ml @Else mh @Else m @Else tbxml } + def rowmr { mr @Else mh @Else m @Else tbxmr } + def rowma { ma @Else mv @Else m @Else tbxma } + def rowmb { mb @Else mv @Else m @Else tbxmb } + def rowra { ra @Else rh @Else r @Else tbxra } + def rowrb { rb @Else rh @Else r @Else tbxrb } + def rowrl { rl @Else rv @Else r @Else tbxrl } + def rowrr { rr @Else rv @Else r @Else tbxrr } + def rowraw { raw @Else rhw @Else rw @Else tbxraw } + def rowrbw { rbw @Else rhw @Else rw @Else tbxrbw } + def rowrlw { rlw @Else rvw @Else rw @Else tbxrlw } + def rowrrw { rrw @Else rvw @Else rw @Else tbxrrw } + def rowrag { rag @Else rhg @Else rg @Else tbxrag } + def rowrbg { rbg @Else rhg @Else rg @Else tbxrbg } + def rowrlg { rlg @Else rvg @Else rg @Else tbxrlg } + def rowrrg { rrg @Else rvg @Else rg @Else tbxrrg } + def rowrac { rac @Else rhc @Else rc @Else tbxrac } + def rowrbc { rbc @Else rhc @Else rc @Else tbxrbc } + def rowrlc { rlc @Else rvc @Else rc @Else tbxrlc } + def rowrrc { rrc @Else rvc @Else rc @Else tbxrrc } + def rowrpc { rpc @Else tbxrpc } + + cformat + A { A } B { B } C { C } D { D } E { E } F { F } + G { G } H { H } I { I } J { J } K { K } L { L } + M { M } N { N } O { O } P { P } Q { Q } R { R } + S { S } T { T } U { U } V { V } W { W } X { X } + Y { Y } Z { Z } + @Cell { + + @DoCell + + ####################################################### + # # + # Specific option values to @Cell (i.e. Level 5) # + # # + ####################################################### + + p { p @Else rowp } + bg { bg @Else rowbg } + f { f @Else rowf } + b { b @Else rowb } + w { w @Else roww } + h { h @Else rowh } + i { i @Else rowi } + iv { iv @Else rowiv } + s { s @Else rows } + sh { sh @Else rowsh } + ml { ml @Else mh @Else m @Else rowml } + mr { mr @Else mh @Else m @Else rowmr } + ma { ma @Else mv @Else m @Else rowma } + mb { mb @Else mv @Else m @Else rowmb } + ra { ra @Else rh @Else r @Else rowra } + rb { rb @Else rh @Else r @Else rowrb } + rl { rl @Else rv @Else r @Else rowrl } + rr { rr @Else rv @Else r @Else rowrr } + raw { raw @Else rhw @Else rw @Else rowraw } + rbw { rbw @Else rhw @Else rw @Else rowrbw } + rlw { rlw @Else rvw @Else rw @Else rowrlw } + rrw { rrw @Else rvw @Else rw @Else rowrrw } + rag { rag @Else rhg @Else rg @Else rowrag } + rbg { rbg @Else rhg @Else rg @Else rowrbg } + rlg { rlg @Else rvg @Else rg @Else rowrlg } + rrg { rrg @Else rvg @Else rg @Else rowrrg } + rac { rac @Else rhc @Else rc @Else rowrac } + rbc { rbc @Else rhc @Else rc @Else rowrbc } + rlc { rlc @Else rvc @Else rc @Else rowrlc } + rrc { rrc @Else rvc @Else rc @Else rowrrc } + rpc { rpc @Else rowrpc } + + x + } + } + + # symbol for producing @Rowd rows + def @DoRowd + named paint p {} + named background bg {} + named font f {} + named break b {} + named width w {} + named height h {} + named indent i {} + named indentvertical iv {} + named strut s {} + named struthorizontal sh {} + named margin m {} + named marginhorizontal mh {} + named marginleft ml {} + named marginright mr {} + named marginvertical mv {} + named marginabove ma {} + named marginbelow mb {} + named rule r {} + named rulehorizontal rh {} + named ruleabove ra {} + named rulebelow rb {} + named rulevertical rv {} + named ruleleft rl {} + named ruleright rr {} + named rulewidth rw {} + named rulehorizontalwidth rhw {} + named ruleabovewidth raw {} + named rulebelowwidth rbw {} + named ruleverticalwidth rvw {} + named ruleleftwidth rlw {} + named rulerightwidth rrw {} + named rulegap rg {} + named rulehorizontalgap rhg {} + named ruleabovegap rag {} + named rulebelowgap rbg {} + named ruleverticalgap rvg {} + named ruleleftgap rlg {} + named rulerightgap rrg {} + named rulecolour rulecolor rc {} + named rulehorizontalcolour rulehorizontalcolor rhc {} + named ruleabovecolour ruleabovecolor rac {} + named rulebelowcolour rulebelowcolor rbc {} + named ruleverticalcolour ruleverticalcolor rvc {} + named ruleleftcolour ruleleftcolor rlc {} + named rulerightcolour rulerightcolor rrc {} + named ruleplainchar rpc {} + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + { + + ################################################################### + # # + # Specific option values at "doption" level (i.e. Level 3) # + # # + ################################################################### + + def tbxp { dp @Else tblp } + def tbxbg { dbg @Else tblbg } + def tbxf { df @Else tblf } + def tbxb { db @Else tblb } + def tbxw { dw @Else tblw } + def tbxh { dh @Else tblh } + def tbxi { di @Else tbli } + def tbxiv { div @Else tbliv } + def tbxs { ds @Else tbls } + def tbxsh { dsh @Else tblsh } + def tbxml { dml @Else dmh @Else dm @Else tblml } + def tbxmr { dmr @Else dmh @Else dm @Else tblmr } + def tbxma { dma @Else dmv @Else dm @Else tblma } + def tbxmb { dmb @Else dmv @Else dm @Else tblmb } + def tbxra { dra @Else drh @Else dr @Else tblra } + def tbxrb { drb @Else drh @Else dr @Else tblrb } + def tbxrl { drl @Else drv @Else dr @Else tblrl } + def tbxrr { drr @Else drv @Else dr @Else tblrr } + def tbxraw { draw @Else drhw @Else drw @Else tblraw } + def tbxrbw { drbw @Else drhw @Else drw @Else tblrbw } + def tbxrlw { drlw @Else drvw @Else drw @Else tblrlw } + def tbxrrw { drrw @Else drvw @Else drw @Else tblrrw } + def tbxrag { drag @Else drhg @Else drg @Else tblrag } + def tbxrbg { drbg @Else drhg @Else drg @Else tblrbg } + def tbxrlg { drlg @Else drvg @Else drg @Else tblrlg } + def tbxrrg { drrg @Else drvg @Else drg @Else tblrrg } + def tbxrac { drac @Else drhc @Else drc @Else tblrac } + def tbxrbc { drbc @Else drhc @Else drc @Else tblrbc } + def tbxrlc { drlc @Else drvc @Else drc @Else tblrlc } + def tbxrrc { drrc @Else drvc @Else drc @Else tblrrc } + def tbxrpc { drpc @Else tblrpc } + + ################################################################### + # # + # Specific option values at @Rowd level (i.e. Level 4) # + # # + ################################################################### + + def rowp { p @Else tbxp } + def rowbg { bg @Else tbxbg } + def rowf { f @Else tbxf } + def rowb { b @Else tbxb } + def roww { w @Else tbxw } + def rowh { h @Else tbxh } + def rowi { i @Else tbxi } + def rowiv { iv @Else tbxiv } + def rows { s @Else tbxs } + def rowsh { sh @Else tbxsh } + def rowml { ml @Else mh @Else m @Else tbxml } + def rowmr { mr @Else mh @Else m @Else tbxmr } + def rowma { ma @Else mv @Else m @Else tbxma } + def rowmb { mb @Else mv @Else m @Else tbxmb } + def rowra { ra @Else rh @Else r @Else tbxra } + def rowrb { rb @Else rh @Else r @Else tbxrb } + def rowrl { rl @Else rv @Else r @Else tbxrl } + def rowrr { rr @Else rv @Else r @Else tbxrr } + def rowraw { raw @Else rhw @Else rw @Else tbxraw } + def rowrbw { rbw @Else rhw @Else rw @Else tbxrbw } + def rowrlw { rlw @Else rvw @Else rw @Else tbxrlw } + def rowrrw { rrw @Else rvw @Else rw @Else tbxrrw } + def rowrag { rag @Else rhg @Else rg @Else tbxrag } + def rowrbg { rbg @Else rhg @Else rg @Else tbxrbg } + def rowrlg { rlg @Else rvg @Else rg @Else tbxrlg } + def rowrrg { rrg @Else rvg @Else rg @Else tbxrrg } + def rowrac { rac @Else rhc @Else rc @Else tbxrac } + def rowrbc { rbc @Else rhc @Else rc @Else tbxrbc } + def rowrlc { rlc @Else rvc @Else rc @Else tbxrlc } + def rowrrc { rrc @Else rvc @Else rc @Else tbxrrc } + def rowrpc { rpc @Else tbxrpc } + + dformat + A { A } B { B } C { C } D { D } E { E } F { F } + G { G } H { H } I { I } J { J } K { K } L { L } + M { M } N { N } O { O } P { P } Q { Q } R { R } + S { S } T { T } U { U } V { V } W { W } X { X } + Y { Y } Z { Z } + @Cell { + + @DoCell + + ####################################################### + # # + # Specific option values to @Cell (i.e. Level 5) # + # # + ####################################################### + + p { p @Else rowp } + bg { bg @Else rowbg } + f { f @Else rowf } + b { b @Else rowb } + w { w @Else roww } + h { h @Else rowh } + i { i @Else rowi } + iv { iv @Else rowiv } + s { s @Else rows } + sh { sh @Else rowsh } + ml { ml @Else mh @Else m @Else rowml } + mr { mr @Else mh @Else m @Else rowmr } + ma { ma @Else mv @Else m @Else rowma } + mb { mb @Else mv @Else m @Else rowmb } + ra { ra @Else rh @Else r @Else rowra } + rb { rb @Else rh @Else r @Else rowrb } + rl { rl @Else rv @Else r @Else rowrl } + rr { rr @Else rv @Else r @Else rowrr } + raw { raw @Else rhw @Else rw @Else rowraw } + rbw { rbw @Else rhw @Else rw @Else rowrbw } + rlw { rlw @Else rvw @Else rw @Else rowrlw } + rrw { rrw @Else rvw @Else rw @Else rowrrw } + rag { rag @Else rhg @Else rg @Else rowrag } + rbg { rbg @Else rhg @Else rg @Else rowrbg } + rlg { rlg @Else rvg @Else rg @Else rowrlg } + rrg { rrg @Else rvg @Else rg @Else rowrrg } + rac { rac @Else rhc @Else rc @Else rowrac } + rbc { rbc @Else rhc @Else rc @Else rowrbc } + rlc { rlc @Else rvc @Else rc @Else rowrlc } + rrc { rrc @Else rvc @Else rc @Else rowrrc } + rpc { rpc @Else rowrpc } + + x + } + } + + # symbol for producing @Rowe rows + def @DoRowe + named paint p {} + named background bg {} + named font f {} + named break b {} + named width w {} + named height h {} + named indent i {} + named indentvertical iv {} + named strut s {} + named struthorizontal sh {} + named margin m {} + named marginhorizontal mh {} + named marginleft ml {} + named marginright mr {} + named marginvertical mv {} + named marginabove ma {} + named marginbelow mb {} + named rule r {} + named rulehorizontal rh {} + named ruleabove ra {} + named rulebelow rb {} + named rulevertical rv {} + named ruleleft rl {} + named ruleright rr {} + named rulewidth rw {} + named rulehorizontalwidth rhw {} + named ruleabovewidth raw {} + named rulebelowwidth rbw {} + named ruleverticalwidth rvw {} + named ruleleftwidth rlw {} + named rulerightwidth rrw {} + named rulegap rg {} + named rulehorizontalgap rhg {} + named ruleabovegap rag {} + named rulebelowgap rbg {} + named ruleverticalgap rvg {} + named ruleleftgap rlg {} + named rulerightgap rrg {} + named rulecolour rulecolor rc {} + named rulehorizontalcolour rulehorizontalcolor rhc {} + named ruleabovecolour ruleabovecolor rac {} + named rulebelowcolour rulebelowcolor rbc {} + named ruleverticalcolour ruleverticalcolor rvc {} + named ruleleftcolour ruleleftcolor rlc {} + named rulerightcolour rulerightcolor rrc {} + named ruleplainchar rpc {} + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + { + + ################################################################### + # # + # Specific option values at "eoption" level (i.e. Level 3) # + # # + ################################################################### + + def tbxp { ep @Else tblp } + def tbxbg { ebg @Else tblbg } + def tbxf { ef @Else tblf } + def tbxb { eb @Else tblb } + def tbxw { ew @Else tblw } + def tbxh { eh @Else tblh } + def tbxi { ei @Else tbli } + def tbxiv { eiv @Else tbliv } + def tbxs { es @Else tbls } + def tbxsh { esh @Else tblsh } + def tbxml { eml @Else emh @Else em @Else tblml } + def tbxmr { emr @Else emh @Else em @Else tblmr } + def tbxma { ema @Else emv @Else em @Else tblma } + def tbxmb { emb @Else emv @Else em @Else tblmb } + def tbxra { era @Else erh @Else er @Else tblra } + def tbxrb { erb @Else erh @Else er @Else tblrb } + def tbxrl { erl @Else erv @Else er @Else tblrl } + def tbxrr { err @Else erv @Else er @Else tblrr } + def tbxraw { eraw @Else erhw @Else erw @Else tblraw } + def tbxrbw { erbw @Else erhw @Else erw @Else tblrbw } + def tbxrlw { erlw @Else ervw @Else erw @Else tblrlw } + def tbxrrw { errw @Else ervw @Else erw @Else tblrrw } + def tbxrag { erag @Else erhg @Else erg @Else tblrag } + def tbxrbg { erbg @Else erhg @Else erg @Else tblrbg } + def tbxrlg { erlg @Else ervg @Else erg @Else tblrlg } + def tbxrrg { errg @Else ervg @Else erg @Else tblrrg } + def tbxrac { erac @Else erhc @Else erc @Else tblrac } + def tbxrbc { erbc @Else erhc @Else erc @Else tblrbc } + def tbxrlc { erlc @Else ervc @Else erc @Else tblrlc } + def tbxrrc { errc @Else ervc @Else erc @Else tblrrc } + def tbxrpc { erpc @Else tblrpc } + + ################################################################### + # # + # Specific option values at @Rowe level (i.e. Level 4) # + # # + ################################################################### + + def rowp { p @Else tbxp } + def rowbg { bg @Else tbxbg } + def rowf { f @Else tbxf } + def rowb { b @Else tbxb } + def roww { w @Else tbxw } + def rowh { h @Else tbxh } + def rowi { i @Else tbxi } + def rowiv { iv @Else tbxiv } + def rows { s @Else tbxs } + def rowsh { sh @Else tbxsh } + def rowml { ml @Else mh @Else m @Else tbxml } + def rowmr { mr @Else mh @Else m @Else tbxmr } + def rowma { ma @Else mv @Else m @Else tbxma } + def rowmb { mb @Else mv @Else m @Else tbxmb } + def rowra { ra @Else rh @Else r @Else tbxra } + def rowrb { rb @Else rh @Else r @Else tbxrb } + def rowrl { rl @Else rv @Else r @Else tbxrl } + def rowrr { rr @Else rv @Else r @Else tbxrr } + def rowraw { raw @Else rhw @Else rw @Else tbxraw } + def rowrbw { rbw @Else rhw @Else rw @Else tbxrbw } + def rowrlw { rlw @Else rvw @Else rw @Else tbxrlw } + def rowrrw { rrw @Else rvw @Else rw @Else tbxrrw } + def rowrag { rag @Else rhg @Else rg @Else tbxrag } + def rowrbg { rbg @Else rhg @Else rg @Else tbxrbg } + def rowrlg { rlg @Else rvg @Else rg @Else tbxrlg } + def rowrrg { rrg @Else rvg @Else rg @Else tbxrrg } + def rowrac { rac @Else rhc @Else rc @Else tbxrac } + def rowrbc { rbc @Else rhc @Else rc @Else tbxrbc } + def rowrlc { rlc @Else rvc @Else rc @Else tbxrlc } + def rowrrc { rrc @Else rvc @Else rc @Else tbxrrc } + def rowrpc { rpc @Else tbxrpc } + + eformat + A { A } B { B } C { C } D { D } E { E } F { F } + G { G } H { H } I { I } J { J } K { K } L { L } + M { M } N { N } O { O } P { P } Q { Q } R { R } + S { S } T { T } U { U } V { V } W { W } X { X } + Y { Y } Z { Z } + @Cell { + + @DoCell + + ####################################################### + # # + # Specific option values to @Cell (i.e. Level 5) # + # # + ####################################################### + + p { p @Else rowp } + bg { bg @Else rowbg } + f { f @Else rowf } + b { b @Else rowb } + w { w @Else roww } + h { h @Else rowh } + i { i @Else rowi } + iv { iv @Else rowiv } + s { s @Else rows } + sh { sh @Else rowsh } + ml { ml @Else mh @Else m @Else rowml } + mr { mr @Else mh @Else m @Else rowmr } + ma { ma @Else mv @Else m @Else rowma } + mb { mb @Else mv @Else m @Else rowmb } + ra { ra @Else rh @Else r @Else rowra } + rb { rb @Else rh @Else r @Else rowrb } + rl { rl @Else rv @Else r @Else rowrl } + rr { rr @Else rv @Else r @Else rowrr } + raw { raw @Else rhw @Else rw @Else rowraw } + rbw { rbw @Else rhw @Else rw @Else rowrbw } + rlw { rlw @Else rvw @Else rw @Else rowrlw } + rrw { rrw @Else rvw @Else rw @Else rowrrw } + rag { rag @Else rhg @Else rg @Else rowrag } + rbg { rbg @Else rhg @Else rg @Else rowrbg } + rlg { rlg @Else rvg @Else rg @Else rowrlg } + rrg { rrg @Else rvg @Else rg @Else rowrrg } + rac { rac @Else rhc @Else rc @Else rowrac } + rbc { rbc @Else rhc @Else rc @Else rowrbc } + rlc { rlc @Else rvc @Else rc @Else rowrlc } + rrc { rrc @Else rvc @Else rc @Else rowrrc } + rpc { rpc @Else rowrpc } + + x + } + } + + # symbol for producing @Rowf rows + def @DoRowf + named paint p {} + named background bg {} + named font f {} + named break b {} + named width w {} + named height h {} + named indent i {} + named indentvertical iv {} + named strut s {} + named struthorizontal sh {} + named margin m {} + named marginhorizontal mh {} + named marginleft ml {} + named marginright mr {} + named marginvertical mv {} + named marginabove ma {} + named marginbelow mb {} + named rule r {} + named rulehorizontal rh {} + named ruleabove ra {} + named rulebelow rb {} + named rulevertical rv {} + named ruleleft rl {} + named ruleright rr {} + named rulewidth rw {} + named rulehorizontalwidth rhw {} + named ruleabovewidth raw {} + named rulebelowwidth rbw {} + named ruleverticalwidth rvw {} + named ruleleftwidth rlw {} + named rulerightwidth rrw {} + named rulegap rg {} + named rulehorizontalgap rhg {} + named ruleabovegap rag {} + named rulebelowgap rbg {} + named ruleverticalgap rvg {} + named ruleleftgap rlg {} + named rulerightgap rrg {} + named rulecolour rulecolor rc {} + named rulehorizontalcolour rulehorizontalcolor rhc {} + named ruleabovecolour ruleabovecolor rac {} + named rulebelowcolour rulebelowcolor rbc {} + named ruleverticalcolour ruleverticalcolor rvc {} + named ruleleftcolour ruleleftcolor rlc {} + named rulerightcolour rulerightcolor rrc {} + named ruleplainchar rpc {} + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + { + + ################################################################### + # # + # Specific option values at "foption" level (i.e. Level 3) # + # # + ################################################################### + + def tbxp { fp @Else tblp } + def tbxbg { fbg @Else tblbg } + def tbxf { ff @Else tblf } + def tbxb { fb @Else tblb } + def tbxw { fw @Else tblw } + def tbxh { fh @Else tblh } + def tbxi { fi @Else tbli } + def tbxiv { fiv @Else tbliv } + def tbxs { fs @Else tbls } + def tbxsh { fsh @Else tblsh } + def tbxml { fml @Else fmh @Else fm @Else tblml } + def tbxmr { fmr @Else fmh @Else fm @Else tblmr } + def tbxma { fma @Else fmv @Else fm @Else tblma } + def tbxmb { fmb @Else fmv @Else fm @Else tblmb } + def tbxra { fra @Else frh @Else fr @Else tblra } + def tbxrb { frb @Else frh @Else fr @Else tblrb } + def tbxrl { frl @Else frv @Else fr @Else tblrl } + def tbxrr { frr @Else frv @Else fr @Else tblrr } + def tbxraw { fraw @Else frhw @Else frw @Else tblraw } + def tbxrbw { frbw @Else frhw @Else frw @Else tblrbw } + def tbxrlw { frlw @Else frvw @Else frw @Else tblrlw } + def tbxrrw { frrw @Else frvw @Else frw @Else tblrrw } + def tbxrag { frag @Else frhg @Else frg @Else tblrag } + def tbxrbg { frbg @Else frhg @Else frg @Else tblrbg } + def tbxrlg { frlg @Else frvg @Else frg @Else tblrlg } + def tbxrrg { frrg @Else frvg @Else frg @Else tblrrg } + def tbxrac { frac @Else frhc @Else frc @Else tblrac } + def tbxrbc { frbc @Else frhc @Else frc @Else tblrbc } + def tbxrlc { frlc @Else frvc @Else frc @Else tblrlc } + def tbxrrc { frrc @Else frvc @Else frc @Else tblrrc } + def tbxrpc { frpc @Else tblrpc } + + ################################################################### + # # + # Specific option values at @Rowf level (i.e. Level 4) # + # # + ################################################################### + + def rowp { p @Else tbxp } + def rowbg { bg @Else tbxbg } + def rowf { f @Else tbxf } + def rowb { b @Else tbxb } + def roww { w @Else tbxw } + def rowh { h @Else tbxh } + def rowi { i @Else tbxi } + def rowiv { iv @Else tbxiv } + def rows { s @Else tbxs } + def rowsh { sh @Else tbxsh } + def rowml { ml @Else mh @Else m @Else tbxml } + def rowmr { mr @Else mh @Else m @Else tbxmr } + def rowma { ma @Else mv @Else m @Else tbxma } + def rowmb { mb @Else mv @Else m @Else tbxmb } + def rowra { ra @Else rh @Else r @Else tbxra } + def rowrb { rb @Else rh @Else r @Else tbxrb } + def rowrl { rl @Else rv @Else r @Else tbxrl } + def rowrr { rr @Else rv @Else r @Else tbxrr } + def rowraw { raw @Else rhw @Else rw @Else tbxraw } + def rowrbw { rbw @Else rhw @Else rw @Else tbxrbw } + def rowrlw { rlw @Else rvw @Else rw @Else tbxrlw } + def rowrrw { rrw @Else rvw @Else rw @Else tbxrrw } + def rowrag { rag @Else rhg @Else rg @Else tbxrag } + def rowrbg { rbg @Else rhg @Else rg @Else tbxrbg } + def rowrlg { rlg @Else rvg @Else rg @Else tbxrlg } + def rowrrg { rrg @Else rvg @Else rg @Else tbxrrg } + def rowrac { rac @Else rhc @Else rc @Else tbxrac } + def rowrbc { rbc @Else rhc @Else rc @Else tbxrbc } + def rowrlc { rlc @Else rvc @Else rc @Else tbxrlc } + def rowrrc { rrc @Else rvc @Else rc @Else tbxrrc } + def rowrpc { rpc @Else tbxrpc } + + fformat + A { A } B { B } C { C } D { D } E { E } F { F } + G { G } H { H } I { I } J { J } K { K } L { L } + M { M } N { N } O { O } P { P } Q { Q } R { R } + S { S } T { T } U { U } V { V } W { W } X { X } + Y { Y } Z { Z } + @Cell { + + @DoCell + + ####################################################### + # # + # Specific option values to @Cell (i.e. Level 5) # + # # + ####################################################### + + p { p @Else rowp } + bg { bg @Else rowbg } + f { f @Else rowf } + b { b @Else rowb } + w { w @Else roww } + h { h @Else rowh } + i { i @Else rowi } + iv { iv @Else rowiv } + s { s @Else rows } + sh { sh @Else rowsh } + ml { ml @Else mh @Else m @Else rowml } + mr { mr @Else mh @Else m @Else rowmr } + ma { ma @Else mv @Else m @Else rowma } + mb { mb @Else mv @Else m @Else rowmb } + ra { ra @Else rh @Else r @Else rowra } + rb { rb @Else rh @Else r @Else rowrb } + rl { rl @Else rv @Else r @Else rowrl } + rr { rr @Else rv @Else r @Else rowrr } + raw { raw @Else rhw @Else rw @Else rowraw } + rbw { rbw @Else rhw @Else rw @Else rowrbw } + rlw { rlw @Else rvw @Else rw @Else rowrlw } + rrw { rrw @Else rvw @Else rw @Else rowrrw } + rag { rag @Else rhg @Else rg @Else rowrag } + rbg { rbg @Else rhg @Else rg @Else rowrbg } + rlg { rlg @Else rvg @Else rg @Else rowrlg } + rrg { rrg @Else rvg @Else rg @Else rowrrg } + rac { rac @Else rhc @Else rc @Else rowrac } + rbc { rbc @Else rhc @Else rc @Else rowrbc } + rlc { rlc @Else rvc @Else rc @Else rowrlc } + rrc { rrc @Else rvc @Else rc @Else rowrrc } + rpc { rpc @Else rowrpc } + + x + } + } + + # symbol for producing @Rowg rows + def @DoRowg + named paint p {} + named background bg {} + named font f {} + named break b {} + named width w {} + named height h {} + named indent i {} + named indentvertical iv {} + named strut s {} + named struthorizontal sh {} + named margin m {} + named marginhorizontal mh {} + named marginleft ml {} + named marginright mr {} + named marginvertical mv {} + named marginabove ma {} + named marginbelow mb {} + named rule r {} + named rulehorizontal rh {} + named ruleabove ra {} + named rulebelow rb {} + named rulevertical rv {} + named ruleleft rl {} + named ruleright rr {} + named rulewidth rw {} + named rulehorizontalwidth rhw {} + named ruleabovewidth raw {} + named rulebelowwidth rbw {} + named ruleverticalwidth rvw {} + named ruleleftwidth rlw {} + named rulerightwidth rrw {} + named rulegap rg {} + named rulehorizontalgap rhg {} + named ruleabovegap rag {} + named rulebelowgap rbg {} + named ruleverticalgap rvg {} + named ruleleftgap rlg {} + named rulerightgap rrg {} + named rulecolour rulecolor rc {} + named rulehorizontalcolour rulehorizontalcolor rhc {} + named ruleabovecolour ruleabovecolor rac {} + named rulebelowcolour rulebelowcolor rbc {} + named ruleverticalcolour ruleverticalcolor rvc {} + named ruleleftcolour ruleleftcolor rlc {} + named rulerightcolour rulerightcolor rrc {} + named ruleplainchar rpc {} + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + { + + ################################################################### + # # + # Specific option values at "doption" level (i.e. Level 3) # + # # + ################################################################### + + def tbxp { gp @Else tblp } + def tbxbg { gbg @Else tblbg } + def tbxf { gf @Else tblf } + def tbxb { gb @Else tblb } + def tbxw { gw @Else tblw } + def tbxh { gh @Else tblh } + def tbxi { gi @Else tbli } + def tbxiv { giv @Else tbliv } + def tbxs { gs @Else tbls } + def tbxsh { gsh @Else tblsh } + def tbxml { gml @Else gmh @Else gm @Else tblml } + def tbxmr { gmr @Else gmh @Else gm @Else tblmr } + def tbxma { gma @Else gmv @Else gm @Else tblma } + def tbxmb { gmb @Else gmv @Else gm @Else tblmb } + def tbxra { gra @Else grh @Else gr @Else tblra } + def tbxrb { grb @Else grh @Else gr @Else tblrb } + def tbxrl { grl @Else grv @Else gr @Else tblrl } + def tbxrr { grr @Else grv @Else gr @Else tblrr } + def tbxraw { graw @Else grhw @Else grw @Else tblraw } + def tbxrbw { grbw @Else grhw @Else grw @Else tblrbw } + def tbxrlw { grlw @Else grvw @Else grw @Else tblrlw } + def tbxrrw { grrw @Else grvw @Else grw @Else tblrrw } + def tbxrag { grag @Else grhg @Else grg @Else tblrag } + def tbxrbg { grbg @Else grhg @Else grg @Else tblrbg } + def tbxrlg { grlg @Else grvg @Else grg @Else tblrlg } + def tbxrrg { grrg @Else grvg @Else grg @Else tblrrg } + def tbxrac { grac @Else grhc @Else grc @Else tblrac } + def tbxrbc { grbc @Else grhc @Else grc @Else tblrbc } + def tbxrlc { grlc @Else grvc @Else grc @Else tblrlc } + def tbxrrc { grrc @Else grvc @Else grc @Else tblrrc } + def tbxrpc { grpc @Else tblrpc } + + ################################################################### + # # + # Specific option values at @Rowg level (i.e. Level 4) # + # # + ################################################################### + + def rowp { p @Else tbxp } + def rowbg { bg @Else tbxbg } + def rowf { f @Else tbxf } + def rowb { b @Else tbxb } + def roww { w @Else tbxw } + def rowh { h @Else tbxh } + def rowi { i @Else tbxi } + def rowiv { iv @Else tbxiv } + def rows { s @Else tbxs } + def rowsh { sh @Else tbxsh } + def rowml { ml @Else mh @Else m @Else tbxml } + def rowmr { mr @Else mh @Else m @Else tbxmr } + def rowma { ma @Else mv @Else m @Else tbxma } + def rowmb { mb @Else mv @Else m @Else tbxmb } + def rowra { ra @Else rh @Else r @Else tbxra } + def rowrb { rb @Else rh @Else r @Else tbxrb } + def rowrl { rl @Else rv @Else r @Else tbxrl } + def rowrr { rr @Else rv @Else r @Else tbxrr } + def rowraw { raw @Else rhw @Else rw @Else tbxraw } + def rowrbw { rbw @Else rhw @Else rw @Else tbxrbw } + def rowrlw { rlw @Else rvw @Else rw @Else tbxrlw } + def rowrrw { rrw @Else rvw @Else rw @Else tbxrrw } + def rowrag { rag @Else rhg @Else rg @Else tbxrag } + def rowrbg { rbg @Else rhg @Else rg @Else tbxrbg } + def rowrlg { rlg @Else rvg @Else rg @Else tbxrlg } + def rowrrg { rrg @Else rvg @Else rg @Else tbxrrg } + def rowrac { rac @Else rhc @Else rc @Else tbxrac } + def rowrbc { rbc @Else rhc @Else rc @Else tbxrbc } + def rowrlc { rlc @Else rvc @Else rc @Else tbxrlc } + def rowrrc { rrc @Else rvc @Else rc @Else tbxrrc } + def rowrpc { rpc @Else tbxrpc } + + gformat + A { A } B { B } C { C } D { D } E { E } F { F } + G { G } H { H } I { I } J { J } K { K } L { L } + M { M } N { N } O { O } P { P } Q { Q } R { R } + S { S } T { T } U { U } V { V } W { W } X { X } + Y { Y } Z { Z } + @Cell { + + @DoCell + + ####################################################### + # # + # Specific option values to @Cell (i.e. Level 5) # + # # + ####################################################### + + p { p @Else rowp } + bg { bg @Else rowbg } + f { f @Else rowf } + b { b @Else rowb } + w { w @Else roww } + h { h @Else rowh } + i { i @Else rowi } + iv { iv @Else rowiv } + s { s @Else rows } + sh { sh @Else rowsh } + ml { ml @Else mh @Else m @Else rowml } + mr { mr @Else mh @Else m @Else rowmr } + ma { ma @Else mv @Else m @Else rowma } + mb { mb @Else mv @Else m @Else rowmb } + ra { ra @Else rh @Else r @Else rowra } + rb { rb @Else rh @Else r @Else rowrb } + rl { rl @Else rv @Else r @Else rowrl } + rr { rr @Else rv @Else r @Else rowrr } + raw { raw @Else rhw @Else rw @Else rowraw } + rbw { rbw @Else rhw @Else rw @Else rowrbw } + rlw { rlw @Else rvw @Else rw @Else rowrlw } + rrw { rrw @Else rvw @Else rw @Else rowrrw } + rag { rag @Else rhg @Else rg @Else rowrag } + rbg { rbg @Else rhg @Else rg @Else rowrbg } + rlg { rlg @Else rvg @Else rg @Else rowrlg } + rrg { rrg @Else rvg @Else rg @Else rowrrg } + rac { rac @Else rhc @Else rc @Else rowrac } + rbc { rbc @Else rhc @Else rc @Else rowrbc } + rlc { rlc @Else rvc @Else rc @Else rowrlc } + rrc { rrc @Else rvc @Else rc @Else rowrrc } + rpc { rpc @Else rowrpc } + + x + } + } + + # symbol for producing @Rowh rows + def @DoRowh + named paint p {} + named background bg {} + named font f {} + named break b {} + named width w {} + named height h {} + named indent i {} + named indentvertical iv {} + named strut s {} + named struthorizontal sh {} + named margin m {} + named marginhorizontal mh {} + named marginleft ml {} + named marginright mr {} + named marginvertical mv {} + named marginabove ma {} + named marginbelow mb {} + named rule r {} + named rulehorizontal rh {} + named ruleabove ra {} + named rulebelow rb {} + named rulevertical rv {} + named ruleleft rl {} + named ruleright rr {} + named rulewidth rw {} + named rulehorizontalwidth rhw {} + named ruleabovewidth raw {} + named rulebelowwidth rbw {} + named ruleverticalwidth rvw {} + named ruleleftwidth rlw {} + named rulerightwidth rrw {} + named rulegap rg {} + named rulehorizontalgap rhg {} + named ruleabovegap rag {} + named rulebelowgap rbg {} + named ruleverticalgap rvg {} + named ruleleftgap rlg {} + named rulerightgap rrg {} + named rulecolour rulecolor rc {} + named rulehorizontalcolour rulehorizontalcolor rhc {} + named ruleabovecolour ruleabovecolor rac {} + named rulebelowcolour rulebelowcolor rbc {} + named ruleverticalcolour ruleverticalcolor rvc {} + named ruleleftcolour ruleleftcolor rlc {} + named rulerightcolour rulerightcolor rrc {} + named ruleplainchar rpc {} + named A {} named B {} named C {} named D {} named E {} + named F {} named G {} named H {} named I {} named J {} + named K {} named L {} named M {} named N {} named O {} + named P {} named Q {} named R {} named S {} named T {} + named U {} named V {} named W {} named X {} named Y {} + named Z {} + { + + ################################################################### + # # + # Specific option values at "hoption" level (i.e. Level 3) # + # # + ################################################################### + + def tbxp { hp @Else tblp } + def tbxbg { hbg @Else tblbg } + def tbxf { hf @Else tblf } + def tbxb { hb @Else tblb } + def tbxw { hw @Else tblw } + def tbxh { hh @Else tblh } + def tbxi { hi @Else tbli } + def tbxiv { hiv @Else tbliv } + def tbxs { hs @Else tbls } + def tbxsh { hsh @Else tblsh } + def tbxml { hml @Else hmh @Else hm @Else tblml } + def tbxmr { hmr @Else hmh @Else hm @Else tblmr } + def tbxma { hma @Else hmv @Else hm @Else tblma } + def tbxmb { hmb @Else hmv @Else hm @Else tblmb } + def tbxra { hra @Else hrh @Else hr @Else tblra } + def tbxrb { hrb @Else hrh @Else hr @Else tblrb } + def tbxrl { hrl @Else hrv @Else hr @Else tblrl } + def tbxrr { hrr @Else hrv @Else hr @Else tblrr } + def tbxraw { hraw @Else hrhw @Else hrw @Else tblraw } + def tbxrbw { hrbw @Else hrhw @Else hrw @Else tblrbw } + def tbxrlw { hrlw @Else hrvw @Else hrw @Else tblrlw } + def tbxrrw { hrrw @Else hrvw @Else hrw @Else tblrrw } + def tbxrag { hrag @Else hrhg @Else hrg @Else tblrag } + def tbxrbg { hrbg @Else hrhg @Else hrg @Else tblrbg } + def tbxrlg { hrlg @Else hrvg @Else hrg @Else tblrlg } + def tbxrrg { hrrg @Else hrvg @Else hrg @Else tblrrg } + def tbxrac { hrac @Else hrhc @Else hrc @Else tblrac } + def tbxrbc { hrbc @Else hrhc @Else hrc @Else tblrbc } + def tbxrlc { hrlc @Else hrvc @Else hrc @Else tblrlc } + def tbxrrc { hrrc @Else hrvc @Else hrc @Else tblrrc } + def tbxrpc { hrpc @Else tblrpc } + + ################################################################### + # # + # Specific option values at @Rowh level (i.e. Level 4) # + # # + ################################################################### + + def rowp { p @Else tbxp } + def rowbg { bg @Else tbxbg } + def rowf { f @Else tbxf } + def rowb { b @Else tbxb } + def roww { w @Else tbxw } + def rowh { h @Else tbxh } + def rowi { i @Else tbxi } + def rowiv { iv @Else tbxiv } + def rows { s @Else tbxs } + def rowsh { sh @Else tbxsh } + def rowml { ml @Else mh @Else m @Else tbxml } + def rowmr { mr @Else mh @Else m @Else tbxmr } + def rowma { ma @Else mv @Else m @Else tbxma } + def rowmb { mb @Else mv @Else m @Else tbxmb } + def rowra { ra @Else rh @Else r @Else tbxra } + def rowrb { rb @Else rh @Else r @Else tbxrb } + def rowrl { rl @Else rv @Else r @Else tbxrl } + def rowrr { rr @Else rv @Else r @Else tbxrr } + def rowraw { raw @Else rhw @Else rw @Else tbxraw } + def rowrbw { rbw @Else rhw @Else rw @Else tbxrbw } + def rowrlw { rlw @Else rvw @Else rw @Else tbxrlw } + def rowrrw { rrw @Else rvw @Else rw @Else tbxrrw } + def rowrag { rag @Else rhg @Else rg @Else tbxrag } + def rowrbg { rbg @Else rhg @Else rg @Else tbxrbg } + def rowrlg { rlg @Else rvg @Else rg @Else tbxrlg } + def rowrrg { rrg @Else rvg @Else rg @Else tbxrrg } + def rowrac { rac @Else rhc @Else rc @Else tbxrac } + def rowrbc { rbc @Else rhc @Else rc @Else tbxrbc } + def rowrlc { rlc @Else rvc @Else rc @Else tbxrlc } + def rowrrc { rrc @Else rvc @Else rc @Else tbxrrc } + def rowrpc { rpc @Else tbxrpc } + + hformat + A { A } B { B } C { C } D { D } E { E } F { F } + G { G } H { H } I { I } J { J } K { K } L { L } + M { M } N { N } O { O } P { P } Q { Q } R { R } + S { S } T { T } U { U } V { V } W { W } X { X } + Y { Y } Z { Z } + @Cell { + + @DoCell + + ####################################################### + # # + # Specific option values to @Cell (i.e. Level 5) # + # # + ####################################################### + + p { p @Else rowp } + bg { bg @Else rowbg } + f { f @Else rowf } + b { b @Else rowb } + w { w @Else roww } + h { h @Else rowh } + i { i @Else rowi } + iv { iv @Else rowiv } + s { s @Else rows } + sh { sh @Else rowsh } + ml { ml @Else mh @Else m @Else rowml } + mr { mr @Else mh @Else m @Else rowmr } + ma { ma @Else mv @Else m @Else rowma } + mb { mb @Else mv @Else m @Else rowmb } + ra { ra @Else rh @Else r @Else rowra } + rb { rb @Else rh @Else r @Else rowrb } + rl { rl @Else rv @Else r @Else rowrl } + rr { rr @Else rv @Else r @Else rowrr } + raw { raw @Else rhw @Else rw @Else rowraw } + rbw { rbw @Else rhw @Else rw @Else rowrbw } + rlw { rlw @Else rvw @Else rw @Else rowrlw } + rrw { rrw @Else rvw @Else rw @Else rowrrw } + rag { rag @Else rhg @Else rg @Else rowrag } + rbg { rbg @Else rhg @Else rg @Else rowrbg } + rlg { rlg @Else rvg @Else rg @Else rowrlg } + rrg { rrg @Else rvg @Else rg @Else rowrrg } + rac { rac @Else rhc @Else rc @Else rowrac } + rbc { rbc @Else rhc @Else rc @Else rowrbc } + rlc { rlc @Else rvc @Else rc @Else rowrlc } + rrc { rrc @Else rvc @Else rc @Else rowrrc } + rpc { rpc @Else rowrpc } + + x + } + } + + macro @Row { / @DoRow } + macro @Rowa { / @DoRowa } + macro @Rowb { / @DoRowb } + macro @Rowc { / @DoRowc } + macro @Rowd { / @DoRowd } + macro @Rowe { / @DoRowe } + macro @Rowf { / @DoRowf } + macro @Rowg { / @DoRowg } + macro @Rowh { / @DoRowh } + + macro @FirstRow { @DoRow } + macro @FirstRowa { @DoRowa } + macro @FirstRowb { @DoRowb } + macro @FirstRowc { @DoRowc } + macro @FirstRowd { @DoRowd } + macro @FirstRowe { @DoRowe } + macro @FirstRowf { @DoRowf } + macro @FirstRowg { @DoRowg } + macro @FirstRowh { @DoRowh } + + macro @MarkRow { ^/ @DoRow } + macro @MarkRowa { ^/ @DoRowa } + macro @MarkRowb { ^/ @DoRowb } + macro @MarkRowc { ^/ @DoRowc } + macro @MarkRowd { ^/ @DoRowd } + macro @MarkRowe { ^/ @DoRowe } + macro @MarkRowf { ^/ @DoRowf } + macro @MarkRowg { ^/ @DoRowg } + macro @MarkRowh { ^/ @DoRowh } + + macro @NoBreakRow { /0iu @DoRow } + macro @NoBreakRowa { /0iu @DoRowa } + macro @NoBreakRowb { /0iu @DoRowb } + macro @NoBreakRowc { /0iu @DoRowc } + macro @NoBreakRowd { /0iu @DoRowd } + macro @NoBreakRowe { /0iu @DoRowe } + macro @NoBreakRowf { /0iu @DoRowf } + macro @NoBreakRowg { /0iu @DoRowg } + macro @NoBreakRowh { /0iu @DoRowh } + + macro @NP { /"1.1b" } + + @Body + } + +@End @TblSetup diff --git a/include/tblf.lpg b/include/tblf.lpg new file mode 100644 index 0000000..a31c30f --- /dev/null +++ b/include/tblf.lpg @@ -0,0 +1,41 @@ +%%BeginResource: procset LoutTblPrependGraphic +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% PostScript @SysPrependGraphic file for @Tbl Jeffrey H. Kingston % +% Version 1.0 June 1998 % +% % +% To assist in avoiding name clashes, the names of all symbols % +% defined here begin with "ltbl". % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% painting (i.e. filling): - ltblwhite - (etc.) +/ltblnopaint { } def +/ltblnochange { fill } def +/ltbldarkblue { 0.0 0.0 0.5 setrgbcolor fill } def +/ltblblue { 0.0 0.0 1.0 setrgbcolor fill } def +/ltbllightblue { 0.5 0.5 1.0 setrgbcolor fill } def +/ltbldarkgreen { 0.0 0.5 0.0 setrgbcolor fill } def +/ltblgreen { 0.0 1.0 0.0 setrgbcolor fill } def +/ltbllightgreen { 0.5 1.0 0.5 setrgbcolor fill } def +/ltbldarkred { 0.5 0.0 0.0 setrgbcolor fill } def +/ltblred { 1.0 0.0 0.0 setrgbcolor fill } def +/ltbllightred { 1.0 0.5 0.5 setrgbcolor fill } def +/ltbldarkcyan { 0.0 0.5 0.5 setrgbcolor fill } def +/ltblcyan { 0.0 1.0 1.0 setrgbcolor fill } def +/ltbllightcyan { 0.5 1.0 1.0 setrgbcolor fill } def +/ltbldarkmagenta { 0.5 0.0 0.5 setrgbcolor fill } def +/ltblmagenta { 1.0 0.0 1.0 setrgbcolor fill } def +/ltbllightmagenta { 1.0 0.5 1.0 setrgbcolor fill } def +/ltbldarkyellow { 0.5 0.5 0.0 setrgbcolor fill } def +/ltblyellow { 1.0 1.0 0.0 setrgbcolor fill } def +/ltbllightyellow { 1.0 1.0 0.5 setrgbcolor fill } def +/ltbldarkgray { 0.2 0.2 0.2 setrgbcolor fill } def +/ltblgray { 0.5 0.5 0.5 setrgbcolor fill } def +/ltbllightgray { 0.8 0.8 0.8 setrgbcolor fill } def +/ltbldarkgrey { 0.2 0.2 0.2 setrgbcolor fill } def +/ltblgrey { 0.5 0.5 0.5 setrgbcolor fill } def +/ltbllightgrey { 0.8 0.8 0.8 setrgbcolor fill } def +/ltblblack { 0.0 0.0 0.0 setrgbcolor fill } def +/ltblwhite { 1.0 1.0 1.0 setrgbcolor fill } def +%%EndResource diff --git a/include/ts b/include/ts new file mode 100644 index 0000000..d78ed14 --- /dev/null +++ b/include/ts @@ -0,0 +1,105 @@ + +############################################################################### +# # +# Lout @ToySetup package (Jeff Kingston, July 1993, updated October 1994) # +# # +# In response to a user request I have put together this tiny package for # +# people to play with who want to start learning how to do page layout and # +# galleys with Lout. It produces a very simple sequence of pages. To # +# invoke the package, run "lout myfile > op" where myfile looks like this: # +# # +# @SysInclude { ts } # +# @Use { @ToySetup } # +# @Document # +# // # +# @Text { # +# Any text you like here, using @I, @B, @Heading, @PP, @LP, @DP, # +# @LeftDisplay, @IndentedDisplay, and @CenteredDisplay just as in # +# DocumentSetup. # +# } # +# # +############################################################################### + +@SysInclude { fontdefs } +@SysInclude { langdefs } + +export @I @B @Heading @PP @LP @DP @NP + @LeftDisplay @IndentedDisplay @CenteredDisplay + @Text @Document + +def @ToySetup + named @PageWidth { 21.0c } + named @PageHeight { 29.7c } +@Begin + + ########################################################################### + # # + # Font changes, headings, and paragraphs. # + # # + ########################################################################### + + def @I right x { Slope @Font x } + def @B right x { Bold @Font x } + def @Heading right x { ragged @Break @B x } + + macro @PP { //1.3vx 1.0f @Wide &0i } + macro @LP { //1.3vx } + macro @DP { //0.5v } + macro @NP { //1.1b } + + + ########################################################################### + # # + # Displays. # + # # + ########################################################################### + + def @DispPlace { @Galley } + + def @Disp into { @DispPlace&&preceding } + right x + { + @OneRow x + } + + macro @LeftDisplay { @DP | @DispPlace | @DP // @Disp } + macro @IndentedDisplay { @DP |2f @DispPlace | @DP // @Disp } + macro @CenteredDisplay { @DP |0.5rt @DispPlace | @DP // @Disp } + + + ########################################################################### + # # + # Page layout. # + # # + ########################################################################### + + def @TextPlace { @Galley } + + def @Text force into { @TextPlace&&preceding } + right x + { + x + } + + def @Page right x + { + @PageWidth @Wide @PageHeight @High + { Times Base 12p } @Font + { adjust nohyphen 14px } @Break + English @Language { 0 0 0 } @SetColour + { //1i ||1i + @HExpand @VExpand x + ||1i //1i + } + } + + def @PageList right num + { + @Page { |0.5rt - num - //0.4i @TextPlace } + // + @PageList @Next num + } + + def @Document { @PageList 1 } + +@End @ToySetup |