57 unsigned int i; |
57 unsigned int i; |
58 regex_t *reg; |
58 regex_t *reg; |
59 |
59 |
60 if(regs) |
60 if(regs) |
61 return; |
61 return; |
62 nrules = sizeof rule / sizeof rule[0]; |
62 nrules = sizeof rules / sizeof rules[0]; |
63 regs = emallocz(nrules * sizeof(Regs)); |
63 regs = emallocz(nrules * sizeof(Regs)); |
64 for(i = 0; i < nrules; i++) { |
64 for(i = 0; i < nrules; i++) { |
65 if(rule[i].prop) { |
65 if(rules[i].prop) { |
66 reg = emallocz(sizeof(regex_t)); |
66 reg = emallocz(sizeof(regex_t)); |
67 if(regcomp(reg, rule[i].prop, REG_EXTENDED)) |
67 if(regcomp(reg, rules[i].prop, REG_EXTENDED)) |
68 free(reg); |
68 free(reg); |
69 else |
69 else |
70 regs[i].propregex = reg; |
70 regs[i].propregex = reg; |
71 } |
71 } |
72 if(rule[i].tags) { |
72 if(rules[i].tags) { |
73 reg = emallocz(sizeof(regex_t)); |
73 reg = emallocz(sizeof(regex_t)); |
74 if(regcomp(reg, rule[i].tags, REG_EXTENDED)) |
74 if(regcomp(reg, rules[i].tags, REG_EXTENDED)) |
75 free(reg); |
75 free(reg); |
76 else |
76 else |
77 regs[i].tagregex = reg; |
77 regs[i].tagregex = reg; |
78 } |
78 } |
79 } |
79 } |
122 snprintf(prop, sizeof prop, "%s:%s:%s", |
122 snprintf(prop, sizeof prop, "%s:%s:%s", |
123 ch.res_class ? ch.res_class : "", |
123 ch.res_class ? ch.res_class : "", |
124 ch.res_name ? ch.res_name : "", c->name); |
124 ch.res_name ? ch.res_name : "", c->name); |
125 for(i = 0; i < nrules; i++) |
125 for(i = 0; i < nrules; i++) |
126 if(regs[i].propregex && !regexec(regs[i].propregex, prop, 1, &tmp, 0)) { |
126 if(regs[i].propregex && !regexec(regs[i].propregex, prop, 1, &tmp, 0)) { |
127 c->isfloating = rule[i].isfloating; |
127 c->isfloating = rules[i].isfloating; |
128 for(j = 0; regs[i].tagregex && j < ntags; j++) { |
128 for(j = 0; regs[i].tagregex && j < ntags; j++) { |
129 if(!regexec(regs[i].tagregex, tags[j], 1, &tmp, 0)) { |
129 if(!regexec(regs[i].tagregex, tags[j], 1, &tmp, 0)) { |
130 matched = True; |
130 matched = True; |
131 c->tags[j] = True; |
131 c->tags[j] = True; |
132 } |
132 } |