source file: /System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/sre_constants.py
file stats: 123 lines, 99 executed: 80.5% covered
1. # 2. # Secret Labs' Regular Expression Engine 3. # 4. # various symbols used by the regular expression engine. 5. # run this script to update the _sre include files! 6. # 7. # Copyright (c) 1998-2001 by Secret Labs AB. All rights reserved. 8. # 9. # See the sre.py file for information on usage and redistribution. 10. # 11. 12. """Internal support module for sre""" 13. 14. # update when constants are added or removed 15. 16. MAGIC = 20030419 17. 18. # max code word in this release 19. 20. MAXREPEAT = 65535 21. 22. # SRE standard exception (access as sre.error) 23. # should this really be here? 24. 25. class error(Exception): 26. pass 27. 28. # operators 29. 30. FAILURE = "failure" 31. SUCCESS = "success" 32. 33. ANY = "any" 34. ANY_ALL = "any_all" 35. ASSERT = "assert" 36. ASSERT_NOT = "assert_not" 37. AT = "at" 38. BIGCHARSET = "bigcharset" 39. BRANCH = "branch" 40. CALL = "call" 41. CATEGORY = "category" 42. CHARSET = "charset" 43. GROUPREF = "groupref" 44. GROUPREF_IGNORE = "groupref_ignore" 45. IN = "in" 46. IN_IGNORE = "in_ignore" 47. INFO = "info" 48. JUMP = "jump" 49. LITERAL = "literal" 50. LITERAL_IGNORE = "literal_ignore" 51. MARK = "mark" 52. MAX_REPEAT = "max_repeat" 53. MAX_UNTIL = "max_until" 54. MIN_REPEAT = "min_repeat" 55. MIN_UNTIL = "min_until" 56. NEGATE = "negate" 57. NOT_LITERAL = "not_literal" 58. NOT_LITERAL_IGNORE = "not_literal_ignore" 59. RANGE = "range" 60. REPEAT = "repeat" 61. REPEAT_ONE = "repeat_one" 62. SUBPATTERN = "subpattern" 63. MIN_REPEAT_ONE = "min_repeat_one" 64. 65. # positions 66. AT_BEGINNING = "at_beginning" 67. AT_BEGINNING_LINE = "at_beginning_line" 68. AT_BEGINNING_STRING = "at_beginning_string" 69. AT_BOUNDARY = "at_boundary" 70. AT_NON_BOUNDARY = "at_non_boundary" 71. AT_END = "at_end" 72. AT_END_LINE = "at_end_line" 73. AT_END_STRING = "at_end_string" 74. AT_LOC_BOUNDARY = "at_loc_boundary" 75. AT_LOC_NON_BOUNDARY = "at_loc_non_boundary" 76. AT_UNI_BOUNDARY = "at_uni_boundary" 77. AT_UNI_NON_BOUNDARY = "at_uni_non_boundary" 78. 79. # categories 80. CATEGORY_DIGIT = "category_digit" 81. CATEGORY_NOT_DIGIT = "category_not_digit" 82. CATEGORY_SPACE = "category_space" 83. CATEGORY_NOT_SPACE = "category_not_space" 84. CATEGORY_WORD = "category_word" 85. CATEGORY_NOT_WORD = "category_not_word" 86. CATEGORY_LINEBREAK = "category_linebreak" 87. CATEGORY_NOT_LINEBREAK = "category_not_linebreak" 88. CATEGORY_LOC_WORD = "category_loc_word" 89. CATEGORY_LOC_NOT_WORD = "category_loc_not_word" 90. CATEGORY_UNI_DIGIT = "category_uni_digit" 91. CATEGORY_UNI_NOT_DIGIT = "category_uni_not_digit" 92. CATEGORY_UNI_SPACE = "category_uni_space" 93. CATEGORY_UNI_NOT_SPACE = "category_uni_not_space" 94. CATEGORY_UNI_WORD = "category_uni_word" 95. CATEGORY_UNI_NOT_WORD = "category_uni_not_word" 96. CATEGORY_UNI_LINEBREAK = "category_uni_linebreak" 97. CATEGORY_UNI_NOT_LINEBREAK = "category_uni_not_linebreak" 98. 99. OPCODES = [ 100. 101. # failure=0 success=1 (just because it looks better that way :-) 102. FAILURE, SUCCESS, 103. 104. ANY, ANY_ALL, 105. ASSERT, ASSERT_NOT, 106. AT, 107. BRANCH, 108. CALL, 109. CATEGORY, 110. CHARSET, BIGCHARSET, 111. GROUPREF, GROUPREF_IGNORE, 112. IN, IN_IGNORE, 113. INFO, 114. JUMP, 115. LITERAL, LITERAL_IGNORE, 116. MARK, 117. MAX_UNTIL, 118. MIN_UNTIL, 119. NOT_LITERAL, NOT_LITERAL_IGNORE, 120. NEGATE, 121. RANGE, 122. REPEAT, 123. REPEAT_ONE, 124. SUBPATTERN, 125. MIN_REPEAT_ONE 126. 127. ] 128. 129. ATCODES = [ 130. AT_BEGINNING, AT_BEGINNING_LINE, AT_BEGINNING_STRING, AT_BOUNDARY, 131. AT_NON_BOUNDARY, AT_END, AT_END_LINE, AT_END_STRING, 132. AT_LOC_BOUNDARY, AT_LOC_NON_BOUNDARY, AT_UNI_BOUNDARY, 133. AT_UNI_NON_BOUNDARY 134. ] 135. 136. CHCODES = [ 137. CATEGORY_DIGIT, CATEGORY_NOT_DIGIT, CATEGORY_SPACE, 138. CATEGORY_NOT_SPACE, CATEGORY_WORD, CATEGORY_NOT_WORD, 139. CATEGORY_LINEBREAK, CATEGORY_NOT_LINEBREAK, CATEGORY_LOC_WORD, 140. CATEGORY_LOC_NOT_WORD, CATEGORY_UNI_DIGIT, CATEGORY_UNI_NOT_DIGIT, 141. CATEGORY_UNI_SPACE, CATEGORY_UNI_NOT_SPACE, CATEGORY_UNI_WORD, 142. CATEGORY_UNI_NOT_WORD, CATEGORY_UNI_LINEBREAK, 143. CATEGORY_UNI_NOT_LINEBREAK 144. ] 145. 146. def makedict(list): 147. d = {} 148. i = 0 149. for item in list: 150. d[item] = i 151. i = i + 1 152. return d 153. 154. OPCODES = makedict(OPCODES) 155. ATCODES = makedict(ATCODES) 156. CHCODES = makedict(CHCODES) 157. 158. # replacement operations for "ignore case" mode 159. OP_IGNORE = { 160. GROUPREF: GROUPREF_IGNORE, 161. IN: IN_IGNORE, 162. LITERAL: LITERAL_IGNORE, 163. NOT_LITERAL: NOT_LITERAL_IGNORE 164. } 165. 166. AT_MULTILINE = { 167. AT_BEGINNING: AT_BEGINNING_LINE, 168. AT_END: AT_END_LINE 169. } 170. 171. AT_LOCALE = { 172. AT_BOUNDARY: AT_LOC_BOUNDARY, 173. AT_NON_BOUNDARY: AT_LOC_NON_BOUNDARY 174. } 175. 176. AT_UNICODE = { 177. AT_BOUNDARY: AT_UNI_BOUNDARY, 178. AT_NON_BOUNDARY: AT_UNI_NON_BOUNDARY 179. } 180. 181. CH_LOCALE = { 182. CATEGORY_DIGIT: CATEGORY_DIGIT, 183. CATEGORY_NOT_DIGIT: CATEGORY_NOT_DIGIT, 184. CATEGORY_SPACE: CATEGORY_SPACE, 185. CATEGORY_NOT_SPACE: CATEGORY_NOT_SPACE, 186. CATEGORY_WORD: CATEGORY_LOC_WORD, 187. CATEGORY_NOT_WORD: CATEGORY_LOC_NOT_WORD, 188. CATEGORY_LINEBREAK: CATEGORY_LINEBREAK, 189. CATEGORY_NOT_LINEBREAK: CATEGORY_NOT_LINEBREAK 190. } 191. 192. CH_UNICODE = { 193. CATEGORY_DIGIT: CATEGORY_UNI_DIGIT, 194. CATEGORY_NOT_DIGIT: CATEGORY_UNI_NOT_DIGIT, 195. CATEGORY_SPACE: CATEGORY_UNI_SPACE, 196. CATEGORY_NOT_SPACE: CATEGORY_UNI_NOT_SPACE, 197. CATEGORY_WORD: CATEGORY_UNI_WORD, 198. CATEGORY_NOT_WORD: CATEGORY_UNI_NOT_WORD, 199. CATEGORY_LINEBREAK: CATEGORY_UNI_LINEBREAK, 200. CATEGORY_NOT_LINEBREAK: CATEGORY_UNI_NOT_LINEBREAK 201. } 202. 203. # flags 204. SRE_FLAG_TEMPLATE = 1 # template mode (disable backtracking) 205. SRE_FLAG_IGNORECASE = 2 # case insensitive 206. SRE_FLAG_LOCALE = 4 # honour system locale 207. SRE_FLAG_MULTILINE = 8 # treat target as multiline string 208. SRE_FLAG_DOTALL = 16 # treat target as a single string 209. SRE_FLAG_UNICODE = 32 # use unicode locale 210. SRE_FLAG_VERBOSE = 64 # ignore whitespace and comments 211. SRE_FLAG_DEBUG = 128 # debugging 212. 213. # flags for INFO primitive 214. SRE_INFO_PREFIX = 1 # has prefix 215. SRE_INFO_LITERAL = 2 # entire pattern is literal (given by prefix) 216. SRE_INFO_CHARSET = 4 # pattern starts with character from given set 217. 218. if __name__ == "__main__": 219. import string 220. def dump(f, d, prefix): 221. items = d.items() 222. items.sort(lambda a, b: cmp(a[1], b[1])) 223. for k, v in items: 224. f.write("#define %s_%s %s\n" % (prefix, string.upper(k), v)) 225. f = open("sre_constants.h", "w") 226. f.write("""\ 227. /* 228. * Secret Labs' Regular Expression Engine 229. * 230. * regular expression matching engine 231. * 232. * NOTE: This file is generated by sre_constants.py. If you need 233. * to change anything in here, edit sre_constants.py and run it. 234. * 235. * Copyright (c) 1997-2001 by Secret Labs AB. All rights reserved. 236. * 237. * See the _sre.c file for information on usage and redistribution. 238. */ 239. 240. """) 241. 242. f.write("#define SRE_MAGIC %d\n" % MAGIC) 243. 244. dump(f, OPCODES, "SRE_OP") 245. dump(f, ATCODES, "SRE") 246. dump(f, CHCODES, "SRE") 247. 248. f.write("#define SRE_FLAG_TEMPLATE %d\n" % SRE_FLAG_TEMPLATE) 249. f.write("#define SRE_FLAG_IGNORECASE %d\n" % SRE_FLAG_IGNORECASE) 250. f.write("#define SRE_FLAG_LOCALE %d\n" % SRE_FLAG_LOCALE) 251. f.write("#define SRE_FLAG_MULTILINE %d\n" % SRE_FLAG_MULTILINE) 252. f.write("#define SRE_FLAG_DOTALL %d\n" % SRE_FLAG_DOTALL) 253. f.write("#define SRE_FLAG_UNICODE %d\n" % SRE_FLAG_UNICODE) 254. f.write("#define SRE_FLAG_VERBOSE %d\n" % SRE_FLAG_VERBOSE) 255. 256. f.write("#define SRE_INFO_PREFIX %d\n" % SRE_INFO_PREFIX) 257. f.write("#define SRE_INFO_LITERAL %d\n" % SRE_INFO_LITERAL) 258. f.write("#define SRE_INFO_CHARSET %d\n" % SRE_INFO_CHARSET) 259. 260. f.close() 261. print "done"