bool EditingStyle::conflictsWithInlineStyleOfElement(StyledElement* element, EditingStyle* extractedStyle, Vector<CSSPropertyID>* conflictingProperties) const { ASSERT(element); ASSERT(!conflictingProperties || conflictingProperties->isEmpty()); CSSMutableStyleDeclaration* inlineStyle = element->inlineStyleDecl(); if (!m_mutableStyle || !inlineStyle) return false; if (!conflictingProperties) { CSSMutableStyleDeclaration::const_iterator end = m_mutableStyle->end(); for (CSSMutableStyleDeclaration::const_iterator it = m_mutableStyle->begin(); it != end; ++it) { CSSPropertyID propertyID = static_cast<CSSPropertyID>(it->id()); // We don't override whitespace property of a tab span because that would collapse the tab into a space. if (propertyID == CSSPropertyWhiteSpace && isTabSpanNode(element)) continue; if (inlineStyle->getPropertyCSSValue(propertyID)) return true; } return false; } CSSMutableStyleDeclaration::const_iterator end = m_mutableStyle->end(); for (CSSMutableStyleDeclaration::const_iterator it = m_mutableStyle->begin(); it != end; ++it) { CSSPropertyID propertyID = static_cast<CSSPropertyID>(it->id()); if ((propertyID == CSSPropertyWhiteSpace && isTabSpanNode(element)) || !inlineStyle->getPropertyCSSValue(propertyID)) continue; if (propertyID == CSSPropertyUnicodeBidi && inlineStyle->getPropertyCSSValue(CSSPropertyDirection)) { if (extractedStyle) extractedStyle->setProperty(propertyID, inlineStyle->getPropertyValue(propertyID), inlineStyle->getPropertyPriority(propertyID)); conflictingProperties->append(CSSPropertyDirection); } conflictingProperties->append(propertyID); if (extractedStyle) extractedStyle->setProperty(propertyID, inlineStyle->getPropertyValue(propertyID), inlineStyle->getPropertyPriority(propertyID)); } return !conflictingProperties->isEmpty(); }
void EditingStyle::removeStyleConflictingWithStyleOfNode(Node* node) { if (!node || !node->parentNode() || !m_mutableStyle) return; RefPtr<CSSMutableStyleDeclaration> parentStyle = editingStyleFromComputedStyle(computedStyle(node->parentNode())); RefPtr<CSSMutableStyleDeclaration> nodeStyle = editingStyleFromComputedStyle(computedStyle(node)); parentStyle->diff(nodeStyle.get()); CSSMutableStyleDeclaration::const_iterator end = nodeStyle->end(); for (CSSMutableStyleDeclaration::const_iterator it = nodeStyle->begin(); it != end; ++it) m_mutableStyle->removeProperty(it->id()); }