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.LOUT / ch2.01 < prev    next >
Text File  |  1994-01-25  |  6KB  |  203 lines

  1. @Section
  2.   @Tag { lexical }
  3.   @Title { Lexical structure (words, spaces, symbols) and macros }
  4. @Begin
  5. @PP
  6. The input to Lout consists of a sequence of @I {textual units},
  7. textual.unit @Index {Textual unit }
  8. which may be
  9. either {@I{white spaces}},
  10. @I identifiers,
  11. @I delimiters,
  12. or
  13. @I {literal words}.  Each
  14. is a sequence of @I characters chosen from:
  15. letter @Index { Letter character }
  16. other @Index { Other character }
  17. quote @Index { Quote character }
  18. escape @Index { Escape character }
  19. comment.char @Index { Comment character }
  20. @ID @Tab
  21.     vmargin { 0.5vx }
  22.     @Fmta { @Col A ! @Col B }
  23. {
  24. @Rowa A { letter      } B { @Code "@ab-zAB-Z" }
  25. @Rowa A { white space } B { @I { space  tab  newline } }
  26. @Rowa A { quote       } B { @Code "\"" }
  27. @Rowa A { escape      } B { @Code "\\" }
  28. @Rowa A { comment     } B { @Code "#" }
  29. @Rowa A { other       } B { @Code "!$%&'()*+,-./0123456789:;<=>?[]^_`{|}~" }
  30. }
  31. Notice that @Code "@" is classed as a letter.  Version 2.05 of Basser
  32. Lout accepts the accented letters of the ISO-LATIN-1 character set
  33. (depending on how it is installed), and these are also classed as
  34. letters.  The ten digits are classed as `other' characters, and in
  35. fact the `other' class contains all 8-bit characters (except octal 0)
  36. not assigned to previous classes.
  37. @PP
  38. A @I {white space} is a sequence of one or more white space characters.
  39. white.space @Index { White space }
  40. space.f @Index { Space }
  41. @PP
  42. An @I identifier is a sequence of one or more letters which is the name of a
  43. identifier @Index { Identifier }
  44. symbol.  It is conventional but not essential to begin identifiers with
  45. {@Code "@"};  Basser Lout will print a warning message if it finds an
  46. unquoted literal word (see below) beginning with {@Code "@"}, since such
  47. words are usually misspelt identifiers.  The ten digits are not letters
  48. and may not appear in identifiers.  The complete list of predefined
  49. identifiers is
  50. @ID @Code {
  51. {     "@Begin"
  52.   @JL "@Break"
  53.   @JL "@Case"
  54.   @JL "@Char"
  55.   @JL "@Database"
  56.   @JL "@End"
  57.   @JL "@Font"
  58.   @JL "@Galley"
  59.   @JL "@Graphic"
  60.   @JL "@HAdjust"
  61.   @JL "@HContract"
  62.   @JL "@HExpand"
  63.   @JL "@High"
  64.   @JL "@HScale"
  65.   @JL "@Include"
  66. } |4.4cx {
  67.       "@IncludeGraphic"
  68.   @JL "@Key"
  69.   @JL "@LClos"
  70.   @JL "@LEnv"
  71.   @JL "@LInput"
  72.   @JL "@LVis"
  73.   @JL "@Moment"
  74.   @JL "@Next"
  75.   @JL "@Null"
  76.   @JL "@OneCol"
  77.   @JL "@OneRow"
  78.   @JL "@Open"
  79.   @JL "@PAdjust"
  80.   @JL "@PrependGraphic"
  81.   @JL "@Rotate"
  82. } |4.4cx {
  83.       "@Scale"
  84.   @JL "@Space"
  85.   @JL "@SysDatabase"
  86.   @JL "@SysInclude"
  87.   @JL "@SysIncludeGraphic"
  88.   @JL "@SysPrependGraphic"
  89.   @JL "@Tag"
  90.   @JL "@Tagged"
  91.   @JL "@Use"
  92.   @JL "@VAdjust"
  93.   @JL "@VContract"
  94.   @JL "@VExpand"
  95.   @JL "@VScale"
  96.   @JL "@Wide"
  97.   @JL "@Yield"
  98. }
  99. }
  100. plus the names of the parameters of @@Moment.  The symbols @@LClos, @@LEnv,
  101. lclos@Index { @@LClos symbol }
  102. lenv @Index { @@LEnv symbol }
  103. linput @Index { @@LInput symbol }
  104. lvis @Index { @@LVis symbol }
  105. @@LInput, and @@LVis appear in cross reference databases generated by Lout
  106. and are not for use elsewhere.
  107. @PP
  108. A @I delimiter is a sequence of one or more `other' characters which
  109. delimiter @Index { Delimiter }
  110. is the name of a symbol.  For example, @Code "{" and @Code "//" are
  111. delimiters.  When defining a delimiter, the name must be enclosed
  112. in quotes:
  113. @ID @Code {
  114. "def  \"^\"  { {}  ^&  {} }"
  115. }
  116. but quotes are not used when the delimiter is invoked.  A delimiter may
  117. have delimiters and any other characters adjacent, whereas identifiers
  118. may not be adjacent to letters or other identifiers.  The complete list
  119. of predefined delimiters is
  120. @ID @Code {
  121. {
  122.       "/"
  123.   @JL "//"
  124.   @JL "^/"
  125.   @JL "^//"
  126. } |2.2cx {
  127.       "|"
  128.   @JL "||"
  129.   @JL "^|"
  130.   @JL "^||"
  131. } |2.2cx {
  132.       "&"
  133.   @JL "^&"
  134. } |2.2cx {
  135.       "&&"
  136.   @JL "{"
  137.   @JL "}"
  138. }
  139. }
  140. A longer delimiter like @Code "<=" will be recognised in
  141. preference to a shorter one like {@Code "<"}.
  142. @PP
  143. A sequence of characters which is neither a white space, an identifier, nor a
  144. delimiter, is by default a @I {literal word}, which means that it will
  145. word @Index { Word }
  146. literal.word @Index { Literal word }
  147. quoted.word @Index { Quoted word }
  148. pass through Lout unchanged.  An arbitrary sequence of characters
  149. enclosed in double quotes, for example @Code "\"{  }\"", is also a
  150. literal word.  Space characters may be included, but not tabs or
  151. newlines.  There are special character sequences, used only between
  152. quotes, for obtaining otherwise inaccessible characters:
  153. @ID @Tab
  154.    vmargin { 0.5vx }
  155.    @Fmta { @Col A ! @Col B }
  156. {
  157. @Rowa A { @Code "\\\""   } B { produces @Code "\"" }
  158. @Rowa A { @Code "\\\\"   } B { "\\" }
  159. @Rowa A { @Code "\\ddd"  } B { the character whose ASCII code is }
  160. @Rowa A {                } B { the up to three digit octal number {@Code ddd} }
  161. }
  162. So, for example, @Code "\"\\\"@PP\\\"\"" produces {@Code "\"@PP\""}.
  163. @PP
  164. When the comment character
  165. comment @Index { Comment }
  166. @Code "#" is encountered, everything from
  167. that point to the end of the line is ignored.  This is useful for
  168. including reminders to oneself, like this:
  169. @ID @Code {
  170. "# Lout user manual"
  171. "# J. Kingston, June 1989"
  172. }
  173. for temporarily deleting parts of the document, and so on.
  174. @PP
  175. @I Macros
  176. macro @Index { Macro }
  177. provide a means of defining symbols which stand for a
  178. sequence of textual units rather than an object.  For example, the macro
  179. definition
  180. @ID @Code {
  181. "macro  @PP  {  //1.3vx  2.0f @Wide  &0i }"
  182. }
  183. makes Lout replace the symbol @Code "@PP" by the given textual units
  184. before assembling its input into objects.  A similar macro to this
  185. one is used to separate the paragraphs of the present document.  The
  186. enclosing braces and any spaces adjacent to them are dropped, which can
  187. be a problem:  @Code "@PP2i" has result {@Code "//1.3vx 2.0f @Wide &0i2i"}
  188. which is erroneous.
  189. @PP
  190. The meaning of symbols used within the body of a macro is determined by
  191. where the macro is defined, not by where it is used.  Due to implementation
  192. problems, @@Open symbols will not work within macros.  Named and body
  193. parameters will work if the symbol that they are parameters of is also
  194. present.  There is no way to get a left or right brace into the body of
  195. a macro without the matching brace.
  196. @PP
  197. Macros may be nested within other definitions and exported, but they may
  198. not be parameters.  They may not have parameters or nested definitions
  199. of their own, and consequently a preceding @Code export clause (Section
  200. {@NumberOf visibility}) would be pointless; however, an @Code import
  201. clause is permitted.
  202. @End @Section
  203.