github.com/grumpyhome/grumpy@v0.3.1-0.20201208125205-7b775405bdf1/grumpy-runtime-src/third_party/stdlib/sre_constants.py (about)

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