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

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. #include "JSDOMProcessingInstruction.hpp"
  23. #include <xercesc/dom/DOMException.hpp>
  24. // JavaScript class definition
  25. JSClass JSDOMProcessingInstruction::_jsClass = {
  26.   "ProcessingInstruction", JSCLASS_HAS_PRIVATE,
  27.   JS_PropertyStub, JS_PropertyStub,
  28.   JSDOMProcessingInstruction::JSGetProperty, JS_PropertyStub,
  29.   JS_EnumerateStub, JS_ResolveStub,
  30.   JS_ConvertStub, JSDOMProcessingInstruction::JSDestructor,
  31.   0, 0, 0, 0, 
  32.   0, 0, 0, 0
  33. };
  34. // JavaScript Initialization Method
  35. JSObject *JSDOMProcessingInstruction::JSInit(JSContext *cx, JSObject *obj) {
  36.   if (obj==NULL)
  37.     obj = JS_GetGlobalObject(cx);
  38.   jsval oldobj;
  39.   if (JS_TRUE == JS_LookupProperty(cx, obj, JSDOMProcessingInstruction::_jsClass.name, &oldobj) && JSVAL_IS_OBJECT(oldobj))
  40.     return JSVAL_TO_OBJECT(oldobj);
  41.   JSObject *newobj = JS_InitClass(cx, obj, NULL, &JSDOMProcessingInstruction::_jsClass,
  42.                                   NULL, 0,
  43.                                   JSDOMProcessingInstruction::_JSPropertySpec, NULL,
  44.                                   NULL, NULL);
  45.   if (newobj) {
  46.     InitNodeObject(cx, newobj);
  47.   }
  48.   return newobj;
  49. }
  50. // JavaScript Destructor
  51. void JSDOMProcessingInstruction::JSDestructor(JSContext *cx, JSObject *obj) {
  52.   JSDOMProcessingInstruction *p = (JSDOMProcessingInstruction*)JS_GetPrivate(cx, obj);
  53.   if (p) delete p;
  54. }
  55. // JavaScript Object Linking
  56. JSObject *JSDOMProcessingInstruction::getJSObject(JSContext *cx) {
  57.   if (!cx) return NULL;
  58.   if (!_JSinternal.o) {
  59.     _JSinternal.o = newJSObject(cx);
  60.     _JSinternal.c = cx;
  61.     if (!JS_SetPrivate(cx, _JSinternal.o, this)) return NULL;
  62.   }
  63.   return _JSinternal.o;
  64. }
  65. JSObject *JSDOMProcessingInstruction::newJSObject(JSContext *cx) {
  66.   return JS_NewObject(cx, &JSDOMProcessingInstruction::_jsClass, NULL, NULL);
  67. }
  68. // JavaScript Variable Table
  69. JSPropertySpec JSDOMProcessingInstruction::_JSPropertySpec[] = {
  70.   { "target", JSDOMProcessingInstruction::JSVAR_target, JSPROP_ENUMERATE | JSPROP_READONLY, 0, 0},
  71.   { "data", JSDOMProcessingInstruction::JSVAR_data, JSPROP_ENUMERATE | JSPROP_READONLY, 0, 0},
  72.   { 0, 0, 0, 0, 0 }
  73. };
  74. // JavaScript Get Property Wrapper
  75. JSBool JSDOMProcessingInstruction::JSGetProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp) {
  76.   if (JSVAL_IS_INT(id)) {
  77.     if (JSVAL_TO_INT(id) < JSDOMNode::JSVAR_LASTENUM)
  78.       return JSDOMNode::JSGetProperty(cx, obj, id, vp);
  79.     try {
  80.       JSDOMProcessingInstruction *priv;
  81.       switch(JSVAL_TO_INT(id)) {
  82.       case JSVAR_target:
  83.         priv = (JSDOMProcessingInstruction*)JS_GetPrivate(cx, obj);
  84.         if (priv==NULL)
  85.           *vp = JSVAL_NULL;
  86.         else
  87.           *vp = __STRING_TO_JSVAL(priv->getTarget());
  88.         break;
  89.       case JSVAR_data:
  90.         priv = (JSDOMProcessingInstruction*)JS_GetPrivate(cx, obj);
  91.         if (priv==NULL)
  92.           *vp = JSVAL_NULL;
  93.         else
  94.           *vp = __STRING_TO_JSVAL(priv->getData());
  95.         break;
  96.       }
  97.     }
  98.     catch(const DOMException &dome) {
  99.       return js_throw_dom_error(cx, obj, dome.code);
  100.     }
  101.     catch( ... ) {
  102.       return js_throw_error(cx, obj, "unknown exception" );
  103.     }
  104.   }
  105.   return JS_TRUE;
  106. }
  107. JSDOMProcessingInstruction::JSDOMProcessingInstruction( DOMProcessingInstruction *pi, JSDOMDocument *doc ) : JSDOMNode( pi, doc ), _pi(pi)
  108. {
  109. }
  110. JSString* JSDOMProcessingInstruction::getTarget()
  111. {
  112.   if (_pi == NULL) return NULL;
  113.   XMLChToVXIchar target(_pi->getTarget());
  114.   GET_JSCHAR_FROM_VXICHAR(tmpvalue, tmpvaluelen, target.c_str());
  115.   return JS_NewUCStringCopyZ(_JSinternal.c, tmpvalue);
  116. }
  117. JSString* JSDOMProcessingInstruction::getData()
  118. {
  119.   if (_pi == NULL) return NULL;
  120.   XMLChToVXIchar data(_pi->getData());
  121.   GET_JSCHAR_FROM_VXICHAR(tmpvalue, tmpvaluelen, data.c_str());
  122.   return JS_NewUCStringCopyZ(_JSinternal.c, tmpvalue);
  123. }