1 #ifdef HAVE_CONFIG_H
2 # include "elementary_config.h"
3 #endif
4
5 #include <Elementary.h>
6 #include <regex.h>
7
8 struct _Elm_Validator_Regexp
9 {
10 Eina_Stringshare *signal;
11 int status;
12 regex_t regex;
13 };
14
15 EAPI Elm_Validator_Regexp *
elm_validator_regexp_new(const char * pattern,const char * sig)16 elm_validator_regexp_new(const char *pattern, const char *sig)
17 {
18 Elm_Validator_Regexp *validator;
19
20 validator = calloc(1, sizeof(Elm_Validator_Regexp));
21 validator->signal = eina_stringshare_add(sig ? sig : "default");
22 validator->status = regcomp(&validator->regex, pattern, REG_EXTENDED | REG_NOSUB) ? ELM_REG_BADPAT : ELM_REG_NOERROR;
23
24 return validator;
25 }
26
27 EAPI void
elm_validator_regexp_free(Elm_Validator_Regexp * validator)28 elm_validator_regexp_free(Elm_Validator_Regexp *validator)
29 {
30 eina_stringshare_del(validator->signal);
31 regfree(&validator->regex);
32 free(validator);
33 }
34
35 EAPI Elm_Regexp_Status
elm_validator_regexp_status_get(Elm_Validator_Regexp * validator)36 elm_validator_regexp_status_get(Elm_Validator_Regexp *validator)
37 {
38 return validator->status;
39 }
40
41 EAPI void
elm_validator_regexp_helper(void * data,const Efl_Event * event)42 elm_validator_regexp_helper(void *data, const Efl_Event *event)
43 {
44 Elm_Validate_Content *vc = event->info;
45 Elm_Validator_Regexp *validator = (Elm_Validator_Regexp *)data;
46
47 validator->status = regexec(&validator->regex, vc->text, (size_t)0, NULL, 0) ? ELM_REG_NOMATCH : ELM_REG_NOERROR;
48 vc->signal = validator->signal;
49 if (validator->status)
50 efl_event_callback_stop(event->object);
51 }
52