RPA Toolkit
changed the callback parameters and added look ahead/back while parsing
[rpatk.git] / rpa / rpadbex.h
1 /*
2  *  Regular Pattern Analyzer (RPA)
3  *  Copyright (c) 2009-2010 Martin Stoilov
4  *
5  *  This program is free software: you can redistribute it and/or modify
6  *  it under the terms of the GNU General Public License as published by
7  *  the Free Software Foundation, either version 3 of the License, or
8  *  (at your option) any later version.
9  *
10  *  This program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  *  GNU General Public License for more details.
14  *
15  *  You should have received a copy of the GNU General Public License
16  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  *
18  *  Martin Stoilov <martin@rpasearch.com>
19  */
20
21 #ifndef _RPADBEX_H_
22 #define _RPADBEX_H_
23
24
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28
29 #define RPA_ENCODING_ICASE 1
30 #define RPA_ENCODING_BYTE 0
31 #define RPA_ENCODING_ICASE_BYTE (RPA_ENCODING_BYTE | RPA_ENCODING_ICASE)
32 #define RPA_ENCODING_UTF8 2
33 #define RPA_ENCODING_ICASE_UTF8 (RPA_ENCODING_UTF8 | RPA_ENCODING_ICASE)
34 #define RPA_ENCODING_UTF16LE 4
35 #define RPA_ENCODING_ICASE_UTF16LE (RPA_ENCODING_UTF16LE | RPA_ENCODING_ICASE)
36
37 #define RPA_PATTERN_SINGLE 0
38 #define RPA_PATTERN_BEST 1
39 #define RPA_PATTERN_OR 2
40
41
42 /* 
43  * Callback reasons, the callback will set the reason for the callback
44  * RPA_REASON_END and RPA_REASON_MATCHED can be combined and delivered
45  * in the same call, if there is a match.
46  */
47 #define RPA_REASON_START        (1 << 8)
48 #define RPA_REASON_END          (1 << 9)
49 #define RPA_REASON_MATCHED      (1 << 10)
50 #define RPA_REASON_ALL          (RPA_REASON_START|RPA_REASON_END|RPA_REASON_MATCHED)
51
52
53 typedef struct rpa_recordpeek_s {
54         const char *name;
55         const char *input;
56         unsigned int size;
57         unsigned int reason;
58 } rpa_recordpeek_t;
59
60
61 typedef struct rpa_stat_s *rpa_stat_handle;
62 typedef struct rpa_dbex_s *rpa_dbex_handle;
63 typedef struct rpa_varlink_s *rpa_group_handle;
64 typedef struct rpa_varlink_s *rpa_pattern_handle;
65 typedef struct rpa_varlink_s *rpa_callback_handle;
66 typedef void (*rpa_progress_callback)(void *userdata, const char *input, const char *start, const char *end);
67 typedef int (*rpa_match_callback)(rpa_stat_handle stat, const char *name, void *userdata, const char *input, unsigned int size, unsigned int reason);
68
69
70 rpa_dbex_handle rpa_dbex_create(void);
71 rpa_dbex_handle rpa_dbex_create_with_hash(unsigned int uHashEntries);
72 void rpa_dbex_destroy(rpa_dbex_handle hDbex);
73 unsigned int rpa_dbex_get_error(rpa_dbex_handle hDbex);
74 int rpa_dbex_add_callback(rpa_dbex_handle hDbex, const char *namematch, unsigned int reason, rpa_match_callback func, void *userdata);
75 int rpa_dbex_add_callback_exact(rpa_dbex_handle hDbex, const char *name, unsigned int reason, rpa_match_callback func, void *userdata);
76 int rpa_dbex_open(rpa_dbex_handle hDbex);
77 void rpa_dbex_close(rpa_dbex_handle hDbex);
78 int rpa_dbex_load(rpa_dbex_handle hDbex, const char *patterns, unsigned int size);
79 int rpa_dbex_load_string(rpa_dbex_handle hDbex, const char *patterns);
80 int rpa_dbex_pattern_type(rpa_dbex_handle hDbex, rpa_pattern_handle hPattern);
81 rpa_pattern_handle rpa_dbex_get_pattern(rpa_dbex_handle hDbex, const char *name);
82 rpa_pattern_handle rpa_dbex_default_pattern(rpa_dbex_handle hDbex);
83 rpa_pattern_handle rpa_dbex_next_pattern(rpa_dbex_handle hDbex, rpa_pattern_handle hCur);
84 rpa_pattern_handle rpa_dbex_prev_pattern(rpa_dbex_handle hDbex, rpa_pattern_handle hCur);
85 rpa_pattern_handle rpa_dbex_first_pattern(rpa_dbex_handle hDbex);
86 rpa_pattern_handle rpa_dbex_last_pattern(rpa_dbex_handle hDbex);
87 rpa_callback_handle rpa_dbex_next_callback(rpa_dbex_handle hDbex, rpa_callback_handle hCur);
88 rpa_callback_handle rpa_dbex_prev_callback(rpa_dbex_handle hDbex, rpa_callback_handle hCur);
89 rpa_callback_handle rpa_dbex_first_callback(rpa_dbex_handle hDbex);
90 rpa_callback_handle rpa_dbex_last_callback(rpa_dbex_handle hDbex);
91 const char *rpa_dbex_callback_pattern(rpa_dbex_handle hDbex, rpa_callback_handle hCallback);
92 void *rpa_dbex_callback_userdata(rpa_dbex_handle hDbex, rpa_callback_handle hCallback);
93 const char *rpa_dbex_pattern_name(rpa_dbex_handle hDbex, rpa_pattern_handle hPattern);
94 const char *rpa_dbex_pattern_regex(rpa_dbex_handle hDbex, rpa_pattern_handle hPattern, int seq);
95 int rpa_dbex_strmatch(const char *str, const char *patterns);
96 int rpa_dbex_scan(rpa_dbex_handle hDbex, rpa_pattern_handle hPattern, const char *input, const char *start, const char *end, const char **where);
97 int rpa_dbex_match(rpa_dbex_handle hDbex, rpa_pattern_handle hPattern, const char *input, const char *start, const char *end);
98 int rpa_dbex_parse(rpa_dbex_handle hDbex, rpa_pattern_handle hPattern, const char *input, const char *start, const char *end);
99 int rpa_dbex_set_encoding(rpa_dbex_handle hDbex, unsigned int encoding);
100 int rpa_dbex_get_usedstack(rpa_dbex_handle hDbex);
101 int rpa_dbex_reset_usedstack(rpa_dbex_handle hDbex);
102 int rpa_dbex_set_progress_callback(rpa_dbex_handle hDbex, rpa_progress_callback progress, void *userdata);
103 int rpa_dbex_abort(rpa_dbex_handle hDbex);
104 int rpa_dbex_dump_pattern(rpa_dbex_handle hDbex, rpa_pattern_handle hPattern);
105 void *rpa_dbex_get_userdata(rpa_dbex_handle hDbex, unsigned int index);
106 int rpa_dbex_set_userdata(rpa_dbex_handle hDbex, unsigned int index, void *ud);
107 const char *rpa_dbex_version();
108 const char *rpa_dbex_seversion();
109
110 rpa_stat_handle rpa_stat_create(rpa_dbex_handle hDbex);
111 void rpa_stat_destroy(rpa_stat_handle hStat);
112 int rpa_stat_set_encoding(rpa_stat_handle hStat, unsigned int encoding);
113 int rpa_stat_reset_usedstack(rpa_stat_handle hStat);
114 int rpa_stat_get_usedstack(rpa_stat_handle hStat);
115 int rpa_stat_set_maxstack(rpa_stat_handle hStat, unsigned long size);
116 int rpa_stat_scan(rpa_stat_handle hStat, rpa_pattern_handle hPattern, const char *input, const char *start, const char *end, const char **where);
117 int rpa_stat_match(rpa_stat_handle hStat, rpa_pattern_handle hPattern, const char *input, const char *start, const char *end);
118 int rpa_stat_parse(rpa_stat_handle hStat, rpa_pattern_handle hPattern, const char *input, const char *start, const char *end);
119 int rpa_stat_set_progress_callback(rpa_stat_handle hStat, rpa_progress_callback progress, void *userdata);
120 int rpa_stat_abort(rpa_stat_handle hStat);
121 const rpa_recordpeek_t *rpa_stat_record_lookahead(rpa_stat_handle hStat, unsigned long n);
122 const rpa_recordpeek_t *rpa_stat_record_lookback(rpa_stat_handle hStat, unsigned long n);
123 void *rpa_stat_get_userdata(rpa_stat_handle hStat, unsigned int index);
124 int rpa_stat_set_userdata(rpa_stat_handle hStat, unsigned int index, void *ud);
125 const char *rpa_stat_input_start(rpa_stat_handle hStat);
126 const char *rpa_stat_input_end(rpa_stat_handle hStat);
127
128 #ifdef __cplusplus
129 }
130 #endif
131
132 #endif