aboutsummaryrefslogtreecommitdiffstats
path: root/doc/design/mydefs
diff options
context:
space:
mode:
Diffstat (limited to 'doc/design/mydefs')
-rw-r--r--doc/design/mydefs591
1 files changed, 591 insertions, 0 deletions
diff --git a/doc/design/mydefs b/doc/design/mydefs
new file mode 100644
index 0000000..5473fbf
--- /dev/null
+++ b/doc/design/mydefs
@@ -0,0 +1,591 @@
+
+def @TeX { T{ /0.2fo E}X }
+
+def @Code
+ right x
+{ { Helvetica Base -1p } @Font lines @Break x
+}
+
+######################################################
+# #
+# Nodes and trees. #
+# #
+######################################################
+
+import @Fig
+def @FBox
+ named width { 0.6c }
+ named height { 0.4c }
+ named margin { 0.1c }
+ right x
+{
+ @Box margin { margin }
+ { width @Wide height @High
+ { /0.5rt |0.5rt @OneCol @OneRow 0.8f @Font x
+ }
+ }
+}
+
+import @Fig
+def @FEllipse
+ named width { 0.6c }
+ named height { 0.4c }
+ named margin { 0.1c }
+ right x
+{
+ @Ellipse margin { margin }
+ { height @High
+ { /0.5rt |0.5rt @OneCol @OneRow 0.8f @Font x
+ }
+ }
+}
+
+import @Fig
+def @FCircle
+ named width { 0.4c }
+ named height { 0.4c }
+ named margin { 0.1c }
+ right x
+{
+ @Circle margin { margin }
+ { width @Wide height @High
+ { /0.5rt |0.5rt @OneCol @OneRow 0.8f @Font x
+ }
+ }
+}
+
+import @Fig
+def @JoinFigures
+ left A
+ named linestyle { solid }
+ named linewidth { 0.5 pt }
+ named linecap { round }
+ named dashlength { 0.15 cm }
+ named arrow { noarrow }
+ named headstyle { open }
+ named headwidth { 0.05 cm }
+ named headlength { 0.15 cm }
+ right B
+{
+ @Line
+ from { {A"@CTR"} ++ {{A"@CTR"} @Angle {B"@CTR"} A"@CIRCUM"} }
+ to { {B"@CTR"} ++ {{B"@CTR"} @Angle {A"@CTR"} B"@CIRCUM"} }
+ linestyle { linestyle }
+ linewidth { linewidth }
+ linecap { linecap }
+ dashlength { dashlength }
+ arrow { arrow }
+ headstyle { headstyle }
+ headwidth { headwidth }
+ headlength { headlength }
+ {}
+}
+
+import @Fig
+export @LeftSub @RightSub @FirstSub @NextSub @StubSub @Node
+def @Tree
+ named hmargin { 0.2c }
+ named vmargin { 0.3c }
+ named linestyle { solid }
+ named linewidth { 0.5 pt }
+ named linecap { round }
+ named dashlength { 0.15 cm }
+ named arrow { noarrow }
+ named headstyle { open }
+ named headwidth { 0.05 cm }
+ named headlength { 0.15 cm }
+ body x
+@Begin
+
+ def @LeftSub
+ precedence 90
+ associativity left
+ left root
+ named hmargin { hmargin }
+ named linestyle { linestyle }
+ named linewidth { linewidth }
+ named linecap { linecap }
+ named dashlength { dashlength }
+ named arrow { arrow }
+ named headstyle { headstyle }
+ named headwidth { headwidth }
+ named headlength { headlength }
+ right x
+ {
+ { /vmargin {L::x} } |hmargin root |
+ L@T @JoinFigures
+ linestyle { linestyle }
+ linewidth { linewidth }
+ linecap { linecap }
+ dashlength { dashlength }
+ arrow { arrow }
+ headstyle { headstyle }
+ headwidth { headwidth }
+ headlength { headlength }
+ T
+ }
+
+ def fixroot
+ precedence 90
+ left root
+ {
+ |0.5rt root
+ }
+
+ def firstsub
+ precedence 90
+ associativity left
+ named hmargin { hmargin }
+ named linestyle { linestyle }
+ named linewidth { linewidth }
+ named linecap { linecap }
+ named dashlength { dashlength }
+ named arrow { arrow }
+ named headstyle { headstyle }
+ named headwidth { headwidth }
+ named headlength { headlength }
+ right x
+ {
+ S::x &
+ S@T @JoinFigures
+ linestyle { linestyle }
+ linewidth { linewidth }
+ linecap { linecap }
+ dashlength { dashlength }
+ arrow { arrow }
+ headstyle { headstyle }
+ headwidth { headwidth }
+ headlength { headlength }
+ T
+ }
+
+ macro @FirstSub { fixroot //vmargin |0.5rt firstsub }
+
+ def @NextSub
+ precedence 90
+ associativity left
+ left others
+ named hmargin { hmargin }
+ named linestyle { linestyle }
+ named linewidth { linewidth }
+ named linecap { linecap }
+ named dashlength { dashlength }
+ named arrow { arrow }
+ named headstyle { headstyle }
+ named headwidth { headwidth }
+ named headlength { headlength }
+ right x
+ {
+ others &hmargin S::x &
+ S@T @JoinFigures
+ linestyle { linestyle }
+ linewidth { linewidth }
+ linecap { linecap }
+ dashlength { dashlength }
+ arrow { arrow }
+ headstyle { headstyle }
+ headwidth { headwidth }
+ headlength { headlength }
+ T
+ }
+
+ def @RightSub
+ precedence 90
+ associativity left
+ left root
+ named hmargin { hmargin }
+ named linestyle { linestyle }
+ named linewidth { linewidth }
+ named linecap { linecap }
+ named dashlength { dashlength }
+ named arrow { arrow }
+ named headstyle { headstyle }
+ named headwidth { headwidth }
+ named headlength { headlength }
+ right x
+ {
+ root |hmargin { /vmargin {R::x} } |
+ R@T @JoinFigures
+ linestyle { linestyle }
+ linewidth { linewidth }
+ linecap { linecap }
+ dashlength { dashlength }
+ arrow { arrow }
+ headstyle { headstyle }
+ headwidth { headwidth }
+ headlength { headlength }
+ T
+ }
+
+ def @StubSub
+ precedence 90
+ associativity left
+ left root
+ named linestyle { linestyle }
+ named linewidth { linewidth }
+ named linecap { linecap }
+ named dashlength { dashlength }
+ {
+ root |
+ @Figure
+ shape { T@SW
+ T@W -- { 0.1 cm 0.7 cm }
+ T@E -- {-0.1 cm 0.7 cm }
+ T@SE
+ }
+ linestyle { linestyle }
+ linewidth { linewidth }
+ linecap { linecap }
+ dashlength { dashlength }
+ { @Null }
+ }
+
+ def @Node
+ # named mark {}
+ right root
+ {
+ T:: root
+ # & T@W ++ { -0.2 cm 0.1 cm } @BaseOf mark
+ }
+
+ @OneCol @OneRow x
+
+@End @Tree
+
+
+def @ShowMarks
+ named linewidth { 0.015 cm }
+ named linestyle { dashed }
+ named dashlength { 0.15 cm }
+ named paint { lightgrey }
+ named marks { both } # none, horizontal, vertical, or both
+ right x
+{
+ @Fig
+ { @Box margin { 0c } linewidth { linewidth } paint { paint }
+ { @Figure
+ shape {
+ marks @Case {
+ { horizontal both } @Yield
+ { -0.3 cm ymark {xsize ymark} ++ {0.3 cm 0} }
+ else @Yield {}
+ }
+ marks @Case {
+ both @Yield []
+ else @Yield {}
+ }
+ marks @Case {
+ { vertical both } @Yield
+ { xmark -0.3 cm {xmark ysize} ++ {0 0.3 cm} }
+ else @Yield {}
+ }
+ }
+ linewidth { linewidth }
+ linestyle { linestyle }
+ dashlength { dashlength }
+ x
+ }
+ }
+}
+
+ import @Fig
+ def @DagBox
+ named top {}
+ named mid {}
+ named base {}
+ {
+ @OneRow {
+ TOP:: @FBox top
+ // MID:: @FBox mid
+ // BASE:: @FBox base
+ }
+ }
+
+ import @Fig
+ def @BlackDot
+ named diameter { 0.07c }
+ {
+ @Circle
+ margin { 0c }
+ paint { black }
+ { diameter @Wide diameter @High {}
+ }
+ }
+
+ import @Fig
+ def @TVShape # television shape enclosing points ne, nw, se, sw
+ named nw {}
+ named ne {}
+ named sw {}
+ named se {}
+ named delta { 0.5 cm }
+ {
+ @Figure
+ shape {
+ { {nw @Min sw @Min ne @Min se} -- { delta 0 } } @Label BL
+ { {nw @Max sw @Max ne @Max se} ++ { delta 0 } } @Label TR
+ BL ++ { 0 BL @YDistance TR } @Label TL
+ BL ++ { BL @XDistance TR 0 } @Label BR
+ BL
+ BR [ BR ++ {0 delta} ]
+ BR ++ {delta delta}
+ TR ++ {delta -delta} [ TR -- {0 delta} ]
+ TR
+ TL [ TL -- {0 delta} ]
+ TL -- {delta delta}
+ BL ++ {-delta delta} [ BL ++ {0 delta} ]
+ BL
+ }
+ {}
+ }
+
+ import @Fig
+ def @FunnyArrow
+ named from {}
+ named to {}
+ named arrow { forward }
+ {
+ @Figure
+ shape {from from ++ {0 from @YDistance to} to}
+ arrow { arrow }
+ {}
+ }
+
+ def "->" { {Symbol Base} @Font "\256" } #174 decimal
+ def "=>" { {Symbol Base} @Font "\336" } #222 decimal
+ macro @JP { /0.5v }
+
+ ###################################################
+ # #
+ # Lout keywords. #
+ # #
+ ###################################################
+
+ def @@Begin { @Code "@Begin" }
+ def @@Break { @Code "@Break" }
+ def @@Case { @Code "@Case" }
+ def @@Database { @Code "@Database" }
+ def @@End { @Code "@End" }
+ def @@Font { @Code "@Font" }
+ def @@Galley { @Code "@Galley" }
+ def @@Graphic { @Code "@Graphic" }
+ def @@HExpand { @Code "@HExpand" }
+ def @@HScale { @Code "@HScale" }
+ def @@High { @Code "@High" }
+ def @@Include { @Code "@Include" }
+ def @@Key { @Code "@Key" }
+ def @@LClos { @Code "@LClos" }
+ def @@LEnv { @Code "@LEnv" }
+ def @@LInput { @Code "@LInput" }
+ def @@Moment { @Code "@Moment" }
+ def @@Next { @Code "@Next" }
+ def @@Null { @Code "@Null" }
+ def @@OneCol { @Code "@OneCol" }
+ def @@OneRow { @Code "@OneRow" }
+ def @@Open { @Code "@Open" }
+ def @@Prepend { @Code "@Prepend" }
+ def @@Rotate { @Code "@Rotate" }
+ def @@Space { @Code "@Space" }
+ def @@SysDatabase { @Code "@SysDatabase" }
+ def @@SysInclude { @Code "@SysInclude" }
+ def @@SysPrepend { @Code "@SysPrepend" }
+ def @@Tag { @Code "@Tag" }
+ def @@Tagged { @Code "@Tagged" }
+ def @@Use { @Code "@Use" }
+ def @@VExpand { @Code "@VExpand" }
+ def @@VScale { @Code "@VScale" }
+ def @@Yield { @Code "@Yield" }
+ def @@Wide { @Code "@Wide" }
+
+
+ ###################################################
+ # #
+ # Miscellaneous, mostly graphical definitions. #
+ # #
+ ###################################################
+
+ def @Leaders
+ { .. @Leaders
+ }
+
+ def @HLine {
+ @BackEnd @Case {
+ PostScript @Yield {
+ { 0 0 moveto xsize 0 lineto stroke }
+ @Graphic {}
+ }
+ PDF @Yield {
+ { 0 0 m __xsize 0 l S }
+ @Graphic {}
+ }
+ }
+ }
+
+ def @VDashLine
+ right length
+ {
+ @BackEnd @Case {
+ PostScript @Yield {
+ length @High
+ { 0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke }
+ @Graphic {}
+ }
+ PDF @Yield {
+ length @High
+ { [ __mul(3, __pt) ] 0 d 0 0 m 0 __ysize l stroke }
+ @Graphic {}
+ }
+ }
+ }
+
+ def @LBox
+ right offset
+ {
+ @BackEnd @Case {
+ PostScript @Yield {
+ @OneCol @OneRow
+ {
+ { //0.2c
+ 0.6c @High 1.2c @Wide
+ { 0 0 moveto xsize 0 lineto
+ xsize ysize lineto 0 ysize lineto closepath
+ gsave 0.9 setgray fill grestore stroke }
+ @Graphic {}
+ }
+ ||offset @VDashLine 1c
+ }
+ }
+ PDF @Yield {
+ @OneCol @OneRow
+ {
+ { //0.2c
+ 0.6c @High 1.2c @Wide
+ { 0 0 m __xsize 0 l
+ __xsize __ysize l 0 __ysize l h
+ q 0.9 g f Q S }
+ @Graphic {}
+ }
+ ||offset @VDashLine 1c
+ }
+ }
+ }
+ }
+
+ def @Arrow
+ right length
+ { @OneCol @OneRow
+ {
+ 30d @Rotate {0.12c @Wide @HLine}
+ //
+ length @Wide @HLine
+ //
+ "-30d" @Rotate {0.12c @Wide @HLine}
+ }
+ }
+
+ def @DoubleArrow
+ right length
+ { @OneCol @OneRow
+ {
+ & 180d @Rotate @Arrow length
+ |0io @Arrow length
+ }
+ }
+
+ def @Put
+ left coord
+ right x
+ { @OneCol @OneRow
+ { coord / | @OneCol @OneRow x
+ }
+ }
+
+ macro @At { //0io }
+
+
+ ###################################################
+ # #
+ # Interpolated example documents. #
+ # #
+ ###################################################
+
+ def @LittleEndRunPlace { @Galley }
+ def @LittleEndRun
+ force into { @LittleEndRunPlace&&preceding }
+ {}
+
+ def @LittleTextPlace { @Galley }
+ def @LittleText into { @LittleTextPlace&&preceding }
+ right x
+ { x
+ }
+
+ def @LittleFootPlace { @Galley }
+ def @LittleFootNote into { @LittleFootPlace&&following }
+ right x
+ { x
+ }
+
+ def @LittlePageColumn
+ right x
+ {
+ 9px @Break 8p @Font
+ 2.8c @Wide x
+ }
+
+ def @LittlePage
+ right x
+ {
+ @BackEnd @Case {
+ PostScript @Yield {
+ @HContract @VContract
+ { 0 0 moveto xsize 0 lineto xsize ysize lineto
+ 0 ysize lineto closepath stroke } @Graphic
+ { //0.3c ||0.3c
+ 9px @Break 8p @Font
+ 2.8c @Wide 3.8c @High x
+ ||0.3c //0.3c
+ }
+ }
+ PDF @Yield {
+ @HContract @VContract
+ { 0 0 m __xsize 0 l __xsize __ysize l 0 __ysize l s } @Graphic
+ { //0.3c ||0.3c
+ 9px @Break 8p @Font
+ 2.8c @Wide 3.8c @High x
+ ||0.3c //0.3c
+ }
+ }
+ }
+ }
+
+ def @LittleFootSect
+ { 1c @Wide @HLine
+ //0.3v @LittleFootPlace ||0.5c
+ }
+
+ def @LittlePageList
+ right @PageNum
+ {
+ @LittlePage { # |0.5rt @PageNum //0.8v
+ //0.3v @LittleTextPlace
+ //1rt @LittleFootSect
+ }
+ //
+ @LittlePageList @Next @PageNum
+ }
+
+ def @LittleDocument
+ { @LittlePage
+ { @LittleTextPlace
+ //1rt @LittleFootSect
+ }
+ // @LittlePageList 2
+ // @LittleEndRunPlace
+ }
+
+ def @Strange
+ named @Format right @Val { [@Val] }
+ right x
+ { @Format x
+ }