Version 5.8.0
[yaz-moved-to-github.git] / src / cclxmlconfig.c
index 680441e..6c5e5a0 100644 (file)
@@ -1,11 +1,13 @@
 /* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2009 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 <config.h>
+#endif
 
 #include <stdio.h>
 #include <string.h>
 
 #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
  */
+