1# -*- coding: utf-8 -*- 2 3"""Using Onigmo (Oniguruma-mod) regular expression library. 4 5This is a low level wrapper for Onigmo regular expression DLL/shared object. 6(This module does not support static link library.) 7This provides almost same API as the original C API, so the API is not 8object oriented. 9 10Onigmo DLL (onigmo.dll, libonigmo.so, etc.) must be placed in the 11default search path. The default search path depends on the system. 12""" 13 14import ctypes 15import os 16import sys 17 18#__all__ = ["onig_new", "onig_free", 19# "onig_search", "onig_match", 20# "onig_region_new", "onig_region_free", 21# "onig_version", "onig_copyright"] 22 23# 24# Onigmo API version 25# (Must be synchronized with LTVERSION in configure.ac.) 26# 27_onig_api_version = 6 28 29# 30# Type Definitions 31# 32 33OnigCodePoint = ctypes.c_uint 34 35class OnigRegexType(ctypes.Structure): 36 _fields_ = [ 37 ] 38regex_t = OnigRegexType 39OnigRegex = ctypes.POINTER(OnigRegexType) 40 41try: 42 # Python 2.7 43 _c_ssize_t = ctypes.c_ssize_t 44except AttributeError: 45 # Python 2.6 46 if ctypes.sizeof(ctypes.c_int) == ctypes.sizeof(ctypes.c_void_p): 47 _c_ssize_t = ctypes.c_int 48 elif ctypes.sizeof(ctypes.c_long) == ctypes.sizeof(ctypes.c_void_p): 49 _c_ssize_t = ctypes.c_long 50 elif ctypes.sizeof(ctypes.c_longlong) == ctypes.sizeof(ctypes.c_void_p): 51 _c_ssize_t = ctypes.c_longlong 52 53class OnigRegion(ctypes.Structure): 54 _fields_ = [ 55 ("allocated", ctypes.c_int), 56 ("num_regs", ctypes.c_int), 57 ("beg", ctypes.POINTER(_c_ssize_t)), 58 ("end", ctypes.POINTER(_c_ssize_t)), 59 ("history_root",ctypes.c_void_p), 60 ] 61re_registers = OnigRegion 62 63OnigOptionType = ctypes.c_int 64 65class OnigEncodingType(ctypes.Structure): 66 _fields_ = [ 67 ("mbc_enc_len", ctypes.c_void_p), 68 ("name", ctypes.c_char_p), 69 ("max_enc_len", ctypes.c_int), 70 ("min_enc_len", ctypes.c_int), 71 ("is_mbc_newline", ctypes.c_void_p), 72 ("mbc_to_code", ctypes.c_void_p), 73 ("code_to_mbclen", ctypes.c_void_p), 74 ("code_to_mbc", ctypes.c_void_p), 75 ("mbc_case_fold", ctypes.c_void_p), 76 ("apply_all_case_fold", ctypes.c_void_p), 77 ("get_case_fold_codes_by_str", ctypes.c_void_p), 78 ("property_name_to_ctype", ctypes.c_void_p), 79 ("is_code_ctype", ctypes.c_void_p), 80 ("get_ctype_code_range", ctypes.c_void_p), 81 ("left_adjust_char_head", ctypes.c_void_p), 82 ("is_allowed_reverse_match",ctypes.c_void_p), 83 ("case_map", ctypes.c_void_p), 84 ("ruby_encoding_index", ctypes.c_int), 85 ("flags", ctypes.c_int), 86 ] 87OnigEncoding = ctypes.POINTER(OnigEncodingType) 88 89class OnigMetaCharTableType(ctypes.Structure): 90 _fields_ = [ 91 ("esc", OnigCodePoint), 92 ("anychar", OnigCodePoint), 93 ("anytime", OnigCodePoint), 94 ("zero_or_one_time",OnigCodePoint), 95 ("one_or_one_time", OnigCodePoint), 96 ("anychar_anytime", OnigCodePoint), 97 ] 98 99class OnigSyntaxType(ctypes.Structure): 100 _fields_ = [ 101 ("op", ctypes.c_uint), 102 ("op2", ctypes.c_uint), 103 ("behavior", ctypes.c_uint), 104 ("options", OnigOptionType), 105 ("meta_char_table", OnigMetaCharTableType), 106 ] 107 108class OnigErrorInfo(ctypes.Structure): 109 _fields_ = [ 110 ("enc", OnigEncoding), 111 ("par", ctypes.c_char_p), 112 ("par_end", ctypes.c_char_p), 113 ] 114 115 116# load the DLL or the shared library 117 118if os.name in ("nt", "ce"): 119 # Win32 120 _libname = "onigmo.dll" 121 try: 122 libonig = ctypes.cdll.LoadLibrary(_libname) 123 except OSError: 124 # Sometimes MinGW version has a prefix "lib". 125 _libname = "libonigmo.dll" 126 try: 127 libonig = ctypes.cdll.LoadLibrary(_libname) 128 except OSError: 129 # Sometimes MinGW version has the API version. 130 _libname = "libonigmo-%d.dll" % _onig_api_version 131 libonig = ctypes.cdll.LoadLibrary(_libname) 132elif sys.platform == "cygwin": 133 # Cygwin 134 _libname = "cygonigmo-%d.dll" % _onig_api_version 135 libonig = ctypes.cdll.LoadLibrary(_libname) 136elif sys.platform == "msys": 137 # MSYS/MSYS2 138 _libname = "msys-onigmo-%d.dll" % _onig_api_version 139 libonig = ctypes.cdll.LoadLibrary(_libname) 140elif sys.platform == "darwin": 141 # Mac 142 _libname = "libonigmo.dylib" 143 libonig = ctypes.cdll.LoadLibrary(_libname) 144else: 145 # Unix 146 _libname = "libonigmo.so" 147 libonig = ctypes.cdll.LoadLibrary(_libname) 148 149# 150# Encodings 151# 152def _load_encoding(enc): 153 return ctypes.pointer(OnigEncodingType.in_dll(libonig, enc)) 154 155ONIG_ENCODING_ASCII = _load_encoding("OnigEncodingASCII") 156ONIG_ENCODING_ISO_8859_1 = _load_encoding("OnigEncodingISO_8859_1") 157ONIG_ENCODING_ISO_8859_2 = _load_encoding("OnigEncodingISO_8859_2") 158ONIG_ENCODING_ISO_8859_3 = _load_encoding("OnigEncodingISO_8859_3") 159ONIG_ENCODING_ISO_8859_4 = _load_encoding("OnigEncodingISO_8859_4") 160ONIG_ENCODING_ISO_8859_5 = _load_encoding("OnigEncodingISO_8859_5") 161ONIG_ENCODING_ISO_8859_6 = _load_encoding("OnigEncodingISO_8859_6") 162ONIG_ENCODING_ISO_8859_7 = _load_encoding("OnigEncodingISO_8859_7") 163ONIG_ENCODING_ISO_8859_8 = _load_encoding("OnigEncodingISO_8859_8") 164ONIG_ENCODING_ISO_8859_9 = _load_encoding("OnigEncodingISO_8859_9") 165ONIG_ENCODING_ISO_8859_10 = _load_encoding("OnigEncodingISO_8859_10") 166ONIG_ENCODING_ISO_8859_11 = _load_encoding("OnigEncodingISO_8859_11") 167ONIG_ENCODING_ISO_8859_13 = _load_encoding("OnigEncodingISO_8859_13") 168ONIG_ENCODING_ISO_8859_14 = _load_encoding("OnigEncodingISO_8859_14") 169ONIG_ENCODING_ISO_8859_15 = _load_encoding("OnigEncodingISO_8859_15") 170ONIG_ENCODING_ISO_8859_16 = _load_encoding("OnigEncodingISO_8859_16") 171ONIG_ENCODING_UTF_8 = _load_encoding("OnigEncodingUTF_8") 172ONIG_ENCODING_UTF_16LE = _load_encoding("OnigEncodingUTF_16LE") 173ONIG_ENCODING_UTF_16BE = _load_encoding("OnigEncodingUTF_16BE") 174ONIG_ENCODING_UTF_32LE = _load_encoding("OnigEncodingUTF_32LE") 175ONIG_ENCODING_UTF_32BE = _load_encoding("OnigEncodingUTF_32BE") 176ONIG_ENCODING_UTF8 = ONIG_ENCODING_UTF_8 177ONIG_ENCODING_UTF16_LE = ONIG_ENCODING_UTF_16LE 178ONIG_ENCODING_UTF16_BE = ONIG_ENCODING_UTF_16BE 179ONIG_ENCODING_UTF32_LE = ONIG_ENCODING_UTF_32LE 180ONIG_ENCODING_UTF32_BE = ONIG_ENCODING_UTF_32BE 181ONIG_ENCODING_EUC_JP = _load_encoding("OnigEncodingEUC_JP") 182ONIG_ENCODING_EUC_TW = _load_encoding("OnigEncodingEUC_TW") 183ONIG_ENCODING_EUC_KR = _load_encoding("OnigEncodingEUC_KR") 184ONIG_ENCODING_EUC_CN = _load_encoding("OnigEncodingEUC_CN") 185ONIG_ENCODING_SHIFT_JIS = _load_encoding("OnigEncodingShift_JIS") 186ONIG_ENCODING_WINDOWS_31J = _load_encoding("OnigEncodingWindows_31J") 187ONIG_ENCODING_SJIS = ONIG_ENCODING_SHIFT_JIS 188ONIG_ENCODING_CP932 = ONIG_ENCODING_WINDOWS_31J 189#ONIG_ENCODING_KOI8 = _load_encoding("OnigEncodingKOI8") 190ONIG_ENCODING_KOI8_R = _load_encoding("OnigEncodingKOI8_R") 191ONIG_ENCODING_KOI8_U = _load_encoding("OnigEncodingKOI8_U") 192ONIG_ENCODING_WINDOWS_1250 = _load_encoding("OnigEncodingWindows_1250") 193ONIG_ENCODING_WINDOWS_1251 = _load_encoding("OnigEncodingWindows_1251") 194ONIG_ENCODING_WINDOWS_1252 = _load_encoding("OnigEncodingWindows_1252") 195ONIG_ENCODING_WINDOWS_1253 = _load_encoding("OnigEncodingWindows_1253") 196ONIG_ENCODING_WINDOWS_1254 = _load_encoding("OnigEncodingWindows_1254") 197ONIG_ENCODING_WINDOWS_1257 = _load_encoding("OnigEncodingWindows_1257") 198ONIG_ENCODING_CP1250 = ONIG_ENCODING_WINDOWS_1250 199ONIG_ENCODING_CP1251 = ONIG_ENCODING_WINDOWS_1251 200ONIG_ENCODING_CP1252 = ONIG_ENCODING_WINDOWS_1252 201ONIG_ENCODING_CP1253 = ONIG_ENCODING_WINDOWS_1253 202ONIG_ENCODING_CP1254 = ONIG_ENCODING_WINDOWS_1254 203ONIG_ENCODING_CP1257 = ONIG_ENCODING_WINDOWS_1257 204ONIG_ENCODING_BIG5 = _load_encoding("OnigEncodingBIG5") 205ONIG_ENCODING_GB18030 = _load_encoding("OnigEncodingGB18030") 206 207#ONIG_ENCODING_UNDEF = None 208 209 210# 211# Syntaxes 212# 213def _load_syntax(syn): 214 return ctypes.pointer(OnigSyntaxType.in_dll(libonig, syn)) 215 216ONIG_SYNTAX_ASIS = _load_syntax("OnigSyntaxASIS") 217ONIG_SYNTAX_POSIX_BASIC = _load_syntax("OnigSyntaxPosixBasic") 218ONIG_SYNTAX_POSIX_EXTENDED = _load_syntax("OnigSyntaxPosixExtended") 219ONIG_SYNTAX_EMACS = _load_syntax("OnigSyntaxEmacs") 220ONIG_SYNTAX_GREP = _load_syntax("OnigSyntaxGrep") 221ONIG_SYNTAX_GNU_REGEX = _load_syntax("OnigSyntaxGnuRegex") 222ONIG_SYNTAX_JAVA = _load_syntax("OnigSyntaxJava") 223ONIG_SYNTAX_PERL = _load_syntax("OnigSyntaxPerl") 224ONIG_SYNTAX_PERL58 = _load_syntax("OnigSyntaxPerl58") 225ONIG_SYNTAX_PERL58_NG = _load_syntax("OnigSyntaxPerl58_NG") 226ONIG_SYNTAX_RUBY = _load_syntax("OnigSyntaxRuby") 227ONIG_SYNTAX_PYTHON = _load_syntax("OnigSyntaxPython") 228 229ONIG_SYNTAX_DEFAULT = ctypes.POINTER(OnigSyntaxType).in_dll( 230 libonig, "OnigDefaultSyntax") 231 232 233# 234# Constants 235# 236 237ONIG_MAX_ERROR_MESSAGE_LEN = 90 238 239# options 240ONIG_OPTION_NONE = 0 241ONIG_OPTION_IGNORECASE = 1 242ONIG_OPTION_EXTEND = (ONIG_OPTION_IGNORECASE << 1) 243ONIG_OPTION_MULTILINE = (ONIG_OPTION_EXTEND << 1) 244ONIG_OPTION_DOTALL = ONIG_OPTION_MULTILINE 245ONIG_OPTION_SINGLELINE = (ONIG_OPTION_MULTILINE << 1) 246ONIG_OPTION_FIND_LONGEST = (ONIG_OPTION_SINGLELINE << 1) 247ONIG_OPTION_FIND_NOT_EMPTY = (ONIG_OPTION_FIND_LONGEST << 1) 248ONIG_OPTION_NEGATE_SINGLELINE = (ONIG_OPTION_FIND_NOT_EMPTY << 1) 249ONIG_OPTION_DONT_CAPTURE_GROUP = (ONIG_OPTION_NEGATE_SINGLELINE << 1) 250ONIG_OPTION_CAPTURE_GROUP = (ONIG_OPTION_DONT_CAPTURE_GROUP << 1) 251# options (search time) 252ONIG_OPTION_NOTBOL = (ONIG_OPTION_CAPTURE_GROUP << 1) 253ONIG_OPTION_NOTEOL = (ONIG_OPTION_NOTBOL << 1) 254ONIG_OPTION_NOTBOS = (ONIG_OPTION_NOTEOL << 1) 255ONIG_OPTION_NOTEOS = (ONIG_OPTION_NOTBOS << 1) 256# options (ctype range) 257ONIG_OPTION_ASCII_RANGE = (ONIG_OPTION_NOTEOS << 1) 258ONIG_OPTION_POSIX_BRACKET_ALL_RANGE = (ONIG_OPTION_ASCII_RANGE << 1) 259ONIG_OPTION_WORD_BOUND_ALL_RANGE = (ONIG_OPTION_POSIX_BRACKET_ALL_RANGE << 1) 260# options (newline) 261ONIG_OPTION_NEWLINE_CRLF = (ONIG_OPTION_WORD_BOUND_ALL_RANGE << 1) 262 263ONIG_OPTION_DEFAULT = ONIG_OPTION_NONE 264 265 266# syntax (operators) 267ONIG_SYN_OP_VARIABLE_META_CHARACTERS = (1<<0) 268ONIG_SYN_OP_DOT_ANYCHAR = (1<<1) 269ONIG_SYN_OP_ASTERISK_ZERO_INF = (1<<2) 270ONIG_SYN_OP_ESC_ASTERISK_ZERO_INF = (1<<3) 271ONIG_SYN_OP_PLUS_ONE_INF = (1<<4) 272ONIG_SYN_OP_ESC_PLUS_ONE_INF = (1<<5) 273ONIG_SYN_OP_QMARK_ZERO_ONE = (1<<6) 274ONIG_SYN_OP_ESC_QMARK_ZERO_ONE = (1<<7) 275ONIG_SYN_OP_BRACE_INTERVAL = (1<<8) 276ONIG_SYN_OP_ESC_BRACE_INTERVAL = (1<<9) 277ONIG_SYN_OP_VBAR_ALT = (1<<10) 278ONIG_SYN_OP_ESC_VBAR_ALT = (1<<11) 279ONIG_SYN_OP_LPAREN_SUBEXP = (1<<12) 280ONIG_SYN_OP_ESC_LPAREN_SUBEXP = (1<<13) 281ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR = (1<<14) 282ONIG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR = (1<<15) 283ONIG_SYN_OP_DECIMAL_BACKREF = (1<<16) 284ONIG_SYN_OP_BRACKET_CC = (1<<17) 285ONIG_SYN_OP_ESC_W_WORD = (1<<18) 286ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END = (1<<19) 287ONIG_SYN_OP_ESC_B_WORD_BOUND = (1<<20) 288ONIG_SYN_OP_ESC_S_WHITE_SPACE = (1<<21) 289ONIG_SYN_OP_ESC_D_DIGIT = (1<<22) 290ONIG_SYN_OP_LINE_ANCHOR = (1<<23) 291ONIG_SYN_OP_POSIX_BRACKET = (1<<24) 292ONIG_SYN_OP_QMARK_NON_GREEDY = (1<<25) 293ONIG_SYN_OP_ESC_CONTROL_CHARS = (1<<26) 294ONIG_SYN_OP_ESC_C_CONTROL = (1<<27) 295ONIG_SYN_OP_ESC_OCTAL3 = (1<<28) 296ONIG_SYN_OP_ESC_X_HEX2 = (1<<29) 297ONIG_SYN_OP_ESC_X_BRACE_HEX8 = (1<<30) 298ONIG_SYN_OP_ESC_O_BRACE_OCTAL = (1<<31) 299 300ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE = (1<<0) 301ONIG_SYN_OP2_QMARK_GROUP_EFFECT = (1<<1) 302ONIG_SYN_OP2_OPTION_PERL = (1<<2) 303ONIG_SYN_OP2_OPTION_RUBY = (1<<3) 304ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT = (1<<4) 305ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL = (1<<5) 306ONIG_SYN_OP2_CCLASS_SET_OP = (1<<6) 307ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP = (1<<7) 308ONIG_SYN_OP2_ESC_K_NAMED_BACKREF = (1<<8) 309ONIG_SYN_OP2_ESC_G_SUBEXP_CALL = (1<<9) 310ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY = (1<<10) 311ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL = (1<<11) 312ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META = (1<<12) 313ONIG_SYN_OP2_ESC_V_VTAB = (1<<13) 314ONIG_SYN_OP2_ESC_U_HEX4 = (1<<14) 315ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR = (1<<15) 316ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY = (1<<16) 317ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT = (1<<17) 318#ONIG_SYN_OP2_CHAR_PROPERTY_PREFIX_IS = (1<<18) 319ONIG_SYN_OP2_ESC_H_XDIGIT = (1<<19) 320ONIG_SYN_OP2_INEFFECTIVE_ESCAPE = (1<<20) 321ONIG_SYN_OP2_ESC_CAPITAL_R_LINEBREAK = (1<<21) 322ONIG_SYN_OP2_ESC_CAPITAL_X_EXTENDED_GRAPHEME_CLUSTER = (1<<22) 323ONIG_SYN_OP2_ESC_V_VERTICAL_WHITESPACE = (1<<23) 324ONIG_SYN_OP2_ESC_H_HORIZONTAL_WHITESPACE = (1<<24) 325ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP = (1<<25) 326ONIG_SYN_OP2_ESC_G_BRACE_BACKREF = (1<<26) 327ONIG_SYN_OP2_QMARK_SUBEXP_CALL = (1<<27) 328ONIG_SYN_OP2_QMARK_VBAR_BRANCH_RESET = (1<<28) 329ONIG_SYN_OP2_QMARK_LPAREN_CONDITION = (1<<29) 330ONIG_SYN_OP2_QMARK_CAPITAL_P_NAMED_GROUP = (1<<30) 331ONIG_SYN_OP2_OPTION_JAVA = (1<<31) 332 333# syntax (behavior) 334ONIG_SYN_CONTEXT_INDEP_ANCHORS = (1<<31) 335ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS = (1<<0) 336ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS = (1<<1) 337ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP = (1<<2) 338ONIG_SYN_ALLOW_INVALID_INTERVAL = (1<<3) 339ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV = (1<<4) 340ONIG_SYN_STRICT_CHECK_BACKREF = (1<<5) 341ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND = (1<<6) 342ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP = (1<<7) 343ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME = (1<<8) 344ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY = (1<<9) 345ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME_CALL = (1<<10) 346ONIG_SYN_USE_LEFT_MOST_NAMED_GROUP = (1<<11) 347 348# (behavior) in char class [...] 349ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC = (1<<20) 350ONIG_SYN_BACKSLASH_ESCAPE_IN_CC = (1<<21) 351ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC = (1<<22) 352ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC = (1<<23) 353# syntax (behavior) warning 354ONIG_SYN_WARN_CC_OP_NOT_ESCAPED = (1<<24) 355ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT = (1<<25) 356ONIG_SYN_WARN_CC_DUP = (1<<26) 357 358# meta character specifiers (onig_set_meta_char()) 359ONIG_META_CHAR_ESCAPE = 0 360ONIG_META_CHAR_ANYCHAR = 1 361ONIG_META_CHAR_ANYTIME = 2 362ONIG_META_CHAR_ZERO_OR_ONE_TIME = 3 363ONIG_META_CHAR_ONE_OR_MORE_TIME = 4 364ONIG_META_CHAR_ANYCHAR_ANYTIME = 5 365 366ONIG_INEFFECTIVE_META_CHAR = 0 367 368 369# error codes 370def ONIG_IS_PATTERN_ERROR(ecode): 371 return ((ecode) <= -100 and (ecode) > -1000) 372# normal return 373ONIG_NORMAL = 0 374ONIG_MISMATCH = -1 375ONIG_NO_SUPPORT_CONFIG = -2 376# internal error 377ONIGERR_MEMORY = -5 378ONIGERR_TYPE_BUG = -6 379ONIGERR_PARSER_BUG = -11 380ONIGERR_STACK_BUG = -12 381ONIGERR_UNDEFINED_BYTECODE = -13 382ONIGERR_UNEXPECTED_BYTECODE = -14 383ONIGERR_MATCH_STACK_LIMIT_OVER = -15 384ONIGERR_PARSE_DEPTH_LIMIT_OVER = -16 385ONIGERR_DEFAULT_ENCODING_IS_NOT_SET = -21 386ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR = -22 387# general error 388ONIGERR_INVALID_ARGUMENT = -30 389# syntax error 390ONIGERR_END_PATTERN_AT_LEFT_BRACE = -100 391ONIGERR_END_PATTERN_AT_LEFT_BRACKET = -101 392ONIGERR_EMPTY_CHAR_CLASS = -102 393ONIGERR_PREMATURE_END_OF_CHAR_CLASS = -103 394ONIGERR_END_PATTERN_AT_ESCAPE = -104 395ONIGERR_END_PATTERN_AT_META = -105 396ONIGERR_END_PATTERN_AT_CONTROL = -106 397ONIGERR_META_CODE_SYNTAX = -108 398ONIGERR_CONTROL_CODE_SYNTAX = -109 399ONIGERR_CHAR_CLASS_VALUE_AT_END_OF_RANGE = -110 400ONIGERR_CHAR_CLASS_VALUE_AT_START_OF_RANGE = -111 401ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS = -112 402ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED = -113 403ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID = -114 404ONIGERR_NESTED_REPEAT_OPERATOR = -115 405ONIGERR_UNMATCHED_CLOSE_PARENTHESIS = -116 406ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS = -117 407ONIGERR_END_PATTERN_IN_GROUP = -118 408ONIGERR_UNDEFINED_GROUP_OPTION = -119 409ONIGERR_INVALID_POSIX_BRACKET_TYPE = -121 410ONIGERR_INVALID_LOOK_BEHIND_PATTERN = -122 411ONIGERR_INVALID_REPEAT_RANGE_PATTERN = -123 412ONIGERR_INVALID_CONDITION_PATTERN = -124 413# values error (syntax error) 414ONIGERR_TOO_BIG_NUMBER = -200 415ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE = -201 416ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE = -202 417ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS = -203 418ONIGERR_MISMATCH_CODE_LENGTH_IN_CLASS_RANGE = -204 419ONIGERR_TOO_MANY_MULTI_BYTE_RANGES = -205 420ONIGERR_TOO_SHORT_MULTI_BYTE_STRING = -206 421ONIGERR_TOO_BIG_BACKREF_NUMBER = -207 422ONIGERR_INVALID_BACKREF = -208 423ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED = -209 424ONIGERR_TOO_MANY_CAPTURE_GROUPS = -210 425ONIGERR_TOO_SHORT_DIGITS = -211 426ONIGERR_TOO_LONG_WIDE_CHAR_VALUE = -212 427ONIGERR_EMPTY_GROUP_NAME = -214 428ONIGERR_INVALID_GROUP_NAME = -215 429ONIGERR_INVALID_CHAR_IN_GROUP_NAME = -216 430ONIGERR_UNDEFINED_NAME_REFERENCE = -217 431ONIGERR_UNDEFINED_GROUP_REFERENCE = -218 432ONIGERR_MULTIPLEX_DEFINED_NAME = -219 433ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL = -220 434ONIGERR_NEVER_ENDING_RECURSION = -221 435ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY = -222 436ONIGERR_INVALID_CHAR_PROPERTY_NAME = -223 437ONIGERR_INVALID_CODE_POINT_VALUE = -400 438ONIGERR_INVALID_WIDE_CHAR_VALUE = -400 439ONIGERR_TOO_BIG_WIDE_CHAR_VALUE = -401 440ONIGERR_NOT_SUPPORTED_ENCODING_COMBINATION = -402 441ONIGERR_INVALID_COMBINATION_OF_OPTIONS = -403 442 443# errors related to thread 444#ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT = -1001 445 446 447OnigWarnFunc = ctypes.CFUNCTYPE(None, ctypes.c_char_p) 448 449# 450# Onigmo APIs 451# 452 453# onig_init 454onig_init = libonig.onig_init 455 456# onig_error_code_to_str 457libonig.onig_error_code_to_str.argtypes = [ctypes.c_char_p, _c_ssize_t, 458 ctypes.POINTER(OnigErrorInfo)] 459def onig_error_code_to_str(err_buf, err_code, err_info=None): 460 return libonig.onig_error_code_to_str(err_buf, err_code, err_info) 461 462# onig_set_warn_func 463libonig.onig_set_warn_func.argtypes = [OnigWarnFunc] 464onig_set_warn_func = libonig.onig_set_warn_func 465 466# onig_set_verb_warn_func 467libonig.onig_set_verb_warn_func.argtypes = [OnigWarnFunc] 468onig_set_verb_warn_func = libonig.onig_set_verb_warn_func 469 470# onig_new 471libonig.onig_new.argtypes = [ctypes.POINTER(OnigRegex), 472 ctypes.c_void_p, ctypes.c_void_p, 473 OnigOptionType, OnigEncoding, ctypes.POINTER(OnigSyntaxType), 474 ctypes.POINTER(OnigErrorInfo)] 475onig_new = libonig.onig_new 476 477# onig_reg_init 478# onig_new_without_alloc 479# onig_new_deluxe 480 481# onig_free 482libonig.onig_free.argtypes = [OnigRegex] 483onig_free = libonig.onig_free 484 485# onig_free_body 486 487# onig_search 488libonig.onig_search.argtypes = [OnigRegex, 489 ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p, 490 ctypes.POINTER(OnigRegion), OnigOptionType] 491libonig.onig_search.restype = _c_ssize_t 492onig_search = libonig.onig_search 493 494# onig_search_gpos 495libonig.onig_search_gpos.argtypes = [OnigRegex, 496 ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p, 497 ctypes.c_void_p, 498 ctypes.POINTER(OnigRegion), OnigOptionType] 499libonig.onig_search_gpos.restype = _c_ssize_t 500onig_search_gpos = libonig.onig_search_gpos 501 502# onig_match 503libonig.onig_match.argtypes = [OnigRegex, 504 ctypes.c_void_p, ctypes.c_void_p, ctypes.c_void_p, 505 ctypes.POINTER(OnigRegion), OnigOptionType] 506libonig.onig_match.restype = _c_ssize_t 507onig_match = libonig.onig_match 508 509# onig_region_new 510libonig.onig_region_new.argtypes = [] 511libonig.onig_region_new.restype = ctypes.POINTER(OnigRegion) 512onig_region_new = libonig.onig_region_new 513 514# onig_region_init 515 516# onig_region_free 517libonig.onig_region_free.argtypes = [ctypes.POINTER(OnigRegion), ctypes.c_int] 518onig_region_free = libonig.onig_region_free 519 520# onig_region_copy 521# onig_region_clear 522# onig_region_resize 523# onig_region_set 524# onig_name_to_group_numbers 525# onig_name_to_backref_number 526# onig_foreach_name 527# onig_number_of_names 528# onig_number_of_captures 529# onig_number_of_capture_histories 530# onig_get_capture_tree 531# onig_capture_tree_traverse 532# onig_noname_group_capture_is_active 533# onig_get_encoding 534# onig_get_options 535# onig_get_case_fold_flag 536# onig_get_syntax 537 538# onig_set_default_syntax 539libonig.onig_set_default_syntax.argtypes = [ctypes.POINTER(OnigSyntaxType)] 540libonig.onig_set_default_syntax.restype = ctypes.c_int 541onig_set_default_syntax = libonig.onig_set_default_syntax 542 543# onig_copy_syntax 544libonig.onig_copy_syntax.argtypes = [ctypes.POINTER(OnigSyntaxType), 545 ctypes.POINTER(OnigSyntaxType)] 546onig_copy_syntax = libonig.onig_copy_syntax 547 548# onig_get_syntax_op 549libonig.onig_get_syntax_op.argtypes = [ctypes.POINTER(OnigSyntaxType)] 550libonig.onig_get_syntax_op.restype = ctypes.c_int 551onig_get_syntax_op = libonig.onig_get_syntax_op 552 553# onig_get_syntax_op2 554libonig.onig_get_syntax_op2.argtypes = [ctypes.POINTER(OnigSyntaxType)] 555libonig.onig_get_syntax_op2.restype = ctypes.c_int 556onig_get_syntax_op2 = libonig.onig_get_syntax_op2 557 558# onig_get_syntax_behavior 559libonig.onig_get_syntax_behavior.argtypes = [ctypes.POINTER(OnigSyntaxType)] 560libonig.onig_get_syntax_behavior.restype = ctypes.c_int 561onig_get_syntax_behavior = libonig.onig_get_syntax_behavior 562 563# onig_get_syntax_options 564libonig.onig_get_syntax_options.argtypes = [ctypes.POINTER(OnigSyntaxType)] 565libonig.onig_get_syntax_options.restype = ctypes.c_int 566onig_get_syntax_options = libonig.onig_get_syntax_options 567 568# onig_set_syntax_op 569libonig.onig_set_syntax_op.argtypes = [ctypes.POINTER(OnigSyntaxType), 570 ctypes.c_int] 571onig_set_syntax_op = libonig.onig_set_syntax_op 572 573# onig_set_syntax_op2 574libonig.onig_set_syntax_op2.argtypes = [ctypes.POINTER(OnigSyntaxType), 575 ctypes.c_int] 576onig_set_syntax_op2 = libonig.onig_set_syntax_op2 577 578# onig_set_syntax_behavior 579libonig.onig_set_syntax_behavior.argtypes = [ctypes.POINTER(OnigSyntaxType), 580 ctypes.c_int] 581onig_set_syntax_behavior = libonig.onig_set_syntax_behavior 582 583# onig_set_syntax_options 584libonig.onig_set_syntax_options.argtypes = [ctypes.POINTER(OnigSyntaxType), 585 ctypes.c_int] 586onig_set_syntax_options = libonig.onig_set_syntax_options 587 588# onig_set_meta_char 589# onig_copy_encoding 590# onig_get_default_case_fold_flag 591# onig_set_default_case_fold_flag 592 593# onig_get_match_stack_limit_size 594libonig.onig_get_match_stack_limit_size.argtypes = [] 595libonig.onig_get_match_stack_limit_size.restype = ctypes.c_int 596onig_get_match_stack_limit_size = libonig.onig_get_match_stack_limit_size 597 598# onig_set_match_stack_limit_size 599libonig.onig_set_match_stack_limit_size.argtypes = [ctypes.c_int] 600libonig.onig_set_match_stack_limit_size.restype = ctypes.c_int 601onig_set_match_stack_limit_size = libonig.onig_set_match_stack_limit_size 602 603# onig_get_parse_depth_limit 604libonig.onig_get_parse_depth_limit.argtypes = [] 605libonig.onig_get_parse_depth_limit.restype = ctypes.c_int 606onig_get_parse_depth_limit = libonig.onig_get_parse_depth_limit 607 608# onig_set_parse_depth_limit 609libonig.onig_set_parse_depth_limit.argtypes = [ctypes.c_int] 610libonig.onig_set_parse_depth_limit.restype = ctypes.c_int 611onig_set_parse_depth_limit = libonig.onig_set_parse_depth_limit 612 613# onig_end 614libonig.onig_end.argtypes = [] 615onig_end = libonig.onig_end 616 617# onig_version 618libonig.onig_version.argtypes = [] 619libonig.onig_version.restype = ctypes.c_char_p 620def onig_version(): 621 return libonig.onig_version().decode() 622 623# onig_copyright 624libonig.onig_copyright.argtypes = [] 625libonig.onig_copyright.restype = ctypes.c_char_p 626def onig_copyright(): 627 return libonig.onig_copyright().decode() 628