Code

New files. These will be the basis for ECMA-DOM binding using Spidermonkey.
authorishmal <ishmal@users.sourceforge.net>
Sun, 27 Aug 2006 08:57:12 +0000 (08:57 +0000)
committerishmal <ishmal@users.sourceforge.net>
Sun, 27 Aug 2006 08:57:12 +0000 (08:57 +0000)
src/dom/jsbind.cpp [new file with mode: 0644]
src/dom/jsengine.cpp [new file with mode: 0644]
src/dom/jsengine.h [new file with mode: 0644]

diff --git a/src/dom/jsbind.cpp b/src/dom/jsbind.cpp
new file mode 100644 (file)
index 0000000..3243703
--- /dev/null
@@ -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
new file mode 100644 (file)
index 0000000..598682a
--- /dev/null
@@ -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
new file mode 100644 (file)
index 0000000..1390afe
--- /dev/null
@@ -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__ */
+
+