
###############################################################################
#                                                                             #
#  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
