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; }
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; }
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; }