xml_namespace_table.cpp [plain text]
#include "xml_namespace_table.h"
#include "dom_nodeimpl.h"
namespace DOM
{
QDict<XmlNamespaceEntry>* XmlNamespaceTable::gNamespaceTable = 0;
int XmlNamespaceTable::getNamespaceID(const DOMString& uri, bool readonly)
{
if (uri == XHTML_NAMESPACE)
return xhtmlNamespace;
if (uri.isEmpty())
return noNamespace;
QString uriStr = uri.string();
if (!gNamespaceTable) {
gNamespaceTable = new QDict<XmlNamespaceEntry>;
gNamespaceTable->insert(XHTML_NAMESPACE, new XmlNamespaceEntry(xhtmlNamespace, XHTML_NAMESPACE));
}
XmlNamespaceEntry* ns = gNamespaceTable->find(uriStr);
if (ns) return ns->m_id;
if (!readonly) {
static int id = xhtmlNamespace+1;
ns = new XmlNamespaceEntry(id++, uri);
gNamespaceTable->insert(uriStr, ns);
return ns->m_id;
}
return -1;
}
DOMString XmlNamespaceTable::getNamespaceURI(int id)
{
if (id == noNamespace || id == anyNamespace || !gNamespaceTable)
return "";
if (!gNamespaceTable) {
gNamespaceTable = new QDict<XmlNamespaceEntry>;
gNamespaceTable->insert(XHTML_NAMESPACE, new XmlNamespaceEntry(xhtmlNamespace, XHTML_NAMESPACE));
}
QDictIterator<XmlNamespaceEntry> it(*gNamespaceTable);
for (unsigned i = 0; i < it.count(); i++, ++it) {
if (it.current()->m_id == id)
return it.current()->m_uri;
}
return "";
}
}