X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fcclxmlconfig.c;h=6c5e5a085b8b1b69b18212f9a6d8698087b13716;hp=42ce8960272a5417ac8cff81530b62dee20e136d;hb=5564216deccb49e138f665e223c81fe6c1edd79d;hpb=3fa6bf34c5496f69a63469a3184251d38758c85d diff --git a/src/cclxmlconfig.c b/src/cclxmlconfig.c index 42ce896..6c5e5a0 100644 --- a/src/cclxmlconfig.c +++ b/src/cclxmlconfig.c @@ -1,11 +1,13 @@ /* This file is part of the YAZ toolkit. - * Copyright (C) 1995-2008 Index Data + * Copyright (C) Index Data * See the file LICENSE for details. */ - /** \file cclxmlconfig.c \brief XML configuration for CCL */ +#if HAVE_CONFIG_H +#include +#endif #include #include @@ -15,7 +17,36 @@ #if YAZ_HAVE_XML2 -static int ccl_xml_config_attr(CCL_bibset bibset, const char *default_set, +static int ccl_xml_config_combqual(WRBUF wrbuf, + const xmlNode *ptr, + const char **addinfo) +{ + struct _xmlAttr *attr; + const char *name = 0; + for (attr = ptr->properties; attr; attr = attr->next) + { + if (!xmlStrcmp(attr->name, BAD_CAST "name") && + attr->children && attr->children->type == XML_TEXT_NODE) + name = (const char *) attr->children->content; + else + { + *addinfo = "bad attribute for 'attr'. " + "Expecting 'type', 'value', or 'attrset'"; + return 1; + } + } + if (!name) + { + *addinfo = "missing attribute for 'name' for element 'qual'"; + return 1; + } + wrbuf_printf(wrbuf, "%s", name); + return 0; + + +} + +static int ccl_xml_config_attr(const char *default_set, WRBUF wrbuf, const xmlNode *ptr, const char **addinfo) @@ -60,7 +91,7 @@ static int ccl_xml_config_attr(CCL_bibset bibset, const char *default_set, } static int ccl_xml_config_qual(CCL_bibset bibset, const char *default_set, - WRBUF wrbuf, + WRBUF wrbuf, const xmlNode *ptr, const char **addinfo) { @@ -89,12 +120,19 @@ static int ccl_xml_config_qual(CCL_bibset bibset, const char *default_set, { if (!xmlStrcmp(a_ptr->name, BAD_CAST "attr")) { - int r = ccl_xml_config_attr(bibset, default_set, wrbuf, + int r = ccl_xml_config_attr(default_set, wrbuf, a_ptr, addinfo); if (r) return r; wrbuf_printf(wrbuf, " "); } + else if (!xmlStrcmp(a_ptr->name, BAD_CAST "qual")) + { + int r = ccl_xml_config_combqual(wrbuf, a_ptr, addinfo); + if (r) + return r; + wrbuf_printf(wrbuf, " "); + } else { *addinfo = "bad element: expecting 'attr'"; @@ -143,7 +181,7 @@ int ccl_xml_config_directive(CCL_bibset bibset, const xmlNode *ptr, int ccl_xml_config(CCL_bibset bibset, const xmlNode *ptr, const char **addinfo) { - if (ptr && ptr->type == XML_ELEMENT_NODE && + if (ptr && ptr->type == XML_ELEMENT_NODE && !xmlStrcmp(ptr->name, BAD_CAST "cclmap")) { const xmlNode *c_ptr; @@ -196,7 +234,9 @@ int ccl_xml_config(CCL_bibset bibset, const xmlNode *ptr, const char **addinfo) /* * Local variables: * c-basic-offset: 4 + * c-file-style: "Stroustrup" * indent-tabs-mode: nil * End: * vim: shiftwidth=4 tabstop=8 expandtab */ +