X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=data1%2Fd1_utils.c;fp=data1%2Fd1_utils.c;h=396d1dbd533d1efcca260f048b324cacfbdb01b5;hb=c23dcf8e79596d2ae1fc05596e1d60ed318962e7;hp=0000000000000000000000000000000000000000;hpb=d1e1a6a2a574e8019e700abb9d8a9d03ba41aab5;p=idzebra-moved-to-github.git diff --git a/data1/d1_utils.c b/data1/d1_utils.c new file mode 100644 index 0000000..396d1db --- /dev/null +++ b/data1/d1_utils.c @@ -0,0 +1,125 @@ +/* $Id: d1_utils.c,v 1.1 2006-07-06 12:42:21 marc Exp $ + Copyright (C) 1995-2006 + Index Data ApS + +This file is part of the Zebra server. + +Zebra is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +Zebra is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with Zebra; see the file LICENSE.zebra. If not, write to the +Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA +02111-1307, USA. +*/ + +#include +#include +#include + +#include +#include + + +void data1_remove_node (data1_handle dh, data1_node *n) +{ + fprintf (stdout, "REMOVE tag %s \n", n->u.tag.tag); + /* n is first childen */ + if(n->parent->child == n){ + n->parent->child = n->next; + + /* n is the only child */ + if(! n->next){ + n->parent->last_child = 0; + } + } + /* n is one of the following childrens */ + else { + data1_node * before; + + /* need to find sibling before me */ + before = n->parent->child; + while (before->next != n) + before = before->next; + + before->next = n->next; + + /* n is last child of many */ + if ( n->parent->last_child == n){ + n->parent->last_child = before; + } + } + /* break pointers to root, parent and following siblings */ + n->parent = 0; + n->root = 0; + n->next = 0; +} + +void data1_remove_idzebra_subtree (data1_handle dh, data1_node *n) +{ + switch (n->which) + { + /* + case DATA1N_root: + break; + */ + case DATA1N_tag: + if (!strcmp(n->u.tag.tag, "idzebra")){ + if (n->u.tag.attributes){ + data1_xattr *xattr = n->u.tag.attributes; + + for (; xattr; xattr = xattr->next){ + if (!strcmp(xattr->name, "xmlns") + & !strcmp(xattr->value, + "http://www.indexdata.dk/zebra/")) + data1_remove_node (dh, n); + } + } + } + + break; + /* + case DATA1N_data: + break; + case DATA1N_comment: + break; + case DATA1N_preprocess: + break; + case DATA1N_variant: + break; + */ + default: + break; + } + if (n->child) + data1_remove_idzebra_subtree (dh, n->child); + if (n->next) + data1_remove_idzebra_subtree (dh, n->next); + /* + else + { + if (n->parent && n->parent->last_child != n) + fprintf(out, "%*sWARNING: last_child=%p != %p\n", level, "", + n->parent->last_child, n); + } + */ + +} + + + +/* + * Local variables: + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + * vim: shiftwidth=4 tabstop=8 expandtab + */ +