blob: 5473fbf3b251b0fc3b8e8aba0c71cdd32fdfe545 (
plain) (
tree)
|
|
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
}
|