コード例 #1
0
ファイル: scanner.c プロジェクト: rkd77/elinks-tv
int
map_dom_scanner_string(struct dom_scanner *scanner,
		   unsigned char *ident, unsigned char *end, int base_type)
{
	const struct dom_scanner_string_mapping *mappings = scanner->info->mappings;
	struct dom_string name = INIT_DOM_STRING(ident, end - ident);

	for (; is_dom_string_set(&mappings->name); mappings++) {
		if (mappings->base_type == base_type
		    && !dom_string_casecmp(&mappings->name, &name))
			return mappings->type;
	}

	return base_type;
}
コード例 #2
0
enum dom_config_flag
parse_dom_config(unsigned char *flaglist, unsigned char separator)
{
	enum dom_config_flag flags = 0;

	while (flaglist) {
		unsigned char *end = separator ? strchr(flaglist, separator) : NULL;
		int length = end ? end - flaglist : strlen(flaglist);
		struct dom_string name = INIT_DOM_STRING(flaglist, length);

		flags |= get_dom_config_flag(&name);
		if (end) end++;
		flaglist = end;
	}

	return flags;
}
コード例 #3
0
static enum dom_code
normalize_text_node_whitespace(struct dom_node *node)
{
	unsigned char buf[256];
	struct dom_string string = INIT_DOM_STRING(NULL, 0);
	int count = 0, i = 0;
	unsigned char *text = node->string.string;

	assert(node->type == DOM_NODE_TEXT);

	while (i < node->string.length) {
		int j;

		for (j = 0; j < sizeof(buf) && i < node->string.length; i++) {
			unsigned char data = text[i];

			if (isspace(data)) {
				if (count == 1)
					continue;

				data = ' ';
				count = 1;

			} else {
				count = 0;
			}

			buf[j++] = data;
		}

		if (!add_to_dom_string(&string, buf, j)) {
			done_dom_string(&string);
			return DOM_CODE_ALLOC_ERR;
		}
	}

	if (node->allocated)
		done_dom_string(&node->string);

	set_dom_string(&node->string, string.string, string.length);
	node->allocated = 1;

	return DOM_CODE_OK;

}