1  #!/usr/bin/env python
    2  # -*- coding: Latin-1 -*-
    3  """
    4  #############################################################################
    5  # PySourceColor.py
    6  #############################################################################
    7  # A python source to colorized html/css/xhtml converter.
    8  # Hacked by M.E.Farmer Jr. 2004
    9  # Python license
   10  #############################################################################
   11  # Now supports:
   12  # - HTML markup does not create w3c valid html, but it works on every
   13  #   browser i've tried so far.(I.E.,Mozilla/Firefox,Opera,Konqueror,wxHTML).
   14  # - CSS markup is w3c validated html 4.01 strict,
   15  #   but will not render correctly on all browsers.
   16  # - XHTML markup is w3c validated xhtml 1.0 strict,
   17  #   like html 4.01, will not render correctly on all browsers.
   18  #############################################################################
   19  # Features:
   20  # -Three types of markup:
   21  #    html (default) 
   22  #    css/html 4.01 strict
   23  #    xhtml 1.0 strict
   24  #
   25  # -Can tokenize and colorize:
   26  #    12 types of strings
   27  #    2 comment types
   28  #    numbers
   29  #    operators
   30  #    brackets
   31  #    math operators
   32  #    class / name
   33  #    def / name
   34  #    decorator / name
   35  #    keywords
   36  #    arguments class/def/decorator
   37  #    text
   38  #    linenumbers
   39  #
   40  # -Eight colorschemes built-in:
   41  #    null
   42  #    mono
   43  #    dark (default)
   44  #    dark2
   45  #    lite
   46  #    idle
   47  #    viewcvs
   48  #    pythonwin
   49  #
   50  # -Header and footer
   51  #    set to '' for builtin header / footer
   52  #    or give path to a file containing the html
   53  #    you want added as header and footer
   54  #
   55  # -Linenumbers
   56  #    Supports all styles. New token is called LINE.
   57  #    Defaults to NAME if not defined
   58  #
   59  # Style options
   60  # -ALL markups support these text styles:
   61  #         b = bold
   62  #         i = italic
   63  #         u = underline
   64  # -CSS and XHTML has limited support  for borders:
   65  #     HTML markup functions will ignore these.
   66  #     Optional: Border color in RGB hex
   67  #     Defaults to the text forecolor.
   68  #         #rrggbb = border color
   69  #     Optional: specify one type only
   70  #         - = dashed
   71  #         . = dotted
   72  #         s = solid
   73  #         d = double
   74  #         g = groove
   75  #         r = ridge
   76  #         n = inset
   77  #         o = outset
   78  #     You can specify multiple sides,
   79  #     they will all use the same style.
   80  #     Optional: Default is full border.
   81  #         v = bottom
   82  #         < = left
   83  #         > = right
   84  #         ^ = top
   85  #     NOTE: Specify the styles you want.
   86  #           The markups will ignore unsupported styles
   87  #           Also note not all browsers can show these options
   88  #
   89  # -All tokens default to NAME if not defined
   90  #     so the only absolutely critical ones to define are:
   91  #     NAME, ERRORTOKEN, PAGEBACKGROUND
   92  #
   93  #############################################################################
   94  # Example usage:
   95  #############################################################################
   96  # # import
   97  # import PySourceColor as psc
   98  # psc.convert('c:/Python22/PySourceColor.py', colors=psc.idle, show=1)
   99  #----------------------------------------------------------------------------
  100  # # from module import *
  101  # from PySourceColor import *
  102  # convert('c:/Python22/Lib', colors=lite, markup="css", header='')
  103  #----------------------------------------------------------------------------
  104  # # How to use a custom colorscheme, and most of the 'features'
  105  # from PySourceColor import *
  106  # new = {
  107  #   ERRORTOKEN:             ('bui','#FF8080',''),
  108  #   DECORATOR_NAME:         ('s','#AACBBC',''),
  109  #   DECORATOR:              ('n','#333333',''),
  110  #   NAME:                   ('t.<v','#1133AA','#DDFF22'),
  111  #   NUMBER:                 ('','#236676','#FF5555'),
  112  #   OPERATOR:               ('b','#454567','#BBBB11'),
  113  #   MATH_OPERATOR:          ('','#935623','#423afb'),
  114  #   BRACKETS:               ('b','#ac34bf','#6457a5'),
  115  #   COMMENT:                ('t-#0022FF','#545366','#AABBFF'),
  116  #   DOUBLECOMMENT:          ('<l#553455','#553455','#FF00FF'),
  117  #   CLASS_NAME:             ('m^v-','#000000','#FFFFFF'),
  118  #   DEF_NAME:               ('l=<v','#897845','#000022'),
  119  #   KEYWORD:                ('.b','#345345','#FFFF22'),
  120  #   SINGLEQUOTE:            ('mn','#223344','#AADDCC'),
  121  #   SINGLEQUOTE_R:          ('','#344522',''),
  122  #   SINGLEQUOTE_U:          ('','#234234',''),
  123  #   DOUBLEQUOTE:            ('m#0022FF','#334421',''),
  124  #   DOUBLEQUOTE_R:          ('','#345345',''),
  125  #   DOUBLEQUOTE_U:          ('','#678673',''),
  126  #   TRIPLESINGLEQUOTE:      ('tv','#FFFFFF','#000000'),
  127  #   TRIPLESINGLEQUOTE_R:    ('tbu','#443256','#DDFFDA'),
  128  #   TRIPLESINGLEQUOTE_U:    ('','#423454','#DDFFDA'),
  129  #   TRIPLEDOUBLEQUOTE:      ('li#236fd3b<>','#000000','#FFFFFF'),
  130  #   TRIPLEDOUBLEQUOTE_R:    ('tub','#000000','#FFFFFF'),
  131  #   TRIPLEDOUBLEQUOTE_U:    ('-', '#CCAABB','#FFFAFF'),
  132  #   LINE:                   ('ib-','#ff66aa','#7733FF'),
  133  #   PAGEBACKGROUND:         '#FFFAAA',
  134  #     }
  135  # if __name__ == '__main__':
  136  #     import sys
  137  #     convert(sys.argv[1], './css.html',colors=new, markup='xhtml', show=1,
  138  #             linenumbers=1)
  139  #     convert(sys.argv[1], './html.html',colors=new, markup='html', show=1,
  140  #             linenumbers=1)
  141  #############################################################################
  142  """
  143 
  144  __all__ = ['ERRORTOKEN','DECORATOR_NAME', 'DECORATOR', 'ARGS',
  145             'NAME', 'NUMBER', 'OPERATOR', 'COMMENT', 'MATH_OPERATOR',
  146             'DOUBLECOMMENT', 'CLASS_NAME', 'DEF_NAME', 'KEYWORD', 'BRACKETS',
  147             'SINGLEQUOTE','SINGLEQUOTE_R','SINGLEQUOTE_U','DOUBLEQUOTE',
  148             'DOUBLEQUOTE_R', 'DOUBLEQUOTE_U', 'TRIPLESINGLEQUOTE',
  149             'TRIPLESINGLEQUOTE_R', 'TRIPLESINGLEQUOTE_U', 'TRIPLEDOUBLEQUOTE',
  150             'TRIPLEDOUBLEQUOTE_R', 'TRIPLEDOUBLEQUOTE_U', 'PAGEBACKGROUND', 'LINE',
  151             'null', 'mono', 'lite', 'dark','dark2', 'pythonwin','idle',
  152             'viewcvs', 'Usage', 'cli', 'str2stdout', 'path2stdout', 'Parser',
  153             'str2file', 'str2html', 'str2css', 'path2file', 'path2html',
  154             'convert', 'walkdir', 'defaultColors', 'showpage']
  155  __title__ = 'PySourceColor'
  156  __version__ = "1.9.97"
  157  __date__ = '17 December 2004'
  158  __author__ = "M.E.Farmer Jr."
  159  __credits__ = '''This was originally based on a python recipe
  160  submitted by Jürgen Hermann to ASPN. Now based on the voices in my head.
  161  M.E.Farmer 2004
  162  Python license
  163  '''
  164  import os
  165  import cgi
  166  import sys
  167  import time
  168  import glob
  169  import getopt
  170  import keyword
  171  import token
  172  import tokenize
  173  import cStringIO
  174  import traceback
  175  import webbrowser
  176 
  177  # Do not edit
  178  NAME = token.NAME
  179  NUMBER = token.NUMBER
  180  COMMENT = tokenize.COMMENT
  181  OPERATOR = token.OP
  182  ERRORTOKEN = token.ERRORTOKEN
  183  ARGS = token.NT_OFFSET + 1
  184  DOUBLECOMMENT = token.NT_OFFSET + 2
  185  CLASS_NAME = token.NT_OFFSET + 3
  186  DEF_NAME = token.NT_OFFSET + 4
  187  KEYWORD = token.NT_OFFSET + 5
  188  SINGLEQUOTE = token.NT_OFFSET + 6
  189  SINGLEQUOTE_R = token.NT_OFFSET + 7
  190  SINGLEQUOTE_U = token.NT_OFFSET + 8
  191  DOUBLEQUOTE = token.NT_OFFSET + 9
  192  DOUBLEQUOTE_R = token.NT_OFFSET + 10
  193  DOUBLEQUOTE_U = token.NT_OFFSET + 11
  194  TRIPLESINGLEQUOTE = token.NT_OFFSET + 12
  195  TRIPLESINGLEQUOTE_R = token.NT_OFFSET + 13
  196  TRIPLESINGLEQUOTE_U = token.NT_OFFSET + 14
  197  TRIPLEDOUBLEQUOTE = token.NT_OFFSET + 15
  198  TRIPLEDOUBLEQUOTE_R = token.NT_OFFSET + 16
  199  TRIPLEDOUBLEQUOTE_U = token.NT_OFFSET + 17
  200  PAGEBACKGROUND = token.NT_OFFSET + 18
  201  DECORATOR = token.NT_OFFSET + 19
  202  DECORATOR_NAME = token.NT_OFFSET + 20
  203  BRACKETS = token.NT_OFFSET + 21
  204  MATH_OPERATOR = token.NT_OFFSET + 22
  205  LINE = token.NT_OFFSET + 23
  206 
  207  # Do not edit (markup classname lookup)
  208  MARKUPDICT = {
  209          ERRORTOKEN:             'err',
  210          DECORATOR_NAME:         'decn',
  211          DECORATOR:              'dec',
  212          ARGS:                   'args',
  213          NAME:                   'name',
  214          NUMBER:                 'num',
  215          OPERATOR:               'op',
  216          COMMENT:                'com',
  217          DOUBLECOMMENT:          'dcom',
  218          CLASS_NAME:             'clsn',
  219          DEF_NAME:               'defn',
  220          KEYWORD:                'key',
  221          SINGLEQUOTE:            'sq',
  222          SINGLEQUOTE_R:          'sqr',
  223          SINGLEQUOTE_U:          'squ',
  224          DOUBLEQUOTE:            'dq',
  225          DOUBLEQUOTE_R:          'dqr',
  226          DOUBLEQUOTE_U:          'dqu',
  227          TRIPLESINGLEQUOTE:      'tsq',
  228          TRIPLESINGLEQUOTE_R:    'tsqr',
  229          TRIPLESINGLEQUOTE_U:    'tsqu',
  230          TRIPLEDOUBLEQUOTE:      'tdq',
  231          TRIPLEDOUBLEQUOTE_R:    'tdqr',
  232          TRIPLEDOUBLEQUOTE_U:    'tdqu',
  233          BRACKETS:               'bra',
  234          MATH_OPERATOR:          'mop',
  235          LINE:                   'line'
  236          }
  237 
  238  ######################################################################
  239  # Edit colors and styles to taste
  240  # Create your own scheme, just copy one below , rename and edit.
  241  # Custom styles must at least define NAME, ERRORTOKEN, PAGEBACKGROUND,
  242  # all missing elements will default to NAME.
  243  # See module docstring for details on style attributes.
  244  ######################################################################
  245  # Copy null and use it as a starter colorscheme.
  246  null = {# tokentype: ('tags border_color', 'textforecolor', 'textbackcolor')
  247          ERRORTOKEN:             ('','#FF8080',''),# Error token
  248          DECORATOR_NAME:         ('','#000000',''),# Decorator name
  249          DECORATOR:              ('','#000000',''),# @ symbol
  250          ARGS:                   ('','#000000',''),# class,def,deco arguments
  251          NAME:                   ('','#000000',''),# All other text
  252          NUMBER:                 ('','#000000',''),# 0->10
  253          OPERATOR:               ('','#000000',''),# ':','`',';',',','.','='
  254          MATH_OPERATOR:          ('','#000000',''),# '+','-','==','!=','*',etc
  255          BRACKETS:               ('','#000000',''),# '[',']','(',')','{','}'
  256          COMMENT:                ('','#000000',''),# Single comment
  257          DOUBLECOMMENT:          ('','#000000',''),## Double comment
  258          CLASS_NAME:             ('','#000000',''),# Class name
  259          DEF_NAME:               ('','#000000',''),# Def name
  260          KEYWORD:                ('','#000000',''),# Python keywords
  261          SINGLEQUOTE:            ('','#000000',''),# 'SINGLEQUOTE'
  262          SINGLEQUOTE_R:          ('','#000000',''),# r'SINGLEQUOTE'
  263          SINGLEQUOTE_U:          ('','#000000',''),# u'SINGLEQUOTE'
  264          DOUBLEQUOTE:            ('','#000000',''),# "DOUBLEQUOTE"
  265          DOUBLEQUOTE_R:          ('','#000000',''),# r"DOUBLEQUOTE"
  266          DOUBLEQUOTE_U:          ('','#000000',''),# u"DOUBLEQUOTE"
  267          TRIPLESINGLEQUOTE:      ('','#000000',''),# '''TRIPLESINGLEQUOTE'''
  268          TRIPLESINGLEQUOTE_R:    ('','#000000',''),# r'''TRIPLESINGLEQUOTE'''
  269          TRIPLESINGLEQUOTE_U:    ('','#000000',''),# u'''TRIPLESINGLEQUOTE'''
  270          TRIPLEDOUBLEQUOTE:      ('','#000000',''),# """TRIPLEDOUBLEQUOTE"""
  271          TRIPLEDOUBLEQUOTE_R:    ('','#000000',''),# r"""TRIPLEDOUBLEQUOTE"""
  272          TRIPLEDOUBLEQUOTE_U:    ('','#000000',''),# u"""TRIPLEDOUBLEQUOTE"""
  273          PAGEBACKGROUND:         '#FFFFFF'# set the page background
  274          }
  275 
  276  mono = {
  277          ERRORTOKEN:             ('','#FF8080',''),
  278          DECORATOR_NAME:         ('bu','#000000',''),
  279          DECORATOR:              ('b','#000000',''),
  280          ARGS:                   ('b','#000000',''),
  281          NAME:                   ('','#000000',''),
  282          NUMBER:                 ('b','#000000',''),
  283          OPERATOR:               ('b','#000000',''),
  284          MATH_OPERATOR:          ('b','#000000',''),
  285          BRACKETS:               ('b','#000000',''),
  286          COMMENT:                ('i','#000000',''),
  287          DOUBLECOMMENT:          ('b','#000000',''),
  288          CLASS_NAME:             ('bu','#000000',''),
  289          DEF_NAME:               ('b','#000000',''),
  290          KEYWORD:                ('b','#000000',''),
  291          SINGLEQUOTE:            ('','#000000',''),
  292          SINGLEQUOTE_R:          ('','#000000',''),
  293          SINGLEQUOTE_U:          ('','#000000',''),
  294          DOUBLEQUOTE:            ('','#000000',''),
  295          DOUBLEQUOTE_R:          ('','#000000',''),
  296          DOUBLEQUOTE_U:          ('','#000000',''),
  297          TRIPLESINGLEQUOTE:      ('','#000000',''),
  298          TRIPLESINGLEQUOTE_R:    ('','#000000',''),
  299          TRIPLESINGLEQUOTE_U:    ('','#000000',''),
  300          TRIPLEDOUBLEQUOTE:      ('i','#000000',''),
  301          TRIPLEDOUBLEQUOTE_R:    ('i','#000000',''),
  302          TRIPLEDOUBLEQUOTE_U:    ('i','#000000',''),
  303          PAGEBACKGROUND:         '#FFFFFF'
  304          }
  305 
  306  dark = {
  307          ERRORTOKEN:             ('','#FF0000',''),
  308          DECORATOR_NAME:         ('b','#FFBBAA',''),
  309          DECORATOR:              ('b','#CC5511',''),
  310          ARGS:                   ('b','#CCCCEE',''),
  311          NAME:                   ('','#FFFFFF',''),
  312          NUMBER:                 ('','#FF0000',''),
  313          OPERATOR:               ('b','#FAF785',''),
  314          MATH_OPERATOR:          ('b','#FAF785',''),
  315          BRACKETS:               ('b','#FAF785',''),
  316          COMMENT:                ('','#45FCA0',''),
  317          DOUBLECOMMENT:          ('i','#A7C7A9',''),
  318          CLASS_NAME:             ('b','#B599FD',''),
  319          DEF_NAME:               ('b','#EBAE5C',''),
  320          KEYWORD:                ('b','#8680FF',''),
  321          SINGLEQUOTE:            ('','#F8BAFE',''),
  322          SINGLEQUOTE_R:          ('','#F8BAFE',''),
  323          SINGLEQUOTE_U:          ('','#F8BAFE',''),
  324          DOUBLEQUOTE:            ('','#FF80C0',''),
  325          DOUBLEQUOTE_R:          ('','#FF80C0',''),
  326          DOUBLEQUOTE_U:          ('','#FF80C0',''),
  327          TRIPLESINGLEQUOTE:      ('','#FF9595',''),
  328          TRIPLESINGLEQUOTE_R:    ('','#FF9595',''),
  329          TRIPLESINGLEQUOTE_U:    ('','#FF9595',''),
  330          TRIPLEDOUBLEQUOTE:      ('','#B3FFFF',''),
  331          TRIPLEDOUBLEQUOTE_R:    ('','#B3FFFF',''),
  332          TRIPLEDOUBLEQUOTE_U:    ('','#B3FFFF',''),
  333          LINE:                   ('>mi#555555','#bbccbb','#333333'),
  334          PAGEBACKGROUND:         '#000000'
  335          }
  336 
  337  dark2 = {
  338          ERRORTOKEN:             ('','#FF0000',''),
  339          DECORATOR_NAME:         ('b','#FFBBAA',''),
  340          DECORATOR:              ('b','#CC5511',''),
  341          ARGS:                   ('b','#EEEEEE',''),
  342          NAME:                   ('','#C0C0C0',''),
  343          NUMBER:                 ('b','#00FF00',''),
  344          OPERATOR:               ('b','#FF090F',''),
  345          MATH_OPERATOR:          ('b','#F07040',''),
  346          BRACKETS:               ('b','#FFB90F',''),
  347          COMMENT:                ('i','#D0D709','#622000'),
  348          DOUBLECOMMENT:          ('i','#D0D709','#622000'),
  349          CLASS_NAME:             ('','#7E58C7',''),
  350          DEF_NAME:               ('b','#FF8040',''),
  351          KEYWORD:                ('b','#4726E1',''),
  352          SINGLEQUOTE:            ('','#8080C0',''),
  353          SINGLEQUOTE_R:          ('','#8080C0',''),
  354          SINGLEQUOTE_U:          ('','#8080C0',''),
  355          DOUBLEQUOTE:            ('','#ADB9F1',''),
  356          DOUBLEQUOTE_R:          ('','#ADB9F1',''),
  357          DOUBLEQUOTE_U:          ('','#ADB9F1',''),
  358          TRIPLESINGLEQUOTE:      ('','#00C1C1',''),
  359          TRIPLESINGLEQUOTE_R:    ('','#00C1C1',''),
  360          TRIPLESINGLEQUOTE_U:    ('','#00C1C1',''),
  361          TRIPLEDOUBLEQUOTE:      ('','#33e3e3',''),
  362          TRIPLEDOUBLEQUOTE_R:    ('','#33e3e3',''),
  363          TRIPLEDOUBLEQUOTE_U:    ('','#33e3e3',''),
  364          LINE:                   ('>mi#555555','#bbccbb','#333333'),
  365          PAGEBACKGROUND:         '#000000'
  366          }
  367 
  368  lite = {
  369          ERRORTOKEN:             ('','#FF8080',''),
  370          DECORATOR_NAME:         ('b','#BB4422',''),
  371          DECORATOR:              ('b','#3333af',''),
  372          ARGS:                   ('b','#000000',''),
  373          NAME:                   ('','#000000',''),
  374          NUMBER:                 ('','#FF2200',''),
  375          OPERATOR:               ('b','#303000',''),
  376          MATH_OPERATOR:          ('b','#303000',''),
  377          BRACKETS:               ('b','#303000',''),
  378          COMMENT:                ('','#007F00',''),
  379          DOUBLECOMMENT:          ('','#606060',''),
  380          CLASS_NAME:             ('','#0000FF',''),
  381          DEF_NAME:               ('b','#9C7A00',''),
  382          KEYWORD:                ('b','#0000AF',''),
  383          SINGLEQUOTE:            ('','#600080',''),
  384          SINGLEQUOTE_R:          ('','#600080',''),
  385          SINGLEQUOTE_U:          ('','#600080',''),
  386          DOUBLEQUOTE:            ('','#A0008A',''),
  387          DOUBLEQUOTE_R:          ('','#A0008A',''),
  388          DOUBLEQUOTE_U:          ('','#A0008A',''),
  389          TRIPLESINGLEQUOTE:      ('','#337799',''),
  390          TRIPLESINGLEQUOTE_R:    ('','#337799',''),
  391          TRIPLESINGLEQUOTE_U:    ('','#337799',''),
  392          TRIPLEDOUBLEQUOTE:      ('','#1166AA',''),
  393          TRIPLEDOUBLEQUOTE_R:    ('','#1166AA',''),
  394          TRIPLEDOUBLEQUOTE_U:    ('','#1166AA',''),
  395          PAGEBACKGROUND:         '#FFFFFF'
  396          }
  397 
  398  idle = {
  399          ERRORTOKEN:             ('','#FF8080',''),
  400          DECORATOR_NAME:         ('','#900090',''),
  401          DECORATOR:              ('','#000000',''),
  402          NAME:                   ('','#000000',''),
  403          NUMBER:                 ('','#000000',''),
  404          OPERATOR:               ('','#000000',''),
  405          MATH_OPERATOR:          ('','#000000',''),
  406          BRACKETS:               ('','#000000',''),
  407          COMMENT:                ('','#DD0000',''),
  408          DOUBLECOMMENT:          ('','#DD0000',''),
  409          CLASS_NAME:             ('','#0000FF',''),
  410          DEF_NAME:               ('','#0000FF',''),
  411          KEYWORD:                ('','#FF7700',''),
  412          SINGLEQUOTE:            ('','#00AA00',''),
  413          SINGLEQUOTE_R:          ('','#00AA00',''),
  414          SINGLEQUOTE_U:          ('','#00AA00',''),
  415          DOUBLEQUOTE:            ('','#00AA00',''),
  416          DOUBLEQUOTE_R:          ('','#00AA00',''),
  417          DOUBLEQUOTE_U:          ('','#00AA00',''),
  418          TRIPLESINGLEQUOTE:      ('','#00AA00',''),
  419          TRIPLESINGLEQUOTE_R:    ('','#00AA00',''),
  420          TRIPLESINGLEQUOTE_U:    ('','#00AA00',''),
  421          TRIPLEDOUBLEQUOTE:      ('','#00AA00',''),
  422          TRIPLEDOUBLEQUOTE_R:    ('','#00AA00',''),
  423          TRIPLEDOUBLEQUOTE_U:    ('','#00AA00',''),
  424          PAGEBACKGROUND:         '#FFFFFF'
  425          }
  426 
  427  pythonwin = {
  428          ERRORTOKEN:             ('','#FF8080',''),
  429          DECORATOR_NAME:         ('b','#303030',''),
  430          DECORATOR:              ('b','#DD0080',''),
  431          ARGS:                   ('','#000000',''),
  432          NAME:                   ('','#303030',''),
  433          NUMBER:                 ('','#008080',''),
  434          OPERATOR:               ('','#000000',''),
  435          MATH_OPERATOR:          ('','#000000',''),
  436          BRACKETS:               ('','#000000',''),
  437          COMMENT:                ('','#007F00',''),
  438          DOUBLECOMMENT:          ('','#7F7F7F',''),
  439          CLASS_NAME:             ('b','#0000FF',''),
  440          DEF_NAME:               ('b','#007F7F',''),
  441          KEYWORD:                ('b','#000080',''),
  442          SINGLEQUOTE:            ('','#808000',''),
  443          SINGLEQUOTE_R:          ('','#808000',''),
  444          SINGLEQUOTE_U:          ('','#808000',''),
  445          DOUBLEQUOTE:            ('','#808000',''),
  446          DOUBLEQUOTE_R:          ('','#808000',''),
  447          DOUBLEQUOTE_U:          ('','#808000',''),
  448          TRIPLESINGLEQUOTE:      ('','#808000',''),
  449          TRIPLESINGLEQUOTE_R:    ('','#808000',''),
  450          TRIPLESINGLEQUOTE_U:    ('','#808000',''),
  451          TRIPLEDOUBLEQUOTE:      ('','#808000',''),
  452          TRIPLEDOUBLEQUOTE_R:    ('','#808000',''),
  453          TRIPLEDOUBLEQUOTE_U:    ('','#808000',''),
  454          PAGEBACKGROUND:         '#FFFFFF'
  455          }
  456 
  457  viewcvs = {
  458          ERRORTOKEN:             ('b','#FF8080',''),
  459          DECORATOR_NAME:         ('','#000000',''),
  460          DECORATOR:              ('','#000000',''),
  461          ARGS:                   ('','#000000',''),
  462          NAME:                   ('','#000000',''),
  463          NUMBER:                 ('','#000000',''),
  464          OPERATOR:               ('','#000000',''),
  465          MATH_OPERATOR:          ('','#000000',''),
  466          BRACKETS:               ('','#000000',''),
  467          COMMENT:                ('i','#b22222',''),
  468          DOUBLECOMMENT:          ('i','#b22222',''),
  469          CLASS_NAME:             ('','#000000',''),
  470          DEF_NAME:               ('b','#0000ff',''),
  471          KEYWORD:                ('b','#a020f0',''),
  472          SINGLEQUOTE:            ('b','#bc8f8f',''),
  473          SINGLEQUOTE_R:          ('b','#bc8f8f',''),
  474          SINGLEQUOTE_U:          ('b','#bc8f8f',''),
  475          DOUBLEQUOTE:            ('b','#bc8f8f',''),
  476          DOUBLEQUOTE_R:          ('b','#bc8f8f',''),
  477          DOUBLEQUOTE_U:          ('b'<