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

📄 html_tableimpl.cpp

📁 khtml在gtk上的移植版本
💻 CPP
📖 第 1 页 / 共 3 页
字号:
        HTMLElementImpl::addChild(child);        // Now simply return ourselves as the newnode.  This has the effect of        // demoting the form to a leaf and moving it safely out of the way.        return this;    }    return HTMLTablePartElementImpl::addChild(child);}// these functions are rather slow, since we need to get the row at// the index... but they aren't used during usual HTML parsing anywayHTMLElementImpl *HTMLTableSectionElementImpl::insertRow( long index, int& exceptioncode ){    HTMLTableRowElementImpl *r = 0L;    NodeListImpl *children = childNodes();    int numRows = children ? (int)children->length() : 0;    //kdDebug(6030) << k_funcinfo << "index=" << index << " numRows=" << numRows << endl;    if ( index < -1 || index > numRows ) {        exceptioncode = DOMException::INDEX_SIZE_ERR; // per the DOM    }    else    {        r = new HTMLTableRowElementImpl(docPtr());        if ( numRows == index || index == -1 )            appendChild(r, exceptioncode);        else {            NodeImpl *n;            if(index < 1)                n = firstChild();            else                n = children->item(index);            insertBefore(r, n, exceptioncode );        }    }    delete children;    return r;}void HTMLTableSectionElementImpl::deleteRow( long index, int &exceptioncode ){    NodeListImpl *children = childNodes();    int numRows = children ? (int)children->length() : 0;    if ( index == -1 ) index = numRows - 1;    if( index >= 0 && index < numRows )        HTMLElementImpl::removeChild(children->item(index), exceptioncode);    else        exceptioncode = DOMException::INDEX_SIZE_ERR;    delete children;}int HTMLTableSectionElementImpl::numRows() const{    int rows = 0;    const NodeImpl *n = firstChild();    while (n) {        if (n->id() == ID_TR)            rows++;        n = n->nextSibling();    }    return rows;}// -------------------------------------------------------------------------NodeImpl::Id HTMLTableRowElementImpl::id() const{    return ID_TR;}NodeImpl *HTMLTableRowElementImpl::addChild(NodeImpl *child){#ifdef DEBUG_LAYOUT    kdDebug( 6030 ) << nodeName().string() << "(Trow)::addChild( " << child->nodeName().string() << " )" << endl;#endif    if (child->id() == ID_FORM) {        // First add the child.        HTMLElementImpl::addChild(child);        // Now simply return ourselves as the newnode.  This has the effect of        // demoting the form to a leaf and moving it safely out of the way.        return this;    }    return HTMLTablePartElementImpl::addChild(child);}long HTMLTableRowElementImpl::rowIndex() const{    int rIndex = 0;    NodeImpl *table = parentNode();    if ( !table )	return -1;    table = table->parentNode();    if ( !table || table->id() != ID_TABLE )	return -1;    HTMLTableSectionElementImpl *foot = static_cast<HTMLTableElementImpl *>(table)->tFoot();    NodeImpl *node = table->firstChild();    while ( node ) {        if ( node != foot && (node->id() == ID_THEAD || node->id() == ID_TFOOT || node->id() == ID_TBODY) ) {	    HTMLTableSectionElementImpl* section = static_cast<HTMLTableSectionElementImpl *>(node);	    const NodeImpl *row = section->firstChild();	    while ( row ) {		if ( row == this )		    return rIndex;		rIndex++;		row = row->nextSibling();	    }	}	node = node->nextSibling();    }    const NodeImpl *row = foot->firstChild();    while ( row ) {	if ( row == this )	    return rIndex;	rIndex++;	row = row->nextSibling();    }    // should never happen    return -1;}long HTMLTableRowElementImpl::sectionRowIndex() const{    int rIndex = 0;    const NodeImpl *n = this;    do {        n = n->previousSibling();        if (n && n->isElementNode() && n->id() == ID_TR)            rIndex++;    }    while (n);    return rIndex;}HTMLElementImpl *HTMLTableRowElementImpl::insertCell( long index, int &exceptioncode ){    HTMLTableCellElementImpl *c = 0L;    NodeListImpl *children = childNodes();    int numCells = children ? children->length() : 0;    if ( index < -1 || index > numCells )        exceptioncode = DOMException::INDEX_SIZE_ERR; // per the DOM    else    {        c = new HTMLTableCellElementImpl(docPtr(), ID_TD);        if(numCells == index || index == -1)            appendChild(c, exceptioncode);        else {            NodeImpl *n;            if(index < 1)                n = firstChild();            else                n = children->item(index);            insertBefore(c, n, exceptioncode);        }    }    delete children;    return c;}void HTMLTableRowElementImpl::deleteCell( long index, int &exceptioncode ){    NodeListImpl *children = childNodes();    int numCells = children ? children->length() : 0;    if ( index == -1 ) index = numCells-1;    if( index >= 0 && index < numCells )        HTMLElementImpl::removeChild(children->item(index), exceptioncode);    else        exceptioncode = DOMException::INDEX_SIZE_ERR;    delete children;}// -------------------------------------------------------------------------HTMLTableCellElementImpl::HTMLTableCellElementImpl(DocumentPtr *doc, int tag)  : HTMLTablePartElementImpl(doc){  _col = -1;  _row = -1;  cSpan = rSpan = 1;  _id = tag;  rowHeight = 0;  m_solid = false;}HTMLTableCellElementImpl::~HTMLTableCellElementImpl(){}bool HTMLTableCellElementImpl::mapToEntry(NodeImpl::Id attr, MappedAttributeEntry& result) const{    switch(attr) {        case ATTR_NOWRAP:            result = eUniversal;            return false;        case ATTR_WIDTH:        case ATTR_HEIGHT:            result = eCell; // Because of the quirky behavior of ignoring 0 values, cells are special.            return false;        default:            break;    }    return HTMLTablePartElementImpl::mapToEntry(attr, result);}void HTMLTableCellElementImpl::parseHTMLAttribute(HTMLAttributeImpl *attr){    switch(attr->id())    {    case ATTR_ROWSPAN:        // ###        rSpan = !attr->isNull() ? attr->value().toInt() : 1;        // limit this to something not causing an overflow with short int        if(rSpan < 1 || rSpan > 1024) rSpan = 1;        break;    case ATTR_COLSPAN:        // ###        cSpan = !attr->isNull() ? attr->value().toInt() : 1;        // limit this to something not causing an overflow with short int        if(cSpan < 1 || cSpan > 1024) cSpan = 1;        break;    case ATTR_NOWRAP:        if (!attr->isNull())            addCSSProperty(attr, CSS_PROP_WHITE_SPACE, CSS_VAL__KHTML_NOWRAP);        break;    case ATTR_WIDTH:        if (!attr->value().isEmpty()) {            int widthInt = attr->value().toInt();            if (widthInt > 0) // width="0" is ignored for compatibility with WinIE.                addCSSLength( attr, CSS_PROP_WIDTH, attr->value() );        }        break;    case ATTR_HEIGHT:        if (!attr->value().isEmpty()) {            int heightInt = attr->value().toInt();            if (heightInt > 0) // height="0" is ignored for compatibility with WinIE.                addCSSLength( attr, CSS_PROP_HEIGHT, attr->value() );        }        break;    case ATTR_NOSAVE:	break;    default:        HTMLTablePartElementImpl::parseHTMLAttribute(attr);    }}// used by table cells to share style decls created by the enclosing table.CSSStyleDeclarationImpl* HTMLTableCellElementImpl::additionalAttributeStyleDecl(){    HTMLElementImpl* p = static_cast<HTMLElementImpl*>(parentNode());    while(p && p->id() != ID_TABLE)        p = static_cast<HTMLElementImpl*>(p->parentNode());    if (p) {        HTMLTableElementImpl* table = static_cast<HTMLTableElementImpl*>(p);        return table->getSharedCellDecl();    }    return 0;}void HTMLTableCellElementImpl::attach(){    HTMLElementImpl* p = static_cast<HTMLElementImpl*>(parentNode());    while(p && p->id() != ID_TABLE)        p = static_cast<HTMLElementImpl*>(p->parentNode());    HTMLTablePartElementImpl::attach();}bool HTMLTableCellElementImpl::isURLAttribute(AttributeImpl *attr) const{    return attr->id() == ATTR_BACKGROUND;}// -------------------------------------------------------------------------HTMLTableColElementImpl::HTMLTableColElementImpl(DocumentPtr *doc, ushort i)    : HTMLTablePartElementImpl(doc){    _id = i;    _span = (_id == ID_COLGROUP ? 0 : 1);}NodeImpl::Id HTMLTableColElementImpl::id() const{    return _id;}bool HTMLTableColElementImpl::mapToEntry(NodeImpl::Id attr, MappedAttributeEntry& result) const{    switch(attr) {        case ATTR_WIDTH:            result = eUniversal;            return false;        default:            break;    }    return HTMLTablePartElementImpl::mapToEntry(attr, result);}void HTMLTableColElementImpl::parseHTMLAttribute(HTMLAttributeImpl *attr){    switch(attr->id())    {    case ATTR_SPAN:        _span = !attr->isNull() ? attr->value().toInt() : 1;        break;    case ATTR_WIDTH:        if (!attr->value().isEmpty())            addCSSLength(attr, CSS_PROP_WIDTH, attr->value());        break;    default:        HTMLTablePartElementImpl::parseHTMLAttribute(attr);    }}// -------------------------------------------------------------------------NodeImpl::Id HTMLTableCaptionElementImpl::id() const{    return ID_CAPTION;}bool HTMLTableCaptionElementImpl::mapToEntry(NodeImpl::Id attr, MappedAttributeEntry& result) const{    if (attr == ATTR_ALIGN) {        result = eCaption;        return false;    }    return HTMLElementImpl::mapToEntry(attr, result);}void HTMLTableCaptionElementImpl::parseHTMLAttribute(HTMLAttributeImpl *attr){    switch(attr->id())    {    case ATTR_ALIGN:        if (!attr->value().isEmpty())            addCSSProperty(attr, CSS_PROP_CAPTION_SIDE, attr->value());        break;    default:        HTMLElementImpl::parseHTMLAttribute(attr);    }}

⌨️ 快捷键说明

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