BeginStyle (IF) {}.cvx .def (THEN) {}.cvx .def (FI) {.cvx .if}.cvx .def (ELSE) {.cvx}.cvx .def (FIELSE) {.cvx .ifelse}.cvx .def (EXITifTRUE) {{.exit} .cvx .if}.cvx .def (EXITifFALSE) {.not {.exit} .cvx .if}.cvx .def (DO) {}.cvx .def (ENDLOOP) {.cvx .loop}.cvx .def (pageNumbering) {.true} .cvx .def (firstPageNumber) {1} .cvx .def (firstHeadersAfterPage) {1} .cvx .def (oneSidedFormat) % set false if you wish two-sided headers/footers {.true} .cvx .def (GalleyWidth) { the pageWidth the leftMargin .sub the rightMargin .sub the rightIndent .sub }.cvx .def (PageBuilder) { StartPageCounter DO { .page EXITifFALSE HeaderBox .exchbox FooterBox 3 .vbox .shipout IncrPage } ENDLOOP }.cvx .def (StartPageCounter) { (PageCount) (firstPageNumber) .load .def }.cvx .def (GetPageCounter) { (Helvetica) 10 bp .textfont PageCount .cvi .cvs .textbox 1 .hbox }.cvx .def (IncrPage) { (PageCount) PageCount 1 .add .def }.cvx .def (IsOddPage) { PageCount .dup 2 .idiv 2 .mul .sub 1 .eq }.cvx .def (HeaderBox) { IF oneSidedFormat THEN { GetHeaders } ELSE { IF IsOddPage THEN { GetRectoHeaders } ELSE { GetVersoHeaders } FIELSE } FIELSE .fill 2 the headerMargin .vboxto } .cvx .def (GetHeaders) { IF pageNumbering PageCount firstHeadersAfterPage .gt .and THEN { (insideHeader) .getmark .fill (centerHeader) .getmark .fill GetPageCounter 5 GalleyWidth .hboxto } ELSE { .fill 1 GalleyWidth .hboxto } FIELSE } .cvx .def (GetRectoHeaders) { IF pageNumbering PageCount firstHeadersAfterPage .gt .and THEN { (insideRectoHeader) .getmark .fill (centerRectoHeader) .getmark .fill GetPageCounter 5 GalleyWidth .hboxto } ELSE { .fill 1 GalleyWidth .hboxto } FIELSE } .cvx .def (GetVersoHeaders) { IF pageNumbering PageCount firstHeadersAfterPage .gt .and THEN { GetPageCounter .fill (centerVersoHeader) .getmark .fill (insideVersoHeader) .getmark 5 GalleyWidth .hboxto } ELSE { (empty) .getmark .fill 2 GalleyWidth .hboxto } FIELSE } .cvx .def (FooterBox) { .fill IF oneSidedFormat THEN { GetFooters } ELSE { IF IsOddPage THEN { GetRectoFooters } ELSE { GetVersoFooters } FIELSE } FIELSE 2 the footerMargin .vboxto } .cvx .def (GetFooters) { IF pageNumbering PageCount firstHeadersAfterPage .gt .and THEN { (insideFooter) .getmark .fill (centerFooter) .getmark .fill (outsideFooter) .getmark 5 GalleyWidth .hboxto } ELSE { (empty) .getmark .fill 2 GalleyWidth .hboxto } FIELSE } .cvx .def (GetRectoFooters) { IF pageNumbering PageCount firstHeadersAfterPage .gt .and THEN { (insideRectoFooter) .getmark .fill (centerRectoFooter) .getmark .fill (outsideRectoFooter) .getmark 5 GalleyWidth .hboxto } ELSE { (empty) .getmark .fill 2 GalleyWidth .hboxto } FIELSE } .cvx .def (GetVersoFooters) { IF pageNumbering PageCount firstHeadersAfterPage .gt .and THEN { (outsideVersoFooter) .getmark .fill (centerVersoFooter) .getmark .fill (insideVersoFooter) .getmark 5 GalleyWidth .hboxto } ELSE { (empty) .getmark .fill 2 GalleyWidth .hboxto } FIELSE } .cvx .def EndStyle žBasicPrint.style Copyright c 1983, 1984, 1985 by Xerox Corporation. All rights reserved. Rick Beach, May 20, 1983 3:11 pm; added left/right footers last edited by Beach, August 9, 1983 4:28 pm; added lastLineFormatting StyleParam last edited by Beach, February 23, 1984 9:56:10 am PST; fixed GalleyWidth for 2 cols last edited by Beach, April 3, 1984 5:47:15 pm PST; fix a bug in NodeStyleImpl.Spaces last edited by Wyatt, May 17, 1984 4:09:00 pm PDT; fix sp to use screensp, printsp primitives Rick Beach, June 20, 1985 2:53:38 pm PDT last edited by Plass, March 27, 1986 2:22:41 pm PST; moved sp to Cedar.style Syntactic sugar Page layout control variables Page layout routines determines which page to format: odd => right (recto) page, even => left (verso) page How to use the various boolean flags: pageNumbering: default .true => pages are numbered; set to .false if pages are NOT to be numbered firstPageNumber: number of the first page; can be established by setting Postfix property to (firstPageNumber) 0 .def, or in a Style. oneSidedFormat: default .true => pages have same headers and footers on each page; set to .false if alternating even/odd headers and footers are desired How to use header/footer mark properties: create a Tioga text node with header/footer text Set property Mark to have a value of the header or footer kind from one of the kinds: insideHeader, centerHeader, outsideHeader, insideRectoHeader, centerRectoHeader, outsideRectoHeader, insideVersoHeader, centerVersoHeader, outsideVersoHeader, insideFooter, centerFooter, outsideFooter, insideRectoFooter, centerRectoFooter, outsideRectoFooter, insideVersoFooter, centerVersoFooter, outsideVersoFooter (although the default style places the page number when outside*Header would go. Other kinds of marks are permissible but unless the layout JaM code is changed to reference them they will disappear into the void (thus spelling errors are not caught). Be cautious with long text for header/footers. The TSetter should not wedge or fault of course, but the results WILL NOT be pleasing with a high probability. Await TiogaII for this to go away. How to customize the header/footer layout schemes: There should be strong evidence of a pattern to the header/footer layout in existence. One-sided pages have the page number in the top-right corner (where outsideHeader would go), and all the other 5 parts of running head/feet coming from Mark properties. Two-sided pages have the page number in the top-outside corners (where outside*Header would go), and all the other 11 (count'em!) parts of running head/feet coming from Mark properties. GetPageCounter arranges to create a box containing the page number. Modify it to include standard text if you wish. For example, (Helvetica) 10 bp .textfont "Page " .textbox PageCount .cvi .cvs .textbox 2 .hbox in which the text "Page " has been added and the number of boxes increased from 1 to 2, will generate folios of the form "Page 1". Κ%˜headeršœ™Icodešœ Οmœ=™HKšœ:™:K™QK™TK™UK™]Kšœ(™(KšœL™L—K™Iruledefšœ ˜ head™MšœΟsœ ˜Mšœžœ ˜Mšœžœ˜Mšœžœ˜Mšœžœ˜ Mšœž œ˜(Mšœž œ"˜.Mšœžœ ˜Mšœžœ˜—™šœΟb œ˜Jšœ˜—šœŸœ˜Jšœ ˜ —šœŸœ˜Jšœ ˜ —šœŸœΟc1˜BJšœ˜—šœŸ œ˜J˜KJšœ ˜ ——™šœŸ œ˜Jšœ˜šžœ˜Jšœž ˜Jšœ ˜ Jšœ˜Jšœ ˜ Jšœ˜Jšœ˜Jšœž˜ —Jšœ ˜ —šœŸœ˜Jšœ(˜(Jšœ ˜ —šœŸœ˜Jšœ@˜@Jšœ ˜ —šœŸœ˜ Jšœ!˜!Jšœ ˜ —šœŸ œ˜ J™UJ˜(Jšœ ˜ —šœŸ œ˜ šžœžœ˜Jšœ ˜ Jšœžœ˜šžœ žœ˜Jšœ˜Jšœžœ˜Jšœ˜Jšœž˜—Jšœž˜—Jšœ˜Jšœ˜Jšœ ˜ —šœŸ œ˜šžœ8žœ˜@JšœJ˜JJšœ˜Jšœžœ˜Jšœ˜Jšœž˜—Jšœ ˜ —šœŸœ˜šžœ8žœ˜@JšœT˜TJšœ˜Jšœžœ˜Jšœ˜Jšœž˜—Jšœ ˜ —šœŸœ˜šžœ8žœ˜@JšœT˜TJšœ˜Jšœžœ˜Jšœ,˜,Jšœž˜—Jšœ ˜ —šœŸ œ˜ Jšœ˜šžœžœ˜Jšœ ˜ Jšœžœ˜šžœ žœ˜Jšœ˜Jšœžœ˜Jšœ˜Jšœž˜—Jšœž˜—Jšœ˜Jšœ ˜ —šœŸ œ˜šžœ8žœ˜@JšœT˜TJšœ˜Jšœžœ˜Jšœ,˜,Jšœž˜—Jšœ ˜ —šœŸœ˜šžœ8žœ˜@Jšœc˜cJšœ˜Jšœžœ˜Jšœ,˜,Jšœž˜—Jšœ ˜ —šœŸœ˜šžœ8žœ˜@Jšœc˜cJšœ˜Jšœžœ˜Jšœ,˜,Jšœž˜—Jšœ ˜ ——M˜M˜Mšœ˜J™J™™%JšŸ œT™aJšŸœ:Ÿœ6™†JšŸœŠ™˜—™)J™0Jšœ™J™ΐ—™2J™VJ™¨J™ΉJšœs™sJšœ^™^J™‚——…— z=