import lex class DiffGrammar(lex.Grammar): GRAMMAR_LIST = [ {'name': "left", 'expr': "(?:^|(?<=\n))\-.*(?:$|\n)", 'action': lex.make_token}, {'name': "right", 'expr': "(?:^|(?<=\n))\+.*(?:$|\n)", 'action': lex.make_token}, #RCS file: /usr/local/cvsroot/TBB_v2/main_application/lib/TBB/EfileServer.pm,v #retrieving revision 1.57 #diff -u -r1.57 EfileServer.pm {'name': "cvs metadata", 'expr': "(?:^|(?<=\n))Index: .*\n={67}\nRCS file: .*,v\nretrieving revision [0-9.]+\ndiff -u .*(?:$|\n)", 'action': lex.make_token}, {'name': "svn metadata", 'expr': "(?:^|(?<=\n))Index: .*\n={67}(?:$|\n)", 'action': lex.make_token}, {'name': "location", 'expr': "(?:^|(?<=\n))@@ [-+0-9a-z, ]* @@(?:$|\n)", 'action': lex.make_token}, {'name': "common", 'expr': "(?:^|(?<=\n)).*(?:$|\n)", 'action': lex.make_token}, {'name': "default", 'expr': r'\\.|.|\n', 'action': lex.silent} ] def _default_rules(self): """subclasses can override this to define defaults for a grammar""" for rdir in DiffGrammar.GRAMMAR_LIST: self.add_rule(**rdir)