10c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi#
20c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# Secret Labs' Regular Expression Engine
30c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi#
40c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# various symbols used by the regular expression engine.
50c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# run this script to update the _sre include files!
60c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi#
70c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# Copyright (c) 1998-2001 by Secret Labs AB.  All rights reserved.
80c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi#
90c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# See the sre.py file for information on usage and redistribution.
100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi#
110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi"""Internal support module for sre"""
130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# update when constants are added or removed
150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiMAGIC = 20031017
170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yifrom _sre import MAXREPEAT
190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# SRE standard exception (access as sre.error)
210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# should this really be here?
220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiclass error(Exception):
240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    pass
250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# operators
270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiFAILURE = "failure"
290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiSUCCESS = "success"
300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiANY = "any"
320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiANY_ALL = "any_all"
330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiASSERT = "assert"
340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiASSERT_NOT = "assert_not"
350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiAT = "at"
360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiBIGCHARSET = "bigcharset"
370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiBRANCH = "branch"
380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiCALL = "call"
390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiCATEGORY = "category"
400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiCHARSET = "charset"
410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiGROUPREF = "groupref"
420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiGROUPREF_IGNORE = "groupref_ignore"
430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiGROUPREF_EXISTS = "groupref_exists"
440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiIN = "in"
450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiIN_IGNORE = "in_ignore"
460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiINFO = "info"
470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiJUMP = "jump"
480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiLITERAL = "literal"
490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiLITERAL_IGNORE = "literal_ignore"
500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiMARK = "mark"
510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiMAX_REPEAT = "max_repeat"
520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiMAX_UNTIL = "max_until"
530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiMIN_REPEAT = "min_repeat"
540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiMIN_UNTIL = "min_until"
550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiNEGATE = "negate"
560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiNOT_LITERAL = "not_literal"
570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiNOT_LITERAL_IGNORE = "not_literal_ignore"
580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiRANGE = "range"
590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiREPEAT = "repeat"
600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiREPEAT_ONE = "repeat_one"
610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiSUBPATTERN = "subpattern"
620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiMIN_REPEAT_ONE = "min_repeat_one"
630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# positions
650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiAT_BEGINNING = "at_beginning"
660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiAT_BEGINNING_LINE = "at_beginning_line"
670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiAT_BEGINNING_STRING = "at_beginning_string"
680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiAT_BOUNDARY = "at_boundary"
690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiAT_NON_BOUNDARY = "at_non_boundary"
700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiAT_END = "at_end"
710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiAT_END_LINE = "at_end_line"
720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiAT_END_STRING = "at_end_string"
730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiAT_LOC_BOUNDARY = "at_loc_boundary"
740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiAT_LOC_NON_BOUNDARY = "at_loc_non_boundary"
750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiAT_UNI_BOUNDARY = "at_uni_boundary"
760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiAT_UNI_NON_BOUNDARY = "at_uni_non_boundary"
770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# categories
790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiCATEGORY_DIGIT = "category_digit"
800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiCATEGORY_NOT_DIGIT = "category_not_digit"
810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiCATEGORY_SPACE = "category_space"
820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiCATEGORY_NOT_SPACE = "category_not_space"
830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiCATEGORY_WORD = "category_word"
840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiCATEGORY_NOT_WORD = "category_not_word"
850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiCATEGORY_LINEBREAK = "category_linebreak"
860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiCATEGORY_NOT_LINEBREAK = "category_not_linebreak"
870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiCATEGORY_LOC_WORD = "category_loc_word"
880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiCATEGORY_LOC_NOT_WORD = "category_loc_not_word"
890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiCATEGORY_UNI_DIGIT = "category_uni_digit"
900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiCATEGORY_UNI_NOT_DIGIT = "category_uni_not_digit"
910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiCATEGORY_UNI_SPACE = "category_uni_space"
920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiCATEGORY_UNI_NOT_SPACE = "category_uni_not_space"
930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiCATEGORY_UNI_WORD = "category_uni_word"
940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiCATEGORY_UNI_NOT_WORD = "category_uni_not_word"
950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiCATEGORY_UNI_LINEBREAK = "category_uni_linebreak"
960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiCATEGORY_UNI_NOT_LINEBREAK = "category_uni_not_linebreak"
970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiOPCODES = [
990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
1000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    # failure=0 success=1 (just because it looks better that way :-)
1010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    FAILURE, SUCCESS,
1020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
1030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    ANY, ANY_ALL,
1040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    ASSERT, ASSERT_NOT,
1050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    AT,
1060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    BRANCH,
1070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    CALL,
1080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    CATEGORY,
1090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    CHARSET, BIGCHARSET,
1100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    GROUPREF, GROUPREF_EXISTS, GROUPREF_IGNORE,
1110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    IN, IN_IGNORE,
1120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    INFO,
1130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    JUMP,
1140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    LITERAL, LITERAL_IGNORE,
1150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    MARK,
1160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    MAX_UNTIL,
1170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    MIN_UNTIL,
1180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    NOT_LITERAL, NOT_LITERAL_IGNORE,
1190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    NEGATE,
1200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    RANGE,
1210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    REPEAT,
1220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    REPEAT_ONE,
1230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    SUBPATTERN,
1240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    MIN_REPEAT_ONE
1250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
1260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi]
1270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
1280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiATCODES = [
1290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    AT_BEGINNING, AT_BEGINNING_LINE, AT_BEGINNING_STRING, AT_BOUNDARY,
1300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    AT_NON_BOUNDARY, AT_END, AT_END_LINE, AT_END_STRING,
1310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    AT_LOC_BOUNDARY, AT_LOC_NON_BOUNDARY, AT_UNI_BOUNDARY,
1320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    AT_UNI_NON_BOUNDARY
1330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi]
1340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
1350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiCHCODES = [
1360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    CATEGORY_DIGIT, CATEGORY_NOT_DIGIT, CATEGORY_SPACE,
1370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    CATEGORY_NOT_SPACE, CATEGORY_WORD, CATEGORY_NOT_WORD,
1380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    CATEGORY_LINEBREAK, CATEGORY_NOT_LINEBREAK, CATEGORY_LOC_WORD,
1390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    CATEGORY_LOC_NOT_WORD, CATEGORY_UNI_DIGIT, CATEGORY_UNI_NOT_DIGIT,
1400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    CATEGORY_UNI_SPACE, CATEGORY_UNI_NOT_SPACE, CATEGORY_UNI_WORD,
1410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    CATEGORY_UNI_NOT_WORD, CATEGORY_UNI_LINEBREAK,
1420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    CATEGORY_UNI_NOT_LINEBREAK
1430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi]
1440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
1450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yidef makedict(list):
1460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    d = {}
1470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    i = 0
1480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    for item in list:
1490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        d[item] = i
1500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        i = i + 1
1510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    return d
1520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
1530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiOPCODES = makedict(OPCODES)
1540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiATCODES = makedict(ATCODES)
1550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiCHCODES = makedict(CHCODES)
1560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
1570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# replacement operations for "ignore case" mode
1580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiOP_IGNORE = {
1590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    GROUPREF: GROUPREF_IGNORE,
1600c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    IN: IN_IGNORE,
1610c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    LITERAL: LITERAL_IGNORE,
1620c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    NOT_LITERAL: NOT_LITERAL_IGNORE
1630c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi}
1640c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
1650c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiAT_MULTILINE = {
1660c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    AT_BEGINNING: AT_BEGINNING_LINE,
1670c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    AT_END: AT_END_LINE
1680c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi}
1690c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
1700c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiAT_LOCALE = {
1710c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    AT_BOUNDARY: AT_LOC_BOUNDARY,
1720c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    AT_NON_BOUNDARY: AT_LOC_NON_BOUNDARY
1730c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi}
1740c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
1750c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiAT_UNICODE = {
1760c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    AT_BOUNDARY: AT_UNI_BOUNDARY,
1770c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    AT_NON_BOUNDARY: AT_UNI_NON_BOUNDARY
1780c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi}
1790c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
1800c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiCH_LOCALE = {
1810c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    CATEGORY_DIGIT: CATEGORY_DIGIT,
1820c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    CATEGORY_NOT_DIGIT: CATEGORY_NOT_DIGIT,
1830c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    CATEGORY_SPACE: CATEGORY_SPACE,
1840c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    CATEGORY_NOT_SPACE: CATEGORY_NOT_SPACE,
1850c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    CATEGORY_WORD: CATEGORY_LOC_WORD,
1860c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    CATEGORY_NOT_WORD: CATEGORY_LOC_NOT_WORD,
1870c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    CATEGORY_LINEBREAK: CATEGORY_LINEBREAK,
1880c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    CATEGORY_NOT_LINEBREAK: CATEGORY_NOT_LINEBREAK
1890c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi}
1900c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
1910c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiCH_UNICODE = {
1920c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    CATEGORY_DIGIT: CATEGORY_UNI_DIGIT,
1930c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    CATEGORY_NOT_DIGIT: CATEGORY_UNI_NOT_DIGIT,
1940c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    CATEGORY_SPACE: CATEGORY_UNI_SPACE,
1950c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    CATEGORY_NOT_SPACE: CATEGORY_UNI_NOT_SPACE,
1960c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    CATEGORY_WORD: CATEGORY_UNI_WORD,
1970c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    CATEGORY_NOT_WORD: CATEGORY_UNI_NOT_WORD,
1980c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    CATEGORY_LINEBREAK: CATEGORY_UNI_LINEBREAK,
1990c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    CATEGORY_NOT_LINEBREAK: CATEGORY_UNI_NOT_LINEBREAK
2000c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi}
2010c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
2020c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# flags
2030c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiSRE_FLAG_TEMPLATE = 1 # template mode (disable backtracking)
2040c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiSRE_FLAG_IGNORECASE = 2 # case insensitive
2050c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiSRE_FLAG_LOCALE = 4 # honour system locale
2060c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiSRE_FLAG_MULTILINE = 8 # treat target as multiline string
2070c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiSRE_FLAG_DOTALL = 16 # treat target as a single string
2080c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiSRE_FLAG_UNICODE = 32 # use unicode locale
2090c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiSRE_FLAG_VERBOSE = 64 # ignore whitespace and comments
2100c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiSRE_FLAG_DEBUG = 128 # debugging
2110c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
2120c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi# flags for INFO primitive
2130c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiSRE_INFO_PREFIX = 1 # has prefix
2140c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiSRE_INFO_LITERAL = 2 # entire pattern is literal (given by prefix)
2150c5958b1636c47ed7c284f859c8e805fd06a0e6Bill YiSRE_INFO_CHARSET = 4 # pattern starts with character from given set
2160c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
2170c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yiif __name__ == "__main__":
2180c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    def dump(f, d, prefix):
2190c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        items = d.items()
2200c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        items.sort(key=lambda a: a[1])
2210c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi        for k, v in items:
2220c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi            f.write("#define %s_%s %s\n" % (prefix, k.upper(), v))
2230c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    f = open("sre_constants.h", "w")
2240c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    f.write("""\
2250c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi/*
2260c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi * Secret Labs' Regular Expression Engine
2270c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi *
2280c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi * regular expression matching engine
2290c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi *
2300c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi * NOTE: This file is generated by sre_constants.py.  If you need
2310c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi * to change anything in here, edit sre_constants.py and run it.
2320c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi *
2330c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi * Copyright (c) 1997-2001 by Secret Labs AB.  All rights reserved.
2340c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi *
2350c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi * See the _sre.c file for information on usage and redistribution.
2360c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi */
2370c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
2380c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi""")
2390c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
2400c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    f.write("#define SRE_MAGIC %d\n" % MAGIC)
2410c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
2420c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    dump(f, OPCODES, "SRE_OP")
2430c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    dump(f, ATCODES, "SRE")
2440c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    dump(f, CHCODES, "SRE")
2450c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
2460c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    f.write("#define SRE_FLAG_TEMPLATE %d\n" % SRE_FLAG_TEMPLATE)
2470c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    f.write("#define SRE_FLAG_IGNORECASE %d\n" % SRE_FLAG_IGNORECASE)
2480c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    f.write("#define SRE_FLAG_LOCALE %d\n" % SRE_FLAG_LOCALE)
2490c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    f.write("#define SRE_FLAG_MULTILINE %d\n" % SRE_FLAG_MULTILINE)
2500c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    f.write("#define SRE_FLAG_DOTALL %d\n" % SRE_FLAG_DOTALL)
2510c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    f.write("#define SRE_FLAG_UNICODE %d\n" % SRE_FLAG_UNICODE)
2520c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    f.write("#define SRE_FLAG_VERBOSE %d\n" % SRE_FLAG_VERBOSE)
2530c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
2540c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    f.write("#define SRE_INFO_PREFIX %d\n" % SRE_INFO_PREFIX)
2550c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    f.write("#define SRE_INFO_LITERAL %d\n" % SRE_INFO_LITERAL)
2560c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    f.write("#define SRE_INFO_CHARSET %d\n" % SRE_INFO_CHARSET)
2570c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi
2580c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    f.close()
2590c5958b1636c47ed7c284f859c8e805fd06a0e6Bill Yi    print "done"
260