1 #!/usr/bin/env python 2 # -*- coding: Latin-1 -*- 3 """ 4 PySourceColor.py 5 ---------------------------------------------------------------------------- 6 A python source to colorized html/css/xhtml converter. 7 Hacked by M.E.Farmer Jr. 2004, 2005 8 Python license 9 ---------------------------------------------------------------------------- 10 - HTML markup does not create w3c valid html, but it works on every 11 browser i've tried so far.(I.E.,Mozilla/Firefox,Opera,Konqueror,wxHTML). 12 - CSS markup is w3c validated html 4.01 strict, 13 but will not render correctly on all browsers. 14 - XHTML markup is w3c validated xhtml 1.0 strict, 15 like html 4.01, will not render correctly on all browsers. 16 ---------------------------------------------------------------------------- 17 Features: 18 -Three types of markup: 19 html (default) 20 css/html 4.01 strict 21 xhtml 1.0 strict 22 23 -Can tokenize and colorize: 24 12 types of strings 25 2 comment types 26 numbers 27 operators 28 brackets 29 math operators 30 class / name 31 def / name 32 decorator / name 33 keywords 34 arguments class/def/decorator 35 linenumbers 36 names 37 text 38 39 -Eight colorschemes built-in: 40 null 41 mono 42 lite (default) 43 dark 44 dark2 45 idle 46 viewcvs 47 pythonwin 48 49 -Header and footer 50 set to '' for builtin header / footer. 51 give path to a file containing the html 52 you want added as header or footer. 53 54 -Arbitrary text and html 55 html markup converts all to raw (TEXT token) 56 #@# for raw -> send raw text. 57 #$# for span -> inline html and text. 58 #%# for div -> block level html and text. 59 60 -Linenumbers 61 Supports all styles. New token is called LINE. 62 Defaults to NAME if not defined. 63 64 Style options 65 -ALL markups support these text styles: 66 b = bold 67 i = italic 68 u = underline 69 -CSS and XHTML has limited support for borders: 70 HTML markup functions will ignore these. 71 Optional: Border color in RGB hex 72 Defaults to the text forecolor. 73 #rrggbb = border color 74 Border size: 75 l = thick 76 m = medium 77 t = thin 78 Border type: 79 - = dashed 80 . = dotted 81 s = solid 82 d = double 83 g = groove 84 r = ridge 85 n = inset 86 o = outset 87 You can specify multiple sides, 88 they will all use the same style. 89 Optional: Default is full border. 90 v = bottom 91 < = left 92 > = right 93 ^ = top 94 NOTE: Specify the styles you want. 95 The markups will ignore unsupported styles 96 Also note not all browsers can show these options 97 98 -All tokens default to NAME if not defined 99 so the only absolutely critical ones to define are: 100 NAME, ERRORTOKEN, PAGEBACKGROUND 101 102 ---------------------------------------------------------------------------- 103 Example usage: 104 ---------------------------------------------------------------------------- 105 # import 106 import PySourceColor as psc 107 psc.convert('c:/Python22/PySourceColor.py', colors=psc.idle, show=1) 108 ---------------------------------------------------------------------------- 109 # from module import * 110 from PySourceColor import * 111 convert('c:/Python22/Lib', colors=lite, markup="css", 112 header='#$#<b>This is a simpe heading</b><hr/>') 113 ---------------------------------------------------------------------------- 114 # How to use a custom colorscheme, and most of the 'features' 115 from PySourceColor import * 116 new = { 117 ERRORTOKEN: ('bui','#FF8080',''), 118 DECORATOR_NAME: ('s','#AACBBC',''), 119 DECORATOR: ('n','#333333',''), 120 NAME: ('t.<v','#1133AA','#DDFF22'), 121 NUMBER: ('','#236676','#FF5555'), 122 OPERATOR: ('b','#454567','#BBBB11'), 123 MATH_OPERATOR: ('','#935623','#423afb'), 124 BRACKETS: ('b','#ac34bf','#6457a5'), 125 COMMENT: ('t-#0022FF','#545366','#AABBFF'), 126 DOUBLECOMMENT: ('<l#553455','#553455','#FF00FF'), 127 CLASS_NAME: ('m^v-','#000000','#FFFFFF'), 128 DEF_NAME: ('l=<v','#897845','#000022'), 129 KEYWORD: ('.b','#345345','#FFFF22'), 130 SINGLEQUOTE: ('mn','#223344','#AADDCC'), 131 SINGLEQUOTE_R: ('','#344522',''), 132 SINGLEQUOTE_U: ('','#234234',''), 133 DOUBLEQUOTE: ('m#0022FF','#334421',''), 134 DOUBLEQUOTE_R: ('','#345345',''), 135 DOUBLEQUOTE_U: ('','#678673',''), 136 TRIPLESINGLEQUOTE: ('tv','#FFFFFF','#000000'), 137 TRIPLESINGLEQUOTE_R: ('tbu','#443256','#DDFFDA'), 138 TRIPLESINGLEQUOTE_U: ('','#423454','#DDFFDA'), 139 TRIPLEDOUBLEQUOTE: ('li#236fd3b<>','#000000','#FFFFFF'), 140 TRIPLEDOUBLEQUOTE_R: ('tub','#000000','#FFFFFF'), 141 TRIPLEDOUBLEQUOTE_U: ('-', '#CCAABB','#FFFAFF'), 142 LINE: ('ib-','#ff66aa','#7733FF'),] 143 TEXT: ('','#546634',''), 144 PAGEBACKGROUND: '#FFFAAA', 145 } 146 if __name__ == '__main__': 147 import sys 148 convert(sys.argv[1], './xhtml.html', colors=new, markup='xhtml', show=1, 149 linenumbers=1) 150 convert(sys.argv[1], './html.html', colors=new, markup='html', show=1, 151 linenumbers=1) 152 ---------------------------------------------------------------------------- 153 """ 154 155 __all__ = ['ERRORTOKEN','DECORATOR_NAME', 'DECORATOR', 'ARGS','TOKEN_NAMES', 156 'NAME', 'NUMBER', 'OPERATOR', 'COMMENT', 'MATH_OPERATOR', 157 'DOUBLECOMMENT', 'CLASS_NAME', 'DEF_NAME', 'KEYWORD', 'BRACKETS', 158 'SINGLEQUOTE','SINGLEQUOTE_R','SINGLEQUOTE_U','DOUBLEQUOTE', 159 'DOUBLEQUOTE_R', 'DOUBLEQUOTE_U', 'TRIPLESINGLEQUOTE', 'TEXT', 160 'TRIPLESINGLEQUOTE_R', 'TRIPLESINGLEQUOTE_U', 'TRIPLEDOUBLEQUOTE', 161 'TRIPLEDOUBLEQUOTE_R', 'TRIPLEDOUBLEQUOTE_U', 'PAGEBACKGROUND', 'LINE', 162 'null', 'mono', 'lite', 'dark','dark2', 'pythonwin','idle', 163 'viewcvs', 'Usage', 'cli', 'str2stdout', 'path2stdout', 'Parser', 164 'str2file', 'str2html', 'str2css', 'str2markup', 'path2file', 165 'path2html', 'convert', 'walkdir', 'defaultColors', 'showpage', 166 'pageconvert','tagreplace'] 167 __title__ = 'PySourceColor' 168 __version__ = "2.0" 169 __date__ = '15 February 2005' 170 __author__ = "M.E.Farmer Jr." 171 __credits__ = '''This was originally based on a python recipe 172 submitted by Jürgen Hermann to ASPN. Now based on the voices in my head. 173 M.E.Farmer 2004, 2005 174 Python license 175 ''' 176 import os 177 import sys 178 import time 179 import glob 180 import getopt 181 import keyword 182 import token 183 import tokenize 184 import cStringIO 185 import traceback 186 import webbrowser 187 188 # Do not edit 189 NAME = token.NAME 190 NUMBER = token.NUMBER 191 COMMENT = tokenize.COMMENT 192 OPERATOR = token.OP 193 ERRORTOKEN = token.ERRORTOKEN 194 ARGS = token.NT_OFFSET + 1 195 DOUBLECOMMENT = token.NT_OFFSET + 2 196 CLASS_NAME = token.NT_OFFSET + 3 197 DEF_NAME = token.NT_OFFSET + 4 198 KEYWORD = token.NT_OFFSET + 5 199 SINGLEQUOTE = token.NT_OFFSET + 6 200 SINGLEQUOTE_R = token.NT_OFFSET + 7 201 SINGLEQUOTE_U = token.NT_OFFSET + 8 202 DOUBLEQUOTE = token.NT_OFFSET + 9 203 DOUBLEQUOTE_R = token.NT_OFFSET + 10 204 DOUBLEQUOTE_U = token.NT_OFFSET + 11 205 TRIPLESINGLEQUOTE = token.NT_OFFSET + 12 206 TRIPLESINGLEQUOTE_R = token.NT_OFFSET + 13 207 TRIPLESINGLEQUOTE_U = token.NT_OFFSET + 14 208 TRIPLEDOUBLEQUOTE = token.NT_OFFSET + 15 209 TRIPLEDOUBLEQUOTE_R = token.NT_OFFSET + 16 210 TRIPLEDOUBLEQUOTE_U = token.NT_OFFSET + 17 211 PAGEBACKGROUND = token.NT_OFFSET + 18 212 DECORATOR = token.NT_OFFSET + 19 213 DECORATOR_NAME = token.NT_OFFSET + 20 214 BRACKETS = token.NT_OFFSET + 21 215 MATH_OPERATOR = token.NT_OFFSET + 22 216 LINE = token.NT_OFFSET + 23 217 TEXT = token.NT_OFFSET + 24 218 # markup classname lookup 219 MARKUPDICT = { 220 ERRORTOKEN: 'py_err', 221 DECORATOR_NAME: 'py_decn', 222 DECORATOR: 'py_dec', 223 ARGS: 'py_args', 224 NAME: 'py_name', 225 NUMBER: 'py_num', 226 OPERATOR: 'py_op', 227 COMMENT: 'py_com', 228 DOUBLECOMMENT: 'py_dcom', 229 CLASS_NAME: 'py_clsn', 230 DEF_NAME: 'py_defn', 231 KEYWORD: 'py_key', 232 SINGLEQUOTE: 'py_sq', 233 SINGLEQUOTE_R: 'py_sqr', 234 SINGLEQUOTE_U: 'py_squ', 235 DOUBLEQUOTE: 'py_dq', 236 DOUBLEQUOTE_R: 'py_dqr', 237 DOUBLEQUOTE_U: 'py_dqu', 238 TRIPLESINGLEQUOTE: 'py_tsq', 239 TRIPLESINGLEQUOTE_R: 'py_tsqr', 240 TRIPLESINGLEQUOTE_U: 'py_tsqu', 241 TRIPLEDOUBLEQUOTE: 'py_tdq', 242 TRIPLEDOUBLEQUOTE_R: 'py_tdqr', 243 TRIPLEDOUBLEQUOTE_U: 'py_tdqu', 244 BRACKETS: 'py_bra', 245 MATH_OPERATOR: 'py_mop', 246 LINE: 'py_line', 247 TEXT: 'py_text', 248 } 249 # might help users that want to create custom schemes 250 TOKEN_NAMES= { 251 'ERRORTOKEN':ERRORTOKEN, 252 'DECORATOR_NAME':DECORATOR_NAME, 253 'DECORATOR':DECORATOR, 254 'ARGS':ARGS, 255 'NAME':NAME, 256 'NUMBER':NUMBER, 257 'OPERATOR':OPERATOR, 258 'COMMENT':COMMENT, 259 'DOUBLECOMMENT':DOUBLECOMMENT, 260 'CLASS_NAME':CLASS_NAME, 261 'DEF_NAME':DEF_NAME, 262 'KEYWORD':KEYWORD, 263 'SINGLEQUOTE':SINGLEQUOTE, 264 'SINGLEQUOTE_R':SINGLEQUOTE_R, 265 'SINGLEQUOTE_U':SINGLEQUOTE_U, 266 'DOUBLEQUOTE':DOUBLEQUOTE, 267 'DOUBLEQUOTE_R':DOUBLEQUOTE_R, 268 'DOUBLEQUOTE_U':DOUBLEQUOTE_U, 269 'TRIPLESINGLEQUOTE':TRIPLESINGLEQUOTE, 270 'TRIPLESINGLEQUOTE_R':TRIPLESINGLEQUOTE_R, 271 'TRIPLESINGLEQUOTE_U':TRIPLESINGLEQUOTE_U, 272 'TRIPLEDOUBLEQUOTE':TRIPLEDOUBLEQUOTE, 273 'TRIPLEDOUBLEQUOTE_R':TRIPLEDOUBLEQUOTE_R, 274 'TRIPLEDOUBLEQUOTE_U':TRIPLEDOUBLEQUOTE_U, 275 'BRACKETS':BRACKETS, 276 'MATH_OPERATOR':MATH_OPERATOR, 277 'LINE':LINE, 278 'TEXT':TEXT, 279 'PAGEBACKGROUND':PAGEBACKGROUND, 280 } 281 282 ###################################################################### 283 # Edit colors and styles to taste 284 # Create your own scheme, just copy one below , rename and edit. 285 # Custom styles must at least define NAME, ERRORTOKEN, PAGEBACKGROUND, 286 # all missing elements will default to NAME. 287 # See module docstring for details on style attributes. 288 ###################################################################### 289 # Copy null and use it as a starter colorscheme. 290 null = {# tokentype: ('tags border_color', 'textforecolor', 'textbackcolor') 291 ERRORTOKEN: ('','#000000',''),# Error token 292 DECORATOR_NAME: ('','#000000',''),# Decorator name 293 DECORATOR: ('','#000000',''),# @ symbol 294 ARGS: ('','#000000',''),# class,def,deco arguments 295 NAME: ('','#000000',''),# All other text 296 NUMBER: ('','#000000',''),# 0->10 297 OPERATOR: ('','#000000',''),# ':','`',';',',','.','=' 298 MATH_OPERATOR: ('','#000000',''),# '+','-','==','!=','*',etc 299 BRACKETS: ('','#000000',''),# '[',']','(',')','{','}' 300 COMMENT: ('','#000000',''),# Single comment 301 DOUBLECOMMENT: ('','#000000',''),## Double comment 302 CLASS_NAME: ('','#000000',''),# Class name 303 DEF_NAME: ('','#000000',''),# Def name 304 KEYWORD: ('','#000000',''),# Python keywords 305 SINGLEQUOTE: ('','#000000',''),# 'SINGLEQUOTE' 306 SINGLEQUOTE_R: ('','#000000',''),# r'SINGLEQUOTE' 307 SINGLEQUOTE_U: ('','#000000',''),# u'SINGLEQUOTE' 308 DOUBLEQUOTE: ('','#000000',''),# "DOUBLEQUOTE" 309 DOUBLEQUOTE_R: ('','#000000',''),# r"DOUBLEQUOTE" 310 DOUBLEQUOTE_U: ('','#000000',''),# u"DOUBLEQUOTE" 311 TRIPLESINGLEQUOTE: ('','#000000',''),# '''TRIPLESINGLEQUOTE''' 312 TRIPLESINGLEQUOTE_R: ('','#000000',''),# r'''TRIPLESINGLEQUOTE''' 313 TRIPLESINGLEQUOTE_U: ('','#000000',''),# u'''TRIPLESINGLEQUOTE''' 314 TRIPLEDOUBLEQUOTE: ('','#000000',''),# """TRIPLEDOUBLEQUOTE""" 315 TRIPLEDOUBLEQUOTE_R: ('','#000000',''),# r"""TRIPLEDOUBLEQUOTE""" 316 TRIPLEDOUBLEQUOTE_U: ('','#000000',''),# u"""TRIPLEDOUBLEQUOTE""" 317 TEXT: ('','#000000',''),# non python text 318 LINE: ('>ti#555555','#000000',''),# Linenumbers 319 PAGEBACKGROUND: '#FFFFFF'# set the page background 320 } 321 322 mono = { 323 ERRORTOKEN: ('s#FF0000','#FF8080',''), 324 DECORATOR_NAME: ('bu','#000000',''), 325 DECORATOR: ('b','#000000',''), 326 ARGS: ('b','#000000',''), 327 NAME: ('','#000000',''), 328 NUMBER: ('b','#000000',''), 329 OPERATOR: ('b','#000000',''), 330 MATH_OPERATOR: ('b','#000000',''), 331 BRACKETS: ('b','#000000',''), 332 COMMENT: ('i','#000000',''), 333 DOUBLECOMMENT: ('b','#000000',''), 334 CLASS_NAME: ('bu','#000000',''), 335 DEF_NAME: ('b','#000000',''), 336 KEYWORD: ('b','#000000',''), 337 SINGLEQUOTE: ('','#000000',''), 338 SINGLEQUOTE_R: ('','#000000',''), 339 SINGLEQUOTE_U: ('','#000000',''), 340 DOUBLEQUOTE: ('','#000000',''), 341 DOUBLEQUOTE_R: ('','#000000',''), 342 DOUBLEQUOTE_U: ('','#000000',''), 343 TRIPLESINGLEQUOTE: ('','#000000',''), 344 TRIPLESINGLEQUOTE_R: ('','#000000',''), 345 TRIPLESINGLEQUOTE_U: ('','#000000',''), 346 TRIPLEDOUBLEQUOTE: ('i','#000000',''), 347 TRIPLEDOUBLEQUOTE_R: ('i','#000000',''), 348 TRIPLEDOUBLEQUOTE_U: ('i','#000000',''), 349 TEXT: ('','#000000',''), 350 LINE: ('>ti#555555','#000000',''), 351 PAGEBACKGROUND: '#FFFFFF' 352 } 353 354 dark = { 355 ERRORTOKEN: ('s#FF0000','#FF8080',''), 356 DECORATOR_NAME: ('b','#FFBBAA',''), 357 DECORATOR: ('b','#CC5511',''), 358 ARGS: ('b','#CCCCEE',''), 359 NAME: ('','#DDDDDD',''), 360 NUMBER: ('','#FF0000',''), 361 OPERATOR: ('b','#FAF785',''), 362 MATH_OPERATOR: ('b','#FAF785',''), 363 BRACKETS: ('b','#FAF785',''), 364 COMMENT: ('','#45FCA0',''), 365 DOUBLECOMMENT: ('i','#A7C7A9',''), 366 CLASS_NAME: ('b','#B666FD',''), 367 DEF_NAME: ('b','#EBAE5C',''), 368 KEYWORD: ('b','#8680FF',''), 369 SINGLEQUOTE: ('','#F8BAFE',''), 370 SINGLEQUOTE_R: ('','#F8BAFE',''), 371 SINGLEQUOTE_U: ('','#F8BAFE',''), 372 DOUBLEQUOTE: ('','#FF80C0',''), 373 DOUBLEQUOTE_R: ('','#FF80C0',''), 374 DOUBLEQUOTE_U: ('','#FF80C0',''), 375 TRIPLESINGLEQUOTE: ('','#FF9595',''), 376 TRIPLESINGLEQUOTE_R: ('','#FF9595',''), 377 TRIPLESINGLEQUOTE_U: ('','#FF9595',''), 378 TRIPLEDOUBLEQUOTE: ('','#B3FFFF',''), 379 TRIPLEDOUBLEQUOTE_R: ('','#B3FFFF',''), 380 TRIPLEDOUBLEQUOTE_U: ('','#B3FFFF',''), 381 TEXT: ('','#FFFFFF',''), 382 LINE: ('>mi#555555','#bbccbb','#333333'), 383 PAGEBACKGROUND: '#000000' 384 } 385 386 dark2 = { 387 ERRORTOKEN: ('','#FF0000',''), 388 DECORATOR_NAME: ('b','#FFBBAA',''), 389 DECORATOR: ('b','#CC5511',''), 390 ARGS: ('b','#EEEEEE',''), 391 NAME: ('','#C0C0C0',''), 392 NUMBER: ('b','#00FF00',''), 393 OPERATOR: ('b','#FF090F',''), 394 MATH_OPERATOR: ('b','#F07040',''), 395 BRACKETS: ('b','#FFB90F',''), 396 COMMENT: ('i','#D0D000','#522000'),#622000 397 DOUBLECOMMENT: ('i','#D0D000','#522000'), 398 CLASS_NAME: ('b','#EE4080',''), 399 DEF_NAME: ('b','#FF8040',''), 400 KEYWORD: ('b','#4726E1',''), 401 SINGLEQUOTE: ('','#8080C0',''), 402 SINGLEQUOTE_R: ('','#8080C0',''), 403 SINGLEQUOTE_U: ('','#8080C0',''), 404 DOUBLEQUOTE: ('','#ADB9F1',''), 405 DOUBLEQUOTE_R: ('','#ADB9F1',''), 406 DOUBLEQUOTE_U: ('','#ADB9F1',''), 407 TRIPLESINGLEQUOTE: ('','#00C1C1',''), 408 TRIPLESINGLEQUOTE_R: ('','#00C1C1',''), 409 TRIPLESINGLEQUOTE_U: ('','#00C1C1',''), 410 TRIPLEDOUBLEQUOTE: ('','#33E3E3',''), 411 TRIPLEDOUBLEQUOTE_R: ('','#33E3E3',''), 412 TRIPLEDOUBLEQUOTE_U: ('','#33E3E3',''), 413 TEXT: ('','#C0C0C0',''), 414 LINE: ('>mi#555555','#bbccbb','#333333'), 415 PAGEBACKGROUND: '#000000' 416 } 417 418 lite = { 419 ERRORTOKEN: ('s#FF0000','#FF8080',''), 420 DECORATOR_NAME: ('b','#BB4422',''), 421 DECORATOR: ('b','#3333AF',''), 422 ARGS: ('b','#000000',''), 423 NAME: ('','#333333',''), 424 NUMBER: ('b','#DD2200',''), 425 OPERATOR: ('b','#000000',''), 426 MATH_OPERATOR: ('b','#000000',''), 427 BRACKETS: ('b','#000000',''), 428 COMMENT: ('','#007F00',''), 429 DOUBLECOMMENT: ('','#608060',''), 430 CLASS_NAME: ('b','#0000FF',''), 431 DEF_NAME: ('b','#9C7A00',''),#f09030 432 KEYWORD: ('b','#0000AF',''), 433 SINGLEQUOTE: ('','#600080',''), 434 SINGLEQUOTE_R: ('','#600080',''), 435 SINGLEQUOTE_U: ('','#600080',''), 436 DOUBLEQUOTE: ('','#A0008A',''), 437 DOUBLEQUOTE_R: ('','#A0008A',''), 438 DOUBLEQUOTE_U: ('','#A0008A',''), 439 TRIPLESINGLEQUOTE: ('','#337799',''), 440 TRIPLESINGLEQUOTE_R: ('','#337799',''), 441 TRIPLESINGLEQUOTE_U: ('','#337799',''), 442 TRIPLEDOUBLEQUOTE: ('','#1166AA',''), 443 TRIPLEDOUBLEQUOTE_R: ('','#1166AA',''), 444 TRIPLEDOUBLEQUOTE_U: ('','#1166AA',''), 445 TEXT: ('','#000000',''), 446 LINE: ('>ti#555555','#000000',''), 447 PAGEBACKGROUND: '#FFFFFF' 448 } 449 450 idle = { 451 ERRORTOKEN: ('s#FF0000','#FF8080',''), 452 DECORATOR_NAME: ('','#900090',''), 453 DECORATOR: ('','#000000',''), 454 NAME: ('','#000000',''), 455 NUMBER: ('','#000000',''), 456 OPERATOR: ('','#000000',''), 457 MATH_OPERATOR: ('','#000000',''), 458 BRACKETS: ('','#000000',''), 459 COMMENT: ('','#DD0000',''), 460 DOUBLECOMMENT: ('','#DD0000',''), 461 CLASS_NAME: ('','#0000FF',''), 462 DEF_NAME: ('','#0000FF',''), 463 KEYWORD: ('','#FF7700',''), 464 SINGLEQUOTE: ('','#00AA00',''), 465 SINGLEQUOTE_R: ('','#00AA00',''), 466 SINGLEQUOTE_U: ('','#00AA00',''), 467 DOUBLEQUOTE: ('','#00AA00',''), 468 DOUBLEQUOTE_R: ('','#00AA00',''), 469 DOUBLEQUOTE_U: ('','#00AA00',''), 470 TRIPLESINGLEQUOTE: ('','#00AA00',''), 471 TRIPLESINGLEQUOTE_R: ('','#00AA00',''), 472 TRIPLESINGLEQUOTE_U: ('','#00AA00',''), 473 TRIPLEDOUBLEQUOTE: ('','#00AA00',''), 474 TRIPLEDOUBLEQUOTE_R: ('','#00AA00',''), 475 TRIPLEDOUBLEQUOTE_U: ('','#00AA00',''), 476 TEXT: ('','#000000',''), 477 LINE: ('>ti#555555','#000000',''), 478 PAGEBACKGROUND: '#FFFFFF' 479 } 480 481 pythonwin = { 482 ERRORTOKEN: ('s#FF0000','#FF8080',''), 483 DECORATOR_NAME: ('b','#303030',''), 484 DECORATOR: ('b','#DD0080',''), 485 ARGS: ('','#000000',''), 486 NAME: ('','#303030',''), 487 NUMBER: ('','#008080',''), 488 OPERATOR: ('','#000000',''), 489 MATH_OPERATOR: ('','#000000',''), 490 BRACKETS: ('','#000000',''), 491 COMMENT: ('','#007F00',''), 492 DOUBLECOMMENT: ('','#7F7F7F',''), 493 CLASS_NAME: ('b','#0000FF',''), 494 DEF_NAME: ('b','#007F7F',''), 495 KEYWORD: ('b','#000080',''), 496 SINGLEQUOTE: ('','#808000',''), 497 SINGLEQUOTE_R: ('','#808000',''), 498 SINGLEQUOTE_U: ('','#808000',''), 499 DOUBLEQUOTE: ('','#808000',''), 500 DOUBLEQUOTE_R: ('','#808000',''), 501 DOUBLEQUOTE_U: ('','#808000',''), 502 TRIPLESINGLEQUOTE: ('','#808000',''), 503 TRIPLESINGLEQUOTE_R: ('','#808000',''), 504 TRIPLESINGLEQUOTE_U: ('','#808000',''), 505 TRIPLEDOUBLEQUOTE: ('','#808000',''), 506 TRIPLEDOUBLEQUOTE_R: ('','#808000',''), 507 TRIPLEDOUBLEQUOTE_U: ('','#808000',''), 508 TEXT: ('','#303030',''), 509 LINE: ('>ti#555555','#000000',''), 510 PAGEBACKGROUND: '#FFFFFF' 511 } 512 513 viewcvs = { 514 ERRORTOKEN: ('s#FF0000','#FF8080',''), 515 DECORATOR_NAME: ('','#000000',''), 516 DECORATOR: ('','#000000',''), 517 ARGS: ('','#000000',''), 518 NAME: ('','#000000',''), 519 NUMBER: ('','#000000',''), 520 OPERATOR: ('','#000000',''), 521 MATH_OPERATOR: ('','#000000',''), 522 BRACKETS: ('','#000000',''), 523 COMMENT: ('i','#b22222',''), 524 DOUBLECOMMENT: ('i','#b22222',''), 525 CLASS_NAME: ('','#000000',''), 526 DEF_NAME: ('b','#0000ff',''), 527 KEYWORD: ('b','#a020f0',''), 528 SINGLEQUOTE: ('b','#bc8f8f',''), 529 SINGLEQUOTE_R: ('b','#bc8f8f',''), 530 SINGLEQUOTE_U: ('b','#bc8f8f',''), 531 DOUBLEQUOTE: ('b','#bc8f8f',''), 532 DOUBLEQUOTE_R: ('b','#bc8f8f',''), 533 DOUBLEQUOTE_U: ('b','#bc8f8f',''), 534 TRIPLESINGLEQUOTE: ('b','#bc8f8f',''), 535 TRIPLESINGLEQUOTE_R: ('b','#bc8f8f',''), 536 TRIPLESINGLEQUOTE_U: ('b','#bc8f8f',''), 537 TRIPLEDOUBLEQUOTE: ('b','#bc8f8f',''), 538 TRIPLEDOUBLEQUOTE_R: ('b','#bc8f8f',''), 539 TRIPLEDOUBLEQUOTE_U: ('b','#bc8f8f',''), 540 TEXT: ('','#000000',''), 541 LINE: ('>ti#555555','#000000',''), 542 PAGEBACKGROUND: '#FFFFFF' 543 } 544 545 defaultColors = lite 546 547 def Usage(): 548 """ 549 ----------------------------------------------------------------------------- 550 PySourceColor.py ver: %s 551 ----------------------------------------------------------------------------- 552 Module summary: 553 This module is designed to colorize python source code. 554 Input--->python source 555 Output-->colorized (html, html4.01/css, xhtml1.0) 556 Standalone: 557 This module will work from the command line with options. 558 This module will work with redirected stdio. 559 Imported: 560 This module can be imported and used directly in your code. 561 ----------------------------------------------------------------------------- 562 Command line options: 563 -h, --help 564 Optional-> Display this help message. 565 -t, --test 566 Optional-> Will ignore all others flags but --profile 567 test all schemes and markup combinations 568 -p, --profile 569 Optional-> Works only with --test or -t 570 runs profile.py and makes the test work in quiet mode. 571 -i, --in, --input 572 Optional-> If you give input on stdin. 573 Use any of these for the current dir (.,cwd) 574 Input can be file or dir. 575 Input from stdin use one of the following (-,stdin) 576 If stdin is used as input stdout is output unless specified. 577 -o, --out, --output 578 Optional-> output dir for the colorized source. 579 default: output dir is the input dir. 580 To output html to stdout use one of the following (-,stdout) 581 Stdout can be used without stdin if you give a file as input. 582 -c, --color 583 Optional-> null, mono, dark, dark2, lite, idle, pythonwin, viewcvs 584 default: dark 585 -s, --show 586 Optional-> Show page after creation. 587 default: no show 588 -m, --markup 589 Optional-> html, css, xhtml 590 css, xhtml also support external stylesheets (-e,--external) 591 default: HTML 592 -e, --external 593 Optional-> use with css, xhtml 594 Writes an style sheet instead of embedding it in the page 595 saves it as pystyle.css in the same directory. 596 html markup will silently ignore this flag. 597 -H, --header 598 Opional-> add a page header to the top of the output 599 -H 600 Builtin header (name,date,hrule) 601 --header 602 You must specify a filename. 603 The header file must be valid html 604 and must handle its own font colors. 605 ex. --header c:/tmp/header.txt 606 -F, --footer 607 Opional-> add a page footer to the bottom of the output 608 -F 609 Builtin footer (hrule,name,date) 610 --footer 611 You must specify a filename. 612 The footer file must be valid html