| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2005, 2006, 2008, 2009 Apple Inc. All rights reserved. | 2 * Copyright (C) 2005, 2006, 2008, 2009 Apple Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 475 // We are allowed to leave the highest ancestor with unicode-bidi unsplit if
it is unicode-bidi: embed and direction: allowedDirection. | 475 // We are allowed to leave the highest ancestor with unicode-bidi unsplit if
it is unicode-bidi: embed and direction: allowedDirection. |
| 476 // In that case, we return the unsplit ancestor. Otherwise, we return 0. | 476 // In that case, we return the unsplit ancestor. Otherwise, we return 0. |
| 477 Element* block = enclosingBlock(node); | 477 Element* block = enclosingBlock(node); |
| 478 if (!block) | 478 if (!block) |
| 479 return 0; | 479 return 0; |
| 480 | 480 |
| 481 ContainerNode* highestAncestorWithUnicodeBidi = nullptr; | 481 ContainerNode* highestAncestorWithUnicodeBidi = nullptr; |
| 482 ContainerNode* nextHighestAncestorWithUnicodeBidi = nullptr; | 482 ContainerNode* nextHighestAncestorWithUnicodeBidi = nullptr; |
| 483 int highestAncestorUnicodeBidi = 0; | 483 int highestAncestorUnicodeBidi = 0; |
| 484 for (ContainerNode* n = node->parentNode(); n != block; n = n->parentNode())
{ | 484 for (ContainerNode* n = node->parentNode(); n != block; n = n->parentNode())
{ |
| 485 int unicodeBidi = getIdentifierValue(CSSComputedStyleDeclaration::create
(n).get(), CSSPropertyUnicodeBidi); | 485 int unicodeBidi = getIdentifierValue(CSSComputedStyleDeclaration::create
(n), CSSPropertyUnicodeBidi); |
| 486 if (unicodeBidi && unicodeBidi != CSSValueNormal) { | 486 if (unicodeBidi && unicodeBidi != CSSValueNormal) { |
| 487 highestAncestorUnicodeBidi = unicodeBidi; | 487 highestAncestorUnicodeBidi = unicodeBidi; |
| 488 nextHighestAncestorWithUnicodeBidi = highestAncestorWithUnicodeBidi; | 488 nextHighestAncestorWithUnicodeBidi = highestAncestorWithUnicodeBidi; |
| 489 highestAncestorWithUnicodeBidi = n; | 489 highestAncestorWithUnicodeBidi = n; |
| 490 } | 490 } |
| 491 } | 491 } |
| 492 | 492 |
| 493 if (!highestAncestorWithUnicodeBidi) | 493 if (!highestAncestorWithUnicodeBidi) |
| 494 return 0; | 494 return 0; |
| 495 | 495 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 525 { | 525 { |
| 526 Element* block = enclosingBlock(node); | 526 Element* block = enclosingBlock(node); |
| 527 if (!block) | 527 if (!block) |
| 528 return; | 528 return; |
| 529 | 529 |
| 530 for (ContainerNode* n = node->parentNode(); n != block && n != unsplitAncest
or; n = n->parentNode()) { | 530 for (ContainerNode* n = node->parentNode(); n != block && n != unsplitAncest
or; n = n->parentNode()) { |
| 531 if (!n->isStyledElement()) | 531 if (!n->isStyledElement()) |
| 532 continue; | 532 continue; |
| 533 | 533 |
| 534 Element* element = toElement(n); | 534 Element* element = toElement(n); |
| 535 int unicodeBidi = getIdentifierValue(CSSComputedStyleDeclaration::create
(element).get(), CSSPropertyUnicodeBidi); | 535 int unicodeBidi = getIdentifierValue(CSSComputedStyleDeclaration::create
(element), CSSPropertyUnicodeBidi); |
| 536 if (!unicodeBidi || unicodeBidi == CSSValueNormal) | 536 if (!unicodeBidi || unicodeBidi == CSSValueNormal) |
| 537 continue; | 537 continue; |
| 538 | 538 |
| 539 // FIXME: This code should really consider the mapped attribute 'dir', t
he inline style declaration, | 539 // FIXME: This code should really consider the mapped attribute 'dir', t
he inline style declaration, |
| 540 // and all matching style rules in order to determine how to best set th
e unicode-bidi property to 'normal'. | 540 // and all matching style rules in order to determine how to best set th
e unicode-bidi property to 'normal'. |
| 541 // For now, it assumes that if the 'dir' attribute is present, then remo
ving it will suffice, and | 541 // For now, it assumes that if the 'dir' attribute is present, then remo
ving it will suffice, and |
| 542 // otherwise it sets the property in the inline style declaration. | 542 // otherwise it sets the property in the inline style declaration. |
| 543 if (element->hasAttribute(dirAttr)) { | 543 if (element->hasAttribute(dirAttr)) { |
| 544 // FIXME: If this is a BDO element, we should probably just remove i
t if it has no | 544 // FIXME: If this is a BDO element, we should probably just remove i
t if it has no |
| 545 // other attributes, like we (should) do with B and I elements. | 545 // other attributes, like we (should) do with B and I elements. |
| 546 removeElementAttribute(element, dirAttr); | 546 removeElementAttribute(element, dirAttr); |
| 547 } else { | 547 } else { |
| 548 RawPtr<MutableStylePropertySet> inlineStyle = copyStyleOrCreateEmpty
(element->inlineStyle()); | 548 RawPtr<MutableStylePropertySet> inlineStyle = copyStyleOrCreateEmpty
(element->inlineStyle()); |
| 549 inlineStyle->setProperty(CSSPropertyUnicodeBidi, CSSValueNormal); | 549 inlineStyle->setProperty(CSSPropertyUnicodeBidi, CSSValueNormal); |
| 550 inlineStyle->removeProperty(CSSPropertyDirection); | 550 inlineStyle->removeProperty(CSSPropertyDirection); |
| 551 setNodeAttribute(element, styleAttr, AtomicString(inlineStyle->asTex
t())); | 551 setNodeAttribute(element, styleAttr, AtomicString(inlineStyle->asTex
t())); |
| 552 if (isSpanWithoutAttributesOrUnstyledStyleSpan(element)) { | 552 if (isSpanWithoutAttributesOrUnstyledStyleSpan(element)) { |
| 553 removeNodePreservingChildren(element, editingState); | 553 removeNodePreservingChildren(element, editingState); |
| 554 if (editingState->isAborted()) | 554 if (editingState->isAborted()) |
| 555 return; | 555 return; |
| 556 } | 556 } |
| 557 } | 557 } |
| 558 } | 558 } |
| 559 } | 559 } |
| 560 | 560 |
| 561 static HTMLElement* highestEmbeddingAncestor(Node* startNode, Node* enclosingNod
e) | 561 static HTMLElement* highestEmbeddingAncestor(Node* startNode, Node* enclosingNod
e) |
| 562 { | 562 { |
| 563 for (Node* n = startNode; n && n != enclosingNode; n = n->parentNode()) { | 563 for (Node* n = startNode; n && n != enclosingNode; n = n->parentNode()) { |
| 564 if (n->isHTMLElement() | 564 if (n->isHTMLElement() |
| 565 && EditingStyle::isEmbedOrIsolate(getIdentifierValue(CSSComputedStyl
eDeclaration::create(n).get(), CSSPropertyUnicodeBidi))) { | 565 && EditingStyle::isEmbedOrIsolate(getIdentifierValue(CSSComputedStyl
eDeclaration::create(n), CSSPropertyUnicodeBidi))) { |
| 566 return toHTMLElement(n); | 566 return toHTMLElement(n); |
| 567 } | 567 } |
| 568 } | 568 } |
| 569 | 569 |
| 570 return 0; | 570 return 0; |
| 571 } | 571 } |
| 572 | 572 |
| 573 void ApplyStyleCommand::applyInlineStyle(EditingStyle* style, EditingState* edit
ingState) | 573 void ApplyStyleCommand::applyInlineStyle(EditingStyle* style, EditingState* edit
ingState) |
| 574 { | 574 { |
| 575 RawPtr<ContainerNode> startDummySpanAncestor = nullptr; | 575 RawPtr<ContainerNode> startDummySpanAncestor = nullptr; |
| (...skipping 1078 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1654 | 1654 |
| 1655 if (m_styledInlineElement && addStyledElement == AddStyledElement) | 1655 if (m_styledInlineElement && addStyledElement == AddStyledElement) |
| 1656 surroundNodeRangeWithElement(startNode, endNode, m_styledInlineElement->
cloneElementWithoutChildren(), editingState); | 1656 surroundNodeRangeWithElement(startNode, endNode, m_styledInlineElement->
cloneElementWithoutChildren(), editingState); |
| 1657 } | 1657 } |
| 1658 | 1658 |
| 1659 float ApplyStyleCommand::computedFontSize(Node* node) | 1659 float ApplyStyleCommand::computedFontSize(Node* node) |
| 1660 { | 1660 { |
| 1661 if (!node) | 1661 if (!node) |
| 1662 return 0; | 1662 return 0; |
| 1663 | 1663 |
| 1664 RawPtr<CSSComputedStyleDeclaration> style = CSSComputedStyleDeclaration::cre
ate(node); | 1664 CSSComputedStyleDeclaration* style = CSSComputedStyleDeclaration::create(nod
e); |
| 1665 if (!style) | 1665 if (!style) |
| 1666 return 0; | 1666 return 0; |
| 1667 | 1667 |
| 1668 RawPtr<CSSPrimitiveValue> value = static_pointer_cast<CSSPrimitiveValue>(sty
le->getPropertyCSSValue(CSSPropertyFontSize)); | 1668 CSSPrimitiveValue* value = toCSSPrimitiveValue(style->getPropertyCSSValue(CS
SPropertyFontSize)); |
| 1669 if (!value) | 1669 if (!value) |
| 1670 return 0; | 1670 return 0; |
| 1671 | 1671 |
| 1672 ASSERT(value->typeWithCalcResolved() == CSSPrimitiveValue::UnitType::Pixels)
; | 1672 ASSERT(value->typeWithCalcResolved() == CSSPrimitiveValue::UnitType::Pixels)
; |
| 1673 return value->getFloatValue(); | 1673 return value->getFloatValue(); |
| 1674 } | 1674 } |
| 1675 | 1675 |
| 1676 void ApplyStyleCommand::joinChildTextNodes(ContainerNode* node, const Position&
start, const Position& end) | 1676 void ApplyStyleCommand::joinChildTextNodes(ContainerNode* node, const Position&
start, const Position& end) |
| 1677 { | 1677 { |
| 1678 if (!node) | 1678 if (!node) |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1713 DEFINE_TRACE(ApplyStyleCommand) | 1713 DEFINE_TRACE(ApplyStyleCommand) |
| 1714 { | 1714 { |
| 1715 visitor->trace(m_style); | 1715 visitor->trace(m_style); |
| 1716 visitor->trace(m_start); | 1716 visitor->trace(m_start); |
| 1717 visitor->trace(m_end); | 1717 visitor->trace(m_end); |
| 1718 visitor->trace(m_styledInlineElement); | 1718 visitor->trace(m_styledInlineElement); |
| 1719 CompositeEditCommand::trace(visitor); | 1719 CompositeEditCommand::trace(visitor); |
| 1720 } | 1720 } |
| 1721 | 1721 |
| 1722 } // namespace blink | 1722 } // namespace blink |
| OLD | NEW |