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