1 /* 2 * Copyright (c) 2001-2009 Ville Laurikari <vl@iki.fi> 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS 17 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 20 * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 #ifndef _TRE_H 30 #define _TRE_H 31 32 #include <sys/types.h> 33 34 #include <locale.h> 35 #include <wchar.h> 36 #include <xlocale.h> 37 38 #include "../../../../head/regex.h" 39 40 #define RE_MAGIC ((('r'^0200)<<8) | 'e') 41 42 typedef int reg_errcode_t; 43 44 enum { 45 TRE_CONFIG_APPROX, 46 TRE_CONFIG_WCHAR, 47 TRE_CONFIG_MULTIBYTE, 48 TRE_CONFIG_SYSTEM_ABI, 49 TRE_CONFIG_VERSION 50 }; 51 52 typedef wchar_t tre_char_t; 53 54 /* Approximate matching parameter struct. */ 55 typedef struct { 56 int cost_ins; /* Default cost of an inserted character. */ 57 int cost_del; /* Default cost of a deleted character. */ 58 int cost_subst; /* Default cost of a substituted character. */ 59 int max_cost; /* Maximum allowed cost of a match. */ 60 61 int max_ins; /* Maximum allowed number of inserts. */ 62 int max_del; /* Maximum allowed number of deletes. */ 63 int max_subst; /* Maximum allowed number of substitutes. */ 64 int max_err; /* Maximum allowed number of errors total. */ 65 } regaparams_t; 66 67 /* Approximate matching result struct. */ 68 typedef struct { 69 size_t nmatch; /* Length of pmatch[] array. */ 70 regmatch_t *pmatch; /* Submatch data. */ 71 int cost; /* Cost of the match. */ 72 int num_ins; /* Number of inserts in the match. */ 73 int num_del; /* Number of deletes in the match. */ 74 int num_subst; /* Number of substitutes in the match. */ 75 } regamatch_t; 76 77 typedef struct { 78 int (*get_next_char)(tre_char_t *c, unsigned int *pos_add, void *context); 79 void (*rewind)(size_t pos, void *context); 80 int (*compare)(size_t pos1, size_t pos2, size_t len, void *context); 81 void *context; 82 } tre_str_source; 83 84 #define REG_ENHANCED 0x100000 85 #define REG_MINIMAL 0x200000 86 #define REG_UNGREEDY 0x200000 87 88 #define __DECONST(type, var) ((type)(uintptr_t)(const void *)(var)) 89 90 #ifndef MB_CUR_MAX_L 91 unsigned char __mb_cur_max_l(locale_t); 92 #define MB_CUR_MAX_L(l) (__mb_cur_max_l(l)) 93 #endif 94 95 #endif /* _TRE_H */