⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jsdomnode.cpp

📁 openvxi3.4是一个voicexml对话脚本语言的解释器源码.可用VC6.0编译.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
            }
            break;

         case JSVAR_nextSibling:
            if (priv){
               JSDOMNode *n = priv->getNextSibling();
               *vp = (n ? __objectp_TO_JSVal(cx,n) : JSVAL_NULL);
            }
            break;

         case JSVAR_attributes:
            if (priv){
               JSDOMNamedNodeMap *nm = priv->getAttributes();
               *vp = (nm ? __objectp_TO_JSVal(cx,nm) : JSVAL_NULL);
            }
            break;

         case JSVAR_ownerDocument:
            if (priv){
               JSDOMNode *n = priv->getOwnerDocument();
               *vp = (n ? __objectp_TO_JSVal(cx,n) : JSVAL_NULL);
            }
            break;

         case JSVAR_namespaceURI:
            if (priv)
               *vp = __STRING_TO_JSVAL(priv->getNamespaceURI());
            break;

         case JSVAR_prefix:
            if (priv)
               *vp = __STRING_TO_JSVAL(priv->getPrefix());
            break;

         case JSVAR_localName:
            if (priv)
               *vp = __STRING_TO_JSVAL(priv->getLocalName());
            break;
         }
     }
  }
  catch(const DOMException &dome) {
    return js_throw_dom_error(cx, obj, dome.code);
  }
  catch( ... ) {
    return js_throw_error(cx, obj, "unknown exception" );
  }

  return JS_TRUE;
}

// JavaScript Function Table
JSFunctionSpec JSDOMNode::_JSFunctionSpec[] = {
    { "hasAttributes", JSFUNC_hasAttributes, 0, 0, 0 },
    { "hasChildNodes", JSFUNC_hasChildNodes, 0, 0, 0 },
    { 0, 0, 0, 0, 0 }
};

// JavaScript Function Wrappers
JSBool JSDOMNode::JSFUNC_hasAttributes(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
  JSDOMNode *p = (JSDOMNode*)JS_GetPrivate(cx, obj);
  if (argc == 0) {
    *rval = __bool_TO_JSVal(cx,p->hasAttributes());
    return JS_TRUE;
  }
  return JS_FALSE;
}

JSBool JSDOMNode::JSFUNC_hasChildNodes(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
  JSDOMNode *p = (JSDOMNode*)JS_GetPrivate(cx, obj);
  if (argc == 0) {
    *rval = __bool_TO_JSVal(cx,p->hasChildNodes());
    return JS_TRUE;
  }
  return JS_FALSE;
}



JSDOMNode *JSDOMNode::createNode(DOMNode *node, JSDOMDocument *doc, JSDOMNode *ownerNode)
{
  if (!node) return NULL;

  JSDOMNode *jsnode = NULL;

  int type = node->getNodeType();
  switch( type )
  {
  case JSDOMNode::ELEMENT_NODE:
    jsnode = new JSDOMElement( reinterpret_cast<DOMElement *>(node), doc);
    break;
  case JSDOMNode::ATTRIBUTE_NODE:
    jsnode = new JSDOMAttr( reinterpret_cast<DOMAttr *>(node), doc, (JSDOMElement*) ownerNode );
    break;
  case JSDOMNode::TEXT_NODE:
    jsnode = new JSDOMText( reinterpret_cast<DOMText *>(node), doc );
    break;
  case JSDOMNode::CDATA_SECTION_NODE:
    jsnode = new JSDOMCDATA( reinterpret_cast<DOMCDATASection *>(node), doc );
    break;
  case JSDOMNode::ENTITY_REFERENCE_NODE:
    jsnode = new JSDOMEntityReference( reinterpret_cast<DOMEntityReference *>(node), doc );
    break;
  case JSDOMNode::PROCESSING_INSTRUCTION_NODE:
    jsnode = new JSDOMProcessingInstruction( reinterpret_cast<DOMProcessingInstruction *>(node), doc );
    break;
  case JSDOMNode::COMMENT_NODE:
    jsnode = new JSDOMComment( reinterpret_cast<DOMComment *>(node), doc );
    break;
  case JSDOMNode::DOCUMENT_NODE:
    jsnode = new JSDOMDocument( reinterpret_cast<DOMDocument *>(node));
    break;

  // !!! not it the VXML spec
  //case JSDOMNode::ENTITY_NODE:  
  //case DOCUMENT_TYPE_NODE:
  //case DOCUMENT_FRAGMENT_NODE:
  //case NOTATION_NODE:
  default:
    jsnode = new JSDOMNode( node, doc ); 
    break;
  };

  return jsnode;
}



JSDOMNode::JSDOMNode( DOMNode *node, JSDOMDocument *owner ) : _node(node), _owner(owner)
{
}

JSString* JSDOMNode::getNodeName()
{
  if (_node == NULL) return NULL;

  XMLChToVXIchar name(_node->getNodeName());
  GET_JSCHAR_FROM_VXICHAR(tmpvalue, tmpvaluelen, name.c_str());
  return JS_NewUCStringCopyZ(_JSinternal.c, tmpvalue);
}

JSString* JSDOMNode::getNodeValue()
{
  if (_node == NULL) return NULL;

  XMLChToVXIchar value(_node->getNodeValue());
  GET_JSCHAR_FROM_VXICHAR(tmpvalue, tmpvaluelen, value.c_str());
  return JS_NewUCStringCopyZ(_JSinternal.c, tmpvalue);
}

int JSDOMNode::getNodeType()
{
  return ( _node ? _node->getNodeType() : 0 );
}

JSDOMNode* JSDOMNode::getParentNode()
{
  return JSDOMNode::createNode(_node->getParentNode(),_owner);
}

JSDOMNodeList* JSDOMNode::getChildNodes()
{
  return new JSDOMNodeList((_node ? _node->getChildNodes() : NULL), _owner);
}

JSDOMNode* JSDOMNode::getFirstChild()
{
  return JSDOMNode::createNode(_node->getFirstChild(),_owner);
}

JSDOMNode* JSDOMNode::getLastChild()
{
  return JSDOMNode::createNode(_node->getLastChild(),_owner);
}

JSDOMNode* JSDOMNode::getPreviousSibling()
{
  return JSDOMNode::createNode(_node->getPreviousSibling(),_owner);
}

JSDOMNode* JSDOMNode::getNextSibling()
{
  return JSDOMNode::createNode(_node->getNextSibling(),_owner);
}

JSDOMNamedNodeMap* JSDOMNode::getAttributes()
{
  if (!_node) return NULL;
  DOMNamedNodeMap *attrs = _node->getAttributes();
  if (!attrs) return NULL;
  return new JSDOMNamedNodeMap(attrs, this);
}

JSDOMDocument* JSDOMNode::getOwnerDocument()
{
  /*DOMDocument *owner = _node->getOwnerDocument();
  if (!owner) return NULL;
  return new JSDOMDocument(_node->getOwnerDocument());*/
  return _owner;
}

JSString* JSDOMNode::getNamespaceURI()
{
  if (_node == NULL) return NULL;
  const XMLCh *p = _node->getNamespaceURI();
  if (!p) return NULL;
  XMLChToVXIchar ns(_node->getNamespaceURI());
  GET_JSCHAR_FROM_VXICHAR(tmpvalue, tmpvaluelen, ns.c_str());
  return JS_NewUCStringCopyZ(_JSinternal.c, tmpvalue);
}

JSString* JSDOMNode::getPrefix()
{
  if (_node == NULL) return NULL;
  const XMLCh *p = _node->getPrefix();
  if (!p) return NULL;
  XMLChToVXIchar prefix(p);
  GET_JSCHAR_FROM_VXICHAR(tmpvalue, tmpvaluelen, prefix.c_str());
  return JS_NewUCStringCopyZ(_JSinternal.c, tmpvalue);
}

JSString* JSDOMNode::getLocalName()
{
  if (_node == NULL) return NULL;
  XMLChToVXIchar name(_node->getLocalName());
  GET_JSCHAR_FROM_VXICHAR(tmpvalue, tmpvaluelen, name.c_str());
  return JS_NewUCStringCopyZ(_JSinternal.c, tmpvalue);
}

bool JSDOMNode::hasChildNodes()
{
  return ( _node ? _node->hasChildNodes() : false );
}
 
bool JSDOMNode::hasAttributes()
{
  return ( _node ? _node->hasAttributes() : false );
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -