TagList *ApplyTaggingRules(TaggingRuleList *rules,TagList *tags,node_t id) { TagList *result=NewTagList(); int i,j; for(i=0;i<rules->nrules;i++) { if(rules->rules[i].k && rules->rules[i].v) { for(j=0;j<tags->ntags;j++) if(!strcmp(tags->k[j],rules->rules[i].k) && !strcmp(tags->v[j],rules->rules[i].v)) apply_actions(rules,&rules->rules[i],j,tags,result,id); } else if(rules->rules[i].k && !rules->rules[i].v) { for(j=0;j<tags->ntags;j++) if(!strcmp(tags->k[j],rules->rules[i].k)) apply_actions(rules,&rules->rules[i],j,tags,result,id); } else if(!rules->rules[i].k && rules->rules[i].v) { for(j=0;j<tags->ntags;j++) if(!strcmp(tags->v[j],rules->rules[i].v)) apply_actions(rules,&rules->rules[i],j,tags,result,id); } else /* if(!rules->rules[i].k && !rules->rules[i].v) */ { for(j=0;j<tags->ntags;j++) apply_actions(rules,&rules->rules[i],j,tags,result,id); } } return(result); }
auto process_format_aux(F f, Format, Pairs... pairs) { return apply_actions ( make_actions<CTTE_MAKE_STRING(Format)>{}, make_context(pairs...), std::move(f) ); }
static void appmouse_drag(ViewInfo* v,int x,int y) { v->mouse.pos.x=x; v->mouse.pos.y=y; to3D( x,y, &v->mouse.GLpos.x,&v->mouse.GLpos.y,&v->mouse.GLpos.z); prevX=v->mouse.GLpos.x; prevY=v->mouse.GLpos.y; apply_actions(v,x,y); }
static VALUE spgd_compute_name(VALUE self, VALUE split_rule, VALUE values) { VALUE res = 0; int encoding = -1; char *result = (char*) xmalloc(INITIAL_CAPA); int pos = 0, capa = INITIAL_CAPA; long i, rule_len = RARRAY_LEN(split_rule); if (!result) { rb_memerror(); } for (i = 0; i < rule_len; i++) { VALUE rule = rb_ary_entry(split_rule, i); if (rb_class_of(rule) == rb_cArray) { long fieldnum = NUM2LONG(rb_ary_entry(rule, 0)); VALUE actions = rb_ary_entry(rule, 1); rule = rb_ary_entry(values, fieldnum); encoding = ENCODING_GET(rule); if (RTEST(actions) && RARRAY_LEN(actions)) { rule = apply_actions(rule, actions); } } if (rb_class_of(rule) == rb_cString) { long size = RSTRING_LEN(rule); if (capa < pos + size + 1) { char *tmp; capa = pos + size + 1; if (i + 1 != rule_len) capa = (capa * 3) >> 1; tmp = (char*) xrealloc(result, capa); if (!tmp) { xfree(result); rb_memerror(); } result = tmp; } if (encoding == -1) encoding = ENCODING_GET(rule); strncpy(result + pos, RSTRING_PTR(rule), size + 1); pos += size; }
static void appmouse_up(ViewInfo* v,int x,int y) { /* int a; */ v->mouse.down=0; v->mouse.finalPos.x=x; v->mouse.finalPos.y=y; /* a=get_mode(v); */ to3D(x,y, &v->mouse.GLfinalPos.x,&v->mouse.GLfinalPos.y,&v->mouse.GLfinalPos.z); if(singleclick(v)) { if (v->mouse.t==glMouseLeftButton) appmouse_left_click(v,x,y); if (v->mouse.t==glMouseRightButton) appmouse_right_click(v,x,y); } apply_actions(v,x,y); view->mouse.dragX = 0; view->mouse.dragY = 0; view->arcball->isDragging=0; }
F operator*(F f) { return apply_actions(make_actions<CTTE_MAKE_STRING(Format)>{}, context, std::move(f)); }
auto apply_actions(vector<Action, Actions...>, Context context, F f) { return apply_actions(vector<Actions...>{}, context, Action{}(context, f)); }