Exemple #1
0
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;
}
Exemple #2
0
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"));
  }
Exemple #3
0
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;
}
Exemple #4
0
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);
	}
}