aboutsummaryrefslogblamecommitdiffstats
path: root/doc/expert/pre_open
blob: d332570b571cabe8dc7a1d6e08d4735825d85641 (plain) (tree)








































                                                                             
@Section
   @Title { "@Open and @Use" }
   @Tag { open }
@Begin
@PP
The @@Open symbol
open.sym @Index { @@Open symbol }
takes a cross reference or symbol
invocation for its left parameter, and an arbitrary object, which must
be enclosed in braces, for its right parameter.  The right parameter
may refer to the exported parameters and nested definitions of the invocation
denoted by the left parameter, and its value is the @@Open
symbol's result.  The target of the cross reference may lie in an
external database (Section {@NumberOf database}).  Any symbol available
outside the @@Open which happens to have the same name as one of the
symbols made available by the @@Open will be unavailable within the @@Open.
@PP
use.sym @Index { @@Use symbol }
The @@Use symbol is an @@Open symbol in a
different form.  It may only appear among or after the definitions
in Lout's input, and it is equivalent to enclosing the remainder of the
input in an @@Open symbol.  For example,
@ID @OneRow {
      @I definitions
//1vx @Code "@Use" @Code "{" @I x @Code "}"
//1vx @Code "@Use" @Code "{" @I y @Code "}"
//1vx @I { rest of input }
}
is equivalent to
@ID @OneRow {
      @I definitions
//1vx @I x @Code "@Open"
//1vx @Code "{" &4mt @I y @Code "@Open"
//1vx   &4mt @Code "{" @I { rest of input }
//1vx   &4mt @Code "}"
//1vx @Code "}"
}
The @@Use symbol allows a set of standard packages to be opened without
the inconvenience of enclosing the entire document in @@Open symbols.  Such
enclosure could cause Basser Lout to run out of memory.
@End @Section