| Index: Source/core/dom/Position.h
|
| diff --git a/Source/core/dom/Position.h b/Source/core/dom/Position.h
|
| index 36295299a2f58bf1d4d17166bee631421540ffe5..3cc8ed0892baad7ae47c6f6a154f2a69a06eaa01 100644
|
| --- a/Source/core/dom/Position.h
|
| +++ b/Source/core/dom/Position.h
|
| @@ -57,7 +57,6 @@ template <typename Strategy>
|
| class CORE_TEMPLATE_CLASS_EXPORT PositionAlgorithm {
|
| DISALLOW_ALLOCATION();
|
| public:
|
| - using PositionType = typename Strategy::PositionType;
|
| using StrategyType = Strategy;
|
|
|
| enum AnchorType : unsigned char {
|
| @@ -86,8 +85,8 @@ public:
|
| int m_offset;
|
| };
|
|
|
| - static const TreeScope* commonAncestorTreeScope(const PositionType&, const PositionType& b);
|
| - static PositionType createLegacyEditingPosition(PassRefPtrWillBeRawPtr<Node> anchorNode, int offset);
|
| + static const TreeScope* commonAncestorTreeScope(const PositionAlgorithm<Strategy>&, const PositionAlgorithm<Strategy>& b);
|
| + static PositionAlgorithm<Strategy> createLegacyEditingPosition(PassRefPtrWillBeRawPtr<Node> anchorNode, int offset);
|
|
|
| PositionAlgorithm(PassRefPtrWillBeRawPtr<Node> anchorNode, LegacyEditingOffset);
|
|
|
| @@ -110,13 +109,13 @@ public:
|
| Text* containerText() const;
|
|
|
| int computeOffsetInContainerNode() const; // O(n) for before/after-anchored positions, O(1) for parent-anchored positions
|
| - PositionType parentAnchoredEquivalent() const; // Convenience method for DOM positions that also fixes up some positions for editing
|
| + PositionAlgorithm<Strategy> parentAnchoredEquivalent() const; // Convenience method for DOM positions that also fixes up some positions for editing
|
|
|
| // Returns |PositionIsAnchor| type |Position| which is compatible with
|
| // |RangeBoundaryPoint| as safe to pass |Range| constructor. Return value
|
| // of this function is different from |parentAnchoredEquivalent()| which
|
| // returns editing specific position.
|
| - PositionType toOffsetInAnchor() const;
|
| + PositionAlgorithm<Strategy> toOffsetInAnchor() const;
|
|
|
| // Inline O(1) access for Positions which callers know to be parent-anchored
|
| int offsetInContainerNode() const
|
| @@ -150,7 +149,7 @@ public:
|
| // behave as |Range| boundary point.
|
| Node* nodeAsRangePastLastNode() const;
|
|
|
| - Node* commonAncestorContainer(const PositionType&) const;
|
| + Node* commonAncestorContainer(const PositionAlgorithm<Strategy>&) const;
|
|
|
| Node* anchorNode() const { return m_anchorNode.get(); }
|
|
|
| @@ -182,13 +181,13 @@ public:
|
| // Move up or down the DOM by one position.
|
| // Offsets are computed using layout text for nodes that have layoutObjects - but note that even when
|
| // using composed characters, the result may be inside a single user-visible character if a ligature is formed.
|
| - PositionType previous(PositionMoveType = CodePoint) const;
|
| - PositionType next(PositionMoveType = CodePoint) const;
|
| + PositionAlgorithm<Strategy> previous(PositionMoveType = CodePoint) const;
|
| + PositionAlgorithm<Strategy> next(PositionMoveType = CodePoint) const;
|
| static int uncheckedPreviousOffset(const Node*, int current);
|
| static int uncheckedPreviousOffsetForBackwardDeletion(const Node*, int current);
|
| static int uncheckedNextOffset(const Node*, int current);
|
|
|
| - int compareTo(const PositionType&) const;
|
| + int compareTo(const PositionAlgorithm<Strategy>&) const;
|
|
|
| // These can be either inside or just before/after the node, depending on
|
| // if the node is ignored by editing or not.
|
| @@ -204,13 +203,13 @@ public:
|
| bool atEndOfTree() const;
|
|
|
| // These return useful visually equivalent positions.
|
| - PositionType upstream(EditingBoundaryCrossingRule = CannotCrossEditingBoundary) const;
|
| - PositionType downstream(EditingBoundaryCrossingRule = CannotCrossEditingBoundary) const;
|
| + PositionAlgorithm<Strategy> upstream(EditingBoundaryCrossingRule = CannotCrossEditingBoundary) const;
|
| + PositionAlgorithm<Strategy> downstream(EditingBoundaryCrossingRule = CannotCrossEditingBoundary) const;
|
|
|
| bool isCandidate() const;
|
| bool inRenderedText() const;
|
| bool isRenderedCharacter() const;
|
| - bool rendersInDifferentPosition(const PositionType&) const;
|
| + bool rendersInDifferentPosition(const PositionAlgorithm<Strategy>&) const;
|
|
|
| void getInlineBoxAndOffset(EAffinity, InlineBox*&, int& caretOffset) const;
|
| void getInlineBoxAndOffset(EAffinity, TextDirection primaryDirection, InlineBox*&, int& caretOffset) const;
|
| @@ -221,17 +220,17 @@ public:
|
| static bool nodeIsUserSelectNone(Node*);
|
| static bool nodeIsUserSelectAll(const Node*);
|
| static Node* rootUserSelectAllForNode(Node*);
|
| - static PositionType beforeNode(Node* anchorNode);
|
| - static PositionType afterNode(Node* anchorNode);
|
| - static PositionType inParentBeforeNode(const Node& anchorNode);
|
| - static PositionType inParentAfterNode(const Node& anchorNode);
|
| + static PositionAlgorithm<Strategy> beforeNode(Node* anchorNode);
|
| + static PositionAlgorithm<Strategy> afterNode(Node* anchorNode);
|
| + static PositionAlgorithm<Strategy> inParentBeforeNode(const Node& anchorNode);
|
| + static PositionAlgorithm<Strategy> inParentAfterNode(const Node& anchorNode);
|
| static int lastOffsetInNode(Node* anchorNode);
|
| - static PositionType firstPositionInNode(Node* anchorNode);
|
| - static PositionType lastPositionInNode(Node* anchorNode);
|
| + static PositionAlgorithm<Strategy> firstPositionInNode(Node* anchorNode);
|
| + static PositionAlgorithm<Strategy> lastPositionInNode(Node* anchorNode);
|
| static int minOffsetForNode(Node* anchorNode, int offset);
|
| static bool offsetIsBeforeLastNodeOffset(int offset, Node* anchorNode);
|
| - static PositionType firstPositionInOrBeforeNode(Node* anchorNode);
|
| - static PositionType lastPositionInOrAfterNode(Node* anchorNode);
|
| + static PositionAlgorithm<Strategy> firstPositionInOrBeforeNode(Node* anchorNode);
|
| + static PositionAlgorithm<Strategy> lastPositionInOrAfterNode(Node* anchorNode);
|
|
|
| void debugPosition(const char* msg = "") const;
|
|
|
| @@ -270,9 +269,9 @@ using Position = PositionAlgorithm<EditingStrategy>;
|
| using PositionInComposedTree = PositionAlgorithm<EditingInComposedTreeStrategy>;
|
|
|
| template <typename Strategy>
|
| -typename Strategy::PositionType PositionAlgorithm<Strategy>::createLegacyEditingPosition(PassRefPtrWillBeRawPtr<Node> node, int offset)
|
| +PositionAlgorithm<Strategy> PositionAlgorithm<Strategy>::createLegacyEditingPosition(PassRefPtrWillBeRawPtr<Node> node, int offset)
|
| {
|
| - return PositionType(node, PositionAlgorithm::LegacyEditingOffset(offset));
|
| + return PositionAlgorithm<Strategy>(node, PositionAlgorithm::LegacyEditingOffset(offset));
|
| }
|
|
|
| inline Position createLegacyEditingPosition(PassRefPtrWillBeRawPtr<Node> node, int offset)
|
| @@ -310,13 +309,13 @@ bool operator!=(const PositionAlgorithm<Strategy>& a, const PositionAlgorithm<St
|
| // If we ever add a PassPosition we can make these non-inline.
|
|
|
| template <typename Strategy>
|
| -typename Strategy::PositionType PositionAlgorithm<Strategy>::inParentBeforeNode(const Node& node)
|
| +PositionAlgorithm<Strategy> PositionAlgorithm<Strategy>::inParentBeforeNode(const Node& node)
|
| {
|
| // FIXME: This should ASSERT(node.parentNode())
|
| // At least one caller currently hits this ASSERT though, which indicates
|
| // that the caller is trying to make a position relative to a disconnected node (which is likely an error)
|
| // Specifically, editing/deleting/delete-ligature-001.html crashes with ASSERT(node->parentNode())
|
| - return PositionType(Strategy::parent(node), Strategy::index(node));
|
| + return PositionAlgorithm<Strategy>(Strategy::parent(node), Strategy::index(node));
|
| }
|
|
|
| inline Position positionInParentBeforeNode(const Node& node)
|
| @@ -325,10 +324,10 @@ inline Position positionInParentBeforeNode(const Node& node)
|
| }
|
|
|
| template <typename Strategy>
|
| -typename Strategy::PositionType PositionAlgorithm<Strategy>::inParentAfterNode(const Node& node)
|
| +PositionAlgorithm<Strategy> PositionAlgorithm<Strategy>::inParentAfterNode(const Node& node)
|
| {
|
| ASSERT(node.parentNode());
|
| - return PositionType(Strategy::parent(node), Strategy::index(node) + 1);
|
| + return PositionAlgorithm<Strategy>(Strategy::parent(node), Strategy::index(node) + 1);
|
| }
|
|
|
| inline Position positionInParentAfterNode(const Node& node)
|
| @@ -338,10 +337,10 @@ inline Position positionInParentAfterNode(const Node& node)
|
|
|
| // positionBeforeNode and positionAfterNode return neighbor-anchored positions, construction is O(1)
|
| template <typename Strategy>
|
| -typename Strategy::PositionType PositionAlgorithm<Strategy>::beforeNode(Node* anchorNode)
|
| +PositionAlgorithm<Strategy> PositionAlgorithm<Strategy>::beforeNode(Node* anchorNode)
|
| {
|
| ASSERT(anchorNode);
|
| - return PositionType(anchorNode, PositionIsBeforeAnchor);
|
| + return PositionAlgorithm<Strategy>(anchorNode, PositionIsBeforeAnchor);
|
| }
|
|
|
| inline Position positionBeforeNode(Node* anchorNode)
|
| @@ -350,10 +349,10 @@ inline Position positionBeforeNode(Node* anchorNode)
|
| }
|
|
|
| template <typename Strategy>
|
| -typename Strategy::PositionType PositionAlgorithm<Strategy>::afterNode(Node* anchorNode)
|
| +PositionAlgorithm<Strategy> PositionAlgorithm<Strategy>::afterNode(Node* anchorNode)
|
| {
|
| ASSERT(anchorNode);
|
| - return PositionType(anchorNode, PositionIsAfterAnchor);
|
| + return PositionAlgorithm<Strategy>(anchorNode, PositionIsAfterAnchor);
|
| }
|
|
|
| inline Position positionAfterNode(Node* anchorNode)
|
| @@ -374,11 +373,11 @@ inline int lastOffsetInNode(Node* node)
|
|
|
| // firstPositionInNode and lastPositionInNode return parent-anchored positions, lastPositionInNode construction is O(n) due to countChildren()
|
| template <typename Strategy>
|
| -typename Strategy::PositionType PositionAlgorithm<Strategy>::firstPositionInNode(Node* anchorNode)
|
| +PositionAlgorithm<Strategy> PositionAlgorithm<Strategy>::firstPositionInNode(Node* anchorNode)
|
| {
|
| if (anchorNode->isTextNode())
|
| - return PositionType(anchorNode, 0);
|
| - return PositionType(anchorNode, PositionIsBeforeChildren);
|
| + return PositionAlgorithm<Strategy>(anchorNode, 0);
|
| + return PositionAlgorithm<Strategy>(anchorNode, PositionIsBeforeChildren);
|
| }
|
|
|
| inline Position firstPositionInNode(Node* anchorNode)
|
| @@ -387,11 +386,11 @@ inline Position firstPositionInNode(Node* anchorNode)
|
| }
|
|
|
| template <typename Strategy>
|
| -typename Strategy::PositionType PositionAlgorithm<Strategy>::lastPositionInNode(Node* anchorNode)
|
| +PositionAlgorithm<Strategy> PositionAlgorithm<Strategy>::lastPositionInNode(Node* anchorNode)
|
| {
|
| if (anchorNode->isTextNode())
|
| - return PositionType(anchorNode, lastOffsetInNode(anchorNode));
|
| - return PositionType(anchorNode, PositionIsAfterChildren);
|
| + return PositionAlgorithm<Strategy>(anchorNode, lastOffsetInNode(anchorNode));
|
| + return PositionAlgorithm<Strategy>(anchorNode, PositionIsAfterChildren);
|
| }
|
|
|
| inline Position lastPositionInNode(Node* anchorNode)
|
| @@ -436,18 +435,18 @@ inline bool offsetIsBeforeLastNodeOffset(int offset, Node* anchorNode)
|
| }
|
|
|
| template <typename Strategy>
|
| -typename Strategy::PositionType PositionAlgorithm<Strategy>::firstPositionInOrBeforeNode(Node* node)
|
| +PositionAlgorithm<Strategy> PositionAlgorithm<Strategy>::firstPositionInOrBeforeNode(Node* node)
|
| {
|
| if (!node)
|
| - return PositionType();
|
| + return PositionAlgorithm<Strategy>();
|
| return Strategy::editingIgnoresContent(node) ? beforeNode(node) : firstPositionInNode(node);
|
| }
|
|
|
| template <typename Strategy>
|
| -typename Strategy::PositionType PositionAlgorithm<Strategy>::lastPositionInOrAfterNode(Node* node)
|
| +PositionAlgorithm<Strategy> PositionAlgorithm<Strategy>::lastPositionInOrAfterNode(Node* node)
|
| {
|
| if (!node)
|
| - return PositionType();
|
| + return PositionAlgorithm<Strategy>();
|
| return Strategy::editingIgnoresContent(node) ? afterNode(node) : lastPositionInNode(node);
|
| }
|
|
|
|
|