#
# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is the XML::Sablotron::DOM module.
#
# The Initial Developer of the Original Code is Ginger Alliance Ltd.
# Portions created by Ginger Alliance are
# Copyright (C) 1999-2000 Ginger Alliance Ltd.
# All Rights Reserved.
#
# Contributor(s): science+computing ag:
# Nicolas Trebst, n.trebst@science-computing.de
# Anselm Kruis, a.kruis@science-computing.de
#
# Alternatively, the contents of this file may be used under the
# terms of the GNU General Public License Version 2 or later (the
# "GPL"), in which case the provisions of the GPL are applicable
# instead of those above. If you wish to allow use of your
# version of this file only under the terms of the GPL and not to
# allow others to use your version of this file under the MPL,
# indicate your decision by deleting the provisions above and
# replace them with the notice and other provisions required by
# the GPL. If you do not delete the provisions above, a recipient
# may use your version of this file under either the MPL or the
# GPL.
#
#
# ../Sablotron.xs includes this file.
#
MODULE = XML::Sablotron PACKAGE = XML::Sablotron::DOM
PROTOTYPES: ENABLE
BOOT:
SDOM_setDisposeCallback(&__nodeDisposeCallback);
SablotCreateSituation(&__sit);
SV*
parse(sit, uri)
SV* sit
char* uri
CODE:
SDOM_Document doc;
SablotSituation situa = SIT_HANDLE(sit);
DE( situa, SablotParse(situa, uri, &doc) );
RETVAL = __createNode(situa, doc);
OUTPUT:
RETVAL
SV*
parseBuffer(sit, buff)
SV* sit
char* buff
CODE:
SDOM_Document doc;
SablotSituation situa = SIT_HANDLE(sit);
DE( situa, SablotParseBuffer(situa, buff, &doc) );
RETVAL = __createNode(situa, doc);
OUTPUT:
RETVAL
SV*
parseStylesheet(sit, uri)
SV* sit
char* uri
CODE:
SDOM_Document doc;
SablotSituation situa = SIT_HANDLE(sit);
DE( situa, SablotParseStylesheet(situa, uri, &doc) );
RETVAL = __createNode(situa, doc);
OUTPUT:
RETVAL
SV*
parseStylesheetBuffer(sit, buff)
SV* sit
char* buff
CODE:
SDOM_Document doc;
SablotSituation situa = SIT_HANDLE(sit);
DE( situa, SablotParseStylesheetBuffer(situa, buff, &doc) );
RETVAL = __createNode(situa, doc);
OUTPUT:
RETVAL
void
testsit(val)
SV* val
CODE:
# HV* hash;
# GV* gv;
# SV* val;
# hash = gv_stashpv("XML::Sablotron::DOM", 0);
# gv = (GV*)*hv_fetch(hash, "__sit", 5, 0);
# val = GvSV(gv);
#************************************************************
#* NODE
#************************************************************
MODULE = XML::Sablotron PACKAGE = XML::Sablotron::DOM::Node
int
_clearInstanceData(object)
SV* object
CODE:
if ( __useUniqueDOMWrappers() )
{
HV * hash = (HV*)SvRV(object);
SDOM_Node node = NODE_HANDLE(object);
if ( node ) {
/* The Node exists. This should only happen, if _clearInstanceData
gets called manually */
HV * inner = (HV*)SDOM_getNodeInstanceData( node );
if ( inner ) {
__checkNodeInstanceData( node , inner );
/* inner == hash */
if ( SvREFCNT(hash) == 2 ) {
SDOM_setNodeInstanceData( node , NULL);
SvREFCNT_dec(hash);
}
}
/* set the node address to NULL */
sv_setiv( *hv_fetch( hash, "_handle", 7, 0), 0 );
}
RETVAL = ( SvREFCNT(hash) == 1 );
}
else /* not __useUniqueDOMWrappers() */
{
SV* inner = *hv_fetch((HV*)SvRV(object), "_handle", 7, 0);
if (inner && (SvREFCNT(inner) == 2) ) {
/* I'm the last one owning the reference to inner handle */
SvREFCNT_dec(inner);
if ( SvIV(inner) )
SDOM_setNodeInstanceData((SDOM_Node)SvIV(inner), NULL);
RETVAL = 1;
} else {
RETVAL = 0;
}
}
OUTPUT:
RETVAL
int
nodeType(object, ...)
SV* object
ALIAS:
getNodeType = 1
CODE:
SV* sit = SIT_PARAM(2);
SDOM_NodeType type;
SDOM_Node node = NODE_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN(node);
DE( situa, SDOM_getNodeType(situa, node, &type) );
RETVAL = (int)type;
OUTPUT:
RETVAL
char*
getNodeName(object, ...)
SV* object
CODE:
SV* sit = SIT_PARAM(2);
SDOM_char* name;
SDOM_Node node = NODE_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN(node);
DE( situa, SDOM_getNodeName(situa, node, (SDOM_char**)&name) );
RETVAL = (char*)name;
OUTPUT:
RETVAL
CLEANUP:
if (name) SablotFree(name);
void
setNodeName(object, name, ...)
SV* object
char* name
CODE:
SV* sit = SIT_PARAM(3);
SDOM_Node node = NODE_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN(node);
DE( situa, SDOM_setNodeName(situa, node, (SDOM_char*)name) );
char*
getNodeValue(object, ...)
SV* object
CODE:
SV* sit = SIT_PARAM(2);
SDOM_char* value;
SDOM_Node node = NODE_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN(node);
DE( situa, SDOM_getNodeValue(situa, node, (SDOM_char**)&value) );
/* _fix_ the null values, see spec */
RETVAL = (char*)value;
OUTPUT:
RETVAL
CLEANUP:
if (value) SablotFree(value);
void
setNodeValue(object, value, ...)
SV* object
char* value
CODE:
SV* sit = SIT_PARAM(3);
SDOM_Node node = NODE_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN(node);
/* _fix_ check undef values */
DE( situa, SDOM_setNodeValue(situa, node, (SDOM_char*)value) );
SV*
parentNode(object, ...)
SV* object
ALIAS:
getParentNode = 1
CODE:
SV* sit = SIT_PARAM(2);
SDOM_Node parent;
SablotSituation situa = SIT_SMART(sit);
SDOM_Node node = NODE_HANDLE(object);
CN(node);
DE( situa, SDOM_getParentNode(situa, node, &parent) );
if (parent) {
/* _fix_ check memory leaks */
RETVAL = __createNode(situa, parent);
} else {
RETVAL = &PL_sv_undef;
}
OUTPUT:
RETVAL
SV*
firstChild(object, ...)
SV* object
ALIAS:
getFirstChild = 1
CODE:
SV* sit = SIT_PARAM(2);
SablotSituation situa = SIT_SMART(sit);
SDOM_Node node = NODE_HANDLE(object);
SDOM_Node child;
CN(node);
DE( situa, SDOM_getFirstChild(situa, node, &child) );
if (child) {
/* _fix_ check memory leaks */
RETVAL = __createNode(situa, child);
} else {
RETVAL = &PL_sv_undef;
}
OUTPUT:
RETVAL
SV*
lastChild(object, ...)
SV* object
ALIAS:
getLastChild = 1
CODE:
SV* sit = SIT_PARAM(2);
SablotSituation situa = SIT_SMART(sit);
SDOM_Node node = NODE_HANDLE(object);
SDOM_Node child;
CN(node);
DE( situa, SDOM_getLastChild(situa, node, &child) );
if (child) {
/* _fix_ check memory leaks */
RETVAL = __createNode(situa, child);
} else {
RETVAL = &PL_sv_undef;
}
OUTPUT:
RETVAL
SV*
previousSibling(object, ...)
SV* object
ALIAS:
getPreviousSibling = 1
CODE:
SV* sit = SIT_PARAM(2);
SablotSituation situa = SIT_SMART(sit);
SDOM_Node node = NODE_HANDLE(object);
SDOM_Node sibling;
CN(node);
DE( situa, SDOM_getPreviousSibling(situa, node, &sibling) );
if (sibling) {
/* _fix_ check memory leaks */
RETVAL = __createNode(situa, sibling);
} else {
RETVAL = &PL_sv_undef;
}
OUTPUT:
RETVAL
SV*
nextSibling(object, ...)
SV* object
ALIAS:
getNextSibling = 1
CODE:
SV* sit = SIT_PARAM(2);
SablotSituation situa = SIT_SMART(sit);
SDOM_Node node = NODE_HANDLE(object);
SDOM_Node sibling;
CN(node);
DE( situa, SDOM_getNextSibling(situa, node, &sibling) );
if (sibling) {
/* _fix_ check memory leaks */
RETVAL = __createNode(situa, sibling);
} else {
RETVAL = &PL_sv_undef;
}
OUTPUT:
RETVAL
SV*
_childIndex(index, object, ...)
int index
SV* object
CODE:
SV* sit = SIT_PARAM(3);
SablotSituation situa = SIT_SMART(sit);
SDOM_Node node = NODE_HANDLE(object);
SDOM_Node child;
CN(node);
DE( situa, SDOM_getChildNodeIndex(situa, node, index, &child) );
if (child) {
RETVAL = __createNode(situa, child);
} else {
RETVAL = &PL_sv_undef;
}
OUTPUT:
RETVAL
int
_childCount(object, ...)
SV* object
ALIAS:
hasChildNodes = 1
CODE:
int ret;
SV* sit = SIT_PARAM(2);
SablotSituation situa = SIT_SMART(sit);
SDOM_Node node = NODE_HANDLE(object);
CN(node);
DE( situa, SDOM_getChildNodeCount(situa, node, &ret) );
RETVAL = ret;
OUTPUT:
RETVAL
AV*
childNodesArr(object, ...)
SV* object
ALIAS:
getChildNodes = 1
CODE:
SDOM_Node node = NODE_HANDLE(object);
SDOM_Node foo;
SV* sit = SIT_PARAM(2);
SablotSituation situa = SIT_SMART(sit);
CN( node );
RETVAL = (AV*)sv_2mortal( (SV*)newAV() );
DE( situa, SDOM_getFirstChild(situa, node, &foo) );
while ( foo ) {
av_push(RETVAL, __createNode(situa, foo));
DE( situa, SDOM_getNextSibling(situa, foo, &foo) );
}
OUTPUT:
RETVAL
SV*
ownerDocument(object, ...)
SV* object
ALIAS:
getOwnerDocument = 1
CODE:
SV* sit = SIT_PARAM(2);
SablotSituation situa = SIT_SMART(sit);
SDOM_Node node = NODE_HANDLE(object);
SDOM_Document doc;
CN(node);
DE( situa, SDOM_getOwnerDocument(situa, node, &doc) );
if (doc) {
/* _fix_ check memory leaks */
/* _fix_ check if it works at all (create node etc.) */
RETVAL = __createNode(situa, doc);
} else {
RETVAL = &PL_sv_undef;
}
OUTPUT:
RETVAL
void
_insertBefore(object, child, ref, ...)
SV* object
SV* child
SV* ref
CODE:
SV* sit = SIT_PARAM(4);
SDOM_Node refnode;
SDOM_Node node = NODE_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN(node);
refnode = (ref == &PL_sv_undef) ? NULL : NODE_HANDLE(ref);
DE( situa, SDOM_insertBefore(situa, node,
NODE_HANDLE(child), refnode) );
void
_appendChild(object, child, ...)
SV* object
SV* child
CODE:
SV* sit = SIT_PARAM(3);
SDOM_Node node = NODE_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN(node);
DE( situa, SDOM_appendChild(situa, node, NODE_HANDLE(child)) );
void
_removeChild(object, child, ...)
SV* object
SV* child
CODE:
SV* sit = SIT_PARAM(3);
SDOM_Node node = NODE_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN(node);
DE( situa, SDOM_removeChild(situa, node, NODE_HANDLE(child)) );
void
_replaceChild(object, child, old, ...)
SV* object
SV* child
SV* old
CODE:
SV* sit = SIT_PARAM(4);
SDOM_Node oldnode;
SDOM_Node node = NODE_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN(node);
if (old == &PL_sv_undef)
croak ("XML::Sablotron::DOM(Code=-2, Name='NODE_REQUIRED'");
oldnode = NODE_HANDLE(old);
DE( situa, SDOM_replaceChild(situa, node,
NODE_HANDLE(child), oldnode) );
SV*
cloneNode(object, deep, ...)
SV* object
int deep
CODE:
SV* sit = SIT_PARAM(3);
SDOM_Node cloned;
SDOM_Node nodehandle = NODE_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN(nodehandle);
DE( situa, SDOM_cloneNode(situa, nodehandle, deep, &cloned) );
RETVAL = __createNode(situa, cloned);
OUTPUT:
RETVAL
char*
namespaceURI(object, ...)
SV* object
CODE:
SV* sit = SIT_PARAM(2);
SDOM_char* name;
SDOM_Node node = NODE_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN(node);
DE( situa, SDOM_getNodeNSUri(situa, node, (SDOM_char**)&name) );
RETVAL = (char*)name;
OUTPUT:
RETVAL
CLEANUP:
if (name) SablotFree(name);
char*
localName(object, ...)
SV* object
CODE:
SV* sit = SIT_PARAM(2);
SDOM_char* name;
SDOM_Node node = NODE_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN(node);
DE( situa, SDOM_getNodeLocalName(situa, node, (SDOM_char**)&name) );
RETVAL = (char*)name;
OUTPUT:
RETVAL
CLEANUP:
if (name) SablotFree(name);
char*
getPrefix(object, ...)
SV* object
CODE:
SV* sit = SIT_PARAM(2);
SDOM_char* prefix;
SDOM_Node node = NODE_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN(node);
DE( situa, SDOM_getNodePrefix(situa, node, (SDOM_char**)&prefix) );
RETVAL = (char*)prefix;
OUTPUT:
RETVAL
CLEANUP:
if (prefix) SablotFree(prefix);
void
setPrefix(object, prefix, ...)
SV* object
char* prefix
CODE:
char* name;
char* localname;
SV* sit = SIT_PARAM(3);
SDOM_Node node = NODE_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN(node);
DE( situa, SDOM_getNodeLocalName(situa, node, (SDOM_char**)&localname) );
if (prefix && strcmp(prefix, "") ) {
name = strcat(strcat(prefix, ":"),localname);
}
else {
name = localname;
};
DE( situa, SDOM_setNodeName(situa, node, (SDOM_char*)name) );
CLEANUP:
if (localname) SablotFree(localname);
AV*
xql(object, expr, ...)
SV* object
char* expr
CODE:
SV* sit = SIT_PARAM(3);
int i;
int len;
SDOM_NodeList list;
SDOM_Document doc;
SablotSituation situa = SIT_SMART(sit);
SDOM_Node node = NODE_HANDLE(object);
CN(node);
SDOM_getOwnerDocument(situa, node, &doc);
SablotLockDocument(situa, doc ? doc : node); /* _check me_ */
DE( situa, SDOM_xql(situa, expr, node, &list) );
RETVAL = (AV*)sv_2mortal((SV*)newAV());
SDOM_getNodeListLength(situa, list, &len);
for (i = 0; i < len; i++) {
SDOM_Node node;
SDOM_getNodeListItem(situa, list, i, &node);
av_push(RETVAL, __createNode(situa, node));
}
SDOM_disposeNodeList(situa, list);
OUTPUT:
RETVAL
int
compareNodes(object, object2, ...)
SV* object
SV* object2
CODE:
SV* sit = SIT_PARAM(3);
int ret;
SDOM_Node node = NODE_HANDLE(object);
SDOM_Node node2 = NODE_HANDLE(object2);
SablotSituation situa = SIT_SMART(sit);
CN(node);
CN(node2);
DE( situa, SDOM_compareNodes(situa, node, node2, &ret) );
RETVAL = ret;
OUTPUT:
RETVAL
AV*
xql_ns(object, expr, nsmap, ...)
SV* object
char* expr
SV* nsmap
CODE:
SV* sit = SIT_PARAM(4);
int i;
int len;
char** nsarr;
int nsnum;
HV* maph;
SDOM_NodeList list;
SDOM_Document doc;
SablotSituation situa = SIT_SMART(sit);
SDOM_Node node = NODE_HANDLE(object);
CN(node);
SDOM_getOwnerDocument(situa, node, &doc);
SablotLockDocument(situa, doc ? doc : node); /* _check me_ */
/* create nsarr */
if (SvOK(nsmap) && SvTYPE(SvRV(nsmap)) == SVt_PVHV) {
int mapsize = 1;
HE * he;
maph = (HV*)SvRV(nsmap);
nsarr = malloc((10*2*mapsize + 1) * sizeof(char*));
nsnum = 0;
i = 0;
hv_iterinit(maph);
while (he = hv_iternext(maph)) {
int l;
if (++nsnum > 10 * mapsize) {
mapsize++;
nsarr = realloc(nsarr, (10*2*mapsize + 1) * sizeof(char*));
}
nsarr[i++] = (char*)HePV(he, l);
nsarr[i++] = (char*)SvPV(HeVAL(he), l);
}
nsarr[nsnum * 2] = NULL;
} else {
croak("The third parameter of xql_ns must be a HASHREF");
}
DE( situa, SDOM_xql_ns(situa, expr, node, nsarr, &list) );
free(nsarr);
/* read the result */
RETVAL = (AV*)sv_2mortal((SV*)newAV());
SDOM_getNodeListLength(situa, list, &len);
for (i = 0; i < len; i++) {
SDOM_Node foo;
SDOM_Node node;
SDOM_getNodeListItem(situa, list, i, &node);
av_push(RETVAL, __createNode(situa, node));
}
SDOM_disposeNodeList(situa, list);
OUTPUT:
RETVAL
#************************************************************
#* DOCUMENT *
#************************************************************
MODULE = XML::Sablotron PACKAGE = XML::Sablotron::DOM::Document
SV*
_new(object, sit)
SV* object
SV* sit
CODE:
SDOM_Document doc;
SablotSituation situa = SIT_SMART(sit);
SablotCreateDocument(situa, &doc);
RETVAL = __createNode(situa, doc);
OUTPUT:
RETVAL
void
_freeDocument(object, ...)
SV* object
CODE:
SV* sit = SIT_PARAM(2);
SablotSituation situa = SIT_SMART(sit);
SDOM_Document doc = DOC_HANDLE(object);
SablotDestroyDocument(situa, doc);
char*
toString(object, ...)
SV* object
CODE:
SV* sit = SIT_PARAM(2);
char* buff;
SDOM_Document doc = DOC_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN( doc );
SablotLockDocument(situa, doc);
DE( situa, SDOM_docToString(situa, doc, (SDOM_char**)&buff) );
RETVAL = buff;
OUTPUT:
RETVAL
CLEANUP:
if (buff) SablotFree(buff);
SV*
cloneNode(object, node, deep, ...)
SV* object
SV* node
int deep
ALIAS:
importNode = 1
CODE:
SV* sit = SIT_PARAM(4);
SDOM_Node cloned;
SDOM_Document doc = DOC_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN(doc);
DE( situa, SDOM_cloneForeignNode(situa, doc,
NODE_HANDLE(node), deep, &cloned) );
RETVAL = __createNode(situa, cloned);
OUTPUT:
RETVAL
SV*
documentElement(object, ...)
SV* object
CODE:
SV* sit = SIT_PARAM(2);
SDOM_Node handle;
SDOM_NodeType type;
SDOM_Document doc = DOC_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN(doc);
RETVAL = &PL_sv_undef;
DE( situa, SDOM_getFirstChild(situa, doc, &handle) );
while ( handle ) {
DE( situa, SDOM_getNodeType(situa, handle, &type) );
if ( type == SDOM_ELEMENT_NODE ) {
RETVAL = __createNode(situa, handle);
break;
};
DE( situa, SDOM_getNextSibling(situa, handle, &handle) );
};
OUTPUT:
RETVAL
SV*
createElement(object, name, ...)
SV* object
char* name
CODE:
SV* sit = SIT_PARAM(3);
SDOM_Node handle;
SDOM_Document doc = DOC_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN(doc);
DE( situa, SDOM_createElement(situa, doc, &handle, name) );
RETVAL = __createNode(situa, handle);
OUTPUT:
RETVAL
SV*
createAttribute(object, name, ...)
SV* object
char* name
CODE:
SV* sit = SIT_PARAM(3);
SDOM_Node handle;
SDOM_Document doc = DOC_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN(doc);
DE( situa, SDOM_createAttribute(situa, doc, &handle, name) );
RETVAL = __createNode(situa, handle);
OUTPUT:
RETVAL
SV*
createTextNode(object, value, ...)
SV* object
char* value
CODE:
SV* sit = SIT_PARAM(3);
SDOM_Node handle;
SDOM_Document doc = DOC_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN(doc);
DE( situa, SDOM_createTextNode(situa, doc, &handle, value) );
RETVAL = __createNode(situa, handle);
OUTPUT:
RETVAL
SV*
createCDATASection(object, value, ...)
SV* object
char* value
CODE:
SV* sit = SIT_PARAM(3);
SDOM_Node handle;
SDOM_Document doc = DOC_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN(doc);
DE( situa, SDOM_createCDATASection(situa, doc, &handle, value) );
RETVAL = __createNode(situa, handle);
OUTPUT:
RETVAL
SV*
createEntityReference(object, ...)
SV* object
CODE:
SV* sit = SIT_PARAM(2);
SDOM_Node handle=NULL;
SDOM_Document doc = DOC_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN(doc);
/* _fix_ put the API call here */
RETVAL = __createNode(situa, handle);
OUTPUT:
RETVAL
SV*
createEntity(object, ...)
SV* object
CODE:
SV* sit = SIT_PARAM(2);
SDOM_Node handle=NULL;
SDOM_Document doc = DOC_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN(doc);
/* _fix_ put the API call here */
RETVAL = __createNode(situa, handle);
OUTPUT:
RETVAL
SV*
createProcessingInstruction(object, target, data, ...)
SV* object
char* target
char* data
CODE:
SV* sit = SIT_PARAM(4);
SDOM_Node handle;
SDOM_Document doc = DOC_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN(doc);
DE( situa,
SDOM_createProcessingInstruction(situa, doc, &handle, target, data) );
RETVAL = __createNode(situa, handle);
OUTPUT:
RETVAL
SV*
createComment(object, value, ...)
SV* object
char* value
CODE:
SV* sit = SIT_PARAM(3);
SDOM_Node handle;
SDOM_Document doc = DOC_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN(doc);
DE( situa, SDOM_createComment(situa, doc, &handle, value) );
RETVAL = __createNode(situa, handle);
OUTPUT:
RETVAL
SV*
createDocumentType(object, ...)
SV* object
CODE:
SV* sit = SIT_PARAM(2);
SDOM_Node handle=NULL;
SDOM_Document doc = DOC_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN(doc);
/* _fix_ put the API call here */
RETVAL = __createNode(situa, handle);
OUTPUT:
RETVAL
SV*
createDocumentFragment(object, ...)
SV* object
CODE:
SV* sit = SIT_PARAM(2);
SDOM_Node handle=NULL;
SDOM_Document doc = DOC_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN(doc);
/* _fix_ put the API call here */
RETVAL = __createNode(situa, handle);
OUTPUT:
RETVAL
SV*
createNotation(object, ...)
SV* object
CODE:
SV* sit = SIT_PARAM(2);
SDOM_Node handle=NULL;
SDOM_Document doc = DOC_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN(doc);
/* _fix_ put the API call here */
RETVAL = __createNode(situa, handle);
OUTPUT:
RETVAL
SV*
createElementNS(object, namespaceURI, qname, ...)
SV* object
char* namespaceURI
char* qname
CODE:
SV* sit = SIT_PARAM(4);
SDOM_Node handle;
SDOM_Document doc = DOC_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN(doc);
DE( situa, SDOM_createElementNS(situa, doc, &handle,
(SDOM_char*)namespaceURI,
(SDOM_char*)qname) );
RETVAL = __createNode(situa, handle);
OUTPUT:
RETVAL
SV*
createAttributeNS(object, namespaceURI, qname, ...)
SV* object
char* namespaceURI
char* qname
CODE:
SV* sit = SIT_PARAM(4);
SDOM_Node handle;
SDOM_Document doc = DOC_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN(doc);
DE( situa, SDOM_createAttributeNS(situa, doc, &handle,
(SDOM_char*)namespaceURI,
(SDOM_char*)qname) );
RETVAL = __createNode(situa, handle);
OUTPUT:
RETVAL
void
lockDocument(object, ...)
SV* object
CODE:
SV* sit = SIT_PARAM(2);
SDOM_Document doc = DOC_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN( doc );
DE( situa, SablotLockDocument(situa, doc) );
#************************************************************
#* ELEMENT *
#************************************************************
MODULE = XML::Sablotron PACKAGE = XML::Sablotron::DOM::Element
char*
getAttribute(object, name, ...)
SV* object
char* name
CODE:
SV* sit = SIT_PARAM(3);
SDOM_char* value;
SDOM_Node node = NODE_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN( node );
/* _fix_ check null values */
DE( situa, SDOM_getAttribute(situa, node,
(SDOM_char*)name, (SDOM_char**)&value) );
RETVAL = (char*)value;
OUTPUT:
RETVAL
CLEANUP:
if (value) SablotFree(value);
void
setAttribute(object, name, value, ...)
SV* object
char* name
char* value
CODE:
SV* sit = SIT_PARAM(4);
SDOM_Node node = NODE_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN( node );
/* _fix_ check null values */
DE( situa, SDOM_setAttribute(situa, node,
(SDOM_char*)name, (SDOM_char*)value) );
void
removeAttribute(object, name, ...)
SV* object
char* name
CODE:
SV* sit = SIT_PARAM(3);
SDOM_Node node = NODE_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN( node );
/* _fix_ check null values */
DE( situa, SDOM_removeAttribute(situa, node, (SDOM_char*)name) );
SV*
getAttributeNode(object, name, ...)
SV* object
char* name
CODE:
SV* sit = SIT_PARAM(3);
SablotSituation situa = SIT_SMART(sit);
SDOM_Node node = NODE_HANDLE(object);
SDOM_Node att;
CN(node);
DE( situa, SDOM_getAttributeNode(situa, node, (SDOM_char*)name, &att) );
if (att) {
RETVAL = __createNode(situa, att);
} else {
RETVAL = &PL_sv_undef;
}
OUTPUT:
RETVAL
SV*
setAttributeNode(object, att, ...)
SV* object
SV* att
CODE:
SV* sit = SIT_PARAM(3);
SablotSituation situa = SIT_SMART(sit);
SDOM_Node node = NODE_HANDLE(object);
SDOM_Node attnode = NODE_HANDLE(att);
SDOM_Node replaced;
CN(node);
CN(attnode);
DE( situa, SDOM_setAttributeNode(situa, node, attnode, &replaced) );
if (replaced) {
RETVAL = __createNode(situa, replaced);
} else {
RETVAL = &PL_sv_undef;
};
OUTPUT:
RETVAL
SV*
removeAttributeNode(object, att, ...)
SV* object
SV* att
CODE:
SV* sit = SIT_PARAM(3);
SablotSituation situa = SIT_SMART(sit);
SDOM_Node node = NODE_HANDLE(object);
SDOM_Node attnode = NODE_HANDLE(att);
SDOM_Node removed;
CN(node);
CN(attnode);
DE( situa, SDOM_removeAttributeNode(situa, node, attnode, &removed) );
RETVAL = __createNode(situa, removed);
OUTPUT:
RETVAL
char*
getAttributeNS(object, namespaceURI, localName, ...)
SV* object
char* namespaceURI
char* localName
CODE:
SV* sit = SIT_PARAM(4);
SDOM_char* value;
SDOM_Node node = NODE_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN( node );
DE( situa, SDOM_getAttributeNS(situa, node,
(SDOM_char*)namespaceURI,
(SDOM_char*)localName, &value) );
RETVAL = (char*)value;
OUTPUT:
RETVAL
void
setAttributeNS(object, namespaceURI, qName, value, ...)
SV* object
char* namespaceURI
char* qName
char* value
CODE:
SV* sit = SIT_PARAM(5);
SDOM_Node node = NODE_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN( node );
DE( situa, SDOM_setAttributeNS(situa, node,
(SDOM_char*)namespaceURI,
(SDOM_char*)qName,
(SDOM_char*)value) );
void
removeAttributeNS(object, namespaceURI, localName, ...)
SV* object
char* namespaceURI
char* localName
CODE:
SV* sit = SIT_PARAM(4);
SDOM_Node node = NODE_HANDLE(object);
SDOM_Node attnode;
SablotSituation situa = SIT_SMART(sit);
CN( node );
DE( situa, SDOM_getAttributeNodeNS(situa, node,
(SDOM_char*)namespaceURI,
(SDOM_char*)localName, &attnode) );
if (attnode) {
DE( situa, SDOM_removeAttributeNode(situa, node, attnode, &attnode) );
};
SV*
getAttributeNodeNS(object, namespaceURI, localName, ...)
SV* object
char* namespaceURI
char* localName
CODE:
SV* sit = SIT_PARAM(4);
SDOM_Node node = NODE_HANDLE(object);
SDOM_Node attnode;
SablotSituation situa = SIT_SMART(sit);
CN( node );
DE( situa, SDOM_getAttributeNodeNS(situa, node,
(SDOM_char*)namespaceURI,
(SDOM_char*)localName, &attnode) );
if (attnode) {
RETVAL = __createNode(situa, attnode);
} else {
RETVAL = &PL_sv_undef;
};
OUTPUT:
RETVAL
SV*
setAttributeNodeNS(object, att, ...)
SV* object
SV* att
CODE:
SV* sit = SIT_PARAM(3);
SablotSituation situa = SIT_SMART(sit);
SDOM_Node node = NODE_HANDLE(object);
SDOM_Node attnode = NODE_HANDLE(att);
SDOM_Node replaced;
CN(node);
CN(attnode);
DE( situa, SDOM_setAttributeNodeNS(situa, node, attnode, &replaced) );
if (replaced) {
RETVAL = __createNode(situa, replaced);
} else {
RETVAL = &PL_sv_undef;
};
OUTPUT:
RETVAL
int
hasAttribute(object, name, ...)
SV* object
char* name
CODE:
SV* sit = SIT_PARAM(3);
SablotSituation situa = SIT_SMART(sit);
SDOM_Node node = NODE_HANDLE(object);
SDOM_Node att;
CN(node);
DE( situa, SDOM_getAttributeNode(situa, node, (SDOM_char*)name, &att) );
if (att) {
RETVAL = 1;
} else {
RETVAL = 0;
};
OUTPUT:
RETVAL
int
hasAttributeNS(object, namespaceURI, localName, ...)
SV* object
char* namespaceURI
char* localName
CODE:
SV* sit = SIT_PARAM(4);
SablotSituation situa = SIT_SMART(sit);
SDOM_Node node = NODE_HANDLE(object);
SDOM_Node att;
CN(node);
DE( situa, SDOM_getAttributeNodeNS(situa, node,
(SDOM_char*)namespaceURI,
(SDOM_char*)localName,
&att) );
if (att) {
RETVAL = 1;
} else {
RETVAL = 0;
};
OUTPUT:
RETVAL
AV*
_getAttributes(object, ...)
SV* object
CODE:
SV* sit = SIT_PARAM(2);
int i;
int len;
SDOM_NodeList list;
SDOM_Node node = NODE_HANDLE(object);
SablotSituation situa = SIT_SMART(sit);
CN( node );
DE( situa, SDOM_getAttributeList(situa, node, &list) );
RETVAL = (AV*)sv_2mortal((SV*)newAV());
SDOM_getNodeListLength(situa, list, &len);
for (i = 0; i < len; i++) {
SDOM_Node node;
SDOM_getNodeListItem(situa, list, i, &node);
av_push(RETVAL, __createNode(situa, node));
}
SDOM_disposeNodeList(situa, list);
OUTPUT:
RETVAL
SV*
_attrIndex(index, object, ...)
int index
SV* object
CODE:
SV* sit = SIT_PARAM(3);
SablotSituation situa = SIT_SMART(sit);
SDOM_Node node = NODE_HANDLE(object);
SDOM_Node attr;
CN(node);
DE( situa, SDOM_getAttributeNodeIndex(situa, node, index, &attr) );
if (attr) {
RETVAL = __createNode(situa, attr);
} else {
RETVAL = &PL_sv_undef;
}
OUTPUT:
RETVAL
int
_attrCount(object, ...)
SV* object
ALIAS:
hasAttributes = 1
CODE:
int ret;
SV* sit = SIT_PARAM(2);
SablotSituation situa = SIT_SMART(sit);
SDOM_Node node = NODE_HANDLE(object);
CN(node);
DE( situa, SDOM_getAttributeNodeCount(situa, node, &ret) );
RETVAL = ret;
OUTPUT:
RETVAL
char*
toString(object, ...)
SV* object
CODE:
SV* sit = SIT_PARAM(2);
char* buff;
SDOM_Document doc;
SablotSituation situa;
SDOM_Node node = NODE_HANDLE(object);
CN( node );
situa = SIT_SMART(sit);
SDOM_getOwnerDocument(situa, node, &doc);
CN( doc );
SablotLockDocument(situa, doc);
DE( situa, SDOM_nodeToString(situa, doc, node, (SDOM_char**)&buff) );
RETVAL = buff;
OUTPUT:
RETVAL
CLEANUP:
if (buff) SablotFree(buff);
#************************************************************
#* ATTRIBUTE *
#************************************************************
MODULE = XML::Sablotron PACKAGE = XML::Sablotron::DOM::Attribute
SV*
ownerElement(object, ...)
SV* object
CODE:
SV* sit = SIT_PARAM(2);
SDOM_Node parent;
SablotSituation situa = SIT_SMART(sit);
SDOM_Node node = NODE_HANDLE(object);
CN(node);
DE( situa, SDOM_getAttributeElement(situa, node, &parent) );
if (parent) {
/* _fix_ check memory leaks */
RETVAL = __createNode(situa, parent);
} else {
RETVAL = &PL_sv_undef;
}
OUTPUT:
RETVAL