| |
| ############################################################################### |
| # # |
| # Lout @PodSetup package for formatting Pod programs # |
| # # |
| # Jeffrey H. Kingston # |
| # 25 March 2000 # |
| # # |
| # This package uses a filtered body parameter to convert Pod source # |
| # code into Lout source. The filter program is prg2lout, which is # |
| # distributed with Lout and should be compiled and installed wherever # |
| # Lout itself is. # |
| # # |
| ############################################################################### |
| |
| export @Pod |
| def @PodSetup |
| named pipe { } # pipe through this first |
| named style |
| named @OrIfPlain left x right y |
| { @BackEnd @Case { PlainText @Yield y else @Yield x } } |
| { varying @OrIfPlain fixed } # print style |
| |
| |
| # the following options apply when style is "fixed" |
| |
| named fixedtextfont { Courier Base -1p } # text font |
| named fixedtextbreak { adjust 1.0vx hyphen } # text para breaking |
| named fixedverbatimfont { Courier Base } # verbatim font |
| named fixedtabin { 8 } # tab interval |
| named fixedtabout { 8s } # tab width |
| named fixedlinenumbersfont { } # line numbers font |
| named fixedlinenumbersformat right @Body{ @Body } # line numbers format |
| |
| named fixedparagap { 1.0v } # gap between paras |
| named fixedlistgap { 1.0v } # gap within lists |
| named fixedlistindent { 0s } # list label indent |
| named fixedlistrightindent { 0s } # list right indent |
| named fixedlistlabelwidth { 2.0f } # default label space |
| named fixedlistlabelfont { } # list label font |
| named fixedlistlabelformat right @Body { @Body } # list label format |
| |
| named fixedaheadfont { Bold +4p } # =head1 font |
| named fixedaheadbreak { lines 1.1vx } # =head1 para break |
| named fixedaheadformat right @Body { //1v @Body } # =head1 format |
| named fixedbheadfont { Bold +2p } # =head2 font |
| named fixedbheadbreak { lines 1.1vx } # =head2 para break |
| named fixedbheadformat right @Body { @Body } # =head2 format |
| named fixedcheadfont { Bold } # =head3 font |
| named fixedcheadbreak { lines 1.1vx } # =head3 para break |
| named fixedcheadformat right @Body { @Body } # =head3 format |
| |
| named fixeditalicfont { Slope } # font of I<> |
| named fixeditalicformat right @Body { @Body } # format of I<> |
| named fixedboldfont { Bold } # font of B<> |
| named fixedboldformat right @Body { @Body } # format of B<> |
| named fixedcodefont { Base } # font of C<> |
| named fixedcodeformat right @Body { @Body } # format of C<> |
| named fixedfilefont { Slope } # font of F<> |
| named fixedfileformat right @Body { @Body } # format of F<> |
| named fixedlinkfont { Slope } # font of L<> |
| named fixedlinkformat right @Body { @Underline @Body } # format of L<> |
| named fixedindexfont { Slope } # font of X<> |
| named fixedindexformat right @Body { @Body } # format of X<> |
| |
| |
| # the following options apply when style is "varying" |
| |
| named varyingtextfont { Times Base } # text font |
| named varyingtextbreak { adjust 1.0vx hyphen } # text para breaking |
| named varyingverbatimfont { Courier Base -1p } # verbatim font |
| named varyingtabin { 8 } # tab interval |
| named varyingtabout { 8s } # tab width |
| named varyinglinenumbersfont { } # line numbers font |
| named varyinglinenumbersformat right @Body{ @Body } # line numbers format |
| |
| named varyingparagap { 1.0v } # gap between paras |
| named varyinglistgap { 1.0v } # gap within lists |
| named varyinglistindent { 0s } # list label indent |
| named varyinglistrightindent { 0s } # list right indent |
| named varyinglistlabelwidth { 2.0f } # default label space |
| named varyinglistlabelfont { } # list label font |
| named varyinglistlabelformat right @Body { @Body } # list label format |
| |
| named varyingaheadfont { Bold +4p } # =head1 font |
| named varyingaheadbreak { lines 1.1vx } # =head1 para break |
| named varyingaheadformat right @Body{ //1v @Body } # =head1 format |
| named varyingbheadfont { Bold +2p } # =head2 font |
| named varyingbheadbreak { lines 1.1vx } # =head2 para break |
| named varyingbheadformat right @Body{ @Body } # =head2 format |
| named varyingcheadfont { Bold } # =head3 font |
| named varyingcheadbreak { lines 1.1vx } # =head3 para break |
| named varyingcheadformat right @Body{ @Body } # =head3 format |
| |
| named varyingitalicfont { Slope } # font of I<> |
| named varyingitalicformat right @Body { @Body } # format of I<> |
| named varyingboldfont { Bold } # font of B<> |
| named varyingboldformat right @Body { @Body } # format of B<> |
| named varyingcodefont { Courier Base -1p } # font of C<> |
| named varyingcodeformat right @Body { @Body } # format of C<> |
| named varyingfilefont { Slope } # font of F<> |
| named varyingfileformat right @Body { @Body } # format of F<> |
| named varyinglinkfont { Slope } # font of L<> |
| named varyinglinkformat right @Body { @Underline @Body } # format of L<> |
| named varyingindexfont { Slope } # font of X<> |
| named varyingindexformat right @Body{ @Body } # format of X<> |
| |
| # the following options apply when style is "symbol" |
| |
| named symboltextfont { Times Base } # text font |
| named symboltextbreak { adjust 1.0vx hyphen } # text para breaking |
| named symbolverbatimfont { Courier Base -1p } # verbatim font |
| named symboltabin { 8 } # tab interval |
| named symboltabout { 8s } # tab width |
| named symbollinenumbersfont { } # line numbers font |
| named symbollinenumbersformat right @Body { @Body } # line numbers format |
| |
| named symbolparagap { 1.0v } # gap between paras |
| named symbollistgap { 1.0v } # gap within lists |
| named symbollistindent { 0s } # list label indent |
| named symbollistrightindent { 0s } # list right indent |
| named symbollistlabelwidth { 2.0f } # default label space |
| named symbollistlabelfont { } # list label font |
| named symbollistlabelformat right @Body { @Body } # list label format |
| |
| named symbolaheadfont { Bold +4p } # =head1 font |
| named symbolaheadbreak { lines 1.1vx } # =head1 para break |
| named symbolaheadformat right @Body { //1v @Body } # =head1 format |
| named symbolbheadfont { Bold +2p } # =head2 font |
| named symbolbheadbreak { lines 1.1vx } # =head2 para break |
| named symbolbheadformat right @Body { @Body } # =head2 format |
| named symbolcheadfont { Bold } # =head3 font |
| named symbolcheadbreak { lines 1.1vx } # =head3 para break |
| named symbolcheadformat right @Body { @Body } # =head3 format |
| |
| named symbolitalicfont { Slope } # font of I<> |
| named symbolitalicformat right @Body{ @Body } # format of I<> |
| named symbolboldfont { Bold } # font of B<> |
| named symbolboldformat right @Body { @Body } # format of B<> |
| named symbolcodefont { Courier Base -1p } # font of C<> |
| named symbolcodeformat right @Body { @Body } # format of C<> |
| named symbolfilefont { Slope } # font of F<> |
| named symbolfileformat right @Body { @Body } # format of F<> |
| named symbollinkfont { Slope } # font of L<> |
| named symbollinkformat right @Body { @Underline @Body } # format of L<> |
| named symbolindexfont { Slope } # font of X<> |
| named symbolindexformat right @Body { @Body } # format of X<> |
| |
| @Begin |
| |
| |
| export |
| |
| @PV @PPG @PLG @PLI @PLRI @PLLW @PLL @PHA @PHB @PHC |
| @PFI @PFB @PFC @PFF @PFL @PFX @A "$>" @PL |
| |
| def @Pod |
| named style { style } # style |
| named pipe { pipe } # pipe through this |
| named textfont { dft } # text font |
| named textbreak { dft } # text para breaking |
| named verbatimfont { dft } # verbatim font |
| named tabin { dft } # tab interval |
| named tabout { dft } # tab width |
| named linenumbersfont { dft } # line numbers font |
| named paragap { dft } # gap between paras |
| named listgap { dft } # gap within lists |
| named listindent { dft } # list label indent |
| named listrightindent { dft } # list right indent |
| named listlabelwidth { dft } # default label space |
| named listlabelfont { dft } # list label font |
| named aheadfont { dft } # =head1 font |
| named aheadbreak { dft } # =head1 para break |
| named bheadfont { dft } # =head2 font |
| named bheadbreak { dft } # =head2 para break |
| named cheadfont { dft } # =head3 font |
| named cheadbreak { dft } # =head3 para break |
| named italicfont { dft } # font of I<> |
| named boldfont { dft } # font of B<> |
| named codefont { dft } # font of C<> |
| named filefont { dft } # font of F<> |
| named linkfont { dft } # font of L<> |
| named indexfont { dft } # font of X<> |
| body @Body # filtered, see below |
| @Begin |
| |
| def @Test # returns x unless x is dft |
| left x |
| named iffixed {} |
| named ifvarying {} |
| named ifsymbol {} |
| { |
| x @Case { |
| dft @Yield { |
| style @Case { |
| fixed @Yield { iffixed } |
| varying @Yield { ifvarying } |
| symbol @Yield { ifsymbol } |
| } |
| } |
| else @Yield x |
| } |
| } |
| |
| |
| def @Else # returns x, or y if x is dft |
| left x |
| right y |
| { |
| x @Case { |
| dft @Yield y |
| else @Yield x |
| } |
| } |
| |
| |
| def @InitTab |
| { |
| tabin @Test |
| iffixed { fixedtabin } |
| ifvarying { varyingtabin } |
| ifsymbol { symboltabin } |
| } |
| |
| |
| def @InitTabWidth |
| { |
| tabout @Test |
| iffixed { fixedtabout } |
| ifvarying { varyingtabout } |
| ifsymbol { symboltabout } |
| } |
| |
| |
| def @Filter |
| { |
| pipe @Case { |
| "" @Yield { |
| "prg2lout -r -lPod" -i{@FilterIn} -o{@FilterOut} -e{@FilterErr} |
| -t{@InitTab} -T{@InitTabWidth} |
| } |
| else @Yield { |
| "cat" @FilterIn "|" pipe "|" |
| "prg2lout -r -lPod" -o{@FilterOut} |
| -e{@FilterErr} -t{@InitTab} -T{@InitTabWidth} |
| } |
| } |
| } |
| |
| |
| def @InitFont |
| { |
| textfont @Test |
| iffixed { fixedtextfont } |
| ifvarying { varyingtextfont } |
| ifsymbol { symboltextfont } |
| } |
| |
| |
| |
| def @InitBreak |
| { |
| textbreak @Test |
| iffixed { fixedtextbreak } |
| ifvarying { varyingtextbreak } |
| ifsymbol { symboltextbreak } |
| } |
| |
| |
| def printverbatim |
| right x |
| { |
| def verbfont |
| { |
| verbatimfont @Test |
| iffixed { fixedverbatimfont } |
| ifvarying { varyingverbatimfont } |
| ifsymbol { symbolverbatimfont } |
| } |
| |
| def verbatimstrut { @VContract { 0.5v @High ^/ / 0.5v @High } } |
| |
| @OneCol verbfont @Font x |0io verbatimstrut |
| } |
| |
| |
| macro @PV { // printverbatim } |
| |
| |
| def paragraphgap |
| { |
| paragap @Test |
| iffixed { fixedparagap } |
| ifvarying { varyingparagap } |
| ifsymbol { symbolparagap } |
| } |
| |
| |
| macro @PPG { //paragraphgap } |
| |
| |
| def @PLG |
| { |
| listgap @Test |
| iffixed { fixedlistgap } |
| ifvarying { varyinglistgap } |
| ifsymbol { symbollistgap } |
| } |
| |
| |
| def @PLI |
| { |
| listindent @Test |
| iffixed { fixedlistindent } |
| ifvarying { varyinglistindent } |
| ifsymbol { symbollistindent } |
| } |
| |
| |
| def @PLRI |
| { |
| listrightindent @Test |
| iffixed { fixedlistrightindent } |
| ifvarying { varyinglistrightindent } |
| ifsymbol { symbollistrightindent } |
| } |
| |
| |
| def @PLLW right x |
| { |
| def defaultwidth |
| { |
| listlabelwidth @Test |
| iffixed { fixedlistlabelwidth } |
| ifvarying { varyinglistlabelwidth } |
| ifsymbol { symbollistlabelwidth } |
| } |
| |
| def givenwidth |
| { |
| style @Case { |
| fixed @Yield { x"s" } |
| varying @Yield { x"f" } |
| symbol @Yield { x"f" } |
| } |
| } |
| |
| x @Case { |
| "" @Yield defaultwidth |
| else @Yield givenwidth |
| } |
| } |
| |
| |
| def @PLL right x |
| { |
| def bullet |
| { |
| @BackEnd @Case { |
| PlainText @Yield "*" |
| else @Yield @Char "bullet" |
| } |
| } |
| |
| def value |
| { |
| x @Case { |
| "*" @Yield bullet |
| else @Yield x |
| } |
| } |
| |
| style @Case { |
| fixed @Yield fixedlistlabelformat { |
| { listlabelfont @Else fixedlistlabelfont } @Font value } |
| varying @Yield varyinglistlabelformat { |
| { listlabelfont @Else varyinglistlabelfont } @Font value } |
| symbol @Yield symbollistlabelformat { |
| { listlabelfont @Else symbollistlabelfont } @Font value } |
| } |
| } |
| |
| |
| def @PHA right x |
| { |
| style @Case { |
| fixed @Yield fixedaheadformat { |
| { aheadfont @Else fixedaheadfont } @Font |
| { aheadbreak @Else fixedaheadbreak } @Break x } |
| varying @Yield varyingaheadformat { |
| { aheadfont @Else varyingaheadfont } @Font |
| { aheadbreak @Else varyingaheadbreak } @Break x } |
| symbol @Yield symbolaheadformat { |
| { aheadfont @Else symbolaheadfont } @Font |
| { aheadbreak @Else varyingaheadbreak } @Break x } |
| } |
| } |
| |
| |
| def @PHB right x |
| { |
| style @Case { |
| fixed @Yield fixedbheadformat { |
| { bheadfont @Else fixedbheadfont } @Font |
| { bheadbreak @Else fixedbheadbreak } @Break x } |
| varying @Yield varyingbheadformat { |
| { bheadfont @Else varyingbheadfont } @Font |
| { bheadbreak @Else varyingbheadbreak } @Break x } |
| symbol @Yield symbolbheadformat { |
| { bheadfont @Else symbolbheadfont } @Font |
| { bheadbreak @Else varyingbheadbreak } @Break x } |
| } |
| } |
| |
| |
| def @PHC right x |
| { |
| style @Case { |
| fixed @Yield fixedcheadformat { |
| { cheadfont @Else fixedcheadfont } @Font |
| { cheadbreak @Else fixedcheadbreak } @Break x } |
| varying @Yield varyingcheadformat { |
| { cheadfont @Else varyingcheadfont } @Font |
| { cheadbreak @Else varyingcheadbreak } @Break x } |
| symbol @Yield symbolcheadformat { |
| { cheadfont @Else symbolcheadfont } @Font |
| { cheadbreak @Else varyingcheadbreak } @Break x } |
| } |
| } |
| |
| |
| def @PFI right x |
| { |
| style @Case { |
| fixed @Yield fixeditalicformat { |
| { italicfont @Else fixeditalicfont } @Font x } |
| varying @Yield varyingitalicformat { |
| { italicfont @Else varyingitalicfont } @Font x } |
| symbol @Yield symbolitalicformat { |
| { italicfont @Else symbolitalicfont } @Font x } |
| } |
| } |
| |
| |
| def @PFB right x |
| { |
| style @Case { |
| fixed @Yield fixedboldformat { |
| { boldfont @Else fixedboldfont } @Font x } |
| varying @Yield varyingboldformat { |
| { boldfont @Else varyingboldfont } @Font x } |
| symbol @Yield symbolboldformat { |
| { boldfont @Else symbolboldfont } @Font x } |
| } |
| } |
| |
| |
| def @PFC right x |
| { |
| style @Case { |
| fixed @Yield fixedcodeformat { |
| { codefont @Else fixedcodefont } @Font x } |
| varying @Yield varyingcodeformat { |
| { codefont @Else varyingcodefont } @Font x } |
| symbol @Yield symbolcodeformat { |
| { codefont @Else symbolcodefont } @Font x } |
| } |
| } |
| |
| |
| def @PFF right x |
| { |
| style @Case { |
| fixed @Yield fixedfileformat { |
| { filefont @Else fixedfilefont } @Font x } |
| varying @Yield varyingfileformat { |
| { filefont @Else varyingfilefont } @Font x } |
| symbol @Yield symbolfileformat { |
| { filefont @Else symbolfilefont } @Font x } |
| } |
| } |
| |
| |
| def @PFL right x |
| { |
| style @Case { |
| fixed @Yield fixedlinkformat { |
| { linkfont @Else fixedlinkfont } @Font x } |
| varying @Yield varyinglinkformat { |
| { linkfont @Else varyinglinkfont } @Font x } |
| symbol @Yield symbollinkformat { |
| { linkfont @Else symbollinkfont } @Font x } |
| } |
| } |
| |
| |
| def @PFX right x |
| { |
| style @Case { |
| fixed @Yield fixedindexformat { |
| { indexfont @Else fixedindexfont } @Font x } |
| varying @Yield varyingindexformat { |
| { indexfont @Else varyingindexfont } @Font x } |
| symbol @Yield symbolindexformat { |
| { indexfont @Else symbolindexfont } @Font x } |
| } |
| } |
| |
| |
| def @A # get characters from the Adobe Symbol font |
| left sym |
| right x |
| { |
| style @Case { |
| symbol @Yield { { Symbol Base } @Font @Char sym } |
| else @Yield { x } |
| } |
| } |
| |
| |
| macro "$>" { {} & } |
| |
| |
| def pl # for formatting line numbers |
| right x |
| { |
| def strut { @VContract { 0.5v @High ^/ / 0.5v @High } } |
| |
| strut & style @Case { |
| fixed @Yield fixedlinenumbersformat { |
| { linenumbersfont @Else fixedlinenumbersfont } @Font x |
| } |
| varying @Yield varyinglinenumbersformat { |
| { linenumbersfont @Else varyinglinenumbersfont } @Font x |
| } |
| symbol @Yield symbollinenumbersformat { |
| { linenumbersfont @Else symbollinenumbersfont } @Font x |
| } |
| } |
| } |
| |
| |
| macro @PL { // pl } |
| |
| |
| @InitFont @Font @InitBreak @Break @Body |
| |
| @End @Pod |
| |
| @End @PodSetup |