summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 947e1d5)
raw | patch | inline | side by side (parent: 947e1d5)
author | ishmal <ishmal@users.sourceforge.net> | |
Sun, 27 Aug 2006 08:57:12 +0000 (08:57 +0000) | ||
committer | ishmal <ishmal@users.sourceforge.net> | |
Sun, 27 Aug 2006 08:57:12 +0000 (08:57 +0000) |
src/dom/jsbind.cpp | [new file with mode: 0644] | patch | blob |
src/dom/jsengine.cpp | [new file with mode: 0644] | patch | blob |
src/dom/jsengine.h | [new file with mode: 0644] | patch | blob |
diff --git a/src/dom/jsbind.cpp b/src/dom/jsbind.cpp
--- /dev/null
+++ b/src/dom/jsbind.cpp
@@ -0,0 +1,1171 @@
+ /**
+ * Phoebe DOM Implementation.
+ *
+ * This is a C++ approximation of the W3C DOM model, which follows
+ * fairly closely the specifications in the various .idl files, copies of
+ * which are provided for reference. Most important is this one:
+ *
+ * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html
+ *
+ * Authors:
+ * Bob Jamison
+ *
+ * Copyright (C) 2006 Bob Jamison
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+ #include "domimpl.h"
+ #include "jsengine.h"
+
+ namespace org
+ {
+ namespace w3c
+ {
+ namespace dom
+ {
+
+ /**
+ * To ensure that we at least attempt to bind ECMAScript to DOM as closely as
+ * possible, we will include the entire Appendix H of the XML Level 3 Core spec:
+ * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/ecma-script-binding.html
+ */
+
+/**
+ * Appendix H: ECMAScript Language Binding
+ *
+ * This appendix contains the complete ECMAScript [ECMAScript] binding for the
+ * Level 3 Document Object Model Core definitions. H.1 ECMAScript Binding
+ * Extension
+ *
+ *
+ * This section defines the DOMImplementationRegistry object, discussed in
+ * Bootstrapping, for ECMAScript.
+ *
+ *
+ * Objects that implements the DOMImplementationRegistry interface
+ *
+ * DOMImplementationRegistry is a global variable which has the following functions:
+ *
+ * getDOMImplementation(features)
+ * This method returns the first registered object that implements the
+ * DOMImplementation interface and has the desired features, or null if none is
+ * found. The features parameter is a String. See also
+ * DOMImplementationSource.getDOMImplementation().
+ *
+ * getDOMImplementationList(features)
+ * This method returns a DOMImplementationList list of registered object that
+ * implements the DOMImplementation interface and has the desired features. The
+ * features parameter is a String. See also
+ * DOMImplementationSource.getDOMImplementationList().
+ *
+ *
+ */
+
+
+
+/**
+ * H.2 Other Core interfaces
+ */
+
+
+/**
+ * Properties of the DOMException Constructor function:
+ *
+ * DOMException.INDEX_SIZE_ERR
+ * The value of the constant DOMException.INDEX_SIZE_ERR is 1.
+ * DOMException.DOMSTRING_SIZE_ERR
+ * The value of the constant DOMException.DOMSTRING_SIZE_ERR is 2.
+ * DOMException.HIERARCHY_REQUEST_ERR
+ * The value of the constant DOMException.HIERARCHY_REQUEST_ERR is 3.
+ * DOMException.WRONG_DOCUMENT_ERR
+ * The value of the constant DOMException.WRONG_DOCUMENT_ERR is 4.
+ * DOMException.INVALID_CHARACTER_ERR
+ * The value of the constant DOMException.INVALID_CHARACTER_ERR is 5.
+ * DOMException.NO_DATA_ALLOWED_ERR
+ * The value of the constant DOMException.NO_DATA_ALLOWED_ERR is 6.
+ * DOMException.NO_MODIFICATION_ALLOWED_ERR
+ * The value of the constant DOMException.NO_MODIFICATION_ALLOWED_ERR is 7.
+ * DOMException.NOT_FOUND_ERR
+ * The value of the constant DOMException.NOT_FOUND_ERR is 8.
+ * DOMException.NOT_SUPPORTED_ERR
+ * The value of the constant DOMException.NOT_SUPPORTED_ERR is 9.
+ * DOMException.INUSE_ATTRIBUTE_ERR
+ * The value of the constant DOMException.INUSE_ATTRIBUTE_ERR is 10.
+ * DOMException.INVALID_STATE_ERR
+ * The value of the constant DOMException.INVALID_STATE_ERR is 11.
+ * DOMException.SYNTAX_ERR
+ * The value of the constant DOMException.SYNTAX_ERR is 12.
+ * DOMException.INVALID_MODIFICATION_ERR
+ * The value of the constant DOMException.INVALID_MODIFICATION_ERR is 13.
+ * DOMException.NAMESPACE_ERR
+ * The value of the constant DOMException.NAMESPACE_ERR is 14.
+ * DOMException.INVALID_ACCESS_ERR
+ * The value of the constant DOMException.INVALID_ACCESS_ERR is 15.
+ * DOMException.VALIDATION_ERR
+ * The value of the constant DOMException.VALIDATION_ERR is 16.
+ * DOMException.TYPE_MISMATCH_ERR
+ * The value of the constant DOMException.TYPE_MISMATCH_ERR is 17.
+ *
+ * Objects that implement the DOMException interface:
+ *
+ * Properties of objects that implement the DOMException interface:
+ *
+ * code
+ * This property is a Number.
+ *
+ */
+
+/**
+ * Objects that implement the DOMStringList interface:
+ *
+ * Properties of objects that implement the DOMStringList interface:
+ *
+ * length
+ * This read-only property is a Number.
+ *
+ * Functions of objects that implement the DOMStringList interface:
+ *
+ * item(index)
+ * This function returns a String.
+ * The index parameter is a Number.
+ * Note: This object can also be dereferenced using square bracket notation
+ * (e.g. obj[1]). Dereferencing with an integer index is equivalent
+ * to invoking the item function with that index.
+ *
+ * contains(str)
+ * This function returns a Boolean.
+ * The str parameter is a String.
+ *
+ */
+
+
+
+/**
+ * Objects that implement the NameList interface:
+ *
+ * Properties of objects that implement the NameList interface:
+ *
+ * length
+ * This read-only property is a Number.
+ *
+ * Functions of objects that implement the NameList interface:
+ *
+ * getName(index)
+ * This function returns a String.
+ * The index parameter is a Number.
+ * getNamespaceURI(index)
+ * This function returns a String.
+ * The index parameter is a Number.
+ * contains(str)
+ * This function returns a Boolean.
+ * The str parameter is a String.
+ * containsNS(namespaceURI, name)
+ * This function returns a Boolean.
+ * The namespaceURI parameter is a String.
+ * The name parameter is a String.
+ */
+
+
+/**
+ * Objects that implement the DOMImplementationList interface:
+ *
+ * Properties of objects that implement the DOMImplementationList interface:
+ *
+ * length
+ * This read-only property is a Number.
+ *
+ * Functions of objects that implement the DOMImplementationList interface:
+ *
+ * item(index)
+ * This function returns an object that implements the DOMImplementation interface.
+ * The index parameter is a Number.
+ * Note: This object can also be dereferenced using square bracket notation
+ * (e.g. obj[1]). Dereferencing with an integer index is equivalent
+ * to invoking the item function with that index.
+ *
+ *
+ */
+
+/**
+ * Objects that implement the DOMImplementationSource interface:
+ *
+ * Functions of objects that implement the DOMImplementationSource interface:
+ *
+ * getDOMImplementation(features)
+ * This function returns an object that implements the DOMImplementation interface.
+ * The features parameter is a String.
+ * getDOMImplementationList(features)
+ * This function returns an object that implements the DOMImplementationList
+ * interface.
+ * The features parameter is a String.
+ */
+
+/**
+ * Objects that implement the DOMImplementation interface:
+ *
+ * Functions of objects that implement the DOMImplementation interface:
+ *
+ * hasFeature(feature, version)
+ * This function returns a Boolean.
+ * The feature parameter is a String.
+ * The version parameter is a String.
+ * createDocumentType(qualifiedName, publicId, systemId)
+ * This function returns an object that implements the DocumentType interface.
+ * The qualifiedName parameter is a String.
+ * The publicId parameter is a String.
+ * The systemId parameter is a String.
+ * This function can raise an object that implements the DOMException interface.
+ * createDocument(namespaceURI, qualifiedName, doctype)
+ * This function returns an object that implements the Document interface.
+ * The namespaceURI parameter is a String.
+ * The qualifiedName parameter is a String.
+ * The doctype parameter is an object that implements the DocumentType interface.
+ * This function can raise an object that implements the DOMException interface.
+ * getFeature(feature, version)
+ * This function returns an object that implements the Object interface.
+ * The feature parameter is a String.
+ * The version parameter is a String.
+ */
+
+/**
+ * Objects that implement the DocumentFragment interface:
+ *
+ * Objects that implement the DocumentFragment interface have all properties and
+ * functions of the Node interface.
+ */
+
+
+/**
+ * Objects that implement the Document interface:
+ *
+ * Objects that implement the Document interface have all properties and functions
+ * of the Node interface as well as the properties and functions defined below.
+ * Properties of objects that implement the Document interface:
+ *
+ *
+ * doctype
+ * This read-only property is an object that implements the DocumentType interface.
+ * implementation
+ * This read-only property is an object that implements the DOMImplementation
+ * interface.
+ * documentElement
+ * This read-only property is an object that implements the Element interface.
+ * inputEncoding
+ * This read-only property is a String.
+ * xmlEncoding
+ * This read-only property is a String.
+ * xmlStandalone
+ * This property is a Boolean and can raise an object that implements the
+ * DOMException interface on setting.
+ * xmlVersion
+ * This property is a String and can raise an object that implements the
+ * DOMException interface on setting.
+ * strictErrorChecking
+ * This property is a Boolean.
+ * documentURI
+ * This property is a String.
+ * domConfig
+ * This read-only property is an object that implements the DOMConfiguration
+ * interface.
+ *
+ *
+ * Functions of objects that implement the Document interface:
+ *
+ * createElement(tagName)
+ * This function returns an object that implements the Element interface.
+ * The tagName parameter is a String.
+ * This function can raise an object that implements the DOMException interface.
+ * createDocumentFragment()
+ * This function returns an object that implements the DocumentFragment interface.
+ * createTextNode(data)
+ * This function returns an object that implements the Text interface.
+ * The data parameter is a String.
+ * createComment(data)
+ * This function returns an object that implements the Comment interface.
+ * The data parameter is a String.
+ * createCDATASection(data)
+ * This function returns an object that implements the CDATASection interface.
+ * The data parameter is a String.
+ * This function can raise an object that implements the DOMException interface.
+ * createProcessingInstruction(target, data)
+ * This function returns an object that implements the ProcessingInstruction interface.
+ * The target parameter is a String.
+ * The data parameter is a String.
+ * This function can raise an object that implements the DOMException interface.
+ * createAttribute(name)
+ * This function returns an object that implements the Attr interface.
+ * The name parameter is a String.
+ * This function can raise an object that implements the DOMException interface.
+ * createEntityReference(name)
+ * This function returns an object that implements the EntityReference interface.
+ * The name parameter is a String.
+ * This function can raise an object that implements the DOMException interface.
+ * getElementsByTagName(tagname)
+ * This function returns an object that implements the NodeList interface.
+ * The tagname parameter is a String.
+ * importNode(importedNode, deep)
+ * This function returns an object that implements the Node interface.
+ * The importedNode parameter is an object that implements the Node interface.
+ * The deep parameter is a Boolean.
+ * This function can raise an object that implements the DOMException interface.
+ * createElementNS(namespaceURI, qualifiedName)
+ * This function returns an object that implements the Element interface.
+ * The namespaceURI parameter is a String.
+ * The qualifiedName parameter is a String.
+ * This function can raise an object that implements the DOMException interface.
+ * createAttributeNS(namespaceURI, qualifiedName)
+ * This function returns an object that implements the Attr interface.
+ * The namespaceURI parameter is a String.
+ * The qualifiedName parameter is a String.
+ * This function can raise an object that implements the DOMException interface.
+ * getElementsByTagNameNS(namespaceURI, localName)
+ * This function returns an object that implements the NodeList interface.
+ * The namespaceURI parameter is a String.
+ * The localName parameter is a String.
+ * getElementById(elementId)
+ * This function returns an object that implements the Element interface.
+ * The elementId parameter is a String.
+ * adoptNode(source)
+ * This function returns an object that implements the Node interface.
+ * The source parameter is an object that implements the Node interface.
+ * This function can raise an object that implements the DOMException interface.
+ * normalizeDocument()
+ * This function has no return value.
+ * renameNode(n, namespaceURI, qualifiedName)
+ * This function returns an object that implements the Node interface.
+ * The n parameter is an object that implements the Node interface.
+ * The namespaceURI parameter is a String.
+ * The qualifiedName parameter is a String.
+ * This function can raise an object that implements the DOMException interface.
+ */
+
+
+/**
+ * Properties of the Node Constructor function:
+ *
+ * Node.ELEMENT_NODE
+ * The value of the constant Node.ELEMENT_NODE is 1.
+ * Node.ATTRIBUTE_NODE
+ * The value of the constant Node.ATTRIBUTE_NODE is 2.
+ * Node.TEXT_NODE
+ * The value of the constant Node.TEXT_NODE is 3.
+ * Node.CDATA_SECTION_NODE
+ * The value of the constant Node.CDATA_SECTION_NODE is 4.
+ * Node.ENTITY_REFERENCE_NODE
+ * The value of the constant Node.ENTITY_REFERENCE_NODE is 5.
+ * Node.ENTITY_NODE
+ * The value of the constant Node.ENTITY_NODE is 6.
+ * Node.PROCESSING_INSTRUCTION_NODE
+ * The value of the constant Node.PROCESSING_INSTRUCTION_NODE is 7.
+ * Node.COMMENT_NODE
+ * The value of the constant Node.COMMENT_NODE is 8.
+ * Node.DOCUMENT_NODE
+ * The value of the constant Node.DOCUMENT_NODE is 9.
+ * Node.DOCUMENT_TYPE_NODE
+ * The value of the constant Node.DOCUMENT_TYPE_NODE is 10.
+ * Node.DOCUMENT_FRAGMENT_NODE
+ * The value of the constant Node.DOCUMENT_FRAGMENT_NODE is 11.
+ * Node.NOTATION_NODE
+ * The value of the constant Node.NOTATION_NODE is 12.
+ * Node.DOCUMENT_POSITION_DISCONNECTED
+ * The value of the constant Node.DOCUMENT_POSITION_DISCONNECTED is 0x01.
+ * Node.DOCUMENT_POSITION_PRECEDING
+ * The value of the constant Node.DOCUMENT_POSITION_PRECEDING is 0x02.
+ * Node.DOCUMENT_POSITION_FOLLOWING
+ * The value of the constant Node.DOCUMENT_POSITION_FOLLOWING is 0x04.
+ * Node.DOCUMENT_POSITION_CONTAINS
+ * The value of the constant Node.DOCUMENT_POSITION_CONTAINS is 0x08.
+ * Node.DOCUMENT_POSITION_CONTAINED_BY
+ * The value of the constant Node.DOCUMENT_POSITION_CONTAINED_BY is 0x10.
+ * Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
+ * The value of the constant Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC is 0x20.
+ *
+ * Objects that implement the Node interface:
+ *
+ * Properties of objects that implement the Node interface:
+ *
+ * nodeName
+ * This read-only property is a String.
+ * nodeValue
+ * This property is a String, can raise an object that implements the DOMException
+ * interface on setting and can raise an object that implements the DOMException
+ * interface on retrieval.
+ * nodeType
+ * This read-only property is a Number.
+ * parentNode
+ * This read-only property is an object that implements the Node interface.
+ * childNodes
+ * This read-only property is an object that implements the NodeList interface.
+ * firstChild
+ * This read-only property is an object that implements the Node interface.
+ * lastChild
+ * This read-only property is an object that implements the Node interface.
+ * previousSibling
+ * This read-only property is an object that implements the Node interface.
+ * nextSibling
+ * This read-only property is an object that implements the Node interface.
+ * attributes
+ * This read-only property is an object that implements the NamedNodeMap interface.
+ * ownerDocument
+ * This read-only property is an object that implements the Document interface.
+ * namespaceURI
+ * This read-only property is a String.
+ * prefix
+ * This property is a String and can raise an object that implements the
+ * DOMException interface on setting.
+ * localName
+ * This read-only property is a String.
+ * baseURI
+ * This read-only property is a String.
+ * textContent
+ * This property is a String, can raise an object that implements the DOMException
+ * interface on setting and can raise an object that implements the DOMException
+ * interface on retrieval.
+ *
+ *
+ * Functions of objects that implement the Node interface:
+ *
+ * insertBefore(newChild, refChild)
+ * This function returns an object that implements the Node interface.
+ * The newChild parameter is an object that implements the Node interface.
+ * The refChild parameter is an object that implements the Node interface.
+ * This function can raise an object that implements the DOMException interface.
+ * replaceChild(newChild, oldChild)
+ * This function returns an object that implements the Node interface.
+ * The newChild parameter is an object that implements the Node interface.
+ * The oldChild parameter is an object that implements the Node interface.
+ * This function can raise an object that implements the DOMException interface.
+ * removeChild(oldChild)
+ * This function returns an object that implements the Node interface.
+ * The oldChild parameter is an object that implements the Node interface.
+ * This function can raise an object that implements the DOMException interface.
+ * appendChild(newChild)
+ * This function returns an object that implements the Node interface.
+ * The newChild parameter is an object that implements the Node interface.
+ * This function can raise an object that implements the DOMException interface.
+ * hasChildNodes()
+ * This function returns a Boolean.
+ * cloneNode(deep)
+ * This function returns an object that implements the Node interface.
+ * The deep parameter is a Boolean.
+ * normalize()
+ * This function has no return value.
+ * isSupported(feature, version)
+ * This function returns a Boolean.
+ * The feature parameter is a String.
+ * The version parameter is a String.
+ * hasAttributes()
+ * This function returns a Boolean.
+ * compareDocumentPosition(other)
+ * This function returns a Number.
+ * The other parameter is an object that implements the Node interface.
+ * This function can raise an object that implements the DOMException interface.
+ * isSameNode(other)
+ * This function returns a Boolean.
+ * The other parameter is an object that implements the Node interface.
+ * lookupPrefix(namespaceURI)
+ * This function returns a String.
+ * The namespaceURI parameter is a String.
+ * isDefaultNamespace(namespaceURI)
+ * This function returns a Boolean.
+ * The namespaceURI parameter is a String.
+ * lookupNamespaceURI(prefix)
+ * This function returns a String.
+ * The prefix parameter is a String.
+ * isEqualNode(arg)
+ * This function returns a Boolean.
+ * The arg parameter is an object that implements the Node interface.
+ * getFeature(feature, version)
+ * This function returns an object that implements the Object interface.
+ * The feature parameter is a String.
+ * The version parameter is a String.
+ * setUserData(key, data, handler)
+ * This function returns an object that implements the any type interface.
+ * The key parameter is a String.
+ * The data parameter is an object that implements the any type interface.
+ * The handler parameter is an object that implements the UserDataHandler interface.
+ * getUserData(key)
+ * This function returns an object that implements the any type interface.
+ * The key parameter is a String.
+ *
+ */
+
+class JSNode
+{
+public:
+
+ /**
+ * JSConstructor - Callback for when a this object is created
+ */
+ static JSBool JSConstructor(JSContext *cx, JSObject *obj, uintN argc,
+ jsval *argv, jsval *rval)
+ {
+ Node *p = new NodeImpl();
+ if ( ! JS_SetPrivate(cx, obj, p) )
+ return JS_FALSE;
+ *rval = OBJECT_TO_JSVAL(obj);
+ return JS_TRUE;
+ }
+
+ /**
+ * JSInit - Create a prototype for this class
+ */
+ static JSObject* JSInit(JSContext *cx, JSObject *obj, JSObject *proto = NULL)
+ {
+ JSObject *newObj = JS_InitClass(cx, obj, proto, &classDef,
+ JSConstructor, 0,
+ properties, methods,
+ staticProperties, staticMethods);
+ return newObj;
+ }
+
+ /**
+ * JSDestructor - Callback for when a this object is destroyed
+ */
+ static void JSDestructor(JSContext *cx, JSObject *obj)
+ {
+ Node *p = (Node *) JS_GetPrivate(cx, obj);
+ delete p;
+ p = NULL;
+ }
+
+ /**
+ * JSGetProperty - Callback for retrieving properties
+ */
+ static JSBool JSGetProperty(JSContext *cx, JSObject *obj,
+ jsval id, jsval *vp)
+ {
+ if (!JSVAL_IS_INT(id))
+ return JS_FALSE;
+ Node *p = (Node *) JS_GetPrivate(cx, obj);
+ switch( JSVAL_TO_INT( id ) )
+ {
+ case name_prop:
+ {
+ return JS_TRUE;
+ }
+ case age_prop:
+ {
+ //*vp = INT_TO_JSVAL(priv->getNode()->GetAge());
+ return JS_TRUE;
+ }
+ }
+ return JS_FALSE;
+ }
+
+ /**
+ * JSSetProperty - Callback for setting properties
+ */
+ static JSBool JSSetProperty(JSContext *cx, JSObject *obj,
+ jsval id, jsval *vp)
+ {
+ if (!JSVAL_IS_INT(id))
+ return JS_FALSE;
+ Node *p = (Node *) JS_GetPrivate(cx, obj);
+ switch( JSVAL_TO_INT( id ) )
+ {
+ case name_prop:
+ {
+ return JS_TRUE;
+ }
+ case age_prop:
+ {
+ //*vp = INT_TO_JSVAL(priv->getNode()->GetAge());
+ return JS_TRUE;
+ }
+ }
+ return JS_FALSE;
+ }
+
+
+
+private:
+
+ // Standard JS Binding fields
+ static JSClass classDef;
+ enum
+ {
+ name_prop,
+ age_prop
+ };
+ static JSPropertySpec properties[];
+ static JSPropertySpec staticProperties[];
+ static JSFunctionSpec methods[];
+ static JSFunctionSpec staticMethods[];
+
+};
+
+// JSCustomer.cpp
+JSClass JSNode::classDef =
+{
+ "Node",
+ JSCLASS_HAS_PRIVATE,
+ JS_PropertyStub, JS_PropertyStub,
+ JSNode::JSGetProperty, JSNode::JSSetProperty,
+ JS_EnumerateStub, JS_ResolveStub,
+ JS_ConvertStub, JSNode::JSDestructor
+};
+
+JSPropertySpec JSNode::properties[] =
+{
+ { "name", JSNode::name_prop, JSPROP_ENUMERATE },
+ { "age", JSNode::age_prop, JSPROP_ENUMERATE },
+ { 0 }
+};
+
+JSPropertySpec JSNode::staticProperties[] =
+{
+ { 0 }
+};
+
+JSFunctionSpec JSNode::methods[] =
+{
+// { "computeReduction", computeReduction, 1, 0, 0 },
+ { 0 }
+};
+
+JSFunctionSpec JSNode::staticMethods[] =
+{
+ { 0 }
+};
+
+
+
+
+
+
+
+/**
+ * Objects that implement the NodeList interface:
+ *
+ * Properties of objects that implement the NodeList interface:
+ *
+ * length
+ * This read-only property is a Number.
+ *
+ * Functions of objects that implement the NodeList interface:
+ *
+ * item(index)
+ * This function returns an object that implements the Node interface.
+ * The index parameter is a Number.
+ * Note: This object can also be dereferenced using square bracket notation
+ * (e.g. obj[1]). Dereferencing with an integer index is equivalent
+ * to invoking the item function with that index.
+ *
+ *
+ */
+
+/**
+ * Objects that implement the NamedNodeMap interface:
+ *
+ * Properties of objects that implement the NamedNodeMap interface:
+ *
+ * length
+ * This read-only property is a Number.
+ *
+ * Functions of objects that implement the NamedNodeMap interface:
+ *
+ * getNamedItem(name)
+ * This function returns an object that implements the Node interface.
+ * The name parameter is a String.
+ * setNamedItem(arg)
+ * This function returns an object that implements the Node interface.
+ * The arg parameter is an object that implements the Node interface.
+ * This function can raise an object that implements the DOMException interface.
+ * removeNamedItem(name)
+ * This function returns an object that implements the Node interface.
+ * The name parameter is a String.
+ * This function can raise an object that implements the DOMException interface.
+ * item(index)
+ * This function returns an object that implements the Node interface.
+ * The index parameter is a Number.
+ * Note: This object can also be dereferenced using square bracket notation
+ * (e.g. obj[1]). Dereferencing with an integer index is equivalent
+ * to invoking the item function with that index.
+ * getNamedItemNS(namespaceURI, localName)
+ * This function returns an object that implements the Node interface.
+ * The namespaceURI parameter is a String.
+ * The localName parameter is a String.
+ * This function can raise an object that implements the DOMException interface.
+ * setNamedItemNS(arg)
+ * This function returns an object that implements the Node interface.
+ * The arg parameter is an object that implements the Node interface.
+ * This function can raise an object that implements the DOMException interface.
+ * removeNamedItemNS(namespaceURI, localName)
+ * This function returns an object that implements the Node interface.
+ * The namespaceURI parameter is a String.
+ * The localName parameter is a String.
+ * This function can raise an object that implements the DOMException interface.
+ */
+
+
+/**
+ * Objects that implement the CharacterData interface:
+ *
+ * Objects that implement the CharacterData interface have all properties and
+ * functions of the Node interface as well as the properties and functions defined
+ * below. Properties of objects that implement the CharacterData interface:
+ *
+ *
+ * data
+ * This property is a String, can raise an object that implements the DOMException
+ * interface on setting and can raise an object that implements the DOMException
+ * interface on retrieval.
+ * length
+ * This read-only property is a Number.
+ *
+ * Functions of objects that implement the CharacterData interface:
+ *
+ * substringData(offset, count)
+ * This function returns a String.
+ * The offset parameter is a Number.
+ * The count parameter is a Number.
+ * This function can raise an object that implements the DOMException interface.
+ * appendData(arg)
+ * This function has no return value.
+ * The arg parameter is a String.
+ * This function can raise an object that implements the DOMException interface.
+ * insertData(offset, arg)
+ * This function has no return value.
+ * The offset parameter is a Number.
+ * The arg parameter is a String.
+ * This function can raise an object that implements the DOMException interface.
+ * deleteData(offset, count)
+ * This function has no return value.
+ * The offset parameter is a Number.
+ * The count parameter is a Number.
+ * This function can raise an object that implements the DOMException interface.
+ * replaceData(offset, count, arg)
+ * This function has no return value.
+ * The offset parameter is a Number.
+ * The count parameter is a Number.
+ * The arg parameter is a String.
+ * This function can raise an object that implements the DOMException interface.
+ */
+
+/**
+ * Objects that implement the Attr interface:
+ *
+ * Objects that implement the Attr interface have all properties and functions of
+ * the Node interface as well as the properties and functions defined below.
+ * Properties of objects that implement the Attr interface:
+ *
+ *
+ * name
+ * This read-only property is a String.
+ * specified
+ * This read-only property is a Boolean.
+ * value
+ * This property is a String and can raise an object that implements the
+ * DOMException interface on setting.
+ * ownerElement
+ * This read-only property is an object that implements the Element interface.
+ * schemaTypeInfo
+ * This read-only property is an object that implements the TypeInfo interface.
+ * isId
+ * This read-only property is a Boolean.
+ *
+ */
+
+/**
+ * Objects that implement the Element interface:
+ *
+ * Objects that implement the Element interface have all properties and functions
+ * of the Node interface as well as the properties and functions defined below.
+ * Properties of objects that implement the Element interface:
+ *
+ *
+ * tagName
+ * This read-only property is a String.
+ * schemaTypeInfo
+ * This read-only property is an object that implements the TypeInfo interface.
+ *
+ * Functions of objects that implement the Element interface:
+ *
+ * getAttribute(name)
+ * This function returns a String.
+ * The name parameter is a String.
+ * setAttribute(name, value)
+ * This function has no return value.
+ * The name parameter is a String.
+ * The value parameter is a String.
+ * This function can raise an object that implements the DOMException interface.
+ * removeAttribute(name)
+ * This function has no return value.
+ * The name parameter is a String.
+ * This function can raise an object that implements the DOMException interface.
+ * getAttributeNode(name)
+ * This function returns an object that implements the Attr interface.
+ * The name parameter is a String.
+ * setAttributeNode(newAttr)
+ * This function returns an object that implements the Attr interface.
+ * The newAttr parameter is an object that implements the Attr interface.
+ * This function can raise an object that implements the DOMException interface.
+ * removeAttributeNode(oldAttr)
+ * This function returns an object that implements the Attr interface.
+ * The oldAttr parameter is an object that implements the Attr interface.
+ * This function can raise an object that implements the DOMException interface.
+ * getElementsByTagName(name)
+ * This function returns an object that implements the NodeList interface.
+ * The name parameter is a String.
+ * getAttributeNS(namespaceURI, localName)
+ * This function returns a String.
+ * The namespaceURI parameter is a String.
+ * The localName parameter is a String.
+ * This function can raise an object that implements the DOMException interface.
+ * setAttributeNS(namespaceURI, qualifiedName, value)
+ * This function has no return value.
+ * The namespaceURI parameter is a String.
+ * The qualifiedName parameter is a String.
+ * The value parameter is a String.
+ * This function can raise an object that implements the DOMException interface.
+ * removeAttributeNS(namespaceURI, localName)
+ * This function has no return value.
+ * The namespaceURI parameter is a String.
+ * The localName parameter is a String.
+ * This function can raise an object that implements the DOMException interface.
+ * getAttributeNodeNS(namespaceURI, localName)
+ * This function returns an object that implements the Attr interface.
+ * The namespaceURI parameter is a String.
+ * The localName parameter is a String.
+ * This function can raise an object that implements the DOMException interface.
+ * setAttributeNodeNS(newAttr)
+ * This function returns an object that implements the Attr interface.
+ * The newAttr parameter is an object that implements the Attr interface.
+ * This function can raise an object that implements the DOMException interface.
+ * getElementsByTagNameNS(namespaceURI, localName)
+ * This function returns an object that implements the NodeList interface.
+ * The namespaceURI parameter is a String.
+ * The localName parameter is a String.
+ * This function can raise an object that implements the DOMException interface.
+ * hasAttribute(name)
+ * This function returns a Boolean.
+ * The name parameter is a String.
+ * hasAttributeNS(namespaceURI, localName)
+ * This function returns a Boolean.
+ * The namespaceURI parameter is a String.
+ * The localName parameter is a String.
+ * This function can raise an object that implements the DOMException interface.
+ * setIdAttribute(name, isId)
+ * This function has no return value.
+ * The name parameter is a String.
+ * The isId parameter is a Boolean.
+ * This function can raise an object that implements the DOMException interface.
+ * setIdAttributeNS(namespaceURI, localName, isId)
+ * This function has no return value.
+ * The namespaceURI parameter is a String.
+ * The localName parameter is a String.
+ * The isId parameter is a Boolean.
+ * This function can raise an object that implements the DOMException interface.
+ * setIdAttributeNode(idAttr, isId)
+ * This function has no return value.
+ * The idAttr parameter is an object that implements the Attr interface.
+ * The isId parameter is a Boolean.
+ * This function can raise an object that implements the DOMException interface.
+ */
+
+/**
+ * Objects that implement the Text interface:
+ *
+ * Objects that implement the Text interface have all properties and functions of
+ * the CharacterData interface as well as the properties and functions defined
+ * below. Properties of objects that implement the Text interface:
+ *
+ *
+ * isElementContentWhitespace
+ * This read-only property is a Boolean.
+ * wholeText
+ * This read-only property is a String.
+ *
+ * Functions of objects that implement the Text interface:
+ *
+ * splitText(offset)
+ * This function returns an object that implements the Text interface.
+ * The offset parameter is a Number.
+ * This function can raise an object that implements the DOMException interface.
+ * replaceWholeText(content)
+ * This function returns an object that implements the Text interface.
+ * The content parameter is a String.
+ * This function can raise an object that implements the DOMException interface.
+ */
+
+/**
+ * Objects that implement the Comment interface:
+ *
+ * Objects that implement the Comment interface have all properties and functions
+ * of the CharacterData interface.
+ *
+ */
+
+/**
+ * Properties of the TypeInfo Constructor function:
+ *
+ * TypeInfo.DERIVATION_RESTRICTION
+ * The value of the constant TypeInfo.DERIVATION_RESTRICTION is 0x00000001.
+ * TypeInfo.DERIVATION_EXTENSION
+ * The value of the constant TypeInfo.DERIVATION_EXTENSION is 0x00000002.
+ * TypeInfo.DERIVATION_UNION
+ * The value of the constant TypeInfo.DERIVATION_UNION is 0x00000004.
+ * TypeInfo.DERIVATION_LIST
+ * The value of the constant TypeInfo.DERIVATION_LIST is 0x00000008.
+ *
+ * Objects that implement the TypeInfo interface:
+ *
+ * Properties of objects that implement the TypeInfo interface:
+ *
+ * typeName
+ * This read-only property is a String.
+ * typeNamespace
+ * This read-only property is a String.
+ *
+ * Functions of objects that implement the TypeInfo interface:
+ *
+ * isDerivedFrom(typeNamespaceArg, typeNameArg, derivationMethod)
+ * This function returns a Boolean.
+ * The typeNamespaceArg parameter is a String.
+ * The typeNameArg parameter is a String.
+ * The derivationMethod parameter is a Number.
+ */
+
+/**
+ * Properties of the UserDataHandler Constructor function:
+ *
+ * UserDataHandler.NODE_CLONED
+ * The value of the constant UserDataHandler.NODE_CLONED is 1.
+ * UserDataHandler.NODE_IMPORTED
+ * The value of the constant UserDataHandler.NODE_IMPORTED is 2.
+ * UserDataHandler.NODE_DELETED
+ * The value of the constant UserDataHandler.NODE_DELETED is 3.
+ * UserDataHandler.NODE_RENAMED
+ * The value of the constant UserDataHandler.NODE_RENAMED is 4.
+ * UserDataHandler.NODE_ADOPTED
+ * The value of the constant UserDataHandler.NODE_ADOPTED is 5.
+ *
+ * UserDataHandler function:
+ * This function has no return value. The first parameter is a Number. The second
+ * parameter is a String. The third parameter is an object that implements the any
+ * type interface. The fourth parameter is an object that implements the Node
+ * interface. The fifth parameter is an object that implements the Node interface.
+ * Properties of the DOMError Constructor function:
+ *
+ *
+ * DOMError.SEVERITY_WARNING
+ * The value of the constant DOMError.SEVERITY_WARNING is 1.
+ * DOMError.SEVERITY_ERROR
+ * The value of the constant DOMError.SEVERITY_ERROR is 2.
+ * DOMError.SEVERITY_FATAL_ERROR
+ * The value of the constant DOMError.SEVERITY_FATAL_ERROR is 3.
+ */
+
+
+/**
+ * Objects that implement the DOMError interface:
+ *
+ * Properties of objects that implement the DOMError interface:
+ *
+ * severity
+ * This read-only property is a Number.
+ * message
+ * This read-only property is a String.
+ * type
+ * This read-only property is a String.
+ * relatedException
+ * This read-only property is an object that implements the Object interface.
+ * relatedData
+ * This read-only property is an object that implements the Object interface.
+ * location
+ * This read-only property is an object that implements the DOMLocator interface.
+ *
+ * DOMErrorHandler function:
+ * This function returns a Boolean. The parameter is an object that implements the
+ * DOMError interface.
+ *
+ *
+ */
+
+/**
+ * Objects that implement the DOMLocator interface:
+ *
+ * Properties of objects that implement the DOMLocator interface:
+ *
+ * lineNumber
+ * This read-only property is a Number.
+ * columnNumber
+ * This read-only property is a Number.
+ * byteOffset
+ * This read-only property is a Number.
+ * utf16Offset
+ * This read-only property is a Number.
+ * relatedNode
+ * This read-only property is an object that implements the Node interface.
+ * uri
+ * This read-only property is a String.
+ */
+
+/**
+ * Objects that implement the DOMConfiguration interface:
+ *
+ * Properties of objects that implement the DOMConfiguration interface:
+ *
+ * parameterNames
+ * This read-only property is an object that implements the DOMStringList interface.
+ *
+ * Functions of objects that implement the DOMConfiguration interface:
+ *
+ * setParameter(name, value)
+ * This function has no return value.
+ * The name parameter is a String.
+ * The value parameter is an object that implements the any type interface.
+ * This function can raise an object that implements the DOMException interface.
+ * getParameter(name)
+ * This function returns an object that implements the any type interface.
+ * The name parameter is a String.
+ * This function can raise an object that implements the DOMException interface.
+ * canSetParameter(name, value)
+ * This function returns a Boolean.
+ * The name parameter is a String.
+ * The value parameter is an object that implements the any type interface.
+ */
+
+
+/**
+ * Objects that implement the CDATASection interface:
+ *
+ * Objects that implement the CDATASection interface have all properties and
+ * functions of the Text interface.
+ *
+ */
+
+/**
+ * Objects that implement the DocumentType interface:
+ *
+ * Objects that implement the DocumentType interface have all properties and
+ * functions of the Node interface as well as the properties and functions defined
+ * below. Properties of objects that implement the DocumentType interface:
+ *
+ *
+ * name
+ * This read-only property is a String.
+ * entities
+ * This read-only property is an object that implements the NamedNodeMap interface.
+ * notations
+ * This read-only property is an object that implements the NamedNodeMap interface.
+ * publicId
+ * This read-only property is a String.
+ * systemId
+ * This read-only property is a String.
+ * internalSubset
+ * This read-only property is a String.
+ */
+
+
+/**
+ * Objects that implement the Notation interface:
+ *
+ * Objects that implement the Notation interface have all properties and functions
+ * of the Node interface as well as the properties and functions defined below.
+ * Properties of objects that implement the Notation interface:
+ *
+ *
+ * publicId
+ * This read-only property is a String.
+ * systemId
+ * This read-only property is a String.
+ */
+
+/**
+ * Objects that implement the Entity interface:
+ *
+ * Objects that implement the Entity interface have all properties and functions
+ * of the Node interface as well as the properties and functions defined below.
+ * Properties of objects that implement the Entity
+ * interface:
+ *
+ *
+ * publicId
+ * This read-only property is a String.
+ * systemId
+ * This read-only property is a String.
+ * notationName
+ * This read-only property is a String.
+ * inputEncoding
+ * This read-only property is a String.
+ * xmlEncoding
+ * This read-only property is a String.
+ * xmlVersion
+ * This read-only property is a String.
+ */
+
+/**
+ * Objects that implement the EntityReference interface:
+ *
+ * Objects that implement the EntityReference interface have all properties and
+ * functions of the Node interface.
+ *
+ */
+
+
+/**
+ * Objects that implement the ProcessingInstruction interface:
+ *
+ * Objects that implement the ProcessingInstruction interface have all properties
+ * and functions of the Node interface as well as the properties and functions
+ * defined below. Properties of objects that implement the ProcessingInstruction
+ * interface:
+ *
+ * target
+ * This read-only property is a String.
+ * data
+ * This property is a String and can raise an object that implements the
+ * DOMException interface on setting.
+ *
+ */
+
+
+/**
+ * Note: In addition of having DOMConfiguration parameters exposed to the
+ * application using the setParameter and getParameter, those parameters are also
+ * exposed as ECMAScript properties on the DOMConfiguration object. The name of
+ * the parameter is converted into a property name using a camel-case convention:
+ * the character '-' (HYPHEN-MINUS) is removed and the following character is
+ * being replaced by its uppercase equivalent.
+ */
+
+ //########################################################################
+//# C L A S S E S
+//########################################################################
+
+
+
+//########################################################################
+//# M A I N B I N D I N G
+//########################################################################
+
+bool JavascriptEngine::createClasses()
+{
+
+ return true;
+}
+
+
+} // namespace dom
+} // namespace w3c
+} // namespace org
+
+//########################################################################
+//# E N D O F F I L E
+//########################################################################
+
diff --git a/src/dom/jsengine.cpp b/src/dom/jsengine.cpp
--- /dev/null
+++ b/src/dom/jsengine.cpp
@@ -0,0 +1,132 @@
+/**
+ * Phoebe DOM Implementation.
+ *
+ * This is a C++ approximation of the W3C DOM model, which follows
+ * fairly closely the specifications in the various .idl files, copies of
+ * which are provided for reference. Most important is this one:
+ *
+ * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html
+ *
+ * Authors:
+ * Bob Jamison
+ *
+ * Copyright (C) 2006 Bob Jamison
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+
+#include "jsengine.h"
+
+#include <stdio.h>
+#include <stdarg.h>
+
+namespace org
+{
+namespace w3c
+{
+namespace dom
+{
+
+
+
+//########################################################################
+//# M E S S A G E S
+//########################################################################
+void JavascriptEngine::error(char *fmt, ...)
+{
+ va_list args;
+ va_start(args, fmt);
+ fprintf(stderr, "JS error: ");
+ vfprintf(stderr, fmt, args);
+ fprintf(stderr, "\n");
+ va_end(args);
+}
+
+
+void JavascriptEngine::trace(char *fmt, ...)
+{
+ va_list args;
+ va_start(args, fmt);
+ fprintf(stdout, "JS: ");
+ vfprintf(stdout, fmt, args);
+ fprintf(stdout, "\n");
+ va_end(args);
+}
+
+
+
+static JSClass globalClass =
+{
+ "Global", 0,
+ JS_PropertyStub, JS_PropertyStub,
+ JS_PropertyStub, JS_PropertyStub,
+ JS_EnumerateStub, JS_ResolveStub,
+ JS_ConvertStub, JS_FinalizeStub
+};
+
+
+bool JavascriptEngine::startup()
+{
+ /* You need a runtime and one or more contexts to do anything with JS. */
+ rt = JS_NewRuntime(0x400000L);
+ if (!rt)
+ {
+ error("can't create JavaScript runtime");
+ return false;
+ }
+
+ cx = JS_NewContext(rt, 8192);
+ if (!cx)
+ {
+ error("can't create JavaScript context");
+ return false;
+ }
+ /*
+ * The context definitely wants a global object, in order to have standard
+ * classes and functions like Date and parseInt. See below for details on
+ * JS_NewObject.
+ */
+
+ globalObj = JS_NewObject(cx, &globalClass, 0, 0);
+ JS_InitStandardClasses(cx, globalObj);
+
+ if (!createClasses())
+ {
+ return false;
+ }
+
+ return true;
+}
+
+
+
+
+bool JavascriptEngine::shutdown()
+{
+
+ return true;
+}
+
+
+} // namespace dom
+} // namespace w3c
+} // namespace org
+
+
+//########################################################################
+//# E N D O F F I L E
+//########################################################################
+
diff --git a/src/dom/jsengine.h b/src/dom/jsengine.h
--- /dev/null
+++ b/src/dom/jsengine.h
@@ -0,0 +1,126 @@
+#ifndef __JSENGINE_H__
+#define __JSENGINE_H__
+/**
+ * Phoebe DOM Implementation.
+ *
+ * This is a C++ approximation of the W3C DOM model, which follows
+ * fairly closely the specifications in the various .idl files, copies of
+ * which are provided for reference. Most important is this one:
+ *
+ * http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/idl-definitions.html
+ *
+ * Authors:
+ * Bob Jamison
+ *
+ * Copyright (C) 2006 Bob Jamison
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+
+#include "js/jsapi.h"
+
+
+namespace org
+{
+namespace w3c
+{
+namespace dom
+{
+
+/**
+ *
+ */
+class JavascriptEngine
+{
+public:
+
+ /**
+ *
+ */
+ JavascriptEngine()
+ { init(); }
+
+ /**
+ *
+ */
+ JavascriptEngine(const JavascriptEngine &other)
+ { assign(other); }
+
+ /**
+ *
+ */
+ JavascriptEngine &operator=(const JavascriptEngine &other)
+ { assign(other); return *this; }
+
+ /**
+ *
+ */
+ bool startup();
+
+ /**
+ *
+ */
+ bool shutdown();
+
+ /**
+ *
+ */
+ virtual ~JavascriptEngine()
+ {}
+
+
+private:
+
+ void init()
+ {
+ rt = NULL;
+ cx = NULL;
+ globalObj = NULL;
+ }
+
+ void assign(const JavascriptEngine &other)
+ {
+ rt = other.rt;
+ cx = other.cx;
+ globalObj = other.globalObj;
+ }
+
+ /**
+ *
+ */
+ bool createClasses();
+
+ void error(char *fmt, ...);
+ void trace(char *fmt, ...);
+
+ JSRuntime *rt;
+
+ JSContext *cx;
+
+ JSObject *globalObj;
+
+};
+
+
+
+} // namespace dom
+} // namespace w3c
+} // namespace org
+
+
+#endif /* __JSENGINE_H__ */
+
+