cpython/Lib/dos-8x3/sre_cons.py

213 lines
5.5 KiB
Python
Raw Normal View History

2000-05-08 17:31:04 +00:00
#
# Secret Labs' Regular Expression Engine
#
# 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.
#
# Portions of this engine have been developed in cooperation with
# CNRI. Hewlett-Packard provided funding for 1.6 integration and
# other compatibility work.
#
2000-06-29 19:35:29 +00:00
# should this really be here?
class error(Exception):
pass
2000-05-08 17:31:04 +00:00
# operators
FAILURE = "failure"
SUCCESS = "success"
ANY = "any"
ASSERT = "assert"
2000-06-30 16:13:37 +00:00
ASSERT_NOT = "assert_not"
2000-05-08 17:31:04 +00:00
AT = "at"
BRANCH = "branch"
CALL = "call"
CATEGORY = "category"
GROUP = "group"
GROUP_IGNORE = "group_ignore"
IN = "in"
IN_IGNORE = "in_ignore"
2000-06-29 19:35:29 +00:00
INFO = "info"
2000-05-08 17:31:04 +00:00
JUMP = "jump"
LITERAL = "literal"
LITERAL_IGNORE = "literal_ignore"
MARK = "mark"
MAX_REPEAT = "max_repeat"
MAX_REPEAT_ONE = "max_repeat_one"
MIN_REPEAT = "min_repeat"
NEGATE = "negate"
NOT_LITERAL = "not_literal"
NOT_LITERAL_IGNORE = "not_literal_ignore"
RANGE = "range"
REPEAT = "repeat"
2000-06-29 19:35:29 +00:00
REPEAT_ONE = "repeat_one"
2000-05-08 17:31:04 +00:00
SUBPATTERN = "subpattern"
# positions
AT_BEGINNING = "at_beginning"
2000-06-29 19:35:29 +00:00
AT_BEGINNING_LINE = "at_beginning_line"
2000-05-08 17:31:04 +00:00
AT_BOUNDARY = "at_boundary"
AT_NON_BOUNDARY = "at_non_boundary"
AT_END = "at_end"
2000-06-29 19:35:29 +00:00
AT_END_LINE = "at_end_line"
2000-05-08 17:31:04 +00:00
# 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"
2000-06-29 19:35:29 +00:00
CATEGORY_LINEBREAK = "category_linebreak"
CATEGORY_NOT_LINEBREAK = "category_not_linebreak"
CATEGORY_LOC_WORD = "category_loc_word"
CATEGORY_LOC_NOT_WORD = "category_loc_not_word"
CATEGORY_UNI_DIGIT = "category_uni_digit"
CATEGORY_UNI_NOT_DIGIT = "category_uni_not_digit"
CATEGORY_UNI_SPACE = "category_uni_space"
CATEGORY_UNI_NOT_SPACE = "category_uni_not_space"
CATEGORY_UNI_WORD = "category_uni_word"
CATEGORY_UNI_NOT_WORD = "category_uni_not_word"
CATEGORY_UNI_LINEBREAK = "category_uni_linebreak"
CATEGORY_UNI_NOT_LINEBREAK = "category_uni_not_linebreak"
2000-05-08 17:31:04 +00:00
2000-06-29 19:35:29 +00:00
OPCODES = [
2000-05-08 17:31:04 +00:00
# failure=0 success=1 (just because it looks better that way :-)
FAILURE, SUCCESS,
ANY,
2000-06-30 16:13:37 +00:00
ASSERT, ASSERT_NOT,
2000-05-08 17:31:04 +00:00
AT,
BRANCH,
CALL,
CATEGORY,
GROUP, GROUP_IGNORE,
IN, IN_IGNORE,
2000-06-29 19:35:29 +00:00
INFO,
2000-05-08 17:31:04 +00:00
JUMP,
LITERAL, LITERAL_IGNORE,
MARK,
2000-06-29 19:35:29 +00:00
MAX_REPEAT,
2000-05-08 17:31:04 +00:00
MAX_REPEAT_ONE,
2000-06-29 19:35:29 +00:00
MIN_REPEAT,
2000-05-08 17:31:04 +00:00
NOT_LITERAL, NOT_LITERAL_IGNORE,
NEGATE,
RANGE,
REPEAT
]
2000-06-29 19:35:29 +00:00
ATCODES = [
AT_BEGINNING, AT_BEGINNING_LINE, AT_BOUNDARY,
AT_NON_BOUNDARY, AT_END, AT_END_LINE
]
CHCODES = [
CATEGORY_DIGIT, CATEGORY_NOT_DIGIT, CATEGORY_SPACE,
CATEGORY_NOT_SPACE, CATEGORY_WORD, CATEGORY_NOT_WORD,
CATEGORY_LINEBREAK, CATEGORY_NOT_LINEBREAK, CATEGORY_LOC_WORD,
CATEGORY_LOC_NOT_WORD, CATEGORY_UNI_DIGIT, CATEGORY_UNI_NOT_DIGIT,
CATEGORY_UNI_SPACE, CATEGORY_UNI_NOT_SPACE, CATEGORY_UNI_WORD,
CATEGORY_UNI_NOT_WORD, CATEGORY_UNI_LINEBREAK,
CATEGORY_UNI_NOT_LINEBREAK
]
def makedict(list):
d = {}
i = 0
for item in list:
2000-06-30 16:13:37 +00:00
d[item] = i
i = i + 1
2000-06-29 19:35:29 +00:00
return d
OPCODES = makedict(OPCODES)
ATCODES = makedict(ATCODES)
CHCODES = makedict(CHCODES)
2000-05-08 17:31:04 +00:00
# replacement operations for "ignore case" mode
2000-06-29 19:35:29 +00:00
OP_IGNORE = {
2000-05-08 17:31:04 +00:00
GROUP: GROUP_IGNORE,
IN: IN_IGNORE,
LITERAL: LITERAL_IGNORE,
NOT_LITERAL: NOT_LITERAL_IGNORE
}
2000-06-29 19:35:29 +00:00
AT_MULTILINE = {
AT_BEGINNING: AT_BEGINNING_LINE,
AT_END: AT_END_LINE
2000-05-08 17:31:04 +00:00
}
2000-06-29 19:35:29 +00:00
CH_LOCALE = {
CATEGORY_DIGIT: CATEGORY_DIGIT,
CATEGORY_NOT_DIGIT: CATEGORY_NOT_DIGIT,
CATEGORY_SPACE: CATEGORY_SPACE,
CATEGORY_NOT_SPACE: CATEGORY_NOT_SPACE,
CATEGORY_WORD: CATEGORY_LOC_WORD,
CATEGORY_NOT_WORD: CATEGORY_LOC_NOT_WORD,
CATEGORY_LINEBREAK: CATEGORY_LINEBREAK,
CATEGORY_NOT_LINEBREAK: CATEGORY_NOT_LINEBREAK
2000-05-08 17:31:04 +00:00
}
2000-06-29 19:35:29 +00:00
CH_UNICODE = {
CATEGORY_DIGIT: CATEGORY_UNI_DIGIT,
CATEGORY_NOT_DIGIT: CATEGORY_UNI_NOT_DIGIT,
CATEGORY_SPACE: CATEGORY_UNI_SPACE,
CATEGORY_NOT_SPACE: CATEGORY_UNI_NOT_SPACE,
CATEGORY_WORD: CATEGORY_UNI_WORD,
CATEGORY_NOT_WORD: CATEGORY_UNI_NOT_WORD,
CATEGORY_LINEBREAK: CATEGORY_UNI_LINEBREAK,
CATEGORY_NOT_LINEBREAK: CATEGORY_UNI_NOT_LINEBREAK
}
# flags
SRE_FLAG_TEMPLATE = 1
SRE_FLAG_IGNORECASE = 2
SRE_FLAG_LOCALE = 4
SRE_FLAG_MULTILINE = 8
SRE_FLAG_DOTALL = 16
SRE_FLAG_UNICODE = 32
SRE_FLAG_VERBOSE = 64
2000-05-08 17:31:04 +00:00
if __name__ == "__main__":
import string
2000-06-29 19:35:29 +00:00
def dump(f, d, prefix):
2000-06-30 16:13:37 +00:00
items = d.items()
items.sort(lambda a, b: cmp(a[1], b[1]))
for k, v in items:
f.write("#define %s_%s %s\n" % (prefix, string.upper(k), v))
2000-05-08 17:31:04 +00:00
f = open("sre_constants.h", "w")
2000-06-30 16:13:37 +00:00
f.write("""\
/*
* Secret Labs' Regular Expression Engine
*
* regular expression matching engine
*
* NOTE: This file is generated by sre_constants.py. If you need
* to change anything in here, edit sre_constants.py and run it.
*
* Copyright (c) 1997-2000 by Secret Labs AB. All rights reserved.
*
* See the _sre.c file for information on usage and redistribution.
*/
""")
2000-06-29 19:35:29 +00:00
dump(f, OPCODES, "SRE_OP")
dump(f, ATCODES, "SRE")
dump(f, CHCODES, "SRE")
f.write("#define SRE_FLAG_TEMPLATE %d\n" % SRE_FLAG_TEMPLATE)
f.write("#define SRE_FLAG_IGNORECASE %d\n" % SRE_FLAG_IGNORECASE)
f.write("#define SRE_FLAG_LOCALE %d\n" % SRE_FLAG_LOCALE)
f.write("#define SRE_FLAG_MULTILINE %d\n" % SRE_FLAG_MULTILINE)
f.write("#define SRE_FLAG_DOTALL %d\n" % SRE_FLAG_DOTALL)
f.write("#define SRE_FLAG_UNICODE %d\n" % SRE_FLAG_UNICODE)
f.write("#define SRE_FLAG_VERBOSE %d\n" % SRE_FLAG_VERBOSE)
2000-05-08 17:31:04 +00:00
f.close()
print "done"