tag.c
changeset 958 8b502be8b8e0
parent 956 484245788760
child 960 b5f856fcef4c
equal deleted inserted replaced
957:e61ca30d9474 958:8b502be8b8e0
    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 					}