static void parse_node_namespace(syntree_t st) { str_it_t i, e; i = syntree_position(st); e = str_end(syntree_str(st)); p_skip_spaces(i, e); syntree_seek(st, i); parse_node_name(st); if(err()) return; i = syntree_position(st); p_skip_spaces(i,e); if(i==e ? 1 : *i!='[') goto error; i++; while(i<e) { p_skip_spaces(i, e); if(i==e) goto error; if(*i==']') { syntree_seek(st, i+1); return; } syntree_seek(st, i); xcss_parse(st); if(err()) return; i = syntree_position(st); if(i==e) goto error; } error: syntree_seek(st, i); err_set(e_xcss_syntax); return; }
END_TEST START_TEST(parse_node_name_test) { char line[1024]; char *ptr; int err; char *hostname; // invalid characters should fail sprintf(line, "*$!@!@"); ptr = line; cray_enabled = false; fail_unless(parse_node_name(&ptr, err, 1) == NULL); fail_unless(err != PBSE_NONE); err = PBSE_NONE; sprintf(line, "napali"); ptr = line; fail_unless((hostname = parse_node_name(&ptr, err, 1)) != NULL); fail_unless(err == PBSE_NONE); fail_unless(!strcmp(hostname, "napali")); err = PBSE_NONE; sprintf(line, "1napali"); ptr = line; fail_unless(parse_node_name(&ptr, err, 1) == NULL); fail_unless(err != PBSE_NONE); err = PBSE_NONE; sprintf(line, "1214"); ptr = line; cray_enabled = true; fail_unless((hostname = parse_node_name(&ptr, err, 1)) != NULL); fail_unless(err == PBSE_NONE); fail_unless(!strcmp(hostname, "1214")); }
static void parse_node_rule(syntree_t st) { str_it_t i, e; i = syntree_position(st); e = str_end(syntree_str(st)); p_skip_spaces(i,e); syntree_seek(st, i); parse_node_name(st); if(err()) return; i = syntree_position(st); p_skip_spaces(i,e); if(i==e ? 1 : (*i)!=':') { err_set(e_xcss_syntax); return; } i++; p_skip_spaces(i,e); syntree_seek(st, i); parse_node_value(st); return; }
static void parse_node_value(syntree_t st) { str_it_t i, e; i = syntree_position(st); e = str_end(syntree_str(st)); syntree_named_start(st, XCSS_NODE_VALUE); if(err()) return; while(i<e ? *i!=';' : 0) { if((e-i)>=2 ? i[0]=='$' && i[1]=='{' : 0) { syntree_seek(st, i+2); parse_node_name(st); i = syntree_position(st); if(i<e ? *i!='}' : 1) { err_set(e_xcss_syntax); return; } i++; syntree_seek(st, i); } else { syntree_named_start(st, XCSS_NODE_TEXT); if(err()) return; while(i<e && *i!=';') { i++; if((e-i)>=2 ? i[0]=='$' && i[1]=='{' : 0) break; } syntree_seek(st, i); syntree_named_end(st); } } if(i==e) { err_set(e_xcss_syntax); } else { syntree_seek(st, i+1); syntree_named_end(st); } }