REBOL [] do %pdf-maker.r rebolface: load 64#{ iVBORw0KGgoAAAANSUhEUgAAAIwAAABKCAIAAADmEyvAAAAAE3RFWHRTb2Z0d2Fy ZQBSRUJPTC9WaWV3j9kWeAAAAZdJREFUeJzt2UGWqjAQQFFW7BpcAWt24sCTpIpC EXjw+rwBPwideBvob0/z82Enbzp8BraYSIBEAiQSIJEAiQRIJEAiARIJkEiARAIk EiCRAIkESCRAIgESCZBIgEQCJBIgkQCJBEgkQCIB+i/S1H0t7ope3+xtBpPv3g8m h1RWdEGkaCR5Z6N/VraLSBuuSKTs9fmphnujweZSHk6muQSja12k7ZEShi+2qUg/ PpP2R2q0hs+wnW96+11JxXVufiUN3+joZ6KI9HngpZByswORomNzpMWF3BGpuF0c yW93q85/NaTm3ak8k/rD+/H+VHWk5Jw5w3Vud7ZJIgESCZBIgEQCJBIgJNJuv/ue JN5Sb8XzXvLhM1g33eB/vv1rkqNw8eadf6KTbMzYq5A36ehDmmivSEfMOPijVMSQ f6aHiDfp4u2u38WNt4DhU8dn0rnqb3fRYDMCFZqJSDdMJEAiARIJkEiARAIkEiCR AIkESCRAIgESCZBIgEQCJBIgkQCJBEgkQCIBEgmQSIBEAiQSIJEAiQToBTk5kJ8w sHwbAAAAAElFTkSuQmCC } page-1: [ line 10 281 201 281 line 10 16 201 16 apply rotation 20 translation 150 255 [ solid box 200.200.200 edge width 0.2 0 0 26 16 textbox 3 3 20 10 [ center font Helvetica 2.8 "Now with a powerful text typesetter!" ] ] textbox [ center font Helvetica-Bold 12.7 "PDF-Maker!" p space 10 justify font Helvetica 4.23 {Welcome to } font Courier 4.23 0.0.200 {pdf-maker.r} font Helvetica 4.23 0.0.0 {^(92)s preliminary documentation. This is my attempt at a PDF generator as a multiplatform solution to printing in } font Helvetica-Bold 4.23 {REBOL} font Helvetica 4.23 {. As you can see, it is now quite usable. Current limitations are:} p as-is with left margin 10 "^(97) Sub-optimal image handling (no compression etc.)" newline "^(97) Only the 14 PostScript standard fonts are supported." p justify left margin 0 {Support for custom fonts would definitely require work to be added; justification and right alignment are here thanks to Volker and his Adobe Font Metrics parser.} p center font Times-BoldItalic 4.6 "Following is the documentation for version 1.20 ALPHA" p space 5 left align font Helvetica-Bold 4.6 "The main function" p justify font Times-Roman 4.23 {To create a PDF file (under the form of a REBOL } font Courier 4.23 {binary!} font Times-Roman 4.23 {), just one function is needed: } font Courier 4.23 {layout-pdf} font Times-Roman 4.23 {.} as-is with left margin 10 font Courier 4.23 {USAGE: LAYOUT-PDF spec DESCRIPTION: Layout a PDF file (based on the provided spec) LAYOUT-PDF is a function value. ARGUMENTS: spec -- PDF contents, see documentation for details (Type: block)} font Times-Roman 4.23 justify with left margin 0 {The spec block is a sequence of blocks, each of them representing a page, so that a document with two pages will look like:} as-is with left margin 10 font Courier 4.23 {layout-pdf [ [ ; first page ; ... ] [ ; second page ; ... ] ]} font Times-Roman 4.23 justify with left margin 0 {Each page definition may include an optional page size and rotation specification; the page size is expressed in millimeters (as any other position or size in the dialect). For example, to create a page 150 millimeters wide and 140 high, you can write (I^(92)ll omit the surrounding } font Courier 4.23 {layout-pdf [ ]} font Times-Roman 4.23 { from now on):} as-is with left margin 10 font Courier 4.23 {[ page size 150 140 ; ... ]} ] ] show-point: func [x y] [ compose/deep [ apply translation (x) (y) [ circle 0 0 0.35 clip to [circle 0 0 0.35] line -1 -1 1 1 line -1 1 1 -1 ] ] ] example-bezier: func [tx ty x1 y1 x2 y2 x3 y3 x4 y4] [ compose/deep [ apply translation (tx) (ty) [ bezier cap round width 0.7 255.10.10 (x1) (y1) (x2) (y2) (x3) (y3) (x4) (y4) line cap butt width 0 dash [0.5 1] 0 0.0.0 (x1) (y1) (x2) (y2) line (x3) (y3) (x4) (y4) line dash solid (show-point x1 y1) (show-point x2 y2) (show-point x3 y3) (show-point x4 y4) ] ] ] example-box: func [options x y] [ compose/deep [ solid box (options) (x) (y) 55 20 textbox (x + 2) (y + 2) 51 16 [ center font Courier 4.23 0.0.0 (mold/only options) ] ] ] write/binary %pdf-maker-doc.pdf layout-pdf compose/deep [ [ (page-1) ] [ ; page 2 line 10 281 201 281 line 10 16 201 16 textbox [ font Times-Roman 4.23 {while to create a page of default size (ISO A4, 211^(D7)297 millimeters) but rotated 270 degrees clockwise:} as-is with left margin 10 font Courier 4.23 {[ page rotation 270 ; has to be multiple of 90 ; ... ]} font Times-Roman 4.23 justify with left margin 0 {Of course the two can be specified together, in any order:} as-is with left margin 10 font Courier 4.23 {[ page rotation 90 size 180.5 280 ; ... ]} font Times-Roman 4.23 justify with left margin 0 {Other than size and rotation, it is possible to specify an offset for the page; this offset is used to translate all the elements inside the page. (This feature has been added to allow fine alignment adjustment when you are printing on paper with a pre-printed form.) To offset a page by 5 millimeters in the } font Times-Italic 4.23 {x} font Times-Roman 4.23 { axys and 3 millimeters in the } font Times-Italic 4.23 {y} font Times-Roman 4.23 { axys the command is (as you would have guessed) } font Courier 4.23 {offset 5 3} font Times-Roman 4.23 {.} p {Please note that the origin in a PDF page is the } font Times-Bold 4.23 "LOWER LEFT" font Times-Roman 4.23 { corner and the } font Times-Italic 4.23 {y} font Times-Roman 4.23 { axys is swapped if you compare it to } font Helvetica-Bold 4.23 {REBOL} font Helvetica 4.23 {/View} font Times-Roman 4.23 {^(92)s faces } font Times-Italic 4.23 {y} font Times-Roman 4.23 { axis:} p space 50 left align font Helvetica-Bold 4.6 "Page layouts" p justify font Times-Roman 4.23 {Each page may contain any number of elements. There are three kinds of elements that can be layed out inside a page: } font Times-Italic 4.23 {graphic} font Times-Roman 4.23 { elements, } font Times-Italic 4.23 {text boxes} font Times-Roman 4.23 { and } font Times-Italic 4.23 {transformations} font Times-Roman 4.23 {. } {Graphic elements are things such as lines, curves or images; a text box is a rectangular area of the page where it is possible to typeset text. A transformation, instead, is more of an abstract entity; it can be considered as a ^(93)context^(94) inside which a geometric transformation is applied to the coordinate system. In other words, you are able to define a new couple of } font Times-Italic 4.23 {x} font Times-Roman 4.23 { and } font Times-Italic 4.23 {y} font Times-Roman 4.23 { axys and then render other elements inside this new space.} p {In this section we will discuss some examples of page layout; a detailed description of all the available commands in the dialect can be found in the following sections.} p {The simplest useful PDF can be created with the line:} as-is with left margin 10 font Courier 4.23 {layout-pdf [[textbox ["This is some text."]]]} font Times-Roman 4.23 justify with left margin 0 {(Of course you will probably want to save the result to a file for viewing or printing; } font Courier 4.23 {write/binary %file.pdf layout-pdf [...]} font Times-Roman 4.23 { will do the job.) The result of the above line is a one page PDF document; this page will just contain the text ^(93)This is some text.^(94) rendered with the standard font Helvetica with a size of 4.23 millimeters (about 12pt). The default page size (ISO A4) is used, and the text box will have a default size of 191^(D7)263 mm and will be positioned at 10 mm from the left edge and 17 mm from the bottom edge of the page. The default paragraph alignment mode is justification; reasonable default values are used for all the parameters.} ] apply translation 35 5 [ apply [ solid box 128.128.128 edge width 0.1 edge 128.128.128 81 144.1 21.1 29.7 solid box 255.255.255 edge 0.0.0 80 145.1 21.1 29.7 ] apply scaling 0.1 0.1 translation 80 145.1 [(page-1)] image 30 160 28 14.8 rebolface line 0.0.0 width 0.3 cap square 30 174.8 60 174.8 line 30 174.8 30 155 line 80 145.1 110 145.1 line 80 145.1 80 177.1 line cap butt dash [0.3 0.7] 0 25 174.8 30 174.8 line 30 179.8 30 174.8 line 75 145.1 80 145.1 line 80 140.1 80 145.1 fill 0.0.0 [60 175.3 63 174.8 60 174.3] fill [30.5 155 30 152 29.5 155] fill [110 145.6 113 145.1 110 144.6] fill [79.5 177.1 80 180.1 80.5 177.1] ] ] [ ; page 3 line 10 281 201 281 line 10 16 201 16 textbox [ font Times-Roman 4.23 {But now let^(92)s look at another example:} as-is with left margin 10 font Courier 4.23 {layout-pdf [ [ ; page 1 line 10 281 201 281 line 10 16 201 16 ] ]} font Times-Roman 4.23 justify with left margin 0 {That will still create a one page document. The page has two black straight lines in it, with a width of 1 mm. The first line goes from (10, 281) mm to (201, 281) mm (remember the origin is at the lower left corner of the page). The second line goes from (10, 16) to (201, 16). These two lines are the ones you can see in the pages of this document.} p {Let^(92)s try with a layout a bit more complicated.} as-is with left margin 10 font Courier 4.23 {layout-pdf [ [ ; page 1 line 10 281 201 281 line 10 16 201 16 apply rotation 20 translation 150 255 [ solid box 200.200.200 edge width 0.2 0 0 26 16 textbox 3 3 20 10 [ center font Helvetica 2.8 "Now with a powerful text typesetter!" ] ] ] ]} font Times-Roman 4.23 justify with left margin 0 {What does the above do? (You may try looking at the resulting document and then guessing the meaning of the commands used.) The two lines are the same as the previous example; we then used the } font Courier 4.23 {apply} font Times-Roman 4.23 { command to create a new graphic context. In this context the coordinate axys are rotated by 20 degrees and the origin is translated to the point (150, 255). We are rendering two elements inside this context: a solid box and a text box. The solid box has a color of 200.200.200 (light grey) and an edge with a width of 0.2 mm. (The edge is black, because we did not set a line color before in this page.) The box starts at the axys origin and it^(92)s size is 26^(D7)16 mm.} p {The text box starts at the point (3, 3) and is 20^(D7)10. In this text box we are setting the paragraph alignment to } font Courier 4.23 {center} font Times-Roman 4.23 { and the font to Helvetica 2.8 mm. The paragraph contains just the text ^(93)Now with a powerful text typesetter!^(94). (You have probably already realized that the above is the beginning of this document.)} p {This should be enough to get you started; but of course the dialect can do more than this. The following sections will address the dialect in detail.} ] ] [ ; page 4 line 10 281 201 281 line 10 16 201 16 textbox [ left align font Helvetica-Bold 4.6 "Graphic elements" justify font Times-Roman 4.23 {This section discusses the commands used to render graphics in the page; you can render lines, bézier curves, boxes, circles or any other shape. You can also render sampled images.} p {We will at first discuss the single commands; at the end we will offer the complete grammar for the graphic elements for reference.} left align font Courier-Bold 4.3 "line" justify font Times-Roman 4.23 {The } font Courier 4.23 {line} font Times-Roman 4.23 { command draws a straight line from one point to another, or sets the line options, or both. We already showed how to draw a line using the current options:} as-is with left margin 10 font Courier 4.23 {line } font Times-Italic 4.23 {x1} font Courier 4.23 { } font Times-Italic 4.23 {y1} font Courier 4.23 { } font Times-Italic 4.23 {x2} font Courier 4.23 { } font Times-Italic 4.23 {y2} font Times-Roman 4.23 justify with left margin 0 {where } font Times-Italic 4.23 {x1} font Times-Roman 4.23 {, } font Times-Italic 4.23 {y1} font Times-Roman 4.23 {, } font Times-Italic 4.23 {x2} font Times-Roman 4.23 { and } font Times-Italic 4.23 {y2} font Times-Roman 4.23 { are } font Courier 4.23 {number!} font Times-Roman 4.23 {s. To set line options, use the command:} as-is with left margin 10 font Courier 4.23 {line } font Times-Italic 4.23 {line-options} font Times-Roman 4.23 justify with left margin 0 {while to do both:} as-is with left margin 10 font Courier 4.23 {line } font Times-Italic 4.23 {line-options} font Courier 4.23 { } font Times-Italic 4.23 {x1} font Courier 4.23 { } font Times-Italic 4.23 {y1} font Courier 4.23 { } font Times-Italic 4.23 {x2} font Courier 4.23 { } font Times-Italic 4.23 {y2} font Times-Roman 4.23 justify with left margin 0 {where for } font Times-Italic 4.23 {line-options} font Times-Roman 4.23 { you can specify any of the following:} as-is with left margin 10 font Courier 4.23 {width } font Times-Italic 4.23 {line-width} font Courier 4.23 { cap } font Times-Italic 4.23 {line-cap} font Courier 4.23 { join } font Times-Italic 4.23 {line-join} font Courier 4.23 { miter limit } font Times-Italic 4.23 {miter-limit} font Courier 4.23 { dash } font Times-Italic 4.23 {dash-style} font Courier 4.23 { color } font Times-Italic 4.23 {line-color} font Times-Italic 4.23 justify with left margin 0 {line-width} font Times-Roman 4.23 { is the line width in millimeters (0 means the line will be as thin as the output device allows); } font Times-Italic 4.23 {line-cap} font Times-Roman 4.23 { may be } font Courier 4.23 {butt} font Times-Roman 4.23 {, } font Courier 4.23 {round} font Times-Roman 4.23 { or } font Courier 4.23 {square} font Times-Roman 4.23 {; } font Times-Italic 4.23 {line-join} font Times-Roman 4.23 { may be } font Courier 4.23 {miter} font Times-Roman 4.23 {, } font Courier 4.23 {round} font Times-Roman 4.23 { or } font Courier 4.23 {bevel} font Times-Roman 4.23 { (this, of course, does not apply to a single line as the ones created by the } font Courier 4.23 {line} font Times-Roman 4.23 { command; we will discuss this later); } font Times-Italic 4.23 {miter-limit} font Times-Roman 4.23 { is a } font Courier 4.23 {number!} font Times-Roman 4.23 { (we^(92)ll discuss this later too, together with line join); the } font Times-Italic 4.23 {dash-style} font Times-Roman 4.23 { may either be the word } font Courier 4.23 {solid} font Times-Roman 4.23 { (for solid lines) or a } font Courier 4.23 {block!} font Times-Roman 4.23 { of } font Courier 4.23 {number!} font Times-Roman 4.23 {s followed by a } font Courier 4.23 {number!} font Times-Roman 4.23 { (for dashed lines); } font Times-Italic 4.23 {line-color} font Times-Roman 4.23 { is a } font Courier 4.23 {tuple!} font Times-Roman 4.23 { expressing the RGB values for the color (the } font Courier 4.23 {color} font Times-Roman 4.23 { word preceding the tuple is optional). The following figure shows some examples of line cap and dash settings.} p space 35 {As you can see from the example for the line dash settings, the numbers in the block represent, alternatively, the length (in millimeters) of ^(93)on^(94) and ^(93)off^(94) segments. The block is extended as needed, so that } font Courier 4.23 {[1]} font Times-Roman 4.23 { means ^(93)} font Times-Italic 4.23 {1 mm on, 1 mm off, 1 mm on...} font Times-Roman 4.23 {^(94) while } font Courier 4.23 {[1 0.5]} font Times-Roman 4.23 { means ^(93)} font Times-Italic 4.23 {1 mm on, 0.5 mm off, 1 mm on...} font Times-Roman 4.23 {^(94) and so on. The number after the block is used to shift the phase of the dash (i.e. } font Courier 4.23 {0.5} font Times-Roman 4.23 { means ^(93)} font Times-Italic 4.23 {shift the dash 0.5 mm to the left} font Times-Roman 4.23 {^(94)).} ] apply translation 20 63 [ textbox 0 -6 23 6 [ font Courier 4.23 center "butt" ] circle line width 0 11.5 11.5 11.5 clip to [circle 11.5 11.5 11.5] line width 4.6 cap butt 0 0 11.5 11.5 line width 0.46 255.255.255 0 0 11.5 11.5 ] apply translation 50 63 [ textbox 0 -6 23 6 [ font Courier 4.23 center "round" ] circle line width 0 11.5 11.5 11.5 clip to [circle 11.5 11.5 11.5] line width 4.6 cap round 0 0 11.5 11.5 line width 0.46 cap butt 255.255.255 0 0 11.5 11.5 ] apply translation 80 63 [ textbox 0 -6 23 6 [ font Courier 4.23 center "square" ] circle line width 0 11.5 11.5 11.5 clip to [circle 11.5 11.5 11.5] line width 4.6 cap square 0 0 11.5 11.5 line width 0.46 cap butt 255.255.255 0 0 11.5 11.5 ] apply translation 125 65 [ line cap butt width 0.2 dash solid 0 14.85 25 14.85 line dash [1] 0 0 11.55 25 11.55 line dash [1 0.5] 0 0 8.25 25 8.25 line dash [1 0.5] 0.5 0 4.95 25 4.95 line dash [5 2.25 0.5 2.25] 0 0 1.65 25 1.65 textbox 27 0 50 17.5 [ font Courier 3 left align "solid" newline "[1] 0" newline "[1 0.5] 0" newline "[1 0.5] 0.5" newline "[5 2.25 0.5 2.25] 0" ] ] ] [ ; page 5 line 10 281 201 281 line 10 16 201 16 textbox [ left align font Courier-Bold 4.3 "bezier" justify font Times-Roman 4.23 {The } font Courier 4.23 {bezier} font Times-Roman 4.23 { command draws a curve from one point to another. The shape of the curve is controlled by two ^(93)control points^(94). To draw a curve using the current graphic options:} as-is with left margin 10 font Courier 4.23 {bezier } font Times-Italic 4.23 {x1} font Courier 4.23 { } font Times-Italic 4.23 {y1} font Courier 4.23 { } font Times-Italic 4.23 {x2} font Courier 4.23 { } font Times-Italic 4.23 {y2} font Courier 4.23 { } font Times-Italic 4.23 {x3} font Courier 4.23 { } font Times-Italic 4.23 {y3} font Courier 4.23 { } font Times-Italic 4.23 {x4} font Courier 4.23 { } font Times-Italic 4.23 {y4} font Times-Roman 4.23 justify with left margin 0 {where (} font Times-Italic 4.23 {x1} font Times-Roman 4.23 {, } font Times-Italic 4.23 {y1} font Times-Roman 4.23 {) and (} font Times-Italic 4.23 {x4} font Times-Roman 4.23 {, } font Times-Italic 4.23 {y4} font Times-Roman 4.23 {) are the end points, while (} font Times-Italic 4.23 {x2} font Times-Roman 4.23 {, } font Times-Italic 4.23 {y2} font Times-Roman 4.23 {) and (} font Times-Italic 4.23 {x3} font Times-Roman 4.23 {, } font Times-Italic 4.23 {y3} font Times-Roman 4.23 {) are the control points. Please note that a bézier curve (in general) } font Times-Bold 4.23 {does not} font Times-Roman 4.23 { pass thru the control points. You can specify line options in the same way you do for the } font Courier 4.23 {line} font Times-Roman 4.23 { command:} as-is with left margin 10 font Courier 4.23 {bezier } font Times-Italic 4.23 {line-options} font Courier 4.23 { } font Times-Italic 4.23 {x1} font Courier 4.23 { } font Times-Italic 4.23 {y1} font Courier 4.23 { } font Times-Italic 4.23 {x2} font Courier 4.23 { } font Times-Italic 4.23 {y2} font Courier 4.23 { } font Times-Italic 4.23 {x3} font Courier 4.23 { } font Times-Italic 4.23 {y3} font Courier 4.23 { } font Times-Italic 4.23 {x4} font Courier 4.23 { } font Times-Italic 4.23 {y4} font Times-Roman 4.23 justify with left margin 0 {For more informations on bézier curves you can check a book on computer graphics; here I will only show some examples that can be useful to understand how the control points influence the shape of the curve. The actual curve will be rendered in red, and the points will be evidenced by a circle.} ] (example-bezier 15 160 0 0 0 20 50 20 50 0) (example-bezier 80 160 0 0 0 20 50 -20 50 0) (example-bezier 145 160 0 0 25 20 25 -20 50 0) (example-bezier 15 50 0 0 0 40 10 50 50 50) (example-bezier 80 50 0 0 0 50 0 50 50 50) (example-bezier 145 50 30 0 30 50 0 20 50 20) ] [ ; page 6 line 10 281 201 281 line 10 16 201 16 textbox [ left align font Courier-Bold 4.3 "box" justify font Times-Roman 4.23 {The } font Courier 4.23 {box} font Times-Roman 4.23 { command ^(97) as you would expect ^(97) draws a rectangle. The syntax is:} as-is with left margin 10 font Courier 4.23 {box } font Times-Italic 4.23 {x} font Courier 4.23 { } font Times-Italic 4.23 {y} font Courier 4.23 { } font Times-Italic 4.23 {width} font Courier 4.23 { } font Times-Italic 4.23 {height} font Times-Roman 4.23 justify with left margin 0 {where } font Times-Italic 4.23 {x} font Times-Roman 4.23 { and } font Times-Italic 4.23 {y} font Times-Roman 4.23 { are the coordinates of the } font Times-Bold 4.23 {LOWER LEFT} font Times-Roman 4.23 { point of the rectangle. To give options:} as-is with left margin 10 font Courier 4.23 {box } font Times-Italic 4.23 {box-options} font Courier 4.23 { } font Times-Italic 4.23 {x} font Courier 4.23 { } font Times-Italic 4.23 {y} font Courier 4.23 { } font Times-Italic 4.23 {width} font Courier 4.23 { } font Times-Italic 4.23 {height} font Times-Roman 4.23 justify with left margin 0 {Box options are the same as line options, except that they are preceded by the word } font Courier 4.23 {line} font Times-Roman 4.23 { (e.g. you have to write } font Courier 4.23 {line width 1} font Times-Roman 4.23 { instead of just } font Courier 4.23 {width 1} font Times-Roman 4.23 {); the only exception is the color option.} left align font Courier-Bold 4.3 "solid box" justify font Times-Roman 4.23 {I hate being repetitious, so let's go straight to the point.} as-is with left margin 10 font Courier 4.23 {solid box } font Times-Italic 4.23 {x} font Courier 4.23 { } font Times-Italic 4.23 {y} font Courier 4.23 { } font Times-Italic 4.23 {width} font Courier 4.23 { } font Times-Italic 4.23 {height} newline font Courier 4.23 {solid box } font Times-Italic 4.23 {solid-box-options} font Courier 4.23 { } font Times-Italic 4.23 {x} font Courier 4.23 { } font Times-Italic 4.23 {y} font Courier 4.23 { } font Times-Italic 4.23 {width} font Courier 4.23 { } font Times-Italic 4.23 {height} font Times-Roman 4.23 justify with left margin 0 {The difference between the options for a } font Courier 4.23 {solid box} font Times-Roman 4.23 { vs. the ones for a } font Courier 4.23 {box} font Times-Roman 4.23 { is that the options for the edge of the box are preceded by the } font Courier 4.23 {edge} font Times-Roman 4.23 { word (instead of } font Courier 4.23 {line} font Times-Roman 4.23 {). You can specify two colors: one for the edge (preceded by the } font Courier 4.23 {edge} font Times-Roman 4.23 { word) and one for the body of the rectangle. Maybe it^(92)s better with some examples:} p space 40 left align font Courier-Bold 4.3 "circle " font Times-Bold 4.3 "and" font Courier-Bold 4.3 " solid circle" justify font Times-Roman 4.23 {These commands approximate a circle with béziers. The approximation is probably not very good, but should be acceptable for most purposes. The syntax is:} as-is with left margin 10 font Courier 4.23 {circle } font Times-Italic 4.23 {circle-options} font Courier 4.23 { } font Times-Italic 4.23 {x} font Courier 4.23 { } font Times-Italic 4.23 {y} font Courier 4.23 { } font Times-Italic 4.23 {radius} newline font Courier 4.23 {solid circle } font Times-Italic 4.23 {solid-circle-options} font Courier 4.23 { } font Times-Italic 4.23 {x} font Courier 4.23 { } font Times-Italic 4.23 {y} font Courier 4.23 { } font Times-Italic 4.23 {radius} font Times-Roman 4.23 justify with left margin 0 {where } font Times-Italic 4.23 {x} font Times-Roman 4.23 { and } font Times-Italic 4.23 {y} font Times-Roman 4.23 { are the coordinates of the center; with regard to the options, they are exactly the same as for } font Courier 4.23 {box} font Times-Roman 4.23 { and } font Courier 4.23 {solid box} font Times-Roman 4.23 {.} ] (example-box [edge width 0.5 edge 0.0.0 250.240.0] 40.5 140) (example-box [edge width 0 edge 255.0.0 0.255.255] 115.5 140) ] ]