Aa J       $ HH $ d H6$$ff@h   d#I  Footnote TableFootnote**. . / - :;,.!?`O3/aTOCHeading!C'sDylanGwydion Implementors Instantiable accessorsbytecharacterdo(rcurry(checkentrancyeof filestreamfilename forceoutput getinputinputavailablelimited(v*<$daynum01> <$shortmonthname> <$shortyear>w"<$monthnum>/<$daynum>/<$shortyear>x)<$daynum> <$shortmonthname> <$shortyear> y"<$monthnum>/<$daynum>/<$shortyear>z<$monthname> <$daynum>, <$year>dau{"<$monthnum>/<$daynum>/<$shortyear>| <$fullfilename>u-c} <$filename>c?]~ <$paratext[Title]> <$paratext[Heading]>p <$curpagenum> <$marker1> <$marker2> (Continued)+ (Sheet <$tblsheetnum> of <$tblsheetcount>)Pagepage<$pagenum>eprHeading & Page <$paratext> on page<$pagenum>See Heading & Page%See <$paratext> on page<$pagenum>.een Table & Page7Table<$paranumonly>, <$paratext>, on page<$pagenum>teuo e f g h i A j Ak l m Amon A da rna y o>/ $ea hn uye mo a<$  a-c i>c! te % H]>: ag'  1. k8 er# in$ Sh& e o( t)) age< e>  <,  e? Se-  Se. x p/ uen0  7A ay>B! xn C" D# +$ 1% 3& *'  F( Q)  S* 2+ 4,  5- 6. U/ V0 W1  X2 3 4 da5 rna6 y7 o>/8 $ea9 hn: uye7; 2. 9< ;= => @? E@ GA HB IC JD KE erLF inMG ShNH e oOI t)PJ ageRK eTL  `T xn aU bV cW dX eY fZ  g[ h\  i] j^ k_  ]` 3. a xb uc d e f g lh mi nj pk ql rm sn o op tq vr ws yt u zv {w |x er}y in~z Sh{ e o| t)} age~ e  <  e Se  Se x p uen  7 ay> xn            3.              0d    d    H$ H$ { d a Hw <Hw Se d H$ xH$ et   d Hw Hw   d  HH HH   UUd HH  HH  0 UUd  l" l"  $n22 May 97  H H w  n!Running H/F 2# $H $H  x UUd d   H#* H#* HR HR FootnoteHr7 Hr7 HzHz Single LineH'  Footnote #      HR< HR< HH Double Line H  Double Line' H ) H  Single Line, HZ  TableFootnoteϸE]G'E ϸE]G'E ϸEwPϸEwP TableFootnoteod  Hz$H $H..  .TU TU h The Print Library UU`  Designed by the Gwydion Project 2UUn  !Version 1.0 : 22 May 97  DUU` ZUU ~This document describes the %Print library designed by the Gwydion Project at Carnegie Mellon University. This library fUU~provides an interface that outputs an object in Dylan literal syntax if the object can be represented as a Dylan literal, and rUU|otherwise, outputs the object in an implementation-dependent manner. There are essentially two functions, &print and ~UU&printobject. The &print function accepts keyword arguments that form a print request, controlling features such as circular EUUTa{printing, how deep within a data structure to print, how many elements in long sequences to print before using an ellipsis UUHnotation, whether pretty printing is desired, and so on. Users extend &prints ability to print various objects by adding UUthmethods to the &print-object function. The &print function handles most of the overhead to satisfy special print requests, cUUtoutputting any special notations required, and it only calls &print-object when it is necessary to print objects. Users should UU ialways call the &print function to output objects, especially recursively from within &print-object methods to output an imUU@deLobjects components. Users should never call &print-object directly. UU jeThe %Print library exports two modules, %Print and %Pprint. The Gwydion implementation of this library requires the UU@, !Gwydion %Streams library. CU TU `emPrint Functions ncUUh uThe %Print module offers two functions for users to call to print objects, &print and &print-to-string. l9UUh&us#*default-level*[Variable] thEUUh&&$*default-length*[Variable] inQUUh&dl%*default-circle?*[Variable] i]UUh& c%*default-pretty?*[Variable] eiUU uipThese variables provide default values for calls to the &print function. Their values are implementation- iuUU@ dependent. uncUUh&ecprint[Function] fUU`nt Arguments UU`anobject :: deUU`ntstream :: caUU` ;#key level :: false-or() = *default-level*, ry UU`s,7length :: false-or() = *default-level*, tioUU`re*circle? :: = *default-circle?*, UU`ar)pretty? :: = *default-pretty?* cUU`  uValues UU`!' onone wUU`"er Description riUU #inPrints (object to (stream according to the print request formed by the keyed arguments. A 'first call to &print creates le UU#{a printing stream to represent the print request, and recursive calls to &print on this printing stream process the Th,UU#idlkeyed arguments differently (see below). There are inspection functions for querying the print request (see 8UU#Section 'Print Request Inspection Functions). When &print actually prints an object, it calls &print-object. Though the tDUU#caminspection functions for querying the print request allow you to inspect any parameter of the print request, hPUU#&d-~print-object methods should only need to call &print-length. All other aspects of the print request are handled by \UU@#&ulYprint. There is one exception which is described in Section 'Pretty Printing. r~rUU $(~Level controls how deep into a nested data structure to print. The value %#f indicates that there is no limit. The }~UU$&default, &*default-level*, has no effect on recursive calls to &print. Recursive calls to &print may change the value tin|UU$heof &print-level explicitly, but &print always uses a value to ensure the print request formed by the first call to &print U{UU$is never exceeded. For example, if a first call to &print set the level to 5, and while at a depth of 3, a recursive call td  q ! alw $H ees$Hsd---ds shoul  c-UU@$AlTspecified a level of 4, the recursive call would only descend 2 more levels, not 4. heUU %(n Length controls how many elements of a sequence to print before printing ellipsis notation (%...). The value %#f e t(UU% indicates that there is no limit. The &printlength control can be interpreted loosely by some &print-object methods lls4UU% R|to control how many 'elements of any kind of object to print; for example, the default & method might @UU%al}regard &print-length to determine how many slot-name/value pairs to print. The default, &*default-length*, has eLUU%tono effect on recursive calls to &print. Recursive calls to &print may change the value of &print-length explicitly, but XUU@%$5they may only decrease the value, never increase it. nUU &(rCircle? indicates whether printing should check all subcomponent references to make sure the printing process zUU&motdoes not infinitely recurse through a data structure. Circular printing also tags objects that occur more than once eUU&qwhen they are first printed, and later occurrences are printed as a reference to the previously emitted tag. The UU&tedefault, &*default-circle?*, has no effect on recursive calls to &print. If &print-circle? is already %#t, then it remains ampUU&%&#t throughout all recursive calls. If &print-circle? is %#f, then recursive calls to &print can change the value to %#t; lUU& exhowever, when printing exits the dynamic scope of the call that changed the value to %#t, the value reverts back oUU&to %#f. If the original call to &print specifies (circle? as %#f, and dynamically distinct recursive calls turn circular nUU&altprinting on and off, all output generated while circular printing was on shares the same tagging space; that is, if a UU&%rcz#1# is printed twice, once from each of two distinct recursive calls to print, then each %#1# is guaranteed to UU@&ed%signify the same &\== object. eUU '(vPretty? indicates whether printing should attempt to insert line breaks and indentation to 'format objects UU'%according to how programmers tend to find it easier to 'read data. The default, &*default-pretty?*, has no effect on reUU'&recursive calls to &print. If &print-pretty? is already %#t, then it remains %#t throughout all recursive calls. If vaUU'& tprintpretty? is %#f, then recursive calls to &print can change the value to %#t; however, when printing exits the d UU@'ctfdynamic scope of the call that changed the value to %#t, the value reverts back to %#f. ;UUh(&s #print-to-string[Function] t iGUU`) Arguments SUU`*wiobject :: tw_UU`+ve;#key level :: false-or() = *default-level*, kUU`,if7length :: false-or() = *default-level*, ttywUU`-et*circle? :: = *default-circle?*, UU`.io)pretty? :: = *default-pretty?* UU`/ hValues mmeUU`0 eresult :: . UU`1de Description UU 2onsCalls &print to produce output according to the print request formed by the keyed arguments and returns the emaUU@2ououtput as a string. llUUh3&(print-object[Generic Function] tUU`4 Arguments UU`5e object :: howUU`6g stream :: U UU`7scValues e cUU`8'henone t"UU`9va Description ck.UU :;Users extend &prints ability to print various objects by adding methods to the &print-object function. When &print :UU@: lqactually prints an object, it calls &print-object. Users should never call &print-object directly. )U[TU `;ty#Print Request Inspection Functions lea}pUU`<leqThe %Print module exports the following functions for querying the print request and current print state: d 1 " $H tt $H r//ed argum ns/UUh=&ou print-length[Function] UU`>t- Arguments UU`? tstream :: Ar*UU`@Values ob6UU`Aow$length :: false-or() m>BUU`B7 Description cNUU`Che]Returns the current value for the print request. See the &print function for details. aiUUhD&riprint-level[Function] theuUU`E Arguments UU`F stream :: acUU`GbjValues allUU`H#level :: false-or() -obUU`I Description ;UU Jt ~Returns the current value for the print request. See the &print function for details. Users should have little use for UU@Jpr~this function because &print takes care to call &print-object only when the print level has not been exhausted. UUhK&Hprint-depth[Function] UU`L Arguments UU`M=stream :: hUU`NValues >UU`O#depth :: false-or() ArUU`P Description 6 UU QlexReturns the current depth to which printing has descended into the object on which &print was originally called. r ,UUQ SUsers should have little use for this function because &print takes care to call &print-object only when the print 8UU@Q level has not been exhausted. SUUhR&es!print-circle?[Function] f_UU`Seg Arguments kUU`TDestream :: UwUU`UthValues vaUU`Vrecircle? :: tUU`Wde Description hoUU Xe |Returns whether circular printing is on. Users should have little use for this function because &print takes care to l UUXstldetect circularities, tag multiply referenced objects, and emit tags rather than descending into objects to =UU@Xm>repeatedly print them. VaUUhY&!print-pretty?[Function] iUU`Z Arguments UU`[ stream :: urnUU`\h Values priUU`]d pretty? :: h UU`^ o Description edUU`_Q}Returns whether pretty printing is on. Users should have little use for this function (see Section 'Pretty Printing). e,U7TU h`Pretty Printing t LUU(aSThe %Print library implements most of the pretty printing technology described by Richard C. Waters in 'Common Lisp The XUUa'esxLanguage, second edition. The interface is slightly different because Mindy does not have macros. This section only ci~dUUa osummarizes the pretty printing functionality to provide a quick reference for users of the %Print library, and readers should }pUU@ad 2refer to the Common Lisp manual for more details. |UU bWhen writing &print-object methods, users can ignore whether pretty printing is in effect. If you write your &print-object {UUb: method using pretty printing functions, then when pretty printing is in effect, the output will be pretty printed. When pretty d nis # tlus$H in$H//nting t a/UUbbrxprinting is not in effect, your method will produce output as though you had not written it to use pretty printing. All UUb&printobject methods that are written to do pretty printing must call the pretty printing functions within the dynamic scope oUU@bre`of a call to &pprint-logical-block; otherwise, the pretty printing functions are no-ops. d 4UU`cp;The %Pprint module exports the following variables: taiOUUhd&b)*default-line-length*[Variable] h[UU eoruThis is the line length used by the pretty printer to determine how much output will fit on a single line. The value tgUU@ens5must be an &, and it defaults to 80. lUUhf&d.'*print-miser-width*[Variable] UU gis}This variable controls 'miser mode. Whenever a logical block (see &pprint-logical-block) begins in a column of UUgloutput that is greater than %*default-line-length* - *print-miser-width*, then pretty printing is in nUUgsemiser mode. The value must be an integer or %#f (the default). %#f indicates that the pretty printer should never pUU@gwienter miser mode. UUhh&b(pprint-logical-block[Function] kUU`ie Arguments UU`jnostream :: cUU`knt'#key prefix :: false-or() es:UU`ld+per-line-prefix :: false-or() ] h UU`morbody :: ngtUU`n"suffix :: false-or() !UU`ong+column :: limited(, min: 0) t b-UU`pValues t d9UU`q'none EUU`rnt Description QUU slThis function groups printing into a logical block. The logical block provides boundaries for new levels of bl]UUs aindentation, affects %#"linear" newlines, and so on. (Prefix is a string to print at the beginning of the logical ntiUUsqblock. The blocks indentation is automatically set to be one character position greater than the column in which ruUUs(d prefix ends. Alternatively, (per-line-prefix is a string to print on every line of the logical block. This function signals umeUUsjan error if it is called with both (prefix and (per-line-prefix supplied as non-%#f. (Suffix is a string to print at the end )UUsm{of the logical block. (Column advises the pretty printer as to the current column of the output stream (defaults to fixUUs0)szero). The (column argument may be ignored entirely by some methods, and it may be ignored in some cases by UU@souFmethods that can better determine the streams current output column. UU t(bl|Body must be a function that can take one argument, and this argument is a stream. The (body function should use egUUtcaithe stream argument passed to it; the (body function should not close over the stream argument to rUUt&umpprintlogicalblock. &Pprint-logical-block wraps (stream with a pretty printing stream when (stream is any other locUU@tigkind of stream. If (stream is already a pretty printing stream, then the (body function is called on (stream. . UU ua vAll &printobject methods that are written to do pretty printing must call the other pretty printing functions UU@u oywithin the dynamic scope of a call to &pprint-logical-block; otherwise, the pretty printing functions are no-ops. eUUhv&ay"pprint-newline[Function] (UU`wme Arguments 4UU`xe ;kind :: one-of(#"fill", #"linear", #"miser", #"mandatory") y@UU`yiostream :: rguLUU`zumValues strXUU`{'none idUU`| Description ca~pUU }enhThis function announces a conditional newline to the pretty printer. The pretty printer emits a newline um}|UU}lodepending on the (kind and the state of the pretty printers current line buffer. The (kind argument has roughly the U|UU@}stfollowing meanings:  d h $ leon$H l$H_ho--o pretty -UU`~%in#"fill" s UU` oREmit a newline if the current 'section of output does not fit on one line. #UU`%un #"linear" /UU pEmit a newline if any %#"linear" newline in the current 'section needs to be emitted. That is, if "f;UU"mma current 'section of output cannot fit on one line, and any one of the %#"linear" newlines in GUU@d5the section needs to be emitted, then emit them all. hXUU`%ce #"miser" odUU  pwEmit a newline as if it were a %#"linear" newline, but only when 'miser 'mode is in effect. Miser thepUU@cuSstyle is in effect when a logical block starts past a particular column of output. foUU`% #"mandatory" UU iEmit a newline always. Establish that any containing 'sections cannot be printed on a single line UU@Xso that %#"linear" and %#"miser" newlines will be emitted as appropriate. UUh&ne!pprint-indent[Function] oUU` o Arguments UU`un,relative-to :: one-of(#"block", #"current") neUU`arn :: rUU`stream :: ThUU`Values "mUU`'ctnone UU`it Description anUU %This function specifies the indentation to use within the current logical block. When (relative-to is %#"block", then o UU& ppprint-indent sets the indentation to the column of the first character of the logical block plus (n. When (relative-U,UU@( itto is %#"current", then &pprint-indent sets the indentation to the current column plus (n. GUUh& apprint-tab[Function] SUU`s Arguments _UU`onKkind :: one-of(#"line", #"line-relative", #"section", #"section-relative") er"kUU` bcolnum :: wUU`necolinc :: UU`stream :: UU`reValues ::UU`'#"none "UU` Description xeUU`This function announces a tab to the pretty printer. (Colnum and (colinc have meaning based on the value of (kind: UU`% f#"line" ecUU iovTab to output column (colnum. If the output is already at or beyond (colnum, then add (colinc to UU@(tsecolnum until printing can continue at a column beyond the end of the output already on the line. aUU`%#"line-relative" UU , pOutput (colnum spaces. Then output enough spaces to tab to a column that is a multiple of (colinc pp UU@ti from the beginning of the line. s UU`%on #"section" -of'UU eldThis is similar to %#"line", but column counting is relative to the beginning of the current 3UU@': 3section rather than the beginning of the line. am>DUU`%#"section-relative" PUU  "eThis is similar to %#"line-relative", but column counting is relative to the beginning of the r~\UU@?current 'section rather than the beginning of the line. H$ \ H$ l eis Hw ] dHw l fng H$ ^ t oH$ l gtivHw _  Hw l ha mHH` tiHHl iectHHa atoHHl j l" b eiol" l kH c  "H l lnti$Hd $Hl mng $He  $Hl n$Hf  $Hl n$Hg  $Hl n$Hh  $Hl n$Hi  $Hl n - % d Leftd Rightd  Referenced ! d! " ld" ! # d# " $ d$ # )$0f QI %  1Heading 1Heading Rule. FirstBody. $$f SE I *$  1Step Step Number S:.\tStep.  f  I % 2Heading .. . ff2ff233@  I %H  t   h h Argument. fe @  I % H     h  Body. 33+33$f B I %ul33+n Bullet Bullet SymbolB:\t. ]K$f B I % ]m Bullet2. Bullet SymbolB:\t. $$$f  I *CBullet. $$$f  I *CStep. ff2ff233@  I %H    h  Description. dd33@  I %H    hl   u Description2. \ff233@  I %H  u t mh:  DItem. KK@  I %$H    h  DItem2. 33 @  I %33 Endnote.\t. 33 @  I %33 Endnote1.\t. ff2K33@  I % He i  \  h  Extra Key Arg. ff2ff2 @  I %HI    h  Function Body. @ P I %DI Function HeadDItem. HHH f TI % HeadingBody. HHHf D I %  HeadingSub. \t$$f S I *$  Step Step Number S:.\t. @  I H    h  Verbatim. f  I * CellHeading. f  I *CellBody. f T I *  TableTitleT:Table : . @  I %H    h  Body. @  I *  Header. @  I *  Footer. f  I %Body. HHH f TI % HeadingBody. HHHf D I %  HeadingSub. $0f QI %  1Heading 1Heading Rule. FirstBody. @  I % Function Head. @  I % Function Head. ff2ff2 @  I %H    h  Function Body. ff233@  I %H   S h  DItem. ff2ff233@  I %eaHl   i  h  Argument. ff2K33@  I %H    h  Extra Key Arg. @ P I % Function HeadDItem. KK@  I %H    h  DItem2. dd33@  I %H    h  Description2. 1ea VzI * I *  I %Argument I   Bullet Symbol@I %  I % @I %  I Computer I %Emphasis  I EquationVariablesK !I   Step Number "I  Subscript #I  Superscript $I % Variable _%I Computer @&I % Variable 'I %Emphasis (I %Argument    I  I  I I ThinI  MediumboI DoubleI Thick@I  % Very Thin=M= > I I I H H H sH H Format A ? I I I H H H H H Format BK Comment-=0 -.mperO/0I Y Q d I Black!TJ phWhiteddAK %RedddL Greendd M BluedN CyanI dO Magentad P I YellowW.Palatino.R.700 Palatino-Bold W.Times.R.400 Times-RomanW.Palatino.R.400Palatino-RomanW.Courier.R.400Courier W.Times.R.700 Times-BoldW.Palatino.I.400Palatino-ItalicW.Courier.R.700 Courier-BoldW.Helvetica.R.700 Helvetica-Bold7Courier Helvetica%Palatino*Times Regular Regular BoldItalicRegular3v:sPEI6`HsB /J^ Ȋ `Y\ZZ3U?PV3PS3=b[Letн2 Z5U3yUߧ]3]00?|XP8x") 5~Oξ^-V}pO#ᖾ;lM2G$УjBN_\`