# # Secret Labs' Regular Expression Engine # $Id$ # # various symbols used by the regular expression engine. # run this script to update the _sre include files! # # Copyright (c) 1998-2000 by Secret Labs AB. All rights reserved. # # This code can only be used for 1.6 alpha testing. All other use # require explicit permission from Secret Labs AB. # # Portions of this engine have been developed in cooperation with # CNRI. Hewlett-Packard provided funding for 1.6 integration and # other compatibility work. # # operators FAILURE = "failure" SUCCESS = "success" ANY = "any" ASSERT = "assert" AT = "at" BRANCH = "branch" CALL = "call" CATEGORY = "category" GROUP = "group" GROUP_IGNORE = "group_ignore" IN = "in" IN_IGNORE = "in_ignore" JUMP = "jump" LITERAL = "literal" LITERAL_IGNORE = "literal_ignore" MARK = "mark" MAX_REPEAT = "max_repeat" MAX_REPEAT_ONE = "max_repeat_one" MAX_UNTIL = "max_until" MIN_REPEAT = "min_repeat" MIN_UNTIL = "min_until" NEGATE = "negate" NOT_LITERAL = "not_literal" NOT_LITERAL_IGNORE = "not_literal_ignore" RANGE = "range" REPEAT = "repeat" SUBPATTERN = "subpattern" # positions AT_BEGINNING = "at_beginning" AT_BOUNDARY = "at_boundary" AT_NON_BOUNDARY = "at_non_boundary" AT_END = "at_end" # categories CATEGORY_DIGIT = "category_digit" CATEGORY_NOT_DIGIT = "category_not_digit" CATEGORY_SPACE = "category_space" CATEGORY_NOT_SPACE = "category_not_space" CATEGORY_WORD = "category_word" CATEGORY_NOT_WORD = "category_not_word" CODES = [ # failure=0 success=1 (just because it looks better that way :-) FAILURE, SUCCESS, ANY, ASSERT, AT, BRANCH, CALL, CATEGORY, GROUP, GROUP_IGNORE, IN, IN_IGNORE, JUMP, LITERAL, LITERAL_IGNORE, MARK, MAX_REPEAT, MAX_UNTIL, MAX_REPEAT_ONE, MIN_REPEAT, MIN_UNTIL, NOT_LITERAL, NOT_LITERAL_IGNORE, NEGATE, RANGE, REPEAT ] # convert to dictionary c = {} i = 0 for code in CODES: c[code] = i i = i + 1 CODES = c # replacement operations for "ignore case" mode MAP_IGNORE = { GROUP: GROUP_IGNORE, IN: IN_IGNORE, LITERAL: LITERAL_IGNORE, NOT_LITERAL: NOT_LITERAL_IGNORE } POSITIONS = { AT_BEGINNING: ord("a"), AT_BOUNDARY: ord("b"), AT_NON_BOUNDARY: ord("B"), AT_END: ord("z"), } CATEGORIES = { CATEGORY_DIGIT: ord("d"), CATEGORY_NOT_DIGIT: ord("D"), CATEGORY_SPACE: ord("s"), CATEGORY_NOT_SPACE: ord("S"), CATEGORY_WORD: ord("w"), CATEGORY_NOT_WORD: ord("W"), } if __name__ == "__main__": import string items = CODES.items() items.sort(lambda a, b: cmp(a[1], b[1])) f = open("sre_constants.h", "w") f.write("/* generated by sre_constants.py */\n") for k, v in items: f.write("#define SRE_OP_" + string.upper(k) + " " + str(v) + "\n") f.close() print "done"