@Section @Title { Galleys } @Tag { galleys } @Begin @PP It is time to pause and ask ourselves how close we are to achieving our aim of producing neatly formatted documents. We can certainly produce the pieces of a document: @ID { nohyphen @Break @LittlePageColumn { @DP |0.5rt {@B PURCELL}{ 0.8f @Font 1 ^//0.2v} @DP In the world of music England is supposed to be a mere province. If she produces an indifferent composer or performer, that is regarded elsewhere as perfectly normal and natural; but if foreign students of musical history have to acknowledge a British musical genius, he is considered a freak. @PP Such a freak is Henry Purcell. Yet if we make a choice of fifteen of the world's musical classics, as here, we find that we cannot omit this English master. } ||1c @LittlePageColumn { { 0.8f @Font 1 ^//0.2v}Blom, Eric. @I {Some Great Composers.} Oxford, 1944. } ||1c @Code { @LittlePage { "@TextPlace" //1rt "@FootSect" } // @LittlePage { "@TextPlace" //1rt "@FootSect" } // @LittlePage { "@TextPlace" //1rt "@FootSect" } //0.2c 8p @Font "@PageList" } } but when we try to merge them together, we encounter two obstacles. @PP First, when an object is entered at a certain place in the document, it appears at that place. But a footnote is naturally entered immediately after the point it refers to (`{-2p @Font PURCELL}' in this case), yet it appears somewhere else: at the bottom of a page. @PP Second, all our features build up larger objects out of smaller ones, but the -2p @Font PURCELL object, for example, must be broken down into page-sized pieces. This occurs when the available space at the `somewhere else' is insufficient to hold the entire object, so this second obstacle arises out of the first. @PP Lout's last major feature, which we introduce to overcome these obstacles, is the @I galley galley.feature @Index { Galleys } (the name is borrowed from the galleys used in manual typesetting). A galley is an object plus a cross reference which points to where the object is to appear. The example above has three galleys: @ID { { //0.1c nohyphen @Break @LittlePageColumn { @DP |0.5rt {@B PURCELL}{ 0.8f @Font 1 ^//0.2v} @DP In the world of music England is supposed to be a mere province. If she produces an indifferent composer or performer, that is regarded elsewhere as perfectly normal and natural; but if foreign students of musical history have to acknowledge a British musical genius, he is considered a freak. @PP Such a freak is Henry Purcell. Yet if we make a choice of fifteen of the world's musical classics, as here, we find that we cannot omit this English master. } { //0.4c 180d @Rotate @Arrow 2.0c } } ||0io ||4.8c @Code { @LittlePage { "@TextPlace" //1rt "@FootSect" } // @LittlePage { "@TextPlace" //1rt "@FootSect" } // @LittlePage { "@TextPlace" //1rt "@FootSect" } //0.2c 8p @Font "@PageList" } 180d @Rotate @Arrow 1i @I -2p @Font {to printer} ||0io ||2.0c { //3.9c { @Arrow 1.7c } nohyphen @Break @LittlePageColumn { { 0.8f @Font 1 ^//0.2v}Blom, Eric. @I {Some Great Composers.} Oxford, 1944. } } } A galley replaces the invocation pointed to by its cross reference. If space is not sufficient there to hold it all, the remainder of the galley is split off (the vertical concatenation symbol preceding it being discarded) and it replaces later invocations of the same symbol. This is exactly what is required to get text and footnotes onto pages. @PP To create a galley, first define a symbol with a special @Code into into @Index { @Code into clause } clause, like this: @ID @OneRow @Code { "def @FootNote into { @FootPlace&&following }" " right x" "{" " 8p @Font x" "}" } An invocation of such a symbol will then be a galley whose object is the result of the invocation, and whose cross reference is given by the @Code into clause. The right parameter of the cross reference must be one of {@Code preceding}, {@Code following}, and {@Code foll_or_prec}. @PP A symbol, like @Code "@FootPlace", which is the @I target of a galley, target.g @Index { Target of a galley } must contain the special symbol @@Galley exactly once in its body; often this is all that the body contains: @ID @Code { "def @FootPlace { @Galley }" } It is this special symbol that is replaced by the incoming galley, in fact, not the @Code "@FootPlace" symbol as a whole. @PP A symbol which contains @@Galley, either directly within its body or indirectly within the body of a symbol it invokes, is called a @I receptive receptive @Index { Receptive symbol } symbol, meaning receptive to galleys. @Code "@FootPlace" is receptive, which makes @Code "@FootList", @Code "@FootSect" and @Code "@PageList" receptive since they invoke @Code "@FootPlace". If no galley replaces any @@Galley within some invocation of a receptive symbol, that invocation is replaced by @@Null. The advantages of this rule for page layout were explained at the end of Section {@NumberOf definitions}. @PP Let us now follow through the construction of our example document. Initially there is just the one @I root root.galley @Index { Root galley } galley, containing an unexpanded invocation of @Code "@PageList": @ID { ||5c 10p @Font @Code "@PageList" 180d @Rotate @Arrow 1i @I -2p @Font {to printer} } Then the -2p @Font PURCELL galley appears, targeted to a @Code "@TextPlace". Lout knows that there is a @Code "@TextPlace" hidden inside @Code "@PageList", so it expands @Code "@PageList": @ID { { //0.1c nohyphen @Break @LittlePageColumn { @DP |0.5rt {@B PURCELL}{ 0.8f @Font 1 ^//0.2v} @DP In the world of music England is supposed to be a mere province. If she produces an indifferent composer or performer, that is regarded elsewhere as perfectly normal and natural; but if foreign students of musical history have to acknowledge a British musical genius, he is considered a freak. @PP Such a freak is Henry Purcell. Yet if we make a choice of fifteen of the world's musical classics, as here, we find that we cannot omit this English master. } { //0.4c 180d @Rotate @Arrow 2.2c } } ||0io ||5c @Code { @LittlePage { "@TextPlace" //1rt "@FootSect" } //0.2c 8p @Font "@PageList" } 180d @Rotate @Arrow 1i @I -2p @Font {to printer} } After promoting the first line into @Code "@TextPlace", the footnote galley attached to it appears and demands an invocation of @Code "@FootPlace" following its attachment point (`{-2p @Font PURCELL}'). Such a @Code "@FootPlace" is found at the bottom of the first page, inside @Code "@FootSect", which is accordingly expanded, and the footnote is promoted onto the page: @ID { { //1.2c nohyphen @Break @LittlePageColumn { In the world of music England is supposed to be a mere province. If she produces an indifferent composer or performer, that is regarded elsewhere as perfectly normal and natural; but if foreign students of musical history have to acknowledge a British musical genius, he is considered a freak. @PP Such a freak is Henry Purcell. Yet if we make a choice of fifteen of the world's musical classics, as here, we find that we cannot omit this English master. } 180d @Rotate @Arrow 2.2c } ||0io ||5c { nohyphen @Break @LittleDocument // @LittleText { @DP |0.5rt {@B PURCELL}{ 0.8f @Font 1 ^//0.2v} @LittleFootNote { { 0.8f @Font 1 ^//0.2v}Blom, Eric. @I {Some Great Composers.} Oxford, 1944. //1vx @Code "@FootList" } //1vx @Code "@TextPlace" } // @LittleEndRun //0.2c 8p @Font @Code "@PageList" } 180d @Rotate @Arrow 1i -2p @Font @I {to printer} } Now the promotion of the -2p @Font PURCELL galley resumes. When the first page is filled, Lout searches forwards for another @Code "@TextPlace" to receive the remainder, once again expanding a @Code "@PageList": @ID { { //4.85c nohyphen @Break @LittlePageColumn { performer, that is regarded elsewhere as perfectly normal and natural; but if foreign students of musical history have to acknowledge a British musical genius, he is considered a freak. @PP Such a freak is Henry Purcell. Yet if we make a choice of fifteen of the world's musical classics, as here, we find that we cannot omit this English master. } 180d @Rotate @Arrow 2.2c } ||0io ||5c { nohyphen @Break @LittleDocument // @LittleText { @DP |0.5rt {@B PURCELL}{ 0.8f @Font 1 ^//0.2v} @LittleFootNote { { 0.8f @Font 1 ^//0.2v}Blom, Eric. @I {Some Great Composers.} Oxford, 1944. } @DP @HExpand {In the world of music} //1vx @HExpand {England is supposed to} //1vx @HExpand {be a mere province. If} //1vx @HExpand {she produces an indifferent composer or} } // @LittleEndRun // @LittlePage { @Code "@TextPlace" //1rt @Code "@FootSect" } //0.2c 8p @Font @Code "@PageList" } 180d @Rotate @Arrow 1i -2p @Font @I {to printer} } and so on. All these expansions and replacements are done with total integrity. For example, if Lout finds after expanding @Code "@FootSect" that the page is too full to accept even the first line of the footnote, @Code "@FootSect" is reset to unexpanded and the search for a target for the footnote moves on. And the cross reference direction, @Code preceding or @Code following, is always obeyed (although lack of space sometimes prevents Lout from choosing the nearest target). Only the root galley contains receptive symbols in our running example, but any galley may contain them. @End @Section