JSDOMNode.hpp
上传用户:xqtpzdz
上传日期:2022-05-21
资源大小:1764k
文件大小:4k
源码类别:

xml/soap/webservice

开发平台:

Visual C++

  1. /****************License************************************************
  2.  * Vocalocity OpenVXI
  3.  * Copyright (C) 2004-2005 by Vocalocity, Inc. All Rights Reserved.
  4.  * This program is free software; you can redistribute it and/or
  5.  * modify it under the terms of the GNU General Public License
  6.  * as published by the Free Software Foundation; either version 2
  7.  * of the License, or (at your option) any later version.
  8.  *  
  9.  * This program is distributed in the hope that it will be useful,
  10.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.  * GNU General Public License for more details.
  13.  *
  14.  * You should have received a copy of the GNU General Public License
  15.  * along with this program; if not, write to the Free Software
  16.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  17.  * Vocalocity, the Vocalocity logo, and VocalOS are trademarks or 
  18.  * registered trademarks of Vocalocity, Inc. 
  19.  * OpenVXI is a trademark of Scansoft, Inc. and used under license 
  20.  * by Vocalocity.
  21.  ***********************************************************************/
  22. #ifndef _JSDOMNODE_H
  23. #define _JSDOMNODE_H
  24. #include "JSDOM.hpp"
  25. #include <xercesc/dom/DOMNode.hpp>
  26. using namespace xercesc;
  27. class JSDOMNodeList;
  28. class JSDOMNamedNodeMap;
  29. class JSDOMDocument;
  30. class JSDOMNode
  31. {
  32. public:
  33. static JSObject *JSInit(JSContext *cx, JSObject *obj = NULL);
  34. virtual JSObject *getJSObject(JSContext *cx);
  35. static JSObject *newJSObject(JSContext *cx);
  36. JSDOMNode(){}
  37. JSDOMNode( DOMNode *node, JSDOMDocument *doc = NULL );
  38. virtual ~JSDOMNode(){}
  39. enum NodeType
  40. {
  41. ELEMENT_NODE = 1,
  42. ATTRIBUTE_NODE = 2,
  43. TEXT_NODE = 3,
  44. CDATA_SECTION_NODE = 4,
  45. ENTITY_REFERENCE_NODE = 5,
  46. ENTITY_NODE = 6,
  47. PROCESSING_INSTRUCTION_NODE = 7,
  48. COMMENT_NODE = 8,
  49. DOCUMENT_NODE = 9,
  50. DOCUMENT_TYPE_NODE = 10,
  51. DOCUMENT_FRAGMENT_NODE = 11, 
  52. NOTATION_NODE = 12
  53. };
  54. // methods
  55. bool hasChildNodes();
  56. bool hasAttributes();
  57. // properties
  58. JSString* getNodeName();
  59. JSString* getNodeValue();
  60. int getNodeType();
  61. JSDOMNode* getParentNode();
  62. JSDOMNodeList* getChildNodes();
  63. JSDOMNode* getFirstChild();
  64. JSDOMNode* getLastChild();
  65. JSDOMNode* getPreviousSibling();
  66. JSDOMNode* getNextSibling();
  67. JSDOMNamedNodeMap* getAttributes();
  68. virtual JSDOMDocument* getOwnerDocument();
  69. JSString* getNamespaceURI();
  70. JSString* getPrefix();
  71. JSString* getLocalName();
  72. public:
  73. static JSDOMNode *createNode( DOMNode *node, JSDOMDocument *owner, JSDOMNode *ownerNode = NULL );
  74. protected:
  75. static bool InitNodeObject( JSContext *cx, JSObject *obj );
  76. static JSBool JSGetProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp);
  77. enum {
  78. JSVAR_ELEMENT_NODE,
  79. JSVAR_ATTRIBUTE_NODE,
  80. JSVAR_TEXT_NODE,
  81. JSVAR_CDATA_SECTION_NODE,
  82. JSVAR_ENTITY_REFERENCE_NODE,
  83. JSVAR_ENTITY_NODE,
  84. JSVAR_PROCESSING_INSTRUCTION_NODE,
  85. JSVAR_COMMENT_NODE,
  86. JSVAR_DOCUMENT_NODE,
  87. JSVAR_nodeName,
  88. JSVAR_nodeValue,
  89. JSVAR_nodeType,
  90. JSVAR_parentNode,
  91. JSVAR_childNodes,
  92. JSVAR_firstChild,
  93. JSVAR_lastChild,
  94. JSVAR_previousSibling,
  95. JSVAR_nextSibling,
  96. JSVAR_attributes,
  97. JSVAR_ownerDocument,
  98. JSVAR_namespaceURI,
  99. JSVAR_prefix,
  100. JSVAR_localName,
  101. JSVAR_LASTENUM
  102. };
  103. struct _JSinternalStruct {
  104. JSObject *o;
  105. JSContext *c;
  106. _JSinternalStruct() : o(NULL) {};
  107. ~_JSinternalStruct() { if (o) JS_SetPrivate(NULL,o, NULL); };
  108. };
  109. _JSinternalStruct _JSinternal;
  110. static JSClass _jsClass;
  111. static JSPropertySpec _JSPropertySpec[];
  112. static JSPropertySpec _JSPropertySpec_static[];
  113. static JSFunctionSpec _JSFunctionSpec[];
  114. private:
  115. static JSBool JSConstructor(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
  116. static void JSDestructor(JSContext *cx, JSObject *obj);
  117. static JSBool JSFUNC_hasAttributes(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
  118. static JSBool JSFUNC_hasChildNodes(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
  119. private:
  120. DOMNode *_node;
  121. JSDOMDocument *_owner;
  122. };
  123. #endif