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

📄 dom2_traversalimpl.cpp

📁 将konqueror浏览器移植到ARM9 2410中
💻 CPP
📖 第 1 页 / 共 2 页
字号:
Node TreeWalkerImpl::getRoot(){    // ###    return 0;}unsigned long TreeWalkerImpl::getWhatToShow(){    // ###    return 0;}NodeFilter TreeWalkerImpl::getFilter(){    // ###    return 0;}bool TreeWalkerImpl::getExpandEntityReferences(){    // ###    return 0;}Node TreeWalkerImpl::getCurrentNode(){    return currentNode;}void TreeWalkerImpl::setWhatToShow(long _whatToShow){  // do some testing wether this is an accepted value  whatToShow = _whatToShow;}void TreeWalkerImpl::setFilter(NodeFilter *_filter){  if(_filter)    filter = _filter;}void TreeWalkerImpl::setExpandEntityReferences(bool value){  expandEntityReferences = value;}void TreeWalkerImpl::setCurrentNode( const Node n ){    if( !n.isNull() )    {        rootNode = n;        currentNode = n;    }//     else//         throw( DOMException::NOT_SUPPORTED_ERR );}Node TreeWalkerImpl::parentNode(  ){    Node n = getParentNode(currentNode);    if( !n.isNull() )        currentNode = n;    return n;}Node TreeWalkerImpl::firstChild(  ){    Node n = getFirstChild(currentNode);    if( !n.isNull() )        currentNode = n;    return n;}Node TreeWalkerImpl::lastChild(  ){    Node n = getLastChild(currentNode);    if( !n.isNull() )        currentNode = n;    return n;}Node TreeWalkerImpl::previousSibling(  ){    Node n = getPreviousSibling(currentNode);    if( !n.isNull() )        currentNode = n;    return n;}Node TreeWalkerImpl::nextSibling(  ){    Node n = getNextSibling(currentNode);    if( !n.isNull() )        currentNode = n;    return n;}Node TreeWalkerImpl::previousNode(  ){/* 1. my previous sibling.lastchild * 2. my previous sibling * 3. my parent */    Node n = getPreviousSibling(currentNode);    if( n.isNull() )    {        n = getParentNode(currentNode);        if( !n.isNull() )      //parent        {            currentNode = n;            return currentNode;        }        else                  // parent failed.. no previous node            return Node();    }    Node child = getLastChild(n);    if( !child.isNull() )     // previous siblings last child    {        currentNode = child;        return currentNode;    }    else                      // previous sibling    {        currentNode = n;        return currentNode;    }    return Node();            // should never get here!}Node TreeWalkerImpl::nextNode(  ){/*  1. my first child *  2. my next sibling *  3. my parents sibling, or their parents sibling (loop) *  4. not found */    Node n = getFirstChild(currentNode);    if( !n.isNull()  ) // my first child    {        currentNode = n;        return n;    }    n = getNextSibling(currentNode); // my next sibling    if( !n.isNull() )    {        currentNode = n;        return currentNode;    }    Node parent = getParentNode(currentNode);    while( !parent.isNull() ) // parents sibling    {        n = getNextSibling(parent);        if( !n.isNull() )        {          currentNode = n;          return currentNode;        }        else            parent = getParentNode(parent);    }    return Node();}short TreeWalkerImpl::isAccepted(Node n){    // if XML is implemented we have to check expandEntityRerefences in this function  if( ( ( 1 << n.nodeType()-1 ) & whatToShow) != 0 )    {      if(filter)        return filter->acceptNode(n);      else        return NodeFilter::FILTER_ACCEPT;    }  return NodeFilter::FILTER_SKIP;}Node TreeWalkerImpl::getParentNode(Node n){     short _result = NodeFilter::FILTER_ACCEPT;    if( n == rootNode /*|| n.isNull()*/ )      return Node();    Node _tempCurrent = n.parentNode();    if( _tempCurrent.isNull() )      return Node();    _result = isAccepted(_tempCurrent );    if(_result == NodeFilter::FILTER_ACCEPT)      return _tempCurrent;       // match found    return getParentNode(_tempCurrent);}Node TreeWalkerImpl::getFirstChild(Node n){    short _result;    if( n.isNull() || n.firstChild().isNull() )        return Node();    n = n.firstChild();    _result = isAccepted(n);    switch(_result)    {         case NodeFilter::FILTER_ACCEPT:           return n;           break;        case NodeFilter::FILTER_SKIP:          if( n.hasChildNodes() )                return getFirstChild(n);            else                return getNextSibling(n);            break;        case NodeFilter::FILTER_REJECT:            return getNextSibling(n);            break;    }    return Node();      // should never get here!}Node TreeWalkerImpl::getLastChild(Node n){    short _result;    if( n.isNull() || n.lastChild().isNull() )        return Node();    n = n.lastChild();    _result = isAccepted(n);    switch(_result)    {        case NodeFilter::FILTER_ACCEPT:            return n;            break;        case NodeFilter::FILTER_SKIP:            if( n.hasChildNodes() )                return getLastChild(n);            else                return getPreviousSibling(n);            break;        case NodeFilter::FILTER_REJECT:            return getPreviousSibling(n);            break;    }    return Node();}Node TreeWalkerImpl::getPreviousSibling(Node n){    short _result;    Node _tempCurrent;    if( n.isNull() )        return Node();    //first the cases if we have a previousSibling    _tempCurrent = n.previousSibling();    if( !_tempCurrent.isNull() )    {        _result = isAccepted(_tempCurrent);        switch(_result)        {            case NodeFilter::FILTER_ACCEPT:                return _tempCurrent;                break;            case NodeFilter::FILTER_SKIP:            {                Node nskip = getLastChild(_tempCurrent);                if( !nskip.isNull() )                    return nskip;                return getPreviousSibling(_tempCurrent);                break;            }            case NodeFilter::FILTER_REJECT:                return getPreviousSibling(_tempCurrent);                break;        }    }    // now the case if we don't have previous sibling    else    {        _tempCurrent = _tempCurrent.parentNode();        if(_tempCurrent.isNull() || _tempCurrent == rootNode)            return Node();        _result = isAccepted(_tempCurrent);        if(_result == NodeFilter::FILTER_SKIP)            return getPreviousSibling(_tempCurrent);        return Node();    }    return Node();  // should never get here!}Node TreeWalkerImpl::getNextSibling(Node n){    Node _tempCurrent;    short _result;    if( n.isNull() || _tempCurrent == rootNode)        return Node();    _tempCurrent = n.nextSibling();    if( !_tempCurrent.isNull() )    {        _result = isAccepted(_tempCurrent);        switch(_result)        {            case NodeFilter::FILTER_ACCEPT:                return _tempCurrent;                break;            case NodeFilter::FILTER_SKIP:            {                Node nskip = getFirstChild(_tempCurrent);                if( !nskip.isNull() )                    return nskip;                return getNextSibling(_tempCurrent);                break;            }            case NodeFilter::FILTER_REJECT:                return getNextSibling(_tempCurrent);                break;        }    }    else    {        _tempCurrent = _tempCurrent.parentNode();        if(_tempCurrent.isNull() || _tempCurrent == rootNode)            return Node();        _result = isAccepted(_tempCurrent);        if(_result == NodeFilter::FILTER_SKIP)            return getNextSibling(_tempCurrent);        return Node();    }    return Node();}

⌨️ 快捷键说明

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