Annotation of win32/gnome/gdome2-x.x.x/libgdome/xpath/gdome-xpath-xpnsresolv.c, revision 1.1
1.1 ! paf 1: /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 2; tab-width: 2 -*- */
! 2: /* gdome-xpath-xpnsresolv.c
! 3: *
! 4: * CopyRight (C) 2002 T.J. Mather <tjmather@tjmather.com>
! 5: *
! 6: * This library is free software; you can redistribute it and/or
! 7: * modify it under the terms of the GNU Lesser General Public
! 8: * License as published by the Free Software Foundation; either
! 9: * version 2.1 of the License, or (at your option) any later version.
! 10: *
! 11: * This library is distributed in the hope that it will be useful,
! 12: * but WITHOUT ANY WARRANTY; without even the implied warranty of
! 13: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
! 14: * Lesser General Public License for more details.
! 15: *
! 16: * You should have received a copy of the GNU Lesser General Public
! 17: * License along with this library; if not, write to the Free Software
! 18: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
! 19: */
! 20:
! 21: #ifdef HAVE_CONFIG_H
! 22: # include <config.h>
! 23: #endif
! 24: #include <stdlib.h>
! 25: #include <string.h>
! 26: #include <libxml/tree.h>
! 27: #include <libxml/xpath.h>
! 28: #include "gdome.h"
! 29: #include "gdome-xml-node.h"
! 30: #include "gdome-xpath.h"
! 31: #include "gdome-xpath-xpnsresolv.h"
! 32:
! 33: const GdomeXPathNSResolverVtab gdome_xpath_xpnsresolv_vtab =
! 34: {
! 35: gdome_xpath_xpnsresolv_ref,
! 36: gdome_xpath_xpnsresolv_unref,
! 37: gdome_xpath_xpnsresolv_lookupNamespaceURI
! 38: };
! 39:
! 40: GdomeXPathNSResolver *
! 41: gdome_xpath_xpnsresolv_mkref( GdomeNode *nodeResolver )
! 42: {
! 43: Gdome_xml_Node *priv = (Gdome_xml_Node *)nodeResolver;
! 44: Gdome_xpath_XPathNSResolver *resolv = g_new (Gdome_xpath_XPathNSResolver, 1);
! 45: GdomeException exc;
! 46:
! 47: resolv->vtab = &gdome_xpath_xpnsresolv_vtab;
! 48: resolv->n = priv->n;
! 49: resolv->refcnt = 1;
! 50: resolv->gnode = nodeResolver;
! 51: gdome_xml_n_ref ( nodeResolver, &exc);
! 52: return (GdomeXPathNSResolver *)resolv;
! 53: }
! 54:
! 55: /**
! 56: * gdome_xpath_xpnsresolv_ref:
! 57: * @self: XPathNSResolver Object ref
! 58: * @exc: Exception Object ref
! 59: *
! 60: * Increase the reference count of the XPathNSResolver structure.
! 61: */
! 62: void
! 63: gdome_xpath_xpnsresolv_ref (GdomeXPathNSResolver *self, GdomeException *exc)
! 64: {
! 65: Gdome_xpath_XPathNSResolver *priv = (Gdome_xpath_XPathNSResolver *)self;
! 66:
! 67: g_return_if_fail (self != NULL);
! 68: g_return_if_fail (exc != NULL);
! 69:
! 70: priv->refcnt++;
! 71: }
! 72:
! 73: /**
! 74: * gdome_xpath_xpnsresolv_unref:
! 75: * @self: XPathNSResolver Object ref
! 76: * @exc: Exception Object ref
! 77: *
! 78: * Decrease the reference count of the XPathNSResolver. Free the structure
! 79: * if XPathNSResolver will have zero reference.
! 80: */
! 81: void
! 82: gdome_xpath_xpnsresolv_unref (GdomeXPathNSResolver *self, GdomeException *exc)
! 83: {
! 84: Gdome_xpath_XPathNSResolver *priv = (Gdome_xpath_XPathNSResolver *)self;
! 85:
! 86: g_return_if_fail (self != NULL);
! 87: g_return_if_fail (exc != NULL);
! 88:
! 89: g_assert(priv->refcnt > 0);
! 90: priv->refcnt--;
! 91:
! 92: if (priv->refcnt == 0) {
! 93: gdome_xml_n_unref (priv->gnode, exc);
! 94: g_free (self);
! 95: }
! 96: }
! 97:
! 98: /**
! 99: * gdome_xpath_xpnsresolv_lookupNamespaceURI:
! 100: * @self: GdomeXPathNSResolver Object ref
! 101: * @prefix: The prefix of the namespace to look for
! 102: * @exc: Exception Object ref
! 103: *
! 104: * Look up the namespace URI associated to the given namespace prefix. The
! 105: * XPath evaluator must never call this with a null or empty argument, because
! 106: * the result of doing this is undefined.
! 107: * Returns: namespace URI
! 108: */
! 109: GdomeDOMString *
! 110: gdome_xpath_xpnsresolv_lookupNamespaceURI( GdomeXPathNSResolver *self, GdomeDOMString *prefix, GdomeException *exc)
! 111: {
! 112: xmlNsPtr ns = NULL;
! 113: Gdome_xpath_XPathNSResolver *priv = (Gdome_xpath_XPathNSResolver *)self;
! 114:
! 115: ns = xmlSearchNs(priv->n->doc, priv->n, prefix->str);
! 116: if (ns != NULL) {
! 117: return gdome_str_mkref_xml (ns->href);
! 118: } else {
! 119: return NULL;
! 120: }
! 121: }
E-mail: