| |
| ############################################################################### |
| # # |
| # 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 |