6 #include "lib/global.h" /* <glib.h> */
10 #ifdef SEARCH_TYPE_PCRE
14 /*** typedefs(not structures) and defined constants **********************************************/
16 typedef enum mc_search_cbret_t mc_search_cbret_t
;
18 typedef mc_search_cbret_t (*mc_search_fn
) (const void *user_data
, gsize char_offset
,
20 typedef mc_search_cbret_t (*mc_update_fn
) (const void *user_data
, gsize char_offset
);
22 #define MC_SEARCH__NUM_REPLACE_ARGS 64
24 #ifdef SEARCH_TYPE_GLIB
25 #define mc_search_matchinfo_t GMatchInfo
27 #define mc_search_matchinfo_t pcre_extra
30 /*** enums ***************************************************************************************/
36 MC_SEARCH_E_REGEX_COMPILE
,
38 MC_SEARCH_E_REGEX_REPLACE
,
50 enum mc_search_cbret_t
53 MC_SEARCH_CB_INVALID
= -1,
54 MC_SEARCH_CB_ABORT
= -2,
55 MC_SEARCH_CB_SKIP
= -3
58 /*** structures declarations (and typedefs of structures)*****************************************/
60 typedef struct mc_search_struct
62 /* public input data */
65 /* search in all charsets */
66 gboolean is_all_charsets
;
69 /* case sensitive search */
70 gboolean is_case_sensitive
;
72 /* search only once. Is this for replace? */
73 gboolean is_once_only
;
75 /* search only whole words (from begin to end). Used only with NORMAL search type */
78 /* search entire string (from begin to end). Used only with GLOB search type */
79 gboolean is_entire_line
;
81 /* function, used for getting data. NULL if not used */
82 mc_search_fn search_fn
;
84 /* function, used for updatin current search status. NULL if not used */
85 mc_update_fn update_fn
;
88 mc_search_type_t search_type
;
90 /* public output data */
92 /* some data for normal */
96 /* some data for regexp */
99 mc_search_matchinfo_t
*regex_match_info
;
100 GString
*regex_buffer
;
101 #ifdef SEARCH_TYPE_PCRE
102 int iovector
[MC_SEARCH__NUM_REPLACE_ARGS
* 2];
103 #endif /* SEARCH_TYPE_PCRE */
107 /* prepared conditions */
108 GPtrArray
*conditions
;
110 /* original search string */
114 gchar
*original_charset
;
117 /* error code after search */
118 mc_search_error_t error
;
122 typedef struct mc_search_type_str_struct
125 mc_search_type_t type
;
126 } mc_search_type_str_t
;
128 /*** global variables defined in .c file *********************************************************/
130 /*** declarations of public functions ************************************************************/
132 mc_search_t
*mc_search_new (const gchar
* original
, gsize original_len
,
133 const gchar
* original_charset
);
135 void mc_search_free (mc_search_t
* lc_mc_search
);
137 gboolean
mc_search_prepare (mc_search_t
* mc_search
);
139 gboolean
mc_search_run (mc_search_t
* mc_search
, const void *user_data
, gsize start_search
,
140 gsize end_search
, gsize
* found_len
);
142 gboolean
mc_search_is_type_avail (mc_search_type_t
);
144 const mc_search_type_str_t
*mc_search_types_list_get (size_t * num
);
146 GString
*mc_search_prepare_replace_str (mc_search_t
* mc_search
, GString
* replace_str
);
147 char *mc_search_prepare_replace_str2 (mc_search_t
* lc_mc_search
, const char *replace_str
);
149 gboolean
mc_search_is_fixed_search_str (mc_search_t
*);
151 gchar
**mc_search_get_types_strings_array (size_t * num
);
153 gboolean
mc_search (const gchar
* pattern
, const gchar
* pattern_charset
, const gchar
* str
,
154 mc_search_type_t type
);
156 int mc_search_getstart_result_by_num (mc_search_t
*, int);
157 int mc_search_getend_result_by_num (mc_search_t
*, int);