@Section @Title { Changing the appearance of a program } @Tag { prg_opti } @Begin @PP The {@Code "@CP"}, {@Code "@Eiffel"} etc. symbols have a number of options for changing the appearance of the printed program. These options are the same for all symbols, although their default values may vary. The @Code "style" option changes the printing style; its programs. @RawIndex { programs } programs.style @SubIndex { @Code "style" option } style. @RawIndex { @Code "style" option } style.in.programs @SubIndex { in programs } programs. @RawIndex { programs } programs.fixed @SubIndex { @Code "fixed" style } fixed.programs @Index { @Code "fixed" style (programs) } value may be {@Code "fixed"} (fixed-width font), {@Code "varying"} programs. @RawIndex { programs } programs.varying @SubIndex { @Code "varying" style } varying.programs @Index { @Code "varying" style (programs) } programs. @RawIndex { programs } programs.symbol @SubIndex { @Code "symbol" style } symbol.programs @Index { @Code "symbol" style (programs) } (varying-width font), or {@Code "symbol"} (varying-width font with mathematical symbols used for some operators). Its default value depends on the language, and may be found in the fourth column of the table at the start of this chapter. The example in the previous section was in @Code fixed style; we can switch styles like this: @ID @OneRow @Code @Verbatim { @CP style { varying } { #include treeprint(p) /* print tree p recursively */ struct tnode *p; { if (p != NULL) { treeprint(p->left); printf(\%4d %s\\n\, p->count, p->word); treeprint(p->right); } } } } The result in this case will be @ID @OneRow @CP style { varying } { #include treeprint(p) /* print tree p recursively */ struct tnode *p; { if (p != NULL) { treeprint(p->left); printf("%4d %s\n", p->count, p->word); treeprint(p->right); } } } If we use @Code "style { symbol }" we get this: @ID @OneRow @CP style { symbol } { #include treeprint(p) /* print tree p recursively */ struct tnode *p; { if (p != NULL) { treeprint(p->left); printf("%4d %s\n", p->count, p->word); treeprint(p->right); } } } with mathematical symbols replacing some of the operators. @PP The {@Code "@CP"}, {@Code "@Eiffel"} etc. symbols have additional options which allow a finer control over the style. Here they all are, with their default values: @ID @OneRow @Code @Verbatim { @CP [ or @Eiffel, @Blue, etc. ] pipe {} numbered { No } blanknumbered { Yes } style { fixed } font { Courier } size { -1.0p } line { 1.0vx } blanklinescale { 1.0 } space { lout } tabin { 8 } tabout { 8s } identifiers { Base } keywords { Base } operators { Base } numbers { Base } strings { Base } comments { Base } { ... } } Apart from {@Code "pipe"}, {@Code "numbered"} and {@Code "blanknumbered"}, the default values shown are for @Code "style { fixed }" only; the other styles have other defaults (Section {@NumberOf cpsetup}). For the {@Code "pipe"} option, see Section {@NumberOf pipes}. @PP The value of {@Code "numbered"} may be {@Code "No"} (the default), {@Code "Yes"}, or a number, and it determines whether or not programs. @RawIndex { programs } programs.numbered @SubIndex { @Code "numbered" option } numbered.programs @Index { @Code "numbered" option (programs) } line numbers are to be added, and if so the value of the first one. If @Code "numbered" is {@Code "Yes"}, then the {@Code "blanknumbered"} option becomes relevant, and it determines whether blank lines are to programs. @RawIndex { programs } programs.blanknumbered @SubIndex { @Code "blanknumbered" option } blanknumbered.programs @Index { @Code "blanknumbered" option (programs) } receive line numbers or not. It has three acceptable values: {@Code "Yes"}, the default value, meaning that blank lines are printed with line numbers, just like other lines; {@Code No}, meaning that blank lines are not assigned line numbers; and {@Code NoPrint}, meaning that blank lines are assigned line numbers but these numbers are not printed, so that the line numbers printed before and after a single blank line will differ by 2. @PP The {@Code "style"} option is already familiar. Next comes {@Code "font"}, which determines the font family to use, {@Code "size"}, programs. @RawIndex { programs } programs.font @SubIndex { @Code "font" option } font.option. @RawIndex { @Code "font" option } font.option.in.programs @SubIndex { in program formatting } programs. @RawIndex { programs } programs.size @SubIndex { @Code "size" option } size.programs @Index { @Code "size" option (programs) } programs. @RawIndex { programs } programs.line @SubIndex { @Code "line" option } line.programs @Index { @Code "line" option (programs) } the font size to use, {@Code "line"}, the inter-line spacing, {@Code "blanklinescale"}, a scale factor by which the usual programs. @RawIndex { programs } programs.blanklinescale @SubIndex { @Code "blanklinescale" option } blanklinescale.programs @Index { @Code "blanklinescale" option (programs) } height of blank lines without printed line numbers is reduced (as in the option to the @Code "@Break" symbol of the same name), and {@Code "space"}, the spacing mode (as for the @Code "@Space" symbol of Section {@NumberOf white}). programs. @RawIndex { programs } programs.space @SubIndex { @Code "space" option } space.programs @Index { @Code "space" option (programs) } The default value of @Code "size" asks for one point smaller than in the surrounding document; this was done to compensate for Courier's relatively large appearance compared to other fonts of the same nominal size. @PP The @Code "tabin" and @Code "tabout" options are the subject of Section {@NumberOf tabs}. After them come six options giving the particular font faces in which to print identifiers, keywords, operators, programs. @RawIndex { programs } programs.identifiers @SubIndex { @Code "identifiers" option } identifiers.programs @Index { @Code "identifiers" option (programs) } programs. @RawIndex { programs } programs.keywords @SubIndex { @Code "keywords" option } keywords.programs @Index { @Code "keywords" option (programs) } programs. @RawIndex { programs } programs.operators @SubIndex { @Code "operators" option } operators.programs @Index { @Code "operators" option (programs) } programs. @RawIndex { programs } programs.numbers @SubIndex { @Code "numbers" option } numbers.programs @Index { @Code "numbers" option (programs) } programs. @RawIndex { programs } programs.strings @SubIndex { @Code "strings" option } strings.programs @Index { @Code "strings" option (programs) } programs. @RawIndex { programs } programs.comments @SubIndex { @Code "comments" option } comments.programs @Index { @Code "comments" option (programs) } numbers, strings, and comments. {@Code "Base"} means the basic face; other commonly available choices are {@Code "Slope"} and {@Code "Bold"}. These options may all be set to different faces if desired. @End @Section