home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / misc / volume37 / lout / part28 < prev    next >
Encoding:
Text File  |  1993-06-19  |  82.8 KB  |  2,227 lines

  1. Newsgroups: comp.sources.misc
  2. From: jeff@joyce.cs.su.oz.au (Jeff Kingston)
  3. Subject: v37i126:  lout - Lout document formatting system, v2, Part28/30
  4. Message-ID: <1993Jun2.030626.29172@sparky.imd.sterling.com>
  5. X-Md4-Signature: 953ff4cdf7f443cf67c1571d2ea7e31b
  6. Sender: kent@sparky.imd.sterling.com (Kent Landfield)
  7. Organization: Sterling Software
  8. Date: Wed, 2 Jun 1993 03:06:26 GMT
  9. Approved: kent@sparky.imd.sterling.com
  10.  
  11. Submitted-by: jeff@joyce.cs.su.oz.au (Jeff Kingston)
  12. Posting-number: Volume 37, Issue 126
  13. Archive-name: lout/part28
  14. Environment: UNIX
  15.  
  16. #! /bin/sh
  17. # This is a shell archive.  Remove anything before this line, then feed it
  18. # into a shell via "sh file" or similar.  To overwrite existing files,
  19. # type "sh file -c".
  20. # Contents:  lout/doc/tr.begin/s04 lout/doc/tr.begin/s13
  21. #   lout/doc/tr.begin/s15 lout/doc/tr.impl/s2.1 lout/doc/tr.impl/s2.2
  22. #   lout/doc/tr.impl/s6.1 lout/doc/tr.impl/s7.0
  23. #   lout/doc/tr.lout/ch1.03 lout/doc/tr.lout/ch2.04
  24. #   lout/doc/tr.lout/ch3.03 lout/doc/tr.lout/ch3.04
  25. #   lout/doc/tr.over/s1 lout/doc/tr.over/s3 lout/doc/tr.over/setup
  26. #   lout/doc/tr.tab/s2 lout/doc/tr.tab/s4 lout/doc/tr.tab/s7
  27. #   lout/include/doc lout/include/pas lout/include/tab_prepend
  28. #   lout/man/lout.1
  29. # Wrapped by kent@sparky on Sun May 30 19:44:02 1993
  30. PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin ; export PATH
  31. echo If this archive is complete, you will see the following message:
  32. echo '          "shar: End of archive 28 (of 30)."'
  33. if test -f 'lout/doc/tr.begin/s04' -a "${1}" != "-c" ; then 
  34.   echo shar: Will not clobber existing file \"'lout/doc/tr.begin/s04'\"
  35. else
  36.   echo shar: Extracting \"'lout/doc/tr.begin/s04'\" \(2847 characters\)
  37.   sed "s/^X//" >'lout/doc/tr.begin/s04' <<'END_OF_FILE'
  38. X@Section
  39. X   @Tag { fonts }
  40. X   @Title { Fonts and unusual characters }
  41. X@Begin
  42. X@PP
  43. XThis section explains how to gain access to the many different fonts and
  44. Xunusual characters available with Lout.
  45. X@PP
  46. XWe are already familiar with the @Code "@I" symbol, which changes the font
  47. Xof the following thing to {@I Italic}.  Similarly, there is @Code "@B" for
  48. X{@B Bold}, @Code "@S" for @S SMALL {@S CAPITALS},
  49. X@FootNote {
  50. XOwing to problems behind the scenes, if several words are grouped within one
  51. X@Code "@S" symbol they will be kept together on one line, so to get small
  52. Xcapitals over several lines it is necessary to apply @Code "@S" to each
  53. Xword individually.  This does not happen with other font symbols.
  54. X}
  55. Xand @Code "@R" for Roman.
  56. X@PP
  57. XThe @Code "@Font" symbol can be used to get many other fonts (a local
  58. Xexpert should be able to supply the full list):
  59. X@ID @Code {
  60. X"{ Helvetica Slope } @Font Hello"
  61. X"{ Courier Base } @Font { Hello there }"
  62. X}
  63. Xhas result
  64. X@ID {
  65. X{ Helvetica Slope } @Font Hello
  66. X{ Courier Base } @Font { Hello there }
  67. X}
  68. XEach font has a family name, such as Times, Helvetica, or Courier, and a
  69. Xface name, generally Base, Slope, or Bold.  The fonts that were
  70. Xcalled Roman, Italic, and Bold above are Times Base, Times Slope, and
  71. XTimes Bold.  When changing families the new family and a face must be
  72. Xspecified, but when changing face within a family just the face name is
  73. Xenough.
  74. X@PP
  75. XThe @Code "@Font" symbol also changes sizes:
  76. X@ID @Code {
  77. X"+5p @Font Hello"
  78. X"-3p @Font Hello"
  79. X"12p @Font Hello"
  80. X}
  81. Xhas result
  82. X@ID {
  83. X+5p @Font Hello  -3p @Font Hello  12p @Font Hello
  84. X}
  85. Xwith the first Hello 5 points larger than it would have been otherwise,
  86. Xthe second 3 points smaller, and the third in a 12 point font.  There are
  87. X72 points to one inch, and most documents are set in 10 or 12 point.
  88. X@PP
  89. XThere are symbols for some unusual characters that do not appear
  90. Xon keyboards:
  91. X@ID {
  92. X     @Code "--"        |0.35i    --       
  93. X/1vx @Code "---"    |    ---       
  94. X/1vx @Code "@Bullet"    |    @Bullet       
  95. X/1vx @Code "@Star"    |    @Star       
  96. X/1vx @Code "@ParSym"    |    @ParSym       
  97. X/1vx @Code "@SectSym"    |    @SectSym   
  98. X/1vx @Code "@Dagger"    |    @Dagger       
  99. X/1vx @Code "@DaggerDbl"    |    @DaggerDbl 
  100. X/1vx @Code "@CDot"    |    @CDot       
  101. X/1vx @Code "@Sterling"    |    @Sterling  
  102. X/1vx @Code "@Yen"    |    @Yen
  103. X/1vx @Code "@Florin"    |    @Florin
  104. X/1vx @Code "@Degree"    |    @Degree
  105. X/1vx @Code "@Minute"    |    @Minute
  106. X/1vx @Code "@Second"    |    @Second
  107. X/1vx @Code "@Lozenge"    |    @Lozenge
  108. X/1vx @Code "@Multiply"  |    @Multiply
  109. X/1vx @Code "@Divide"    |    @Divide
  110. X/1vx @Code "@CopyRight" |    @CopyRight
  111. X/1vx @Code "@Register"  |    @Register
  112. X/1vx @Code "@TradeMark" |    @TradeMark
  113. X/1vx @Code "@Date"    |    @Date
  114. X}
  115. XThese may be used anywhere.  The Adobe Systems Symbol font has many more such
  116. Xcharacters; the Eq equation formatting package [{@Ref kingston92eq}] has
  117. Xthe complete list.  For example, @Code "@Eq { heart }" will give @Eq { heart }.
  118. X@End @Section
  119. END_OF_FILE
  120.   if test 2847 -ne `wc -c <'lout/doc/tr.begin/s04'`; then
  121.     echo shar: \"'lout/doc/tr.begin/s04'\" unpacked with wrong size!
  122.   fi
  123.   # end of 'lout/doc/tr.begin/s04'
  124. fi
  125. if test -f 'lout/doc/tr.begin/s13' -a "${1}" != "-c" ; then 
  126.   echo shar: Will not clobber existing file \"'lout/doc/tr.begin/s13'\"
  127. else
  128.   echo shar: Extracting \"'lout/doc/tr.begin/s13'\" \(2988 characters\)
  129.   sed "s/^X//" >'lout/doc/tr.begin/s13' <<'END_OF_FILE'
  130. X@Section
  131. X   @Tag { reportlayout }
  132. X   @Title { Technical reports }
  133. X@Begin
  134. X@PP
  135. XThis section describes how to use the DocumentLayout package to produce
  136. Xtechnical reports like the present document.  Type @Code "-ireport" in
  137. Xthe Unix command instead of @Code "-idoc" to use the package in this
  138. Xway.  We present only the differences here; everything else works as
  139. Xbefore.
  140. X@PP
  141. XA technical report begins with a @Code "@Report" symbol analogous to the
  142. X@Code "@Document" symbol described in the previous section.  Here it is,
  143. Xwith its nine options and their default values:
  144. X@ID @Code {
  145. X"@Report"
  146. X"    @Title {}"
  147. X"    @Author {}"
  148. X"    @Institution {}"
  149. X"    @DateLine { @Date }"
  150. X"    @InitialFont { Times Base 12p }"
  151. X"    @InitialBreak { adjust 1.2fx }"
  152. X"    @Hyphenate { Yes }"
  153. X"    @PageNumbers { Yes }"
  154. X"    @Columns { Single }"
  155. X"//"
  156. X}
  157. XThe {@Code "@Title"}, {@Code "@Author"}, and {@Code "@Institution"} options
  158. Xwill be printed on the cover sheet and on the first page; they are formatted
  159. Xusing {@Code "clines @Break"} (see page {@PageOf clines}).  Multiple authors
  160. Xshould be given on separate lines within the @Code "@Author"
  161. Xoption.  {@Code "@DateLine"} appears below the abstract on the cover sheet,
  162. Xand its default value is the current date as shown.  {@Code "@InitialFont"},
  163. X{@Code "@InitialBreak"}, {@Code "@Hyphenate"}, {@Code "@PageNumbers"} and
  164. X{@Code "@Columns"} are as described in the last section, except that there
  165. Xis nothing analogous to @Code "@Text" and {@Code "@ColText"}:  if
  166. X@Code "@Columns" is set to {@Code Double}, the entire document after the
  167. Xtitle will be set in two columns.  There is no @Code "@FirstPageNumber"
  168. Xoption.  As for {@Code "@Document"}, the symbol @Code "//" must follow
  169. Xafter, and disaster will ensue if it is omitted.
  170. X@PP
  171. XIf the technical report has an abstract, it comes next:
  172. X@ID @Code {
  173. X"@Abstract @Begin"
  174. X"..."
  175. X"..."
  176. X"@End @Abstract"
  177. X}
  178. XThe cover sheet of the present report shows how this will
  179. Xappear.  @Code "@Abstract" has a @Code "@Title" option like the ones
  180. Xbelow; its default value is {@I ABSTRACT}.
  181. X@PP
  182. XNext come the sections of the report, each enclosed in a @Code
  183. X"@Section" symbol:
  184. X@ID @Code {
  185. X"@Section"
  186. X"    @Title { Introduction }"
  187. X"@Begin"
  188. X"@PP"
  189. X"..."
  190. X"..."
  191. X"@End @Section"
  192. X}
  193. XNo @Code "@BeginSections" or @Code "@EndSections" symbols are needed.
  194. X The sections may contain subsections, preceded as usual by
  195. X@Code "@BeginSubSections" and followed by {@Code "@EndSubSections"}.
  196. X After the sections there is opportunity for a sequence of appendices,
  197. Xeach of the form
  198. X@ID @Code {
  199. X"@Appendix"
  200. X"    @Title { ... }"
  201. X"@Begin"
  202. X"@PP"
  203. X"..."
  204. X"..."
  205. X"@End @Appendix"
  206. X}
  207. Xbut these are quite optional.  No @Code "@BeginAppendices" and
  208. X@Code "@EndAppendices" symbols are needed.  An appendix may contain
  209. Xsub-appendices via the usual symbols {@Code "@BeginSubAppendices"},
  210. X{@Code "@SubAppendix"}, and {@Code "@BeginSubAppendices"}.  This ends
  211. Xthe input; there is no {@Code "@End @Text"}, and any reference section
  212. Xwill be added automatically.
  213. X@End @Section
  214. END_OF_FILE
  215.   if test 2988 -ne `wc -c <'lout/doc/tr.begin/s13'`; then
  216.     echo shar: \"'lout/doc/tr.begin/s13'\" unpacked with wrong size!
  217.   fi
  218.   # end of 'lout/doc/tr.begin/s13'
  219. fi
  220. if test -f 'lout/doc/tr.begin/s15' -a "${1}" != "-c" ; then 
  221.   echo shar: Will not clobber existing file \"'lout/doc/tr.begin/s15'\"
  222. else
  223.   echo shar: Extracting \"'lout/doc/tr.begin/s15'\" \(3682 characters\)
  224.   sed "s/^X//" >'lout/doc/tr.begin/s15' <<'END_OF_FILE'
  225. X@Section
  226. X   @Tag { big.changes }
  227. X   @Title { Making more radical changes }
  228. X@Begin
  229. X@PP
  230. XThe DocumentLayout package makes a large number
  231. Xof decisions, about how large the pages will be, which fonts will
  232. Xordinarily be used, and so on.  The more complex decisions, such as the
  233. Xappearance of tables of contents in books, can only be changed by
  234. Xmodifying the packages,  but many of the simpler decisions can be changed
  235. Xquite easily by setting options in the setup file.
  236. X@PP
  237. XThe first step is to obtain a private copy of the setup file.  A local
  238. Xexpert will know where these files are kept; for example, in directory
  239. X{ @Code "/usr/lout/include"}.  Suppose the @Code report setup file is
  240. Xcopied into a file called { @Code myrep }; then typing
  241. X@ID @Code "lout myrep myfile"
  242. Xinstead of
  243. X@ID @Code "lout -ireport myfile"
  244. Xruns Lout with the private copy of the setup file, {@Code "myrep"}.
  245. X@PP
  246. XExactly what the setup file contains will depend upon the local
  247. Xsituation, but it will be something like this:
  248. X@ID @Code {
  249. X"# Setup file for reports."
  250. X"# J. H. Kingston, July 1991"
  251. X""
  252. X"@SysInclude { ft }"
  253. X"@SysInclude { dl }"
  254. X"# @SysInclude { eq }"
  255. X"# @SysInclude { pas }"
  256. X"# @SysInclude { fig }"
  257. X"# @SysInclude { tab }"
  258. X""
  259. X"@Use { @DocumentLayout"
  260. X"  # @InitialFont { Times Base 12p }"
  261. X"  # @InitialBreak { adjust 1.2fx }"
  262. X"  # @Hyphenate { Yes }"
  263. X"  # @PageNumbers { Yes }"
  264. X"  # @Columns { Single }"
  265. X"  # @HeadingFont { Bold }"
  266. X"  # @ParaIndent { 2.0f }"
  267. X"  # @PageTop { |0.5rt - @PageNum - }"
  268. X"  # @PageFoot { @Null }"
  269. X"}"
  270. X}
  271. XWhenever Lout encounters a @Code "#" character not enclosed in quotes,
  272. Xit ignores it and everything following it up to the end of the line.  The
  273. Xfirst two lines of the setup file, then, are comments for the human
  274. Xreader.  After them come lines which cause Lout to read the file
  275. X@Code "ft" of font definitions and the file @Code "dl" which contains
  276. Xthe definition of the DocumentLayout package.
  277. X@PP
  278. XThe next four lines are comments and will be ignored, but if the initial
  279. X@Code "#" is deleted they cause Lout to read the definitions of the Eq
  280. Xequation formatting package and the Pas Pascal program formatting package
  281. X[{@Ref kingston92eq}], the Fig diagram drawing package [{@Ref kingston92fig}],
  282. Xand the Tab table formatting package [{@Ref kingston92tab}].
  283. X@PP
  284. XNext comes a @Code "@DocumentLayout" symbol within a @Code "@Use"
  285. Xclause.  It is this symbol whose options may
  286. Xbe changed so as to affect the overall layout.  These options are listed
  287. Xas comments on the following lines, together with the default value
  288. Xof each.  To change an option, delete the @Code "#" and change the
  289. Xvalue.  For example, the normal paragraph indent produced by @Code "@PP" is
  290. X@Code "2.0f" (twice the current font size).  To change it, say to
  291. X{@Code "3.0f"}, change the line to
  292. X@ID @Code "@ParaIndent { 3.0f }"
  293. XThe display indent option (not shown here) should probably be changed as well.
  294. X@PP
  295. XThe first five options have the same name as five of the @Code "@Document"
  296. Xsymbol's options, and they determine the default value of those
  297. Xoptions.  The @Code "@PageTop" and @Code "@PageFoot" options determine
  298. Xthe appearance of the page header and footer lines (where the page
  299. Xnumbers appear), and are best left to experts;  but, for example,
  300. X@ID @Code "@PageTop { |1rt  @PageNum }"
  301. Xwill make the page number appear at the top right of each page, without
  302. Xthe @Code "-" characters.
  303. X@PP
  304. XThose who wish to make more radical changes will have to copy the @Code dl
  305. Xfile and change the definition of the DocumentLayout package.  This requires
  306. Xknowledge of the principles of Lout, and the primitive features from which
  307. Xothers are built, as described in the Lout user manual [{@Ref kingston92}].
  308. X@End @Section
  309. END_OF_FILE
  310.   if test 3682 -ne `wc -c <'lout/doc/tr.begin/s15'`; then
  311.     echo shar: \"'lout/doc/tr.begin/s15'\" unpacked with wrong size!
  312.   fi
  313.   # end of 'lout/doc/tr.begin/s15'
  314. fi
  315. if test -f 'lout/doc/tr.impl/s2.1' -a "${1}" != "-c" ; then 
  316.   echo shar: Will not clobber existing file \"'lout/doc/tr.impl/s2.1'\"
  317. else
  318.   echo shar: Extracting \"'lout/doc/tr.impl/s2.1'\" \(4030 characters\)
  319.   sed "s/^X//" >'lout/doc/tr.impl/s2.1' <<'END_OF_FILE'
  320. X@SubSection
  321. X    @Tag { genesis }
  322. X    @Title { The genesis of the object abstraction }
  323. X@Begin
  324. X@PP
  325. XWhen one examines previous document formatting systems [4]
  326. Xlooking for ideas for abstractions, as the author did in 1984, the Eqn
  327. Xformatting language [5] stands out like a beacon.  In
  328. XEqn, a mathematical formula such as 
  329. X@ID @Eq { { x sup 2 + 1 } over 4 }
  330. Xis produced by typing
  331. X@ID @Code "{ x sup 2 + 1 } over 4"
  332. Xin the input file; @Code sup and @Code over are binary operators, and
  333. Xbraces are used for grouping.  This is document formatting at a very
  334. Xhigh level, close to the language of mathematics itself, with all
  335. Xreference to font changes and spacing suppressed.
  336. X@PP
  337. XEqn provides a single data type (let us call it the {@I expression}),
  338. Xbuilt up recursively in context-free style:  where one expression may appear,
  339. Xany expression may appear.  This approach is common in algebra and
  340. Xprogramming languages, where its simplicity and expressiveness have long
  341. Xbeen appreciated; but Eqn was the first language to demonstrate its
  342. Xutility in document formatting.
  343. X@PP
  344. XEach expression is treated by Eqn as a rectangle with a
  345. X{@I {horizontal axis}}, used for alignment with adjacent expressions:
  346. X@ID @ShowMarks marks { horizontal } @Eq { { x sup 2 + 1 } over 4 }
  347. XThe size and rendering of the expression on the printed page are
  348. Xknown only to the implementation, never explicitly calculated or
  349. Xaccessed by the user.  This prohibition is
  350. Xcrucial to the maintenance of the context-free property in practice.  In
  351. XLout, for example, equations, figures, tables, and arbitrary objects may
  352. Xbe mixed together freely.  This would be impossible if size information
  353. Xwas hidden from the implementation in user calculations.
  354. X@PP
  355. XThe object abstraction of Lout is a direct descendant of the Eqn
  356. Xexpression.  It employs the same context-free recursive style of construction,
  357. Xand each object is treated by Lout as a rectangle:
  358. X@ID @Fig {
  359. X@ShowMarks { 1c @Wide ^| 2c @Wide 0.45c @High ^/ 0.35c @High }
  360. X}
  361. XThe horizontal axis, called a @I { row mark } in Lout, has a
  362. Xvertical analogue called a {@I {column mark}}, creating a valuable
  363. Xsymmetry between horizontal and vertical.  Multiple column and row marks
  364. Xare permitted:
  365. X@ID @Fig {
  366. XA:: @Box margin { 0c } paint { grey } { 1.2c @Wide 0.8c @High }
  367. X|1c
  368. XB:: @Box margin { 0c } paint { grey } { 1c @Wide 0.8c @High }
  369. X/0.5c
  370. XC:: @Box margin { 0c } paint { grey } { 0.7c @Wide 0.8c @High }
  371. X|1c
  372. XD:: @Box margin { 0c } paint { grey } { 1.3c @Wide 0.8c @High }
  373. X// @Line linestyle { dashed }
  374. X     from { A@W -- { 0.3 cm 0 } }
  375. X     to   { B@W ++ { 1.6 cm 0 } }
  376. X// @Line linestyle { dashed }
  377. X     from { C@W -- { 0.3 cm 0 } }
  378. X     to   { D@W ++ { 1.6 cm 0 } }
  379. X// @Line linestyle { dashed }
  380. X     from { A@NW ++ { 0 0.3 cm } }
  381. X     to   { C@SW -- { 0 0.3 cm } }
  382. X// @Line linestyle { dashed }
  383. X     from { B@NW ++ { 0.3 cm 0.3 cm } }
  384. X     to   { D@SW ++ { 0.3 cm -0.3 cm } }
  385. X}
  386. Xso that objects are able to represent tables.
  387. X@PP
  388. XThis abstraction has some limitations, the most obvious being the restriction
  389. Xof size calculations to rectangular bounding boxes.  Non-rectangular and
  390. Xdisconnected shapes arise naturally in figures and in the characters of
  391. Xfonts; the extension to them is conceptually straightforward and might
  392. Xhelp to explain some fine points of layout such as kerning.  However,
  393. Xthere are implementation and language design problems, particularly
  394. Xwhen filling non-rectangular shapes with text, and so the author chose
  395. Xto keep to Eqn's rectangles.
  396. X@PP
  397. XA more fundamental limitation of the object abstraction arises from the
  398. Xinability of recursive data types to describe cross-linked structures,
  399. Xwhich seem to require some means of naming the multiply referenced
  400. Xparts.  Lout is obliged to introduce additional abstractions to cope
  401. Xwith cross linking:  galleys for inserting text into pages
  402. X(Section {@NumberOf galleys}), cross references (Section {@NumberOf cross}),
  403. Xand labelled points in figure drawing [6].  An
  404. Xabstraction closer to hypertext might form a more unified basis for
  405. Xthese features.
  406. X@End @SubSection
  407. END_OF_FILE
  408.   if test 4030 -ne `wc -c <'lout/doc/tr.impl/s2.1'`; then
  409.     echo shar: \"'lout/doc/tr.impl/s2.1'\" unpacked with wrong size!
  410.   fi
  411.   # end of 'lout/doc/tr.impl/s2.1'
  412. fi
  413. if test -f 'lout/doc/tr.impl/s2.2' -a "${1}" != "-c" ; then 
  414.   echo shar: Will not clobber existing file \"'lout/doc/tr.impl/s2.2'\"
  415. else
  416.   echo shar: Extracting \"'lout/doc/tr.impl/s2.2'\" \(3349 characters\)
  417.   sed "s/^X//" >'lout/doc/tr.impl/s2.2' <<'END_OF_FILE'
  418. X@SubSection
  419. X    @Tag { lexical }
  420. X    @Title { Grammatical and lexical structure }
  421. X@Begin
  422. X@PP
  423. XIf objects are to be constructed like mathematical expressions, the
  424. Xnatural notation is a functional language based on operators, as in
  425. XEqn.  The grammar of Lout objects is accordingly
  426. X@ID @Eq {
  427. Xmatrix {
  428. Xobject
  429. Xnextcol
  430. X--> above --> above --> above --> above --> above --> above --> above -->
  431. Xnextcol
  432. X{ object ``` infixop ``` object }
  433. Xlabove gap { "1fx" }
  434. X{ prefixop ``` object }
  435. Xlabove gap { "1fx" }
  436. X{ object ``` postfixop }
  437. Xlabove gap { "1fx" }
  438. X{ noparsop }
  439. Xlabove gap { "1fx" }
  440. X{ literalword }
  441. Xlabove gap { "1fx" }
  442. X{ @Code "{" ``` object ``` @Code "}" }
  443. Xlabove gap { "1fx" }
  444. X{ object ``` object }
  445. Xlabove gap { "1fx" }
  446. X}
  447. X}
  448. Xwhere {@Eq {infixop}}, {@Eq {prefixop}}, {@Eq {postfixop}}, and
  449. X{@Eq {noparsop}} are identifiers naming operators which take 0, 1
  450. Xor 2 parameters, as shown, and @Eq {literalword} is a sequence of
  451. Xnon-space characters, or an arbitrary sequence of characters
  452. Xenclosed in double quotes.  Ambiguities are resolved by precedence
  453. Xand associativity.
  454. X@PP
  455. XThe last production allows a meaning for expressions such as
  456. X{@Code "{}"}, in which an object is missing.  The value of this
  457. X@I {empty object} is a rectangle of size 0 by 0, with one column
  458. Xmark and one row mark, that prints as nothing.
  459. X@PP
  460. XThe second-last production generates sequences of arbitrary objects
  461. Xseparated by white space, called {@I paragraphs}.  Ignoring
  462. Xparagraph breaking for now, the natural meaning is that the two
  463. Xobjects should appear side by side, and Lout's parser accordingly
  464. Xinterpolates an infix horizontal concatenation operator (see below)
  465. Xbetween them.  This operator is associative, so the grammatical
  466. Xambiguity does no harm.  However, the Algol-60 rule that white space
  467. Xshould be significant only as a separator is necessarily broken by
  468. XLout in just this one place.
  469. X@PP
  470. XAlgol-like languages distinguish literal strings from identifiers by
  471. Xenclosing them in quotes, but literals are far too frequent in document
  472. Xformatting for this to be viable.  The conventional solution is to
  473. Xbegin identifiers with a special character, and Lout follows Scribe
  474. X[7] in using "`@'" rather than the "`\\'" of troff
  475. X[8] and @TeX [9].
  476. X@PP
  477. XHowever, Lout takes the unusual step of making an initial "`@'"
  478. Xoptional.  The designers of Eqn apparently considered such
  479. Xcharacters disfiguring in fine-grained input like equations, and
  480. Xthis author agrees.  The implementation is straightforward:  "`@'" is
  481. Xclassed as just another letter, and every word is searched for in
  482. Xthe symbol table.  If it is found, it is an identifier, otherwise it
  483. Xis a literal.  A warning message is printed when a literal beginning
  484. Xwith "`@'" is found, since it is probably a mis-spelt identifier.  No
  485. Xsuch safety net is possible for identifiers without "`@'".
  486. X@PP
  487. XEquation formatting also demands symbols made from punctuation
  488. Xcharacters, such as @Code "+" and {@Code "<="}.  It is traditional to
  489. Xallow such symbols to be juxtaposed, which means that the input
  490. X@ID @Code "<=++"
  491. Xfor example must be interpreted within the lexical analyser by searching
  492. Xthe symbol table for its prefixes in the order {@Code "<=++"},
  493. X{@Code "<=+"}, {@Code "<="}.  Although this takes quadratic time, in
  494. Xpractice such sequences are too short to make a more sophisticated
  495. Xlinear method like tries worthwhile.
  496. X@End @SubSection
  497. END_OF_FILE
  498.   if test 3349 -ne `wc -c <'lout/doc/tr.impl/s2.2'`; then
  499.     echo shar: \"'lout/doc/tr.impl/s2.2'\" unpacked with wrong size!
  500.   fi
  501.   # end of 'lout/doc/tr.impl/s2.2'
  502. fi
  503. if test -f 'lout/doc/tr.impl/s6.1' -a "${1}" != "-c" ; then 
  504.   echo shar: Will not clobber existing file \"'lout/doc/tr.impl/s6.1'\"
  505. else
  506.   echo shar: Extracting \"'lout/doc/tr.impl/s6.1'\" \(3774 characters\)
  507.   sed "s/^X//" >'lout/doc/tr.impl/s6.1' <<'END_OF_FILE'
  508. X@SubSection
  509. X    @Tag { cross }
  510. X    @Title { The cross reference abstraction }
  511. X@Begin
  512. X@PP
  513. XIn developing the cross reference abstraction, it seemed best to begin
  514. Xwith the database application, since it is the simplest.  Database
  515. Xrelations are naturally mapped into Lout definitions:
  516. X@ID @Code {
  517. X"def @Reference"
  518. X"    named @Tag {}"
  519. X"    named @Author {}"
  520. X"    named @Title {}"
  521. X"    named @Journal {}"
  522. X"{}"
  523. X}
  524. XThe set of all invocations of @Code "@Reference" is a relation whose
  525. Xattributes are the parameters, and whose tuples are the invocations.  To
  526. Xcomplete the correspondence, we need only declare that the @Code "@Tag"
  527. Xparameter is special, serving as the key attribute.
  528. X@PP
  529. XFollowing the database model, we next need a notation for retrieving the
  530. Xinvocation with a given tag:
  531. X@ID @Code "@Reference&&kingston91"
  532. XThis @I {cross reference} is like an arrow pointing to the invocation.  To
  533. Xaccess its attributes, we write
  534. X@ID @Code "@Reference&&kingston91 @Open { @Author, @Title }"
  535. XThe @Code "@Open" operator evaluates its right parameter in an
  536. Xenvironment which includes the exported parameters of its left.
  537. X@PP
  538. XAn invocation is chosen to be a running header because of its proximity
  539. Xto the place where it is used, rather than by its tag.  Such proximity
  540. Xis naturally expressed by two special tags, {@Code preceding} and
  541. X{@Code following}; for example, @Code "@Sym&&following" will point to
  542. Xthe closest following invocation of @Code "@Sym" in the final printed
  543. Xdocument.  This is much simpler conceptually than reference to the
  544. Xinternal state of the document formatter at a critical moment, the usual
  545. Xapproach to running headers.
  546. X@PP
  547. XIt turns out that the above design solves all the cross referencing
  548. Xproblems encountered in practice except one, which may be typified by
  549. Xthe problem of finding the number of the page on which the chapter whose
  550. Xtag is @Code "intro" begins.  Two cross referencing steps are needed,
  551. Xfirst to {@Code "@Chapter&&intro"}, then from there to
  552. X{@Code "@Page&&preceding"}, where the page number is known.
  553. X@PP
  554. XGiven the success of the design so far, this last problem proves to be
  555. Xsurprisingly difficult.  We first try
  556. X@ID @Code {
  557. X"@Chapter&&intro @Open {"
  558. X"    @Page&&preceding @Open { @PageNum }"
  559. X"}"
  560. X}
  561. Xbut this fails because @Code "@Page&&preceding" is evaluated in the
  562. Xpresent context, not in the context of @Code "@Chapter&&intro" as
  563. Xrequired.  So our next attempt is
  564. X@ID @Code {
  565. X"def @Chapter"
  566. X"    named @PageNum { @Page&&preceding @Open { @PageNum } }"
  567. X"    ..."
  568. X}
  569. Xwith the @Code "@Page&&preceding" cross reference attached to the
  570. Xchapter; we write
  571. X@ID @Code "@Chapter&&intro @Open { @PageNum }"
  572. XThis also fails, because parameters are evaluated after substitution, so
  573. Xonce again @Code "@Page&&preceding" is evaluated in the wrong context.  We
  574. Xcould of course define a new operator specifically for this case:
  575. X@ID @Code "@Page&&{ @Preceding @Chapter&&intro }"
  576. Xor some such.  This is free of the annoying context-sensitivity, but it
  577. Xseems quite complex, and the expected cross reference @Code "@Page&&preceding"
  578. Xdoes not appear.
  579. X@PP
  580. XThe author was lost in these obscurities for some time, and ultimately
  581. Xrescued himself by looking ahead to the implementation of the
  582. X@Code preceding and @Code following tags, to see if a simple extension
  583. Xof it would solve the problem.  This led to the @Code "@Tagged" operator:
  584. X@ID @Code "@Page&&preceding @Tagged intro"
  585. Xplaced at the beginning of the body of the chapter will attach @Code intro
  586. Xas an extra tag to the closest preceding invocation of {@Code "@Page"},
  587. Xso that
  588. X@ID @Code "@Page&&intro @Open { @PageNum }"
  589. Xyields the desired page number.  There is something low-level and ad hoc
  590. Xabout the @Code "@Tagged" operator, but the two cross references do
  591. Xappear naturally, and it works.
  592. X@End @SubSection
  593. END_OF_FILE
  594.   if test 3774 -ne `wc -c <'lout/doc/tr.impl/s6.1'`; then
  595.     echo shar: \"'lout/doc/tr.impl/s6.1'\" unpacked with wrong size!
  596.   fi
  597.   # end of 'lout/doc/tr.impl/s6.1'
  598. fi
  599. if test -f 'lout/doc/tr.impl/s7.0' -a "${1}" != "-c" ; then 
  600.   echo shar: Will not clobber existing file \"'lout/doc/tr.impl/s7.0'\"
  601. else
  602.   echo shar: Extracting \"'lout/doc/tr.impl/s7.0'\" \(3895 characters\)
  603.   sed "s/^X//" >'lout/doc/tr.impl/s7.0' <<'END_OF_FILE'
  604. X@Section
  605. X    @Title { Conclusion }
  606. X@Begin
  607. X@PP
  608. XSince its public release in October 1991, the Basser Lout interpreter
  609. Xhas been ported without incident to a wide variety of Unix systems and
  610. Xhardware.  It was tested extensively before release on its own
  611. Xdocumentation, and the few minor bugs which have emerged since then have
  612. Xall been fixed in the second release, scheduled to appear in mid-1992.
  613. X@PP
  614. XSeven substantial packages of definitions are distributed with Basser
  615. XLout.  The DocumentLayout package, and its variants ReportLayout and
  616. XBookLayout, provide the standard features that all documents
  617. Xrequire:  pages, columns, paragraphs, headings, footnotes, floating
  618. Xfigures and tables, chapters and sections, displays and lists, access
  619. Xto bibliographic databases, cross references, and so on
  620. X[11].  The BookLayout package has extra features
  621. Xneeded by books, including an automatically generated table of contents,
  622. XRoman page numbers for the prefatory material, running page headers,
  623. Xodd and even page layouts, and a sorted index.  The Eq package formats
  624. Xequations, and Pas formats Pascal programs [10]; Tab
  625. Xformats tables [12]; and Fig draws figures
  626. X[6].
  627. X@PP
  628. XThe non-expert user who uses these packages perceives a system of a
  629. Xstandard quite similar to other fully developed batch formatters,
  630. Xalthough the interface is considerably more coherent than, say, the troff
  631. Xfamily's [8].  The expert user perceives a system which
  632. Xis radically different from previous ones, in which a great deal can be
  633. Xachieved very quickly.  To take an extreme example, Pas was designed,
  634. Ximplemented, tested, and documented in one afternoon.  Eq took about
  635. Xa week, but most of that time was spent in marshalling the vast
  636. Xrepertoire of mathematical symbols, and fine-tuning the spacing.  Most
  637. Xof the effort seems to go into designing a good interface; most symbols
  638. Xare implemented in just one or a few lines of Lout.
  639. X@PP
  640. XA group of about 20 satisfied non-expert users has grown up within
  641. Xthe author's department, mainly Honours students with no investment
  642. Xin older systems to hold them back.  Basser Lout has been advertised
  643. Xon the Internet news as available via anonymous {@I ftp}, so the
  644. Xextent of its outside user community is hard to gauge.  About 50
  645. Xpeople have mailed comments or questions to the author; many
  646. Xof these people have ported the program, written small definitions,
  647. Xand modified the standard packages.
  648. X@PP
  649. XFuture work could usefully begin with the improvements suggested in this
  650. Xpaper:  overlapping spanning columns, better semantics for available
  651. Xspace, and especially horizontal galleys.  Support for non-European
  652. Xlanguages is also needed.  However, the main task is the development of
  653. Xan interactive document editor based on Lout.  A structure editor similar
  654. Xto Lilac [13], which already has objects and user-defined
  655. Xsymbols, is envisaged; since cross references are easy when the whole
  656. Xdocument is available, the only major new problem is the treatment of
  657. Xgalleys, including the expansion and retraction of receptive symbols.
  658. X@LP
  659. X@LP
  660. X@B { Note. }  Since the above was written the author has completed a
  661. Xrevised version of Basser Lout, in which the problem concerning
  662. Xavailable space mentioned in Section {@NumberOf style} has been resolved.
  663. X@LP
  664. X@LP
  665. X@B { Acknowledgment. }  The author gratefully acknowledges many
  666. Xvaluable discussions with Douglas W. Jones, especially during the
  667. Xdevelopment of the galley abstraction; and also many helpful comments on
  668. Xpresentation by the anonymous referee.
  669. X@DP
  670. X@DP
  671. X@Heading { References }
  672. X@NumberedList
  673. X@LI @RefPrint kingston91
  674. X@LI @RefPrint kingston91over
  675. X@LI @RefPrint kingston91basser
  676. X@LI @RefPrint furuta82
  677. X@LI @RefPrint kernighan75
  678. X@LI @RefPrint kingston91fig
  679. X@LI @RefPrint reid80
  680. X@LI @RefPrint ossanna76
  681. X@LI @RefPrint knuth84
  682. X@LI @RefPrint kingston91eq
  683. X@LI @RefPrint kingston91begin
  684. X@LI @RefPrint kingston91tab
  685. X@LI @RefPrint brooks91
  686. X@EndList
  687. X@End @Section
  688. END_OF_FILE
  689.   if test 3895 -ne `wc -c <'lout/doc/tr.impl/s7.0'`; then
  690.     echo shar: \"'lout/doc/tr.impl/s7.0'\" unpacked with wrong size!
  691.   fi
  692.   # end of 'lout/doc/tr.impl/s7.0'
  693. fi
  694. if test -f 'lout/doc/tr.lout/ch1.03' -a "${1}" != "-c" ; then 
  695.   echo shar: Will not clobber existing file \"'lout/doc/tr.lout/ch1.03'\"
  696. else
  697.   echo shar: Extracting \"'lout/doc/tr.lout/ch1.03'\" \(3701 characters\)
  698.   sed "s/^X//" >'lout/doc/tr.lout/ch1.03' <<'END_OF_FILE'
  699. X@Section
  700. X   @Tag { cross }
  701. X   @Title { Cross references }
  702. X@Begin
  703. X@PP
  704. XA cross reference
  705. Xcross.ref @Index { Cross reference }
  706. Xin common terminology is something like `see Table 6'
  707. Xor `see page 57' -- a reference within a document to some other part of
  708. Xthe document.  Readers find them very useful, but they are a major
  709. Xbookkeeping problem for authors.  As the document is revised, Table 6
  710. Xbecomes Table 7, the thing on page 57 moves to page 63, and all the
  711. Xcross references must be changed.
  712. X@PP
  713. XThe Scribe
  714. Xscribe @Index { Scribe }
  715. Xdocument formatter, developed by Brian K. Reid [{@Ref reid80}],
  716. Xreid.brian @Index { Reid, Brian K. }
  717. Xintroduced a scheme for keeping track of cross
  718. Xreferences.  It allows you to give names to tables, figures, etc., and to
  719. Xrefer to them by name.  The formatter inserts the appropriate numbers in
  720. Xplace of the names, so that as the document is revised, the
  721. Xcross references are kept up to date automatically.  Lout has adopted
  722. Xand extended this scheme.
  723. X@PP
  724. XIn Lout, automatic cross referencing works in the following way.  First
  725. Xdefine a symbol with a parameter with the special name @Code "@Tag":
  726. X@ID @Code {
  727. X"def @Table"
  728. X"   left @Tag"
  729. X"   right @Value"
  730. X"{"
  731. X"   ||1i  @Value"
  732. X"}"
  733. X}
  734. XWhen this symbol is invoked, the value given to @Code "@Tag" should be a
  735. Xsimple word like {@Code "cities"}, or several simple words juxtaposed
  736. Xlike {@Code "cities.compare"}; it serves to name the invocation:
  737. X@ID @Code {
  738. X"cities @Table"
  739. X"{"
  740. X"    Washington  |0.5i  Canberra"
  741. X"}"
  742. X}
  743. XWe may now refer to this invocation elsewhere in the document, using the
  744. X@I {cross reference} @Code "@Table&&cities".  Here @Code "&&" is the
  745. X{@I {cross reference symbol}}; its left parameter is a symbol and its right
  746. Xparameter is the value of the @Code "@Tag" parameter of some invocation
  747. Xof that symbol.
  748. X@PP
  749. XA cross reference is not an object; the reader should think of it as
  750. Xan arrow in the final printed document, beginning at the cross reference
  751. Xsymbol and ending at the top of the target
  752. Xtarget @Index { Target of cross reference }
  753. Xinvocation, like this:
  754. X@ID 8p @Font {
  755. X  { @LittlePage // @LittlePage }
  756. X  ||0io ||0.7c
  757. X  { //2c 
  758. X    { @Code "@Table&&cities" }
  759. X    //0.1c
  760. X    ||0.5c 90d @Rotate @Arrow 2.5c
  761. X    //0.05c
  762. X    @HContract @VContract
  763. X      @Fig { @Box margin { 0c } paint { grey } { 1.5c @Wide 1c @High } }
  764. X  }
  765. X}
  766. X@PP
  767. XTwo special values may be given to the right parameter of
  768. X{@Code "&&"}:  @Code preceding
  769. Xpreceding. @Index { @Code preceding }
  770. Xfollowing. @Index { @Code following }
  771. Xand
  772. X@Code following.  The cross
  773. Xreference @Code "@Table&&preceding" points to some table
  774. Xappearing earlier in the final printed document than itself; that is, the
  775. Xarrow is guaranteed to point backwards through the document.  Usually it
  776. Xpoints to the nearest preceding invocation.  Similarly, 
  777. X@Code "@Table&&following" points forwards, usually to the
  778. Xnearest following invocation of @Code "@Table".
  779. X@PP
  780. XThis section has been concerned with what a cross reference is -- an
  781. Xarrow from one point in a document to another -- but not with how it is
  782. Xused.  One simple way to use a cross reference is to put it where an
  783. Xobject is expected, like this:
  784. X@ID @Code {
  785. X"a  |  @Table&&cities  |  c"
  786. X}
  787. XIn this case the cross reference will be replaced by a copy of the
  788. Xinvocation it points to:  in the example just given, a table will appear
  789. Xbetween @Code a and @Code c.  Other applications of cross references may be
  790. Xfound in Chapter {@NumberOf examples}, including finding the number of
  791. Xthe page where something appears, producing running page headers and footers,
  792. Xand accessing databases of Roman numerals, references, etc.  Cross
  793. Xreferences are also used by galleys, as will be explained in the next section.
  794. X@End @Section
  795. END_OF_FILE
  796.   if test 3701 -ne `wc -c <'lout/doc/tr.lout/ch1.03'`; then
  797.     echo shar: \"'lout/doc/tr.lout/ch1.03'\" unpacked with wrong size!
  798.   fi
  799.   # end of 'lout/doc/tr.lout/ch1.03'
  800. fi
  801. if test -f 'lout/doc/tr.lout/ch2.04' -a "${1}" != "-c" ; then 
  802.   echo shar: Will not clobber existing file \"'lout/doc/tr.lout/ch2.04'\"
  803. else
  804.   echo shar: Extracting \"'lout/doc/tr.lout/ch2.04'\" \(2850 characters\)
  805.   sed "s/^X//" >'lout/doc/tr.lout/ch2.04' <<'END_OF_FILE'
  806. X@Section
  807. X   @Title { Precedence and associativity of symbols }
  808. X   @Tag { precedence }
  809. X@Begin
  810. X@PP
  811. XEvery symbol in Lout has a {@I precedence},
  812. Xpreceden @Index { Precedence }
  813. Xwhich is a positive whole number.  When two symbols compete for an object,
  814. Xthe one with the higher precedence wins it.  For example,
  815. X@ID @Code {
  816. X"a  |  b  /  c"
  817. X}
  818. Xis equivalent to @OneCol @Code { "{" a "|" b "}" "/" c } rather than
  819. X{@OneCol @Code { a "|" "{" b "/" c "}"} }, because @Code "|" has higher
  820. Xprecedence than @Code "/" and thus wins the {@Code b}.
  821. X@PP
  822. XWhen the two competing symbols have equal precedence, Lout applies a
  823. Xsecond rule.  Each symbol is either @I left-associative or
  824. Xassociativity @Index { Associativity }
  825. X{@I right-associative}.  The value of @OneCol @Code { a op1 b op2 c} is taken
  826. Xto be @OneCol @Code { "{" a op1 b "}" op2 c } if the symbols are both
  827. Xleft-associative, and @OneCol @Code "a op1 { b op2 c }" if they are
  828. Xright-associative.  In cases not covered by these two rules, use braces.
  829. X@PP
  830. XIt sometimes happens that the result is the same regardless of how the
  831. Xexpression is grouped.  For example, @OneCol @Code { "{" a "|" b "}" "|" c }
  832. Xand @OneCol @Code { a "|" "{" b "|" c "}" } are always the same, for any
  833. Xcombination of objects, gaps, and variants of {@Code "|"}.  In such cases
  834. Xthe symbols are said to be {@I associative}, and we can confidently omit
  835. Xthe braces.
  836. X@PP
  837. XUser-defined symbols may be given a precedence and associativity:
  838. X@ID @Code {
  839. X"def @Super"
  840. X"   precedence 50"
  841. X"   associativity right"
  842. X"   left x"
  843. X"   right y"
  844. X"{"
  845. X"   @OneRow { | -2p @Font y ^/0.5fk x }"
  846. X"}"
  847. X}
  848. XThey come just after any @Code into clause and before any parameter
  849. Xdefinitions.  The precedence may be
  850. Xany whole number between 10 and 100, and if omitted is assigned the
  851. Xvalue 100.  The higher the number, the higher the precedence.  The
  852. Xassociativity may be @Code left or {@Code right}, and if omitted
  853. Xdefaults to {@Code right}.  Lout's symbols have the following
  854. Xprecedences and associativities:
  855. X@ID @Tab
  856. X   vmargin { 0.5vx }
  857. X   @Fmta { @Col @CC A ! @Col @CC B ! @Col C }
  858. X{
  859. X@Rowa
  860. X   A { Precedence }
  861. X   B { Associativity }
  862. X   C { Symbols }
  863. X@Rowa
  864. X@Rowa
  865. X   A { 5 }
  866. X   B { associative }
  867. X   C { @Code "/  ^/  //  ^//" }
  868. X@Rowa
  869. X   A { 6 }
  870. X   B { associative }
  871. X   C { @Code "|  ^|  ||  ^||" }
  872. X@Rowa
  873. X   A { 7 }
  874. X   B { associative }
  875. X   C { @Code "&  ^&" }
  876. X@Rowa
  877. X   A { 7 }
  878. X   B { associative }
  879. X   C { @Code "&" in the form of one or more white space characters }
  880. X@Rowa
  881. X   A { 10-100 }
  882. X   B { @Code left or @Code right }
  883. X   C { user-defined symbols }
  884. X@Rowa
  885. X   A { 100 }
  886. X   B { @Code right }
  887. X   C { @@Wide, @@High, @@Graphic, etc. }
  888. X@Rowa
  889. X   A { 101 }
  890. X   B { - }
  891. X   C { @Code "&&" }
  892. X@Rowa
  893. X   A { 102 }
  894. X   B { associative }
  895. X   C { @Code "&" in the form of 0 spaces }
  896. X@Rowa
  897. X   A { 103 }
  898. X   B { - }
  899. X   C { Body parameters and right parameters of @@Open }
  900. X}
  901. X@End @Section
  902. END_OF_FILE
  903.   if test 2850 -ne `wc -c <'lout/doc/tr.lout/ch2.04'`; then
  904.     echo shar: \"'lout/doc/tr.lout/ch2.04'\" unpacked with wrong size!
  905.   fi
  906.   # end of 'lout/doc/tr.lout/ch2.04'
  907. fi
  908. if test -f 'lout/doc/tr.lout/ch3.03' -a "${1}" != "-c" ; then 
  909.   echo shar: Will not clobber existing file \"'lout/doc/tr.lout/ch3.03'\"
  910. else
  911.   echo shar: Extracting \"'lout/doc/tr.lout/ch3.03'\" \(3574 characters\)
  912.   sed "s/^X//" >'lout/doc/tr.lout/ch3.03' <<'END_OF_FILE'
  913. X@Section
  914. X   @Title { "@Font" }
  915. X   @Tag { font }
  916. X@Begin
  917. X@PP
  918. XA @I font
  919. Xfont. @Index { Fonts }
  920. Xis a collection of characters which may be
  921. Xprinted.  Many fonts come in {@I families},
  922. Xfamily @Index { Family of a font }
  923. Xface @Index { Face of a font }
  924. Xwhich are groups of fonts that
  925. Xhave been designed to go together.  For example, the Times family
  926. Xincludes the following fonts:
  927. X@ID { Times Base } @Font {
  928. X    Base      @Font { Times Base }
  929. X//1vx Slope     @Font { Times Slope }
  930. X//1vx Bold       @Font { Times Bold }
  931. X//1vx BoldSlope @Font { Times BoldSlope }
  932. X}
  933. XThus, each font has two names: its @I { family name } (Times,
  934. XHelvetica, etc.) and its @I { face name } (Base, Slope, etc.).  Times
  935. XBase is more commonly called Times Roman, and Times Slope is more
  936. Xcommonly called Times Italic.  Lout avoids these names in favour of
  937. Xgeneric names which can be applied to many font families.
  938. X@PP
  939. XWhen Lout runs, the first thing it reads is a list of font definitions,
  940. Xfont.def @Index { @Code fontdef }
  941. Xlike these:
  942. X@ID {
  943. X    @Code "fontdef  Times  Base   {"  @I implementation-dependent  @Code "}"
  944. X//1vx @Code "fontdef  Times  Slope  {"  @I implementation-dependent  @Code "}"
  945. X}
  946. XEach line tells Lout of the existence of a font, and assigns it a family
  947. Xname and a face name.  There are a few fonts which are the only members
  948. Xof their families; even though these fonts do not need a face name, they
  949. Xmust be given one by their {@Code fontdef}.  The part between braces may
  950. Xvary with different implementations of Lout, but it will usually be the
  951. Xname of a file containing the information Lout needs to work with the
  952. Xfont; for example, Basser Lout uses
  953. Xadobe @Index { Adobe Systems, Inc. }
  954. XAdobe Font Metrics files.
  955. X@PP
  956. XLigatures,
  957. Xligatures @Index Ligatures
  958. Xsuch as fl for {@OneCol f}l and fi for {@OneCol f}i, are considered by
  959. XBasser Lout to be an integral part of the font:  if the @Code fontdef
  960. Xfile mentions them, they will be used.  Enclosing one of the letters in
  961. X@@OneCol is one sure way to disable a ligature.
  962. X@PP
  963. XThe @@Font symbol
  964. Xfont.sym @Index { @@Font symbol }
  965. Xreturns its right parameter in a font
  966. Xand size specified by its left:
  967. X@ID {
  968. X@Code "{ Times Base 12p } @Font"  @I object
  969. X}
  970. XThe family and face names must have appeared together in a {@Code fontdef};
  971. Xthe size is arbitrary and may be given in any one of the {@Code "c"},
  972. X{@Code "i"}, {@Code "p"}, {@Code "m"}, {@Code "f"}, {@Code "s"}, and
  973. X{@Code "v"} units of measurement (Section {@NumberOf concatenation}),
  974. Xalthough @Code 10p and @Code 12p are the most common sizes for text.
  975. X@PP
  976. XWhen a @@Font symbol is nested inside the right parameter of
  977. Xanother @@Font symbol, the inner one determines the font of its
  978. Xown right parameter.  However, it may be abbreviated so as to inherit
  979. Xpart of the outer symbol:
  980. X@ID @Code {
  981. X"{ Times Base 12p } @Font"
  982. X"{ hello, Slope @Font hello, 15p @Font hello }"
  983. X}
  984. Xhas result
  985. X@ID {
  986. X{ Times Base 12p } @Font
  987. X{ hello, Slope @Font hello, 15p @Font hello }
  988. X}
  989. XThe first inner @@Font inherits the outer family and size, changing only
  990. Xthe face; the second inherits the outer family and face.  When a family
  991. Xname is given, it must be followed immediately by a face name.  A size
  992. Xchange always comes last.
  993. X@PP
  994. XSizes of the form +{@I length} and --{@I length} may also be used,
  995. Xmeaning that the font size is to be @I length larger or smaller than
  996. Xthe inherited value.  For example, --{@Code "2p"} is often used for
  997. Xsuperscripts and subscripts.  These forms are highly recommended, since
  998. Xthey don't need to be changed if a decision is made to alter the font
  999. Xsize of the document as a whole.
  1000. X@End @Section
  1001. END_OF_FILE
  1002.   if test 3574 -ne `wc -c <'lout/doc/tr.lout/ch3.03'`; then
  1003.     echo shar: \"'lout/doc/tr.lout/ch3.03'\" unpacked with wrong size!
  1004.   fi
  1005.   # end of 'lout/doc/tr.lout/ch3.03'
  1006. fi
  1007. if test -f 'lout/doc/tr.lout/ch3.04' -a "${1}" != "-c" ; then 
  1008.   echo shar: Will not clobber existing file \"'lout/doc/tr.lout/ch3.04'\"
  1009. else
  1010.   echo shar: Extracting \"'lout/doc/tr.lout/ch3.04'\" \(3886 characters\)
  1011.   sed "s/^X//" >'lout/doc/tr.lout/ch3.04' <<'END_OF_FILE'
  1012. X@Section
  1013. X   @Title { "@Break" }
  1014. X   @Tag { break }
  1015. X@Begin
  1016. X@PP
  1017. XThe @@Break symbol influences the appearance of paragraphs (Section
  1018. X{@NumberOf concatenation}), offering a fixed set of eight styles:
  1019. X@IL
  1020. X
  1021. X@LI {
  1022. X2i @Wide { |1rt @Code adjust @@Break @I object }
  1023. Xadjust.break @Index { @Code adjust @@Break }
  1024. X|2m Break the paragraphs of {@I object} into lines, and apply @@PAdjust
  1025. X(Section {@NumberOf hadjust}) to every line except the last in
  1026. Xeach paragraph;
  1027. X}
  1028. X
  1029. X@LI {
  1030. X2i @Wide { |1rt @Code outdent @@Break @I object }
  1031. Xoutdent.break @Index { @Code outdent @@Break }
  1032. X|2m Like {@Code adjust}, except that @Code "2.0f @Wide {} &0i" is
  1033. Xinserted at the beginning of every line except the first, creating
  1034. Xan outdented paragraph;
  1035. X}
  1036. X
  1037. X@LI {
  1038. X2i @Wide { |1rt @Code ragged @@Break @I object }
  1039. Xragged.break @Index { @Code ragged @@Break }
  1040. X|2m Break the paragraphs of {@I object} into lines, but do not adjust
  1041. Xthe lines (`ragged right');
  1042. X}
  1043. X
  1044. X@LI {
  1045. X2i @Wide { |1rt @Code cragged @@Break @I object }
  1046. Xcragged.break @Index { @Code cragged @@Break }
  1047. X|2m Like {@Code ragged}, except that each line will be centred with
  1048. Xrespect to the others;
  1049. X}
  1050. X
  1051. X@LI {
  1052. X2i @Wide { |1rt @Code rragged @@Break @I object }
  1053. Xrragged.break @Index { @Code rragged @@Break }
  1054. X|2m Like {@Code ragged}, except that each line will be right-justified with
  1055. Xrespect to the others (`ragged left');
  1056. X}
  1057. X
  1058. X@LI {
  1059. X2i @Wide { |1rt @Code lines @@Break @I object }
  1060. Xlines.break @Index { @Code lines @@Break }
  1061. X|2m Break the paragraphs of {@I object} into lines at the same points
  1062. Xthat they are broken into lines in the input; do not adjust the lines.  Any
  1063. Xspaces at the start of a line other than the first will appear in the output;
  1064. X}
  1065. X
  1066. X@LI {
  1067. X2i @Wide { |1rt @Code clines @@Break @I object }
  1068. Xclines.break @Index { @Code clines @@Break }
  1069. X|2m Break the paragraphs of {@I object} into lines at the same points
  1070. Xthat they are broken into lines in the input file, then centre each line with
  1071. Xrespect to the others;
  1072. X}
  1073. X
  1074. X@LI {
  1075. X2i @Wide { |1rt @Code rlines @@Break @I object }
  1076. Xrlines.break @Index { @Code rlines @@Break }
  1077. X|2m Break the paragraphs of {@I object} into lines at the same points
  1078. Xthat they are broken into lines in the input file, then right-justify
  1079. Xeach line with respect to the others.
  1080. X}
  1081. X
  1082. X@EL
  1083. XIf the paragraph was an entire component of a galley, so will each of
  1084. Xits lines be; otherwise the lines are enclosed in a {@Code "@OneRow"}
  1085. Xsymbol after breaking.
  1086. X@PP
  1087. XThe length of the gap used to separate the lines produced by paragraph
  1088. Xbreaking is always {@Code 1v}.  However, the @Code v unit itself and the
  1089. Xv.unit.effect @SubIndex { effect on paragraph breaking }
  1090. Xgap mode may be changed:
  1091. X@IL
  1092. X
  1093. X@LI {
  1094. X2i @Wide { |1rt @I gap @Code "@Break" @I object }
  1095. X|2m Within {@I object}, take the value of the @Code "v" unit to be the
  1096. Xlength of {@I gap};
  1097. X}
  1098. X
  1099. X@LI {
  1100. X2i @Wide { |1rt + & @I gap @Code "@Break" @I object }
  1101. X|2m Within {@I object}, take the value of the @Code "v" unit to be
  1102. Xlarger by the length of @I gap than it would otherwise have been;
  1103. X}
  1104. X
  1105. X@LI {
  1106. X2i @Wide { |1rt -- & @I gap @Code "@Break" @I object }
  1107. X|2m Within {@I object}, take the value of the @Code "v" unit to be
  1108. Xsmaller by the length of @I gap than it would otherwise have been.
  1109. X}
  1110. X
  1111. X@EL
  1112. XIn each case, the mode of @I gap is adopted within {@I object}.
  1113. X@PP
  1114. XFinally, the @@Break symbol influences hyphenation:
  1115. X@IL
  1116. X
  1117. X@LI {
  1118. X2i @Wide { |1rt @Code "hyphen @Break" @I object }
  1119. Xhyphen.break @Index { @Code hyphen @@Break }
  1120. X|2m Permit hyphenation within the paragraphs of {@I object};
  1121. X}
  1122. X
  1123. X@LI {
  1124. X2i @Wide { |1rt @Code "nohyphen @Break" @I object }
  1125. Xnohyphen.break @Index { @Code nohyphen @@Break }
  1126. X|2m Prohibit hyphenation within the paragraphs of {@I object}; all
  1127. Xhyphenation gaps without exception revert to edge-to-edge mode.
  1128. X}
  1129. X
  1130. X@EL
  1131. XSeveral options may be given to the @@Break symbol simultaneously, in
  1132. Xany order.  For example,
  1133. X@ID @Code "{ adjust 1.2fx hyphen }  @Break  ..."
  1134. Xis a typical initial value.
  1135. X@End @Section
  1136. END_OF_FILE
  1137.   if test 3886 -ne `wc -c <'lout/doc/tr.lout/ch3.04'`; then
  1138.     echo shar: \"'lout/doc/tr.lout/ch3.04'\" unpacked with wrong size!
  1139.   fi
  1140.   # end of 'lout/doc/tr.lout/ch3.04'
  1141. fi
  1142. if test -f 'lout/doc/tr.over/s1' -a "${1}" != "-c" ; then 
  1143.   echo shar: Will not clobber existing file \"'lout/doc/tr.over/s1'\"
  1144. else
  1145.   echo shar: Extracting \"'lout/doc/tr.over/s1'\" \(3752 characters\)
  1146.   sed "s/^X//" >'lout/doc/tr.over/s1' <<'END_OF_FILE'
  1147. X@Section
  1148. X   @Title { Introduction }
  1149. X@Begin
  1150. X@PP
  1151. XThe personal computer and the laser printer have sparked a revolution in
  1152. Xthe production of documents.  Many authors now routinely take their work
  1153. Xfrom conception to camera-ready copy, many publishers are using desktop
  1154. Xpublishing systems, and it is probable that manual assembly of documents
  1155. Xwill become uncommon in the near future.
  1156. X@PP
  1157. XAs control moves into the hands of an ever-increasing number of
  1158. Xnon-technical people, the stresses on document formatting software
  1159. Xincrease.  On the one hand, this software must be so simple that anyone
  1160. Xcan use it; on the other, it must supply a bewildering array of
  1161. Xfeatures.  A book, for example, demands fonts, paragraph and page
  1162. Xbreaking, floating figures and tables, footnotes, chapters and sections,
  1163. Xrunning page headers and footers, an automatically generated table of
  1164. Xcontents, and a sorted index.  Add to this an open-ended list of
  1165. Xspecialized features, beginning with mathematical typesetting, diagrams,
  1166. Xand access to bibliographic databases, and the result is a nightmare for
  1167. Xthe software developer.
  1168. X@PP
  1169. XOne solution to this feature explosion problem is to implement as a
  1170. Xsystem primitive every feature that will ever be required.  Although all
  1171. Xof the successful interactive document editors known to the author take
  1172. Xthis approach (admittedly with some attempt to generalize and unify
  1173. Xtheir features), it has clearly reached its limit.  Few such systems
  1174. Xprovide equation formatting, fewer still will format a Pascal program,
  1175. Xand other specialized features will simply never be implemented.
  1176. X@PP
  1177. XA second solution is to provide a relatively small system equipped with
  1178. Xa means of defining new features, as in programming languages.  This
  1179. Xapproach has been taken by the batch formatters (those which do not
  1180. Xdisplay a continuously updated image of the printed document while
  1181. Xediting) found in academia, notably troff [{@Ref ossanna76}], @TeX
  1182. X[{@Ref knuth84}], and Scribe [{@Ref reid80}].  Features such as
  1183. Xfootnotes and automatic tables of contents have been added to these
  1184. Xsystems using macro definitions.  Unfortunately, such extensions are
  1185. Xvery difficult and error-prone in practice: @TeX's footnote macro alone
  1186. Xcontains half a page of dense, obscure code, while those who have
  1187. Xextended troff have abandoned the language itself and taken refuge in
  1188. Xpreprocessors.  A more productive basis for developing new features is needed.
  1189. X@PP
  1190. XThis article presents a high-level language for document formatting,
  1191. Xcalled Lout, which is intended to form such a basis.  Lout is quite
  1192. Xaccessible to non-expert users, but its unique property is the ease with
  1193. Xwhich expert users can add new features.  We begin with a presentation
  1194. Xof Lout as it appears to the non-expert user who employs the standard
  1195. Xpackages without under&-standing Lout's principles.  Later sections switch
  1196. Xto the expert's view, showing by examples the principles of Lout and how
  1197. Xadvanced features are defined.
  1198. X@PP
  1199. XA Unix-compatible
  1200. X@FootNote { Unix is a trademark of "AT&T" Bell Laboratories. }
  1201. Xbatch formatter for Lout (called Basser Lout) has been written which
  1202. Xproduces PostScript
  1203. X@FootNote { PostScript is a trademark of Adobe Systems, Incorporated. }
  1204. Xoutput suitable for printing on most laser printers and many other
  1205. Xdevices.  A library of standard packages written in Lout provides all of
  1206. Xthe features listed above and many others.  This system is not an
  1207. Xexperimental prototype, it is a fully operational prod&-uct&-ion
  1208. Ximplementation.  The software and its supporting documentation
  1209. X[{@Ref kingston92}, {@Ref kingston93basser}, {@Ref kingston92begin},
  1210. X{@Ref kingston92design}, {@Ref kingston92eq}, {@Ref kingston92fig},
  1211. X{@Ref kingston92tab}] are available free of charge from the author.
  1212. X@End @Section
  1213. END_OF_FILE
  1214.   if test 3752 -ne `wc -c <'lout/doc/tr.over/s1'`; then
  1215.     echo shar: \"'lout/doc/tr.over/s1'\" unpacked with wrong size!
  1216.   fi
  1217.   # end of 'lout/doc/tr.over/s1'
  1218. fi
  1219. if test -f 'lout/doc/tr.over/s3' -a "${1}" != "-c" ; then 
  1220.   echo shar: Will not clobber existing file \"'lout/doc/tr.over/s3'\"
  1221. else
  1222.   echo shar: Extracting \"'lout/doc/tr.over/s3'\" \(4009 characters\)
  1223.   sed "s/^X//" >'lout/doc/tr.over/s3' <<'END_OF_FILE'
  1224. X@Section
  1225. X   @Title { Objects }
  1226. X@Begin
  1227. X@PP
  1228. XTo the expert user, Lout is a high-level functional language with a
  1229. Xrelatively small repertoire of primitive features organized around four
  1230. Xkey concepts: {@I objects}, {@I definitions}, {@I cross @I references}, 
  1231. Xand {@I galleys}.  An object is a rectangle with at least one horizontal
  1232. Xand one vertical mark protruding from it.  For example,
  1233. X@ID @Code "Australia"
  1234. Xis an object which is viewed by Lout like this:
  1235. X@ID @ShowMarks Australia
  1236. XHorizontal and vertical concatenation operators, denoted by the symbols
  1237. X@Code "|" and {@Code "/"}, are used to assemble larger objects:
  1238. X@ID @Code { "USA  |0.2i  Australia" }
  1239. Xis the object
  1240. X@ID { @ShowMarks USA  |0.2i  @ShowMarks Australia }
  1241. XThe parameters are separated by the length given after the concatenation
  1242. Xsymbol (0.2 inches in this example), and their horizontal marks are
  1243. Xaligned.
  1244. X@PP
  1245. XTables are made by combining the two operators, with @Code "|" having
  1246. Xthe higher precedence:
  1247. X@ID  @Code {
  1248. X             |1m  USA         |1m  "|0.2i" |1m   Australia
  1249. X/1vx "/0.1i" |    Washington  |    "|"     |     Canberra
  1250. X}
  1251. Xis the object
  1252. X@ID {
  1253. X      @ShowMarks USA &0.4c @Fig { @Line from { 0 0 } to { xsize 0 }
  1254. X      linestyle { dashed } linewidth { 0.015 cm } 0.8c @Wide {} }
  1255. X      #{ 0 ymark moveto xsize 10 pt add ymark lineto [ 3 pt ] 0 setdash stroke }
  1256. X      #@Graphic {1c @Wide }
  1257. X      |0.2i @ShowMarks Australia
  1258. X/0.1i @ShowMarks Washington  |     @ShowMarks Canberra
  1259. X}
  1260. XThe second horizontal concatenation symbol needs no length, since the
  1261. Xfirst one determines the separation between the two columns created by
  1262. Xthe alignment of the vertical marks.  Objects of arbitrary complexity
  1263. Xmay be assembled using these and other operators, and braces used for
  1264. Xgrouping, in a manner analogous to the assembly of expressions in
  1265. Xprogramming languages.
  1266. X@PP
  1267. XThe lengths attached to concatenation symbols have features which permit
  1268. Xobjects to be positioned very precisely.  In addition to the usual units
  1269. Xof measurement (inches, centimetres, points, and ems), lengths may be
  1270. Xmeasured in units of the current font size, space width, inter-line
  1271. Xspace, and available width (for centering and right justification).
  1272. X@PP
  1273. XThere are also six @I gap {@I modes}, which determine where the lengths
  1274. Xare measured from.  Previous examples have used edge-to-edge mode:
  1275. X@ID @Fig margin { 0c } headstyle { closed } {
  1276. X@ShowMarks { 0.3c @Wide ^| 0.9c @Wide 0.3c @High ^/ 0.2c @High }
  1277. X|0.5c
  1278. X@ShowMarks { 0.3c @Wide ^| 0.9c @Wide 0.3c @High ^/ 0.2c @High }
  1279. X//0.2c
  1280. X|1.2c @Arrow arrow { both } { 0.5c @Wide }
  1281. X}
  1282. XLout also provides a mark-to-mark mode, obtained by appending
  1283. X@Code x to the length:
  1284. X@ID @Fig margin { 0c } headstyle { closed } {
  1285. X@ShowMarks { 0.3c @Wide ^| 0.9c @Wide 0.3c @High ^/ 0.2c @High }
  1286. X|0.5c
  1287. X@ShowMarks { 0.3c @Wide ^| 0.9c @Wide 0.3c @High ^/ 0.2c @High }
  1288. X//0.2c
  1289. X|0.3c @Arrow arrow { both } { 1.7c @Wide }
  1290. X}
  1291. XThe length will be widened if necessary to prevent the parameters from
  1292. Xoverlapping, thus implementing the baseline-to-baseline spacing used
  1293. Xbetween lines of text.  Other modes provide tabulation from the left
  1294. Xmargin, overstriking, and hyphenation.
  1295. X@PP
  1296. XThe final appearance of an object is affected by a limited amount of
  1297. Xinformation inherited from the context, principally the font and the
  1298. Xwidth available for the object to occupy.  There are operators for
  1299. Xsetting these attributes:
  1300. X@ID @Code {
  1301. X"Slope  @Font  {"
  1302. X"Hello, world"
  1303. X"}"
  1304. X}
  1305. Xproduces
  1306. X@ID {
  1307. XSlope  @Font  { Hello, world }
  1308. X}
  1309. Xand in a similar way
  1310. X@ID @Code {
  1311. X"1.5i @Wide {"
  1312. X"(1)  |0.1i  A small"
  1313. X"indented paragraph"
  1314. X"of text."
  1315. X"}"
  1316. X}
  1317. Xproduces
  1318. X@ID {
  1319. X1.5i @Wide {
  1320. X(1)  |0.1i  A small
  1321. Xindented paragraph
  1322. Xof text.
  1323. X}
  1324. X}
  1325. Xwith the paragraph inheriting and being broken to an available width of
  1326. X1.4 inches minus the width of (1).  This size inheritance remains secure
  1327. Xthrough all the complexities of gap modes, mark align&-ment, the @Code
  1328. X"@Wide" and other operators, and so on, providing a high-level service
  1329. Xcomparable in value with strong typing in programming languages.
  1330. X@End @Section
  1331. END_OF_FILE
  1332.   if test 4009 -ne `wc -c <'lout/doc/tr.over/s3'`; then
  1333.     echo shar: \"'lout/doc/tr.over/s3'\" unpacked with wrong size!
  1334.   fi
  1335.   # end of 'lout/doc/tr.over/s3'
  1336. fi
  1337. if test -f 'lout/doc/tr.over/setup' -a "${1}" != "-c" ; then 
  1338.   echo shar: Will not clobber existing file \"'lout/doc/tr.over/setup'\"
  1339. else
  1340.   echo shar: Extracting \"'lout/doc/tr.over/setup'\" \(2867 characters\)
  1341.   sed "s/^X//" >'lout/doc/tr.over/setup' <<'END_OF_FILE'
  1342. X
  1343. X######################################################
  1344. X#                                                    #
  1345. X#  Lout setup file for Overview paper.               #
  1346. X#                                                    #
  1347. X#  Jeffrey H. Kingston                               #
  1348. X#  8 June 1991                                       #
  1349. X#  23 December 1991                                  #
  1350. X#                                                    #
  1351. X######################################################
  1352. X
  1353. X@SysInclude { ft  }
  1354. X@SysInclude { dl  }
  1355. X@SysInclude { eq  }
  1356. X@SysInclude { fig }
  1357. X
  1358. X   def @Code
  1359. X      right x
  1360. X   { { Helvetica Base -1p } @Font lines @Break x
  1361. X   }
  1362. X
  1363. X   def @ShowMarks
  1364. X      named linewidth  { 0.015 cm }
  1365. X      named linestyle  { dashed   }
  1366. X      named dashlength { 0.15 cm  }
  1367. X      named paint      { light    }
  1368. X      right x
  1369. X   {
  1370. X      @Fig
  1371. X      {   @Box margin { 0c } linewidth { linewidth } paint { paint }
  1372. X      {   @Figure
  1373. X         shape { -0.3 cm ymark
  1374. X             {xsize ymark} ++ {0.3 cm 0}  []
  1375. X             xmark -0.3 cm
  1376. X             {xmark ysize} ++ {0 0.3 cm}
  1377. X               }
  1378. X         linewidth { linewidth }
  1379. X         linestyle { linestyle }
  1380. X         dashlength { dashlength }
  1381. X          x
  1382. X      }
  1383. X
  1384. X      }
  1385. X   }
  1386. X
  1387. X   def @TeX { T{ /0.2fo E}X }
  1388. X
  1389. X   def @Leaders { ..   @Leaders }
  1390. X
  1391. X   ###################################################
  1392. X   #                                                 #
  1393. X   #  Interpolated example documents.                #
  1394. X   #                                                 #
  1395. X   ###################################################
  1396. X
  1397. X   def @HLine
  1398. X   { 
  1399. X         { 0 0 moveto xsize 0 lineto stroke } @Graphic {}
  1400. X   }
  1401. X
  1402. X   def @LittleEndRunPlace { @Galley }
  1403. X   def @LittleEndRun
  1404. X      force into { @LittleEndRunPlace&&preceding }
  1405. X   {}
  1406. X
  1407. X   def @LittleTextPlace { @Galley }
  1408. X   def @LittleText into { @LittleTextPlace&&preceding }
  1409. X      right x
  1410. X   { x
  1411. X   }
  1412. X
  1413. X   def @LittleFootPlace { @Galley }
  1414. X   def @LittleFootNote into { @LittleFootPlace&&following }
  1415. X      right x
  1416. X   { x
  1417. X   }
  1418. X
  1419. X   def @LittlePageColumn
  1420. X      right x
  1421. X   {
  1422. X        9px @Break 8p @Font
  1423. X        2.8c @Wide x
  1424. X   }
  1425. X
  1426. X   def @LittlePage
  1427. X      right x
  1428. X   {
  1429. X      @HContract @VContract
  1430. X      { 0 0 moveto xsize 0 lineto xsize ysize lineto
  1431. X    0 ysize lineto closepath stroke } @Graphic
  1432. X      {  //0.3c ||0.3c
  1433. X         9px @Break 8p @Font
  1434. X         2.8c @Wide 3.8c @High x
  1435. X         ||0.3c //0.3c
  1436. X      }
  1437. X   }
  1438. X
  1439. X   def @LittleFootSect
  1440. X   {  1c @Wide @HLine
  1441. X      //0.3v @LittleFootPlace ||0.5c
  1442. X   }
  1443. X
  1444. X   def @LittlePageList
  1445. X     right @PageNum
  1446. X   {
  1447. X      @LittlePage { |0.5rt - @PageNum - //0.8v
  1448. X        //0.3v @LittleTextPlace
  1449. X        //1rt @LittleFootSect
  1450. X         }
  1451. X      //
  1452. X      @LittlePageList @Next @PageNum
  1453. X   }
  1454. X
  1455. X   def @LittleDocument
  1456. X   {  @LittlePage
  1457. X      {  @LittleTextPlace
  1458. X         //1rt @LittleFootSect
  1459. X      }
  1460. X      // @LittlePageList 2
  1461. X      // @LittleEndRunPlace
  1462. X   }
  1463. X        
  1464. X@Use { @DocumentLayout }
  1465. X
  1466. X@SysDatabase @Reference { "loutrefs"  }
  1467. END_OF_FILE
  1468.   if test 2867 -ne `wc -c <'lout/doc/tr.over/setup'`; then
  1469.     echo shar: \"'lout/doc/tr.over/setup'\" unpacked with wrong size!
  1470.   fi
  1471.   # end of 'lout/doc/tr.over/setup'
  1472. fi
  1473. if test -f 'lout/doc/tr.tab/s2' -a "${1}" != "-c" ; then 
  1474.   echo shar: Will not clobber existing file \"'lout/doc/tr.tab/s2'\"
  1475. else
  1476.   echo shar: Extracting \"'lout/doc/tr.tab/s2'\" \(3628 characters\)
  1477.   sed "s/^X//" >'lout/doc/tr.tab/s2' <<'END_OF_FILE'
  1478. X@Section
  1479. X   @Title { Changing the style of entries and columns }
  1480. X@Begin
  1481. X@PP
  1482. XThe style of an entry is mainly determined by four symbols from standard
  1483. XLout:  {@Code "@Font"}, {@Code "@Break"}, {@Code "@Wide"}, and
  1484. X{@Code "@High"}.  We will review them only briefly here, since they are
  1485. Xtreated elsewhere [{@Ref kingston92}, {@Ref kingston92begin}],
  1486. Xthen explain how they are used within tables.
  1487. X@PP
  1488. XThe @Code "@Font" symbol changes the font and font size of an object.  For
  1489. Xexample,
  1490. X@ID @Code "Slope @Font { hello world }"
  1491. Xproduces {Slope @Font { hello world }}, and
  1492. X@ID @Code "{ Bold +2p } @Font { hello world }"
  1493. Xproduces
  1494. X@ID {{ Bold +2p } @Font { hello world }}
  1495. Xwhich is two points larger than it otherwise would have been, as well
  1496. Xas set in bold.  The DocumentLayout package provides the abbreviations
  1497. X@Code "@I" and @Code "@B" for @Code "Slope @Font" and {@Code "Bold @Font"}.
  1498. X@PP
  1499. XThe @Code "@Break" symbol affects paragraph breaking.  Most relevant
  1500. Xhere are @Code "clines @Break" and {@Code "rlines @Break"}, which will
  1501. Xcentre or right-justify one or more lines in the given column:
  1502. X@ID @Code {
  1503. X"clines @Break {"
  1504. X"A small centred"
  1505. X"paragraph."
  1506. X"}"
  1507. X}
  1508. Xproduces
  1509. X@ID {
  1510. Xclines @Break {
  1511. XA small centred
  1512. Xparagraph.
  1513. X}
  1514. X}
  1515. Xfor example.  Actually, there is a small problem with these symbols:  they
  1516. Xonly work on paragraphs of at least two words, so they will fail to
  1517. Xcentre or right-justify a solitary word.  Tab provides two symbols,
  1518. X{@Code "@CC"} and {@Code "@RR"}, which do essentially the same thing,
  1519. Xbut which work on single words as well.
  1520. X@PP
  1521. XThe @Code "@Wide" symbol forces an object to have a given width, by
  1522. Xpadding it with white space on the right if it is too small, or breaking
  1523. Xits paragraphs if it is too wide:
  1524. X@ID @Code {
  1525. X"1.5i @Wide {"
  1526. X"This small paragraph will"
  1527. X"be broken to a width of"
  1528. X"one and one half inches."
  1529. X"}"
  1530. X}
  1531. Xproduces
  1532. X@ID {
  1533. X1.5i @Wide {
  1534. XThis small paragraph will
  1535. Xbe broken to a width of
  1536. Xone and one half inches.
  1537. X}
  1538. X}
  1539. XWidths may be specified in centimetres, points or ems using the letters
  1540. X{@Code "c"}, {@Code "p"} and {@Code "e"} instead of {@Code "i"}.  The
  1541. X@Code "@High" symbol is very similar, forcing an object to have a given
  1542. Xheight by adding white space beneath it.
  1543. X@PP
  1544. XAlthough we will use only these four symbols in the following, more
  1545. Xexotic symbols may be used, for example @Code "90d @Rotate" which
  1546. Xrotates any object (the entire table, for example, or one entry) ninety
  1547. Xdegrees, or any other positive or negative angle.  Symbols defined by
  1548. Xthe user or taken from other packages may also be used.
  1549. X@PP
  1550. XTo change the style of an individual entry, enclose it in the symbols
  1551. Xrequired:
  1552. X@ID @Code {
  1553. X"@Rowa"
  1554. X"    A { @CC { one entry of the table } }"
  1555. X}
  1556. XMore commonly, the same style is to be applied to every entry in a
  1557. Xparticular column, and this is done by placing the symbols for the style
  1558. Xinside the format option, between @Code "@Col" and the column letter:
  1559. X@ID @Code {
  1560. X"@Tab"
  1561. X"    @Fmta { @Col 3c @Wide @CC A  !  ... }"
  1562. X}
  1563. XAny @Code "@CC" or @Code "@RR" symbol should appear last, immediately
  1564. Xbefore the column letter.  Now every entry in column @Code A will be
  1565. Xcentred in a three centimetre space, which means that the column as
  1566. Xa whole will be three centimetres wide (excluding margins) and its
  1567. Xentries will be centred.
  1568. X@PP
  1569. XIt is best not to use the @Code "@Wide" symbol at first, since Lout is
  1570. Xquite good at choosing appropriate column widths.  If the result is not
  1571. Xsatisfactory, and the table is wide enough to require paragraph breaking
  1572. Xwithin its entries, @Code "@Wide" should be used only to reduce the width
  1573. Xof the wider columns, not to increase the width of the narrower ones.
  1574. X@End @Section
  1575. END_OF_FILE
  1576.   if test 3628 -ne `wc -c <'lout/doc/tr.tab/s2'`; then
  1577.     echo shar: \"'lout/doc/tr.tab/s2'\" unpacked with wrong size!
  1578.   fi
  1579.   # end of 'lout/doc/tr.tab/s2'
  1580. fi
  1581. if test -f 'lout/doc/tr.tab/s4' -a "${1}" != "-c" ; then 
  1582.   echo shar: Will not clobber existing file \"'lout/doc/tr.tab/s4'\"
  1583. else
  1584.   echo shar: Extracting \"'lout/doc/tr.tab/s4'\" \(1609 characters\)
  1585.   sed "s/^X//" >'lout/doc/tr.tab/s4' <<'END_OF_FILE'
  1586. X@Section
  1587. X   @Title { Aligned columns }
  1588. X@Begin
  1589. X@PP
  1590. XColumns of numbers are often presented with decimal points aligned:
  1591. X@CD @Tab
  1592. X    @Fmta { @Col A }
  1593. X{
  1594. X    @Rowa A { 5^.46 }
  1595. X    @Rowa A { 128^.2 }
  1596. X    @Rowa A { 3^.4159 }
  1597. X    @Rowa A { 5772^ }
  1598. X}
  1599. XThis is achieved with Tab by placing the @Code "^" symbol (which
  1600. Xactually comes from the DocumentLayout package) just before the
  1601. Xalignment point in each entry:
  1602. X@ID @Code {
  1603. X"@Tab"
  1604. X"    @Fmta { @Col A }"
  1605. X"{"
  1606. X"    @Rowa A { 5^.46 }"
  1607. X"    @Rowa A { 128^.2 }"
  1608. X"    @Rowa A { 3^.4159 }"
  1609. X"    @Rowa A { 5772^ }"
  1610. X"}"
  1611. X}
  1612. XThe equals signs of equations can be aligned in the same way.  The
  1613. Xformat of such columns should not contain @Code "@CC" or {@Code "@RR"}.
  1614. X@PP
  1615. XThe simplest way to get a heading over an aligned column is to use the
  1616. X@Code "^" symbol in the heading as well.  If it is not possible to do
  1617. Xthis, for example because the heading entry is a paragraph of text
  1618. Xbroken over more than one line, the most viable alternative is to use
  1619. X@Code "@Over" in the heading line's format to make the heading column
  1620. Xspan over the aligned column:
  1621. X@ID @Code {
  1622. X"@Tab"
  1623. X"    @Fmta { @Col @CC H @Over A }"
  1624. X"    @Fmtb { @Col A }"
  1625. X"{"
  1626. X"    @Rowa H { Heading }"
  1627. X"    @Rowb A { 5^.46 }"
  1628. X"    @Rowb A { 128^.2 }"
  1629. X"    @Rowb A { 3^.4159 }"
  1630. X"    @Rowb A { 5772^ }"
  1631. X"}"
  1632. X}
  1633. Xfor example produces
  1634. X@CD @Tab
  1635. X    @Fmta { @Col @CC H @Over A }
  1636. X    @Fmtb { @Col A }
  1637. X{
  1638. X    @Rowa H { Heading }
  1639. X    @Rowb A { 5^.46 }
  1640. X    @Rowb A { 128^.2 }
  1641. X    @Rowb A { 3^.4159 }
  1642. X    @Rowb A { 5772^ }
  1643. X}
  1644. XUnfortunately, the aligned entries are left-justified in the column, when
  1645. Xthey should really be centred.
  1646. X@End @Section
  1647. END_OF_FILE
  1648.   if test 1609 -ne `wc -c <'lout/doc/tr.tab/s4'`; then
  1649.     echo shar: \"'lout/doc/tr.tab/s4'\" unpacked with wrong size!
  1650.   fi
  1651.   # end of 'lout/doc/tr.tab/s4'
  1652. fi
  1653. if test -f 'lout/doc/tr.tab/s7' -a "${1}" != "-c" ; then 
  1654.   echo shar: Will not clobber existing file \"'lout/doc/tr.tab/s7'\"
  1655. else
  1656.   echo shar: Extracting \"'lout/doc/tr.tab/s7'\" \(3507 characters\)
  1657.   sed "s/^X//" >'lout/doc/tr.tab/s7' <<'END_OF_FILE'
  1658. X@Section
  1659. X   @Title { A final example }
  1660. X@Begin
  1661. X@PP
  1662. XIn conclusion, here is the input for a relatively large table:
  1663. X@ID 10p @Font @Code 1.2fx @Break {
  1664. X"@OneRow 10p @Font 1.15fx @Break @Tab"
  1665. X"    linewidth { 1.0 pt }"
  1666. X"    vmargin { 0.4v }"
  1667. X"    @Fmta { @Col @B A  !  @Col @B B  !  @Col @B C  !  @Col @B D }"
  1668. X"    @Fmtb { @Col outdent @Break A  !  @Col 1.8c @Wide ragged @Break B !"
  1669. X"            @Col C  !  @Col outdent @Break D }"
  1670. X"{"
  1671. X""
  1672. X"@Rowa above { single } below { single }"
  1673. X"    A { Scholarship }"
  1674. X"    B { Value $ }"
  1675. X"    C { Closing date }"
  1676. X"    D { Qualifications }"
  1677. X""
  1678. X"@Rowa"
  1679. X"    A { 1.  Tenable at the University of Sydney }"
  1680. X""
  1681. X"@Rowb"
  1682. X"    A { Commonwealth and University Postgraduate Research Awards }"
  1683. X"    B { 10,415 (12,724 to 16,433 from 1 January 1990) }"
  1684. X"    C { 31 October }"
  1685. X"    D { Graduates with Hons I or Hons II Div. 1.  For research in any field }"
  1686. X""
  1687. X"@Rowb"
  1688. X"    A { Commonwealth Postgraduate Course Awards }"
  1689. X"    B { 10,415 }"
  1690. X"    C { 30 September }"
  1691. X"    D { Graduates with honours degrees or very good pass degrees.  For"
  1692. X"Master's degrees undertaken by coursework }"
  1693. X""
  1694. X"@Rowb"
  1695. X"    A { R. and M. Bentwich Scholarship }"
  1696. X"    D { Graduate who holds a postgraduate research scholarship and who"
  1697. X"requires a supplementary grant }"
  1698. X""
  1699. X"@Rowa"
  1700. X"    A { 2.  Awarded by external bodies }"
  1701. X""
  1702. X"@Rowb"
  1703. X"    A { Caltex }"
  1704. X"    B { 24,000 }"
  1705. X"    C { 30 September }"
  1706. X"    D { Female graduates completing degree or diploma in year of application }"
  1707. X""
  1708. X"@Rowb"
  1709. X"    A { Rhodes Scholarship }"
  1710. X"    B { @Sterling3500 + return air-fare }"
  1711. X"    C { 1 October }"
  1712. X"    D { Age limit 25.  For tenure at the University of Oxford }"
  1713. X"    below { single }"
  1714. X"}"
  1715. X"@DP"
  1716. X"10p @Font { *Additional benefits include cost of travel and payment of fees. }"
  1717. X}
  1718. XThe most interesting things about it are the use of outdented paragraphs,
  1719. Xand the @Code "@Wide" symbol which restricts the width of the second column,
  1720. Xwhich would otherwise be as wide as the first and last.  Here is the result:
  1721. X@DP
  1722. X@OneRow 10p @Font 1.15fx @Break @Tab
  1723. X    linewidth { 1.0 pt }
  1724. X    vmargin { 0.4v }
  1725. X    @Fmta { @Col @B A ! @Col @B B ! @Col @B C ! @Col @B D }
  1726. X    @Fmtb { @Col outdent @Break A ! @Col 1.8c @Wide ragged @Break B !
  1727. X            @Col C ! @Col outdent @Break D }
  1728. X{
  1729. X@Rowa above { single } below { single }
  1730. X    A { Scholarship }
  1731. X    B { Value $ }
  1732. X    C { Closing date }
  1733. X    D { Qualifications }
  1734. X
  1735. X@Rowa
  1736. X    A { 1.  Tenable at the University of Sydney }
  1737. X
  1738. X@Rowb
  1739. X    A { Commonwealth and University Postgraduate Research Awards }
  1740. X    B { 10,415 (12,724 to 16,433 from 1 January 1990) }
  1741. X    C { 31 October }
  1742. X    D { Graduates with Hons I or Hons II Div. 1.  For research in any field }
  1743. X
  1744. X@Rowb
  1745. X    A { Commonwealth Postgraduate Course Awards }
  1746. X    B { 10,415 }
  1747. X    C { 30 September }
  1748. X    D { Graduates with honours degrees or very good pass degrees.  For
  1749. XMaster's degrees undertaken by coursework }
  1750. X
  1751. X@Rowb
  1752. X    A { R. and M. Bentwich Scholarship }
  1753. X    D { Graduate who holds a postgraduate research scholarship and who
  1754. Xrequires a supplementary grant }
  1755. X
  1756. X@Rowa
  1757. X    A { 2.  Awarded by external bodies }
  1758. X
  1759. X@Rowb
  1760. X    A { Caltex }
  1761. X    B { 24,000 }
  1762. X    C { 30 September }
  1763. X    D { Female graduates completing degree or diploma in year of application }
  1764. X
  1765. X@Rowb
  1766. X    A { Rhodes Scholarship }
  1767. X    B { @Sterling3500 + return air-fare }
  1768. X    C { 1 October }
  1769. X    D { Age limit 25.  For tenure at the University of Oxford }
  1770. X    below { single }
  1771. X}
  1772. X@DP
  1773. X10p @Font { *Additional benefits include cost of travel and payment of fees. }
  1774. X@End @Section
  1775. END_OF_FILE
  1776.   if test 3507 -ne `wc -c <'lout/doc/tr.tab/s7'`; then
  1777.     echo shar: \"'lout/doc/tr.tab/s7'\" unpacked with wrong size!
  1778.   fi
  1779.   # end of 'lout/doc/tr.tab/s7'
  1780. fi
  1781. if test -f 'lout/include/doc' -a "${1}" != "-c" ; then 
  1782.   echo shar: Will not clobber existing file \"'lout/include/doc'\"
  1783. else
  1784.   echo shar: Extracting \"'lout/include/doc'\" \(4110 characters\)
  1785.   sed "s/^X//" >'lout/include/doc' <<'END_OF_FILE'
  1786. X
  1787. X###############################################################################
  1788. X#                                                                             #
  1789. X#  Setup file for invoking @DocumentLayout for simple documents               #
  1790. X#                                                                             #
  1791. X#  Jeffrey H. Kingston                                                        #
  1792. X#  22 December 1992                                                           #
  1793. X#                                                                             #
  1794. X###############################################################################
  1795. X
  1796. X@SysInclude { ft  }
  1797. X@SysInclude { dl  }
  1798. X# @SysInclude { eq  }
  1799. X# @SysInclude { tab }
  1800. X# @SysInclude { pas }
  1801. X# @SysInclude { fig }
  1802. X
  1803. X@Use { @DocumentLayout
  1804. X  # @InitialFont       {  Times Base 12p } # initial font
  1805. X  # @InitialBreak      {  adjust 1.20fx  } # initial break
  1806. X  # @Hyphenate         {  Yes            } # Want hyphenation? Yes or No
  1807. X  # @MajorHeadingFont  {  Bold 2.0f      } # font for major headings
  1808. X  # @HeadingFont       {  Bold           } # font for ordinary headings
  1809. X  # @MinorHeadingFont  {  Bold           } # font for minor headings
  1810. X  # @BookCoverFont     {  Helvetica Base } # font for book cover
  1811. X
  1812. X  # @ParaGap           {  1.30vx         } # gap between paragraphs
  1813. X  # @ParaIndent        {  2.00f          } # paragraph first-line indent
  1814. X
  1815. X  # @DispGap           {  1.00v          } # gap above and below displays
  1816. X  # @DispIndent        {  2.00f          } # @IndentedDisplay indent
  1817. X  # @DefaultIndent     {  0.5rt          } # @Display indent
  1818. X  # @WideIndent        {  4.00f          } # @WideTaggedList indent
  1819. X  # @VeryWideIndent    {  8.00f          } # @VeryWideTaggedList indent
  1820. X
  1821. X  # @PageWidth         { 21.00c          } # width of page
  1822. X  # @PageHeight        { 29.70c          } # height of page
  1823. X  # @PageMargin        {  2.50c          } # size of all four margins
  1824. X  # @Columns           {  Single         } # Single, Double, Multi
  1825. X  # @DoubleColWidth    {  7.50c          } # column width used by Double
  1826. X  # @MultiColWidth     {  4.67c          } # column width used by Multi
  1827. X  # @ColGap            {  1.00c          } # gap between columns
  1828. X  # @TopGap            {  0.75c          } # gap between figures
  1829. X  # @MidGap            {  0.75c          } # gap above and below body text
  1830. X
  1831. X  # @FootNoteFont      {  0.80f          } # font for footnotes
  1832. X  # @FootNoteBreak     {  1.20fx         } # break for footnotes
  1833. X  # @FootLen           {  2.00c          } # footnote line and indent size
  1834. X  # @ColFootLen        {  1.20c          } # @FootLen when Double, Multi
  1835. X  # @FootGap           {  0.20c          } # gap between footnotes
  1836. X
  1837. X  # @MakeIndex         {  No             } # Want index? Yes or No
  1838. X  # @IndexColumns      {  Double         } # Single, Double, Multi
  1839. X
  1840. X  # @TableOfContents   {  No             } # Want contents? Yes or No
  1841. X  # @MajorContentsGap  {  1.30v          } # gap above major entry
  1842. X  # @ContentsGap       {  1.00v          } # gap above ordinary entry
  1843. X
  1844. X  # @ChapterNumbers    {  Yes            } # Yes or No            
  1845. X  # @SectionNumbers    {  Yes            } # Yes or No            
  1846. X  # @SubSectionNumbers {  Yes            } # Yes or No            
  1847. X  # @AppendixNumbers   {  Yes            } # Yes or No            
  1848. X  # @SubAppendixNumbers{  Yes            } # Yes or No            
  1849. X  # @ChapterGap        {  1.10b          } # gap before each chapter
  1850. X  # @SectionGap        {  2.00v          } # gap before each section
  1851. X  # @SubSectionGap     {  1.50v          } # gap before each subsection
  1852. X  # @AppendixGap       {  2.00v          } # gap before each appendix
  1853. X  # @SubAppendixGap    {  2.00v          } # gap before each subappendix
  1854. X
  1855. X  # @PageNumbers       {  Yes            } # Want page numbers? Yes or No
  1856. X  # @FirstPageNumber   {  1              } # Number of first page 
  1857. X  # @PageOneTopFormat  { @Null               }
  1858. X  # @PageOneFootFormat { @Null               }
  1859. X  # @PageTopFormat     { |0.5rt - @PageNum - }
  1860. X  # @PageFootFormat    { @Null               }
  1861. X  # @BookTitleFormat   { Bold @Font @Title   } 
  1862. X}
  1863. END_OF_FILE
  1864.   if test 4110 -ne `wc -c <'lout/include/doc'`; then
  1865.     echo shar: \"'lout/include/doc'\" unpacked with wrong size!
  1866.   fi
  1867.   # end of 'lout/include/doc'
  1868. fi
  1869. if test -f 'lout/include/pas' -a "${1}" != "-c" ; then 
  1870.   echo shar: Will not clobber existing file \"'lout/include/pas'\"
  1871. else
  1872.   echo shar: Extracting \"'lout/include/pas'\" \(3621 characters\)
  1873.   sed "s/^X//" >'lout/include/pas' <<'END_OF_FILE'
  1874. X
  1875. X###############################################################################
  1876. X#                                                                             #
  1877. X#  Lout @Pas package for formatting Pascal programs (Version 2.0)             #
  1878. X#                                                                             #
  1879. X#  Version 1.0 by Jeffrey H. Kingston, June 1991.                             #
  1880. X#  Version 2.0 by Jeffrey H. Kingston, 22 December 1992.                      #
  1881. X#                                                                             #
  1882. X#  See "Eq - a Lout package for typesetting mathematics" for user             #
  1883. X#  information.                                                               #
  1884. X#                                                                             #
  1885. X#  Reference:   Jensen, K. and Wirth, N.  Pascal User Manual and Report.      #
  1886. X#               Second Edition, Springer-Verlag, 1975.                        #
  1887. X#                                                                             #
  1888. X###############################################################################
  1889. X
  1890. Xexport    "0" "1" "2" "3" "4" "5" "6" "7" "8" "9"
  1891. X    "." "," ":" ";" "'" "`" "+" "-" "*" "/" "(" ")"
  1892. X    "[" "]" "^" ".." "=" "<" ">" "<>" "<=" ">=" ":="
  1893. X
  1894. X    and array begin case const div do downto else end
  1895. X    file for forward function goto if in label mod nil not
  1896. X    of or otherwise packed procedure program record repeat
  1897. X    set then to type until var while with @Com
  1898. X
  1899. Xdef @Pas
  1900. X   body @Body
  1901. X@Begin
  1902. X
  1903. X    def @R right x { Base @Font x }
  1904. X    def @B right x { Bold @Font x }
  1905. X    def @S right x { { Symbol Base } @Font x }
  1906. X
  1907. X    def "0"    { @R "0"    }
  1908. X    def "1"    { @R "1"    }
  1909. X    def "2"    { @R "2"    }
  1910. X    def "3"    { @R "3"    }
  1911. X    def "4"    { @R "4"    }
  1912. X    def "5"    { @R "5"    }
  1913. X    def "6"    { @R "6"    }
  1914. X    def "7"    { @R "7"    }
  1915. X    def "8"    { @R "8"    }
  1916. X    def "9"    { @R "9"    }
  1917. X    def "."    { @R "."    }
  1918. X    def ","    { @R ","    }
  1919. X    def ":"    { @R ":"    }
  1920. X    def ";"    { @R ";"    }
  1921. X    def "'"    { @R "'"    }
  1922. X    def "`"    { @R "`"    }
  1923. X    def "+"    { @S "+"    }
  1924. X    def "-"    { @S "-"    }
  1925. X    def "*"    { @S "\052"    }
  1926. X    def "/"    { @R "\057"    }
  1927. X    def "("    { @R "("    }
  1928. X    def ")"    { @R ")"    }
  1929. X    def "["    { @R "["    }
  1930. X    def "]"    { @R "]"    }
  1931. X    def "^"    { @S 0.8f @Font "\255"    }
  1932. X    def ".."    { @R ".."    }
  1933. X    def "="    { @S "\075"    }
  1934. X    def "<"    { @S "\074"    }
  1935. X    def ">"    { @S "\076"    }
  1936. X    def "<>"    { @S "\271"    }
  1937. X    def "<="    { @S "\243"    }
  1938. X    def ">="    { @S "\263"    }
  1939. X    def ":="    { :{//0.03fo =} }
  1940. X
  1941. X    def and        { @B "and"        }
  1942. X    def array        { @B "array"        }
  1943. X    def begin        { @B "begin"        }
  1944. X    def case        { @B "case"        }
  1945. X    def const        { @B "const"        }
  1946. X    def div        { @B "div"        }
  1947. X    def do        { @B "do"        }
  1948. X    def downto        { @B "downto"        }
  1949. X    def else        { @B "else"        }
  1950. X    def end        { @B "end"        }
  1951. X    def file        { @B "file"        }
  1952. X    def for        { @B "for"        }
  1953. X    def forward        { @B "forward"        }
  1954. X    def function    { @B "function"        }
  1955. X    def goto        { @B "goto"        }
  1956. X    def if        { @B "if"        }
  1957. X    def in        { @B "in"        }
  1958. X    def label        { @B "label"        }
  1959. X    def mod        { @B "mod"        }
  1960. X    def nil        { @B "nil"        }
  1961. X    def not        { @B "not"        }
  1962. X    def of        { @B "of"        }
  1963. X    def or        { @B "or"        }
  1964. X    def otherwise    { @B "otherwise"    }
  1965. X    def packed        { @B "packed"        }
  1966. X    def procedure    { @B "procedure"    }
  1967. X    def program        { @B "program"        }
  1968. X    def record        { @B "record"        }
  1969. X    def repeat        { @B "repeat"        }
  1970. X    def set        { @B "set"        }
  1971. X    def then        { @B "then"        }
  1972. X    def to        { @B "to"        }
  1973. X    def type        { @B "type"        }
  1974. X    def until        { @B "until"        }
  1975. X    def var        { @B "var"        }
  1976. X    def while        { @B "while"        }
  1977. X    def with        { @B "with"        }
  1978. X
  1979. X    def @Com right x    { @R "{" x @R "}"    }
  1980. X
  1981. X   Slope @Font lines @Break @Body
  1982. X
  1983. X@End @Pas
  1984. END_OF_FILE
  1985.   if test 3621 -ne `wc -c <'lout/include/pas'`; then
  1986.     echo shar: \"'lout/include/pas'\" unpacked with wrong size!
  1987.   fi
  1988.   # end of 'lout/include/pas'
  1989. fi
  1990. if test -f 'lout/include/tab_prepend' -a "${1}" != "-c" ; then 
  1991.   echo shar: Will not clobber existing file \"'lout/include/tab_prepend'\"
  1992. else
  1993.   echo shar: Extracting \"'lout/include/tab_prepend'\" \(2912 characters\)
  1994.   sed "s/^X//" >'lout/include/tab_prepend' <<'END_OF_FILE'
  1995. X%%BeginResource: procset LoutTabPrependGraphic
  1996. X%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1997. X%                                                  %
  1998. X%  PostScript @SysPrependGraphic file for @Tab     %
  1999. X%                                                  %
  2000. X%  To assist in avoiding name clashes, the names   %
  2001. X%  of all these symbols begin with "ltab".         %
  2002. X%                                                  %
  2003. X%  Jeffrey H. Kingston                             %
  2004. X%  24 September 1991                               %
  2005. X%  22 December 1992                                %
  2006. X%                                                  %
  2007. X%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2008. X
  2009. X% linewidth ltabhs -
  2010. X% horizontal single line
  2011. X/ltabhs
  2012. X{  0 0 moveto xsize 0 lineto
  2013. X   setlinewidth 0 setlinecap stroke
  2014. X} def
  2015. X
  2016. X% linewidth ltabhsp -
  2017. X% horizontal single line with projecting ends
  2018. X/ltabhsp
  2019. X{  0 0 moveto xsize 0 lineto
  2020. X   setlinewidth 2 setlinecap stroke
  2021. X} def
  2022. X
  2023. X% linewidth ltabhd -
  2024. X% horizontal double line
  2025. X/ltabhd
  2026. X{  dup dup
  2027. X   0 0 moveto xsize 0 lineto
  2028. X   0 exch 3 mul moveto xsize exch 3 mul lineto
  2029. X   setlinewidth 0 setlinecap stroke
  2030. X} def
  2031. X
  2032. X% linewidth ltabhdb -
  2033. X% horizontal double line below mark
  2034. X/ltabhdb
  2035. X{  dup dup
  2036. X   0 0 moveto xsize 0 lineto
  2037. X   0 exch -3 mul moveto xsize exch -3 mul lineto
  2038. X   setlinewidth 0 setlinecap stroke
  2039. X} def
  2040. X
  2041. X% linewidth ltabhdnw -
  2042. X% horizontal double line with northwest corner
  2043. X/ltabhdnw
  2044. X{  dup dup dup dup
  2045. X   0 0 moveto xsize 0 lineto
  2046. X   xsize exch 3 mul moveto
  2047. X   -3 mul exch 3 mul lineto
  2048. X   -3 mul 0 lineto
  2049. X   setlinewidth 0 setlinejoin 2 setlinecap stroke
  2050. X} def
  2051. X
  2052. X% linewidth ltabhdne -
  2053. X% horizontal double line with northeast corner
  2054. X/ltabhdne
  2055. X{  dup dup dup dup
  2056. X   0 0 moveto xsize 0 lineto
  2057. X   0 exch 3 mul moveto
  2058. X   3 mul xsize add exch 3 mul lineto
  2059. X   3 mul xsize add 0 lineto
  2060. X   setlinewidth 0 setlinejoin 2 setlinecap stroke
  2061. X} def
  2062. X
  2063. X% linewidth ltabhdsw -
  2064. X% horizontal double line with southwest corner
  2065. X/ltabhdsw
  2066. X{  dup dup dup dup
  2067. X   0 0 moveto xsize 0 lineto
  2068. X   xsize exch -3 mul moveto
  2069. X   -3 mul exch -3 mul lineto
  2070. X   -3 mul 0 lineto
  2071. X   setlinewidth 0 setlinejoin 2 setlinecap stroke
  2072. X} def
  2073. X
  2074. X% linewidth ltabhdse -
  2075. X% horizontal double line with southeast corner
  2076. X/ltabhdse
  2077. X{  dup dup dup dup
  2078. X   0 0 moveto xsize 0 lineto
  2079. X   0 exch -3 mul moveto
  2080. X   3 mul xsize add exch -3 mul lineto
  2081. X   3 mul xsize add 0 lineto
  2082. X   setlinewidth 0 setlinejoin 2 setlinecap stroke
  2083. X} def
  2084. X
  2085. X% linewidth ltabvs -
  2086. X% vertical single line
  2087. X/ltabvs
  2088. X{  0 0 moveto 0 ysize lineto
  2089. X   setlinewidth 0 setlinecap stroke
  2090. X} def
  2091. X
  2092. X% linewidth ltabvd -
  2093. X% vertical double line
  2094. X/ltabvd
  2095. X{  dup dup
  2096. X   0 0 moveto 0 ysize lineto
  2097. X   -3 mul 0 moveto -3 mul ysize lineto
  2098. X   setlinewidth 0 setlinecap stroke
  2099. X} def
  2100. X
  2101. X% linewidth ltabvdr -
  2102. X% vertical double line to right of mark
  2103. X/ltabvdr
  2104. X{  dup dup
  2105. X   0 0 moveto 0 ysize lineto
  2106. X   3 mul 0 moveto 3 mul ysize lineto
  2107. X   setlinewidth 0 setlinecap stroke
  2108. X} def
  2109. X%%EndResource
  2110. END_OF_FILE
  2111.   if test 2912 -ne `wc -c <'lout/include/tab_prepend'`; then
  2112.     echo shar: \"'lout/include/tab_prepend'\" unpacked with wrong size!
  2113.   fi
  2114.   # end of 'lout/include/tab_prepend'
  2115. fi
  2116. if test -f 'lout/man/lout.1' -a "${1}" != "-c" ; then 
  2117.   echo shar: Will not clobber existing file \"'lout/man/lout.1'\"
  2118. else
  2119.   echo shar: Extracting \"'lout/man/lout.1'\" \(2954 characters\)
  2120.   sed "s/^X//" >'lout/man/lout.1' <<'END_OF_FILE'
  2121. X.TH LOUT 1
  2122. X.SH NAME
  2123. Xlout - prepare Lout document for printing
  2124. X.SH SYNOPSIS
  2125. Xlout [ -i<filename> ] files
  2126. X.SH DESCRIPTION
  2127. XInvoke the Basser Lout interpreter on the concatenation of the named
  2128. Xfiles, producing a PostScript file on standard output suitable for
  2129. Xprinting on PostScript printers using lpr(1).  If no files are named,
  2130. Xstdin is used instead.  The special file name - may be used to denote
  2131. Xstandard input.
  2132. X.SH OPTIONS
  2133. X.TP 16
  2134. X-i<filename>  
  2135. XSearch the directories of the include file path (see below) for
  2136. X<filename> and include it.  There may be multiple -i options.
  2137. X.TP
  2138. X-s
  2139. XSuppress all reading and writing of the cross reference database;
  2140. Xother databases are not affected.  Useful when many simple documents that
  2141. Xdon't do any cross referencing are stored in one directory.
  2142. X.TP
  2143. X-e<filename>
  2144. XDirect error messages to <filename> instead of to stderr.
  2145. X.TP
  2146. X-o<filename>
  2147. XDirect PostScript output to <filename> instead of to stdout.
  2148. X.TP
  2149. X-I<dirname>
  2150. XAdd <dirname> to the list of directories searched for @Include files
  2151. Xand -i option files.  There may be multiple -I options.  @Include first
  2152. Xsearches the current directory, then searches the -I directories in the
  2153. Xorder given, and finally searches the default include file directory
  2154. X(see below).  @SysInclude and the -i option omit the search of the
  2155. Xcurrent directory.
  2156. X.TP
  2157. X-F<dirname>
  2158. XAdd <dirname> to the list of directories searched for font (.AFM) files.
  2159. XThere may be multiple -F options; the directories are searched in the
  2160. Xorder given, and finally the default font file directory is searched
  2161. X(see below).
  2162. X.TP
  2163. X-D<dirname>
  2164. XAdd <dirname> to the list of directories searched for Lout database
  2165. Xfiles.  There may be multiple -D options.  @Database searches the
  2166. Xcurrent directory, then the -D directories in the order given, and
  2167. Xfinally searches the default database file directory (see below).
  2168. X@SysDatabase omits the search of the current directory.
  2169. X.TP
  2170. X-V
  2171. XPrint version information on stderr.
  2172. X.TP
  2173. X-EPS
  2174. XProduce output in the form of an EPS (Encapsulated PostScript) file,
  2175. Xsuitable for inclusion in another document.
  2176. X.SH LIMITS
  2177. X.nf
  2178. XAt most 255 input files (no limit on @IncludeGraphic files)
  2179. XAt most 255 characters per input line
  2180. XAt most 100 fonts (each different size counts as one font)
  2181. XAt most 5 deep nesting of @Include files
  2182. X.SH FILES
  2183. X.nf
  2184. X<BINDIR>/lout  -  Binary file
  2185. X<LIBDIR>/include  -  Default include file dir.
  2186. X<LIBDIR>/data  -  Default standard databases dir.
  2187. X<LIBDIR>/font  -  Default font metrics files dir.
  2188. X<DOCDIR>  -  Directory containing Lout documentation
  2189. X.fi
  2190. X.SH SEE ALSO
  2191. X.P
  2192. Xlpr(1), ghostview(1)
  2193. X.SH REFERENCES
  2194. X.P
  2195. XFor a description of the Lout document formatting system,
  2196. Xsee Jeffrey H. Kingston, "Document Formatting with Lout",
  2197. XTech. Rep. 449, Basser Dept. of Computer Science, The
  2198. XUniversity of Sydney 2006, Australia (December 1992).
  2199. XSee Adobe Systems Inc., "PostScript Language Reference Manual
  2200. X(Second Edition)", Addison-Wesley, 1990, for PostScript.
  2201. X.SH AUTHOR
  2202. X.P
  2203. XJeffrey H. Kingston
  2204. END_OF_FILE
  2205.   if test 2954 -ne `wc -c <'lout/man/lout.1'`; then
  2206.     echo shar: \"'lout/man/lout.1'\" unpacked with wrong size!
  2207.   fi
  2208.   # end of 'lout/man/lout.1'
  2209. fi
  2210. echo shar: End of archive 28 \(of 30\).
  2211. cp /dev/null ark28isdone
  2212. MISSING=""
  2213. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ; do
  2214.     if test ! -f ark${I}isdone ; then
  2215.     MISSING="${MISSING} ${I}"
  2216.     fi
  2217. done
  2218. if test "${MISSING}" = "" ; then
  2219.     echo You have unpacked all 30 archives.
  2220.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  2221. else
  2222.     echo You still must unpack the following archives:
  2223.     echo "        " ${MISSING}
  2224. fi
  2225. exit 0
  2226. exit 0 # Just in case...
  2227.