Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(958)

Unified Diff: Source/core/editing/htmlediting.cpp

Issue 1174183004: Templatize functions in htmlediting.cpp (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: 2015-06-18T13:23:41 Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/editing/htmlediting.cpp
diff --git a/Source/core/editing/htmlediting.cpp b/Source/core/editing/htmlediting.cpp
index 5931c1f11ca9c7c35860319ffbe13b96b61f26ee..92908f769e5911808fa7392c593488c1fda0fcff 100644
--- a/Source/core/editing/htmlediting.cpp
+++ b/Source/core/editing/htmlediting.cpp
@@ -210,15 +210,22 @@ Element* unsplittableElementForPosition(const Position& p)
return editableRootForPosition(p);
}
-Position nextCandidate(const Position& position)
+template <typename Strategy>
+typename Strategy::PositionType nextCandidateAlgorithm(const typename Strategy::PositionType& position)
{
- PositionIterator p(position);
+ using PositionType = typename Strategy::PositionType;
+ typename Strategy::PositionIteratorType p(position);
while (!p.atEnd()) {
p.increment();
if (p.isCandidate())
return p;
}
- return Position();
+ return PositionType();
+}
+
+Position nextCandidate(const Position& position)
+{
+ return nextCandidateAlgorithm<EditingStrategy>(position);
}
Position nextVisuallyDistinctCandidate(const Position& position)
@@ -233,27 +240,40 @@ Position nextVisuallyDistinctCandidate(const Position& position)
return Position();
}
-Position previousCandidate(const Position& position)
+template <typename Strategy>
+typename Strategy::PositionType previousCandidateAlgorithm(const typename Strategy::PositionType& position)
{
- PositionIterator p(position);
+ using PositionType = typename Strategy::PositionType;
+ typename Strategy::PositionIteratorType p(position);
while (!p.atStart()) {
p.decrement();
if (p.isCandidate())
return p;
}
- return Position();
+ return PositionType();
}
-Position previousVisuallyDistinctCandidate(const Position& position)
+Position previousCandidate(const Position& position)
{
- Position p = position;
- Position downstreamStart = p.downstream();
+ return previousCandidateAlgorithm<EditingStrategy>(position);
+}
+
+template <typename PositionType>
+PositionType previousVisuallyDistinctCandidateAlgorithm(const PositionType& position)
+{
+ PositionType p = position;
+ PositionType downstreamStart = p.downstream();
while (!p.atStartOfTree()) {
p = p.previous(Character);
if (p.isCandidate() && p.downstream() != downstreamStart)
return p;
}
- return Position();
+ return PositionType();
+}
+
+Position previousVisuallyDistinctCandidate(const Position& position)
+{
+ return previousVisuallyDistinctCandidateAlgorithm<Position>(position);
}
VisiblePosition firstEditableVisiblePositionAfterPositionInRoot(const Position& position, ContainerNode* highestRoot)
@@ -286,30 +306,36 @@ VisiblePosition lastEditableVisiblePositionBeforePositionInRoot(const Position&
return VisiblePosition(lastEditablePositionBeforePositionInRoot(position, highestRoot));
}
-Position lastEditablePositionBeforePositionInRoot(const Position& position, Node* highestRoot)
+template <typename PositionType>
+PositionType lastEditablePositionBeforePositionInRootAlgorithm(const PositionType& position, Node* highestRoot)
{
// When position falls after highestRoot, the result is easy to compute.
- if (comparePositions(position, lastPositionInNode(highestRoot)) == 1)
- return lastPositionInNode(highestRoot);
+ if (position.compareTo(PositionType::lastPositionInNode(highestRoot)) == 1)
+ return PositionType::lastPositionInNode(highestRoot);
- Position editablePosition = position;
+ PositionType editablePosition = position;
if (position.deprecatedNode()->treeScope() != highestRoot->treeScope()) {
Node* shadowAncestor = highestRoot->treeScope().ancestorInThisScope(editablePosition.deprecatedNode());
if (!shadowAncestor)
- return Position();
+ return PositionType();
- editablePosition = firstPositionInOrBeforeNode(shadowAncestor);
+ editablePosition = PositionType::firstPositionInOrBeforeNode(shadowAncestor);
}
while (editablePosition.deprecatedNode() && !isEditablePosition(editablePosition) && editablePosition.deprecatedNode()->isDescendantOf(highestRoot))
- editablePosition = isAtomicNode(editablePosition.deprecatedNode()) ? positionInParentBeforeNode(*editablePosition.deprecatedNode()) : previousVisuallyDistinctCandidate(editablePosition);
+ editablePosition = isAtomicNode(editablePosition.deprecatedNode()) ? PositionType::inParentBeforeNode(*editablePosition.deprecatedNode()) : previousVisuallyDistinctCandidate(editablePosition);
if (editablePosition.deprecatedNode() && editablePosition.deprecatedNode() != highestRoot && !editablePosition.deprecatedNode()->isDescendantOf(highestRoot))
- return Position();
+ return PositionType();
return editablePosition;
}
+Position lastEditablePositionBeforePositionInRoot(const Position& position, Node* highestRoot)
+{
+ return lastEditablePositionBeforePositionInRootAlgorithm<Position>(position, highestRoot);
+}
+
// FIXME: The method name, comment, and code say three different things here!
// Whether or not content before and after this node will collapse onto the same line as it.
bool isBlock(const Node* node)
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698