@@ -334,9 +334,10 @@ def add_raw_line(self, raw_line):
334
334
# A visitor that dumps the ExplodedGraph into a DOT file with fancy HTML-based
335
335
# syntax highlighing.
336
336
class DotDumpVisitor (object ):
337
- def __init__ (self , do_diffs ):
337
+ def __init__ (self , do_diffs , dark_mode ):
338
338
super (DotDumpVisitor , self ).__init__ ()
339
339
self ._do_diffs = do_diffs
340
+ self ._dark_mode = dark_mode
340
341
341
342
@staticmethod
342
343
def _dump_raw (s ):
@@ -363,6 +364,8 @@ def _diff_plus_minus(is_added):
363
364
def visit_begin_graph (self , graph ):
364
365
self ._graph = graph
365
366
self ._dump_raw ('digraph "ExplodedGraph" {\n ' )
367
+ if self ._dark_mode :
368
+ self ._dump_raw ('bgcolor="gray10";\n ' )
366
369
self ._dump_raw ('label="";\n ' )
367
370
368
371
def visit_program_point (self , p ):
@@ -372,7 +375,7 @@ def visit_program_point(self, p):
372
375
'PostStmtPurgeDeadSymbols' ]:
373
376
color = 'red'
374
377
elif p .kind in ['CallEnter' , 'CallExitBegin' , 'CallExitEnd' ]:
375
- color = 'blue'
378
+ color = 'dodgerblue' if self . _dark_mode else ' blue'
376
379
elif p .kind in ['Statement' ]:
377
380
color = 'cyan4'
378
381
else :
@@ -436,7 +439,7 @@ def dump_location_context(lc, is_added=None):
436
439
self ._dump ('<tr><td>%s</td>'
437
440
'<td align="left"><b>%s</b></td>'
438
441
'<td align="left" colspan="2">'
439
- '<font color="grey60 ">%s </font>'
442
+ '<font color="gray60 ">%s </font>'
440
443
'%s</td></tr>'
441
444
% (self ._diff_plus_minus (is_added ),
442
445
lc .caption , lc .decl ,
@@ -451,9 +454,11 @@ def dump_binding(f, b, is_added=None):
451
454
'<td align="left">%s</td></tr>'
452
455
% (self ._diff_plus_minus (is_added ),
453
456
b .stmt_id ,
454
- '<td align="left"><font color="darkgreen"><i>'
455
- '(%s)</i></font></td>' % b .kind
456
- if b .kind is not None else '' ,
457
+ '<td align="left"><font color="%s"><i>'
458
+ '%s</i></font></td>' % (
459
+ 'lavender' if self ._dark_mode else 'darkgreen' ,
460
+ ('(%s)' % b .kind ) if b .kind is not None else ' '
461
+ ),
457
462
b .pretty , f .bindings [b ]))
458
463
459
464
frames_updated = e .diff_frames (prev_e ) if prev_e is not None else None
@@ -615,12 +620,16 @@ def visit_state(self, s, prev_s):
615
620
s , prev_s )
616
621
617
622
def visit_node (self , node ):
618
- self ._dump ('%s [shape=record,label=<<table border="0"> '
623
+ self ._dump ('%s [shape=record,'
619
624
% (node .node_name ()))
625
+ if self ._dark_mode :
626
+ self ._dump ('color="white",fontcolor="gray80",' )
627
+ self ._dump ('label=<<table border="0">' )
620
628
621
- self ._dump ('<tr><td bgcolor="grey "><b>Node %d (%s) - '
629
+ self ._dump ('<tr><td bgcolor="%s "><b>Node %d (%s) - '
622
630
'State %s</b></td></tr>'
623
- % (node .node_id , node .ptr , node .state .state_id
631
+ % ("gray20" if self ._dark_mode else "gray" ,
632
+ node .node_id , node .ptr , node .state .state_id
624
633
if node .state is not None else 'Unspecified' ))
625
634
self ._dump ('<tr><td align="left" width="0">' )
626
635
if len (node .points ) > 1 :
@@ -645,7 +654,10 @@ def visit_node(self, node):
645
654
self ._dump_raw ('</table>>];\n ' )
646
655
647
656
def visit_edge (self , pred , succ ):
648
- self ._dump_raw ('%s -> %s;\n ' % (pred .node_name (), succ .node_name ()))
657
+ self ._dump_raw ('%s -> %s%s;\n ' % (
658
+ pred .node_name (), succ .node_name (),
659
+ ' [color="white"]' if self ._dark_mode else ''
660
+ ))
649
661
650
662
def visit_end_of_graph (self ):
651
663
self ._dump_raw ('}\n ' )
@@ -678,6 +690,9 @@ def main():
678
690
parser .add_argument ('-d' , '--diff' , action = 'store_const' , dest = 'diff' ,
679
691
const = True , default = False ,
680
692
help = 'display differences between states' )
693
+ parser .add_argument ('--dark' , action = 'store_const' , dest = 'dark' ,
694
+ const = True , default = False ,
695
+ help = 'dark mode' )
681
696
args = parser .parse_args ()
682
697
logging .basicConfig (level = args .loglevel )
683
698
@@ -688,7 +703,7 @@ def main():
688
703
graph .add_raw_line (raw_line )
689
704
690
705
explorer = Explorer ()
691
- visitor = DotDumpVisitor (args .diff )
706
+ visitor = DotDumpVisitor (args .diff , args . dark )
692
707
explorer .explore (graph , visitor )
693
708
694
709
0 commit comments