###############################################################################
#                                                                             #
#   Lout setup file for Python program printing                               #
#                                                                             #
#   Version 3.0                                                               #
#   Jeffrey H. Kingston                                                       #
#   5 April 2000                                                              #
#                                                                             #
###############################################################################


###############################################################################
#                                                                             #
#  @SysInclude line                                                           #
#                                                                             #
#  This line causes Lout to read the definitions for this programming         #
#  language, and should not be touched.                                       #
#                                                                             #
###############################################################################

@SysInclude { pythonf }


###############################################################################
#                                                                             #
#  @Use clause                                                                #
#                                                                             #
#  To change the default value of any option, delete the # at the start of    #
#  its line and change the value between braces.                              #
#                                                                             #
###############################################################################

@Use { @PythonSetup
  # pipe			{		} # pipe source through this
  # numbered			{ No		} # No, Yes, or a line number
  # style	     { varying @OrIfPlain fixed	} # fixed, varying, or symbol

  # the following options apply when style is "fixed"

  # fixedfont			{ Courier	} # font family
  # fixedsize			{ -1.0p		} # font size
  # fixedline			{ 1.0vx		} # line-space
  # fixedtabin			{ 8		} # tab interval
  # fixedtabout			{ 8s		} # tab width

  # fixedidentifiers		{ Base		} # identifier face
  # fixedkeywords		{ Base		} # keyword face
  # fixedoperators		{ Base		} # operator face
  # fixednumbers		{ Base		} # number face
  # fixedstrings		{ Base		} # string face
  # fixedcomments		{ Base		} # comment face
  # fixedlinenumbers		{ Base		} # line numbers face

  # fixedidentifiersformat	{ @Body		} # identifiers format
  # fixedkeywordsformat		{ @Body		} # keywords format
  # fixedoperatorsformat	{ @Body		} # operators format
  # fixednumbersformat		{ @Body		} # numbers format
  # fixedstringsformat		{ @Body		} # strings format
  # fixedcommentsformat		{ @Body		} # comments format
  # fixedlinenumbersformat	{ @Body		} # line numbers format

  # the following options apply when style is "varying"

  # varyingfont			{		} # font family
  # varyingsize			{ 1.0f		} # font size
  # varyingline			{ 1.0vx		} # line-space
  # varyingtabin		{ 8		} # tab interval
  # varyingtabout		{ 3f		} # tab width

  # varyingidentifiers		{ Slope		} # identifier face
  # varyingkeywords		{ Bold		} # keyword face
  # varyingoperators		{ Base		} # operator face
  # varyingnumbers		{ Base		} # number face
  # varyingstrings		{ Slope		} # string face
  # varyingcomments		{ Base		} # comment face
  # varyinglinenumbers		{ Base		} # line numbers face

  # varyingidentifiersformat	{ @Body		} # identifiers format
  # varyingkeywordsformat	{ @Body		} # keywords format
  # varyingoperatorsformat	{ @Body		} # operators format
  # varyingnumbersformat	{ @Body		} # numbers format
  # varyingstringsformat	{ @Body		} # strings format
  # varyingcommentsformat	{ @Body		} # comments format
  # varyinglinenumbersformat	{ @Body		} # line numbers format

  # the following options apply when style is "symbol"

  # symbolfont			{		} # font family
  # symbolsize			{ 1.0f		} # font size
  # symbolline			{ 1.0vx		} # line-space
  # symboltabin			{ 8		} # tab interval
  # symboltabout		{ 3f		} # tab width

  # symbolidentifiers		{ Slope		} # identifier face
  # symbolkeywords		{ Bold		} # keyword face
  # symboloperators		{ Base		} # operator face
  # symbolnumbers		{ Base		} # number face
  # symbolstrings		{ Slope		} # string face
  # symbolcomments		{ Base		} # comment face
  # symbollinenumbers		{ Base		} # line numbers face

  # symbolidentifiersformat	{ @Body		} # identifiers format
  # symbolkeywordsformat	{ @Body		} # keywords format
  # symboloperatorsformat	{ @Body		} # operators format
  # symbolnumbersformat		{ @Body		} # numbers format
  # symbolstringsformat		{ @Body		} # strings format
  # symbolcommentsformat	{ @Body		} # comments format
  # symbollinenumbersformat	{ @Body		} # line numbers format
}
