home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / APPS / lout2.lzh / LOUT2 / DOC / TR.IMPL / s5.1 < prev    next >
Text File  |  1994-01-25  |  6KB  |  124 lines

  1. @SubSection
  2.     @Tag { galleys }
  3.     @Title { The galley abstraction }
  4. @Begin
  5. @PP
  6. Let us take the footnote as a representative example.  At some point in
  7. the document, we wish to write
  8. @ID @Code {
  9. "preceding text"
  10. "@FootNote { footnote text }"
  11. "following text"
  12. }
  13. and we expect the formatter to remove the footnote from this context and
  14. place it at the bottom of the current page, possibly splitting some or
  15. all of it onto a following page if space is insufficient.
  16. @PP
  17. An object appears in the final document at the point it is invoked, but
  18. this basic property does not hold for footnotes:  the point of
  19. invocation and the point of appearance are different.  In some way, the
  20. footnote is attached to the document at both points, introducing a cross
  21. linking (Section {@NumberOf genesis}) that cannot be described in purely
  22. functional terms.
  23. @PP
  24. Since the interpretation of any object depends on an environment and
  25. style inherited from the context, the first question must be whether
  26. the footnote inherits them through the invocation point or through
  27. the point(s) of appearance.
  28. @PP
  29. If symbols are to be interpreted statically as heretofore, then environments
  30. must be inherited through the invocation point alone.  Dynamic inheritance
  31. through the point of appearance is enticing in some ways:  it might
  32. replace the body parameter, and it might help with automatic numbering,
  33. since the number of a footnote is known only at the point of appearance;
  34. but the implementation problems are severe, and static inheritance seems
  35. much simpler and more comprehensible to the user.  Style, at least its
  36. available width and height part, must of necessity be inherited through
  37. the point of appearance.  For consistency, the entire style should be
  38. inherited in this way.  There is a suggestive analogy here with actual
  39. parameters, which have a point of invocation from which they inherit an
  40. environment, and a point of appearance within the body of the enclosing
  41. definition, from which they inherit a style.  It may be possible to treat
  42. a footnote as the actual parameter of some symbol, therefore, although
  43. the details seem very obscure.
  44. @PP
  45. But the most profound consequence of having two types of attachment
  46. point is that it leads to two distinctive tree structures.  Considering
  47. invocation points only leads to static trees like this one:
  48. @ID @I @Fig margin { 0.3c } { @Tree {
  49. @Node @Ellipse { body text }
  50. @LeftSub { @Node @Ellipse footnote }
  51. @RightSub {
  52.    @Node @Ellipse figure
  53.    @FirstSub { @Node @Ellipse footnote }
  54. }
  55. }}
  56. which shows that the body text contains a footnote and a figure, the
  57. latter itself containing a footnote.  Considering points of appearance
  58. only gives a completely different, dynamic tree:
  59. @ID @I @Fig margin { 0.3c } { @Tree {
  60. @Node @Ellipse { sequence of pages }
  61. @FirstSub { @Node @Ellipse { body text } }
  62. @NextSub  { @Node @Ellipse { footnote  } }
  63. @NextSub  { @Node @Ellipse { figure    } }
  64. @NextSub  { @Node @Ellipse { footnote  } }
  65. }}
  66. The tree can be deeper, for example with sections appearing within
  67. chapters which appear within the body text, which appears within the
  68. final sequence of pages.  Document formatting languages generally shirk
  69. the issues raised by this dual tree structure, by making the dynamic
  70. tree built-in, by limiting one or both trees to two levels, and so on,
  71. providing a classic example of the impoverishing effect of failing to
  72. permit language features to attain their natural level of generality.
  73. @PP
  74. We are thus led to propose a second abstraction for document formatting,
  75. which we name the @I galley in recognition of its similarity to the
  76. galleys used in manual typesetting.  A galley consists of an object (such
  77. as a footnote) together with a sequence of places where that object may
  78. appear (such as the bottoms of the current and following pages).  Splitting
  79. occurs quite naturally when space at any place is insufficient to hold
  80. the entire object.
  81. @PP
  82. In Lout, a footnote galley and its place of appearance are defined
  83. as follows:
  84. @ID @Code {
  85. "def @FootPlace { @Galley }"
  86. ""
  87. "def @FootNote into { @FootPlace&&following }"
  88. "    right x"
  89. "{ x }"
  90. }
  91. The @Code "@FootPlace" symbol contains the special symbol {@Code "@Galley"},
  92. indicating that it is a point of appearance for a galley.  By placing
  93. invocations of @Code "@FootPlace" at the bottoms of pages, as in Section
  94. {@NumberOf recursion}, we define the desired points of appearance for
  95. footnotes.  Symbols whose body contains @Code "@Galley" either directly
  96. or indirectly are called receptive symbols, meaning receptive to
  97. galleys, and they are expanded only on demand.  The effect of the
  98. @Code "into" clause is to make each invocation of @Code "@FootNote" a
  99. galley whose object is the result of the invocation in the usual way,
  100. and whose sequence of points of appearance is specified by the @Code "into"
  101. clause; in this example, the sequence of all @Code "@FootPlace" symbols
  102. following the invocation point.
  103. @PP
  104. Lout permits galleys to be invoked within other galleys to arbitrary
  105. depth, so that one may have footnotes within figures within the body
  106. text galley, for example, creating arbitrary static trees.  Receptive
  107. symbols like @Code "@FootPlace" may appear within any galley, creating
  108. arbitrary dynamic trees as well.  The root of the dynamic tree, which
  109. would normally consist of the sequence of pages of the complete assembled
  110. document, is considered to be a galley whose point of appearance is the 
  111. output file.  Points of appearance may be @Code preceding or @Code following
  112. the invocation point; entries in tables of contents are the main users
  113. of {@Code preceding}.
  114. @PP
  115. The galley abstraction is adequate for all of the applications listed at
  116. the beginning of this section, except that there is no provision for
  117. sorting index entries and references.  Sorting of galleys has been added
  118. to Lout as a built-in feature, invoked by adding a special @Code "@Key"
  119. parameter to the galleys, and using its value as the sort key.  The author
  120. was at a loss to find any other way, or any useful generalization of this
  121. feature.  Its implementation will be discussed in Section
  122. {@NumberOf cross.impl}.
  123. @End @SubSection
  124.