fz_tree *fz_tree_insert(fz_context *ctx, fz_tree *node, const char *key, void *value) { if (node && node != &sentinel) { int c = strcmp(key, node->key); if (c < 0) node->left = fz_tree_insert(ctx, node->left, key, value); else node->right = fz_tree_insert(ctx, node->right, key, value); node = fz_tree_skew(node); node = fz_tree_split(node); return node; } else { return fz_tree_new_node(ctx, key, value); } }
static void svg_build_id_map(fz_context *ctx, svg_document *doc, fz_xml *root) { fz_xml *node; char *id_att = fz_xml_att(root, "id"); if (id_att) doc->idmap = fz_tree_insert(ctx, doc->idmap, id_att, root); for (node = fz_xml_down(root); node; node = fz_xml_next(node)) svg_build_id_map(ctx, doc, node); }