import color, mode2 from point2 import Point from lex3 import Grammar, PatternRule, RegionRule class MetadataGrammar(Grammar): rules = [ PatternRule(r'username', r'[a-zA-Z0-9_]+'), ] class BlameGrammar(Grammar): rules = [ RegionRule(r'metadata', r'^[0-9\.]+', MetadataGrammar, r'(?:[0-9]{4}-[0-9]{2}-[0-9]{2}|[0-9]{2}-[A-Z][a-z]{2}-[0-9]{2})'), PatternRule(r'data', r'.+$'), ] class Blame(mode2.Fundamental): grammar = BlameGrammar colors = { 'metadata.start': ('blue', 'default', 'bold'), 'metadata.username': ('cyan', 'default', 'bold'), 'metadata.end': ('green', 'default', 'bold'), } def name(self): return "Blame"