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

Side by Side Diff: Source/core/editing/VisibleUnits.cpp

Issue 1310493003: Fix reference type style in VisibleUnits.{cpp,h} (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: 2015-08-27T18:36:37 Created 5 years, 3 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 unified diff | Download patch
« no previous file with comments | « Source/core/editing/VisibleUnits.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv ed. 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv ed.
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 644 matching lines...) Expand 10 before | Expand all | Expand 10 after
655 needMoreContext = true; 655 needMoreContext = true;
656 return 0; 656 return 0;
657 } 657 }
658 needMoreContext = false; 658 needMoreContext = false;
659 int start, end; 659 int start, end;
660 U16_BACK_1(characters, 0, offset); 660 U16_BACK_1(characters, 0, offset);
661 findWordBoundary(characters, length, offset, &start, &end); 661 findWordBoundary(characters, length, offset, &start, &end);
662 return start; 662 return start;
663 } 663 }
664 664
665 VisiblePosition startOfWord(const VisiblePosition &c, EWordSide side) 665 VisiblePosition startOfWord(const VisiblePosition& c, EWordSide side)
666 { 666 {
667 // FIXME: This returns a null VP for c at the start of the document 667 // FIXME: This returns a null VP for c at the start of the document
668 // and side == LeftWordIfOnBoundary 668 // and side == LeftWordIfOnBoundary
669 VisiblePosition p = c; 669 VisiblePosition p = c;
670 if (side == RightWordIfOnBoundary) { 670 if (side == RightWordIfOnBoundary) {
671 // at paragraph end, the startofWord is the current position 671 // at paragraph end, the startofWord is the current position
672 if (isEndOfParagraph(c)) 672 if (isEndOfParagraph(c))
673 return c; 673 return c;
674 674
675 p = c.next(); 675 p = c.next();
676 if (p.isNull()) 676 if (p.isNull())
677 return c; 677 return c;
678 } 678 }
679 return previousBoundary(p, startWordBoundary); 679 return previousBoundary(p, startWordBoundary);
680 } 680 }
681 681
682 static unsigned endWordBoundary(const UChar* characters, unsigned length, unsign ed offset, BoundarySearchContextAvailability mayHaveMoreContext, bool& needMoreC ontext) 682 static unsigned endWordBoundary(const UChar* characters, unsigned length, unsign ed offset, BoundarySearchContextAvailability mayHaveMoreContext, bool& needMoreC ontext)
683 { 683 {
684 ASSERT(offset <= length); 684 ASSERT(offset <= length);
685 if (mayHaveMoreContext && endOfFirstWordBoundaryContext(characters + offset, length - offset) == static_cast<int>(length - offset)) { 685 if (mayHaveMoreContext && endOfFirstWordBoundaryContext(characters + offset, length - offset) == static_cast<int>(length - offset)) {
686 needMoreContext = true; 686 needMoreContext = true;
687 return length; 687 return length;
688 } 688 }
689 needMoreContext = false; 689 needMoreContext = false;
690 return findWordEndBoundary(characters, length, offset); 690 return findWordEndBoundary(characters, length, offset);
691 } 691 }
692 692
693 VisiblePosition endOfWord(const VisiblePosition &c, EWordSide side) 693 VisiblePosition endOfWord(const VisiblePosition& c, EWordSide side)
694 { 694 {
695 VisiblePosition p = c; 695 VisiblePosition p = c;
696 if (side == LeftWordIfOnBoundary) { 696 if (side == LeftWordIfOnBoundary) {
697 if (isStartOfParagraph(c)) 697 if (isStartOfParagraph(c))
698 return c; 698 return c;
699 699
700 p = c.previous(); 700 p = c.previous();
701 if (p.isNull()) 701 if (p.isNull())
702 return c; 702 return c;
703 } else if (isEndOfParagraph(c)) { 703 } else if (isEndOfParagraph(c)) {
704 return c; 704 return c;
705 } 705 }
706 706
707 return nextBoundary(p, endWordBoundary); 707 return nextBoundary(p, endWordBoundary);
708 } 708 }
709 709
710 static unsigned previousWordPositionBoundary(const UChar* characters, unsigned l ength, unsigned offset, BoundarySearchContextAvailability mayHaveMoreContext, bo ol& needMoreContext) 710 static unsigned previousWordPositionBoundary(const UChar* characters, unsigned l ength, unsigned offset, BoundarySearchContextAvailability mayHaveMoreContext, bo ol& needMoreContext)
711 { 711 {
712 if (mayHaveMoreContext && !startOfLastWordBoundaryContext(characters, offset )) { 712 if (mayHaveMoreContext && !startOfLastWordBoundaryContext(characters, offset )) {
713 needMoreContext = true; 713 needMoreContext = true;
714 return 0; 714 return 0;
715 } 715 }
716 needMoreContext = false; 716 needMoreContext = false;
717 return findNextWordFromIndex(characters, length, offset, false); 717 return findNextWordFromIndex(characters, length, offset, false);
718 } 718 }
719 719
720 VisiblePosition previousWordPosition(const VisiblePosition &c) 720 VisiblePosition previousWordPosition(const VisiblePosition& c)
721 { 721 {
722 VisiblePosition prev = previousBoundary(c, previousWordPositionBoundary); 722 VisiblePosition prev = previousBoundary(c, previousWordPositionBoundary);
723 return c.honorEditingBoundaryAtOrBefore(prev); 723 return c.honorEditingBoundaryAtOrBefore(prev);
724 } 724 }
725 725
726 static unsigned nextWordPositionBoundary(const UChar* characters, unsigned lengt h, unsigned offset, BoundarySearchContextAvailability mayHaveMoreContext, bool& needMoreContext) 726 static unsigned nextWordPositionBoundary(const UChar* characters, unsigned lengt h, unsigned offset, BoundarySearchContextAvailability mayHaveMoreContext, bool& needMoreContext)
727 { 727 {
728 if (mayHaveMoreContext && endOfFirstWordBoundaryContext(characters + offset, length - offset) == static_cast<int>(length - offset)) { 728 if (mayHaveMoreContext && endOfFirstWordBoundaryContext(characters + offset, length - offset) == static_cast<int>(length - offset)) {
729 needMoreContext = true; 729 needMoreContext = true;
730 return length; 730 return length;
731 } 731 }
732 needMoreContext = false; 732 needMoreContext = false;
733 return findNextWordFromIndex(characters, length, offset, true); 733 return findNextWordFromIndex(characters, length, offset, true);
734 } 734 }
735 735
736 VisiblePosition nextWordPosition(const VisiblePosition &c) 736 VisiblePosition nextWordPosition(const VisiblePosition& c)
737 { 737 {
738 VisiblePosition next = nextBoundary(c, nextWordPositionBoundary); 738 VisiblePosition next = nextBoundary(c, nextWordPositionBoundary);
739 return c.honorEditingBoundaryAtOrAfter(next); 739 return c.honorEditingBoundaryAtOrAfter(next);
740 } 740 }
741 741
742 // --------- 742 // ---------
743 743
744 enum LineEndpointComputationMode { UseLogicalOrdering, UseInlineBoxOrdering }; 744 enum LineEndpointComputationMode { UseLogicalOrdering, UseInlineBoxOrdering };
745 template <typename Strategy> 745 template <typename Strategy>
746 static PositionWithAffinityTemplate<Strategy> startPositionForLine(const Positio nWithAffinityTemplate<Strategy>& c, LineEndpointComputationMode mode) 746 static PositionWithAffinityTemplate<Strategy> startPositionForLine(const Positio nWithAffinityTemplate<Strategy>& c, LineEndpointComputationMode mode)
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
952 bool inSameLine(const PositionInComposedTreeWithAffinity& position1, const Posit ionInComposedTreeWithAffinity& position2) 952 bool inSameLine(const PositionInComposedTreeWithAffinity& position1, const Posit ionInComposedTreeWithAffinity& position2)
953 { 953 {
954 return inSameLineAlgorithm<EditingInComposedTreeStrategy>(position1, positio n2); 954 return inSameLineAlgorithm<EditingInComposedTreeStrategy>(position1, positio n2);
955 } 955 }
956 956
957 bool inSameLine(const VisiblePosition& position1, const VisiblePosition& positio n2) 957 bool inSameLine(const VisiblePosition& position1, const VisiblePosition& positio n2)
958 { 958 {
959 return inSameLine(position1.toPositionWithAffinity(), position2.toPositionWi thAffinity()); 959 return inSameLine(position1.toPositionWithAffinity(), position2.toPositionWi thAffinity());
960 } 960 }
961 961
962 bool isStartOfLine(const VisiblePosition &p) 962 bool isStartOfLine(const VisiblePosition& p)
963 { 963 {
964 return p.isNotNull() && p.deepEquivalent() == startOfLine(p).deepEquivalent( ); 964 return p.isNotNull() && p.deepEquivalent() == startOfLine(p).deepEquivalent( );
965 } 965 }
966 966
967 bool isEndOfLine(const VisiblePosition &p) 967 bool isEndOfLine(const VisiblePosition& p)
968 { 968 {
969 return p.isNotNull() && p.deepEquivalent() == endOfLine(p).deepEquivalent(); 969 return p.isNotNull() && p.deepEquivalent() == endOfLine(p).deepEquivalent();
970 } 970 }
971 971
972 bool isLogicalEndOfLine(const VisiblePosition &p) 972 bool isLogicalEndOfLine(const VisiblePosition& p)
973 { 973 {
974 return p.isNotNull() && p.deepEquivalent() == logicalEndOfLine(p).deepEquiva lent(); 974 return p.isNotNull() && p.deepEquivalent() == logicalEndOfLine(p).deepEquiva lent();
975 } 975 }
976 976
977 static inline LayoutPoint absoluteLineDirectionPointToLocalPointInBlock(RootInli neBox* root, LayoutUnit lineDirectionPoint) 977 static inline LayoutPoint absoluteLineDirectionPointToLocalPointInBlock(RootInli neBox* root, LayoutUnit lineDirectionPoint)
978 { 978 {
979 ASSERT(root); 979 ASSERT(root);
980 LayoutBlockFlow& containingBlock = root->block(); 980 LayoutBlockFlow& containingBlock = root->block();
981 FloatPoint absoluteBlockPoint = containingBlock.localToAbsolute(FloatPoint() ); 981 FloatPoint absoluteBlockPoint = containingBlock.localToAbsolute(FloatPoint() );
982 if (containingBlock.hasOverflowClip()) 982 if (containingBlock.hasOverflowClip())
983 absoluteBlockPoint -= containingBlock.scrolledContentOffset(); 983 absoluteBlockPoint -= containingBlock.scrolledContentOffset();
984 984
985 if (root->block().isHorizontalWritingMode()) 985 if (root->block().isHorizontalWritingMode())
986 return LayoutPoint(lineDirectionPoint - absoluteBlockPoint.x(), root->bl ockDirectionPointInLine()); 986 return LayoutPoint(lineDirectionPoint - absoluteBlockPoint.x(), root->bl ockDirectionPointInLine());
987 987
988 return LayoutPoint(root->blockDirectionPointInLine(), lineDirectionPoint - a bsoluteBlockPoint.y()); 988 return LayoutPoint(root->blockDirectionPointInLine(), lineDirectionPoint - a bsoluteBlockPoint.y());
989 } 989 }
990 990
991 VisiblePosition previousLinePosition(const VisiblePosition &visiblePosition, Lay outUnit lineDirectionPoint, EditableType editableType) 991 VisiblePosition previousLinePosition(const VisiblePosition& visiblePosition, Lay outUnit lineDirectionPoint, EditableType editableType)
992 { 992 {
993 Position p = visiblePosition.deepEquivalent(); 993 Position p = visiblePosition.deepEquivalent();
994 Node* node = p.anchorNode(); 994 Node* node = p.anchorNode();
995 995
996 if (!node) 996 if (!node)
997 return VisiblePosition(); 997 return VisiblePosition();
998 998
999 node->document().updateLayoutIgnorePendingStylesheets(); 999 node->document().updateLayoutIgnorePendingStylesheets();
1000 1000
1001 LayoutObject* layoutObject = node->layoutObject(); 1001 LayoutObject* layoutObject = node->layoutObject();
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1034 1034
1035 // Could not find a previous line. This means we must already be on the firs t line. 1035 // Could not find a previous line. This means we must already be on the firs t line.
1036 // Move to the start of the content in this block, which effectively moves u s 1036 // Move to the start of the content in this block, which effectively moves u s
1037 // to the start of the line we're on. 1037 // to the start of the line we're on.
1038 Element* rootElement = node->hasEditableStyle(editableType) ? node->rootEdit ableElement(editableType) : node->document().documentElement(); 1038 Element* rootElement = node->hasEditableStyle(editableType) ? node->rootEdit ableElement(editableType) : node->document().documentElement();
1039 if (!rootElement) 1039 if (!rootElement)
1040 return VisiblePosition(); 1040 return VisiblePosition();
1041 return VisiblePosition(firstPositionInNode(rootElement)); 1041 return VisiblePosition(firstPositionInNode(rootElement));
1042 } 1042 }
1043 1043
1044 VisiblePosition nextLinePosition(const VisiblePosition &visiblePosition, LayoutU nit lineDirectionPoint, EditableType editableType) 1044 VisiblePosition nextLinePosition(const VisiblePosition& visiblePosition, LayoutU nit lineDirectionPoint, EditableType editableType)
1045 { 1045 {
1046 Position p = visiblePosition.deepEquivalent(); 1046 Position p = visiblePosition.deepEquivalent();
1047 Node* node = p.anchorNode(); 1047 Node* node = p.anchorNode();
1048 1048
1049 if (!node) 1049 if (!node)
1050 return VisiblePosition(); 1050 return VisiblePosition();
1051 1051
1052 node->document().updateLayoutIgnorePendingStylesheets(); 1052 node->document().updateLayoutIgnorePendingStylesheets();
1053 1053
1054 LayoutObject* layoutObject = node->layoutObject(); 1054 LayoutObject* layoutObject = node->layoutObject();
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1099 1099
1100 // --------- 1100 // ---------
1101 1101
1102 static unsigned startSentenceBoundary(const UChar* characters, unsigned length, unsigned, BoundarySearchContextAvailability, bool&) 1102 static unsigned startSentenceBoundary(const UChar* characters, unsigned length, unsigned, BoundarySearchContextAvailability, bool&)
1103 { 1103 {
1104 TextBreakIterator* iterator = sentenceBreakIterator(characters, length); 1104 TextBreakIterator* iterator = sentenceBreakIterator(characters, length);
1105 // FIXME: The following function can return -1; we don't handle that. 1105 // FIXME: The following function can return -1; we don't handle that.
1106 return iterator->preceding(length); 1106 return iterator->preceding(length);
1107 } 1107 }
1108 1108
1109 VisiblePosition startOfSentence(const VisiblePosition &c) 1109 VisiblePosition startOfSentence(const VisiblePosition& c)
1110 { 1110 {
1111 return previousBoundary(c, startSentenceBoundary); 1111 return previousBoundary(c, startSentenceBoundary);
1112 } 1112 }
1113 1113
1114 static unsigned endSentenceBoundary(const UChar* characters, unsigned length, un signed, BoundarySearchContextAvailability, bool&) 1114 static unsigned endSentenceBoundary(const UChar* characters, unsigned length, un signed, BoundarySearchContextAvailability, bool&)
1115 { 1115 {
1116 TextBreakIterator* iterator = sentenceBreakIterator(characters, length); 1116 TextBreakIterator* iterator = sentenceBreakIterator(characters, length);
1117 return iterator->next(); 1117 return iterator->next();
1118 } 1118 }
1119 1119
1120 // FIXME: This includes the space after the punctuation that marks the end of th e sentence. 1120 // FIXME: This includes the space after the punctuation that marks the end of th e sentence.
1121 VisiblePosition endOfSentence(const VisiblePosition &c) 1121 VisiblePosition endOfSentence(const VisiblePosition& c)
1122 { 1122 {
1123 return nextBoundary(c, endSentenceBoundary); 1123 return nextBoundary(c, endSentenceBoundary);
1124 } 1124 }
1125 1125
1126 static unsigned previousSentencePositionBoundary(const UChar* characters, unsign ed length, unsigned, BoundarySearchContextAvailability, bool&) 1126 static unsigned previousSentencePositionBoundary(const UChar* characters, unsign ed length, unsigned, BoundarySearchContextAvailability, bool&)
1127 { 1127 {
1128 // FIXME: This is identical to startSentenceBoundary. I'm pretty sure that's not right. 1128 // FIXME: This is identical to startSentenceBoundary. I'm pretty sure that's not right.
1129 TextBreakIterator* iterator = sentenceBreakIterator(characters, length); 1129 TextBreakIterator* iterator = sentenceBreakIterator(characters, length);
1130 // FIXME: The following function can return -1; we don't handle that. 1130 // FIXME: The following function can return -1; we don't handle that.
1131 return iterator->preceding(length); 1131 return iterator->preceding(length);
1132 } 1132 }
1133 1133
1134 VisiblePosition previousSentencePosition(const VisiblePosition &c) 1134 VisiblePosition previousSentencePosition(const VisiblePosition& c)
1135 { 1135 {
1136 VisiblePosition prev = previousBoundary(c, previousSentencePositionBoundary) ; 1136 VisiblePosition prev = previousBoundary(c, previousSentencePositionBoundary) ;
1137 return c.honorEditingBoundaryAtOrBefore(prev); 1137 return c.honorEditingBoundaryAtOrBefore(prev);
1138 } 1138 }
1139 1139
1140 static unsigned nextSentencePositionBoundary(const UChar* characters, unsigned l ength, unsigned, BoundarySearchContextAvailability, bool&) 1140 static unsigned nextSentencePositionBoundary(const UChar* characters, unsigned l ength, unsigned, BoundarySearchContextAvailability, bool&)
1141 { 1141 {
1142 // FIXME: This is identical to endSentenceBoundary. This isn't right, it nee ds to 1142 // FIXME: This is identical to endSentenceBoundary. This isn't right, it nee ds to
1143 // move to the equivlant position in the following sentence. 1143 // move to the equivlant position in the following sentence.
1144 TextBreakIterator* iterator = sentenceBreakIterator(characters, length); 1144 TextBreakIterator* iterator = sentenceBreakIterator(characters, length);
1145 return iterator->following(0); 1145 return iterator->following(0);
1146 } 1146 }
1147 1147
1148 VisiblePosition nextSentencePosition(const VisiblePosition &c) 1148 VisiblePosition nextSentencePosition(const VisiblePosition& c)
1149 { 1149 {
1150 VisiblePosition next = nextBoundary(c, nextSentencePositionBoundary); 1150 VisiblePosition next = nextBoundary(c, nextSentencePositionBoundary);
1151 return c.honorEditingBoundaryAtOrAfter(next); 1151 return c.honorEditingBoundaryAtOrAfter(next);
1152 } 1152 }
1153 1153
1154 VisiblePosition startOfParagraph(const VisiblePosition& c, EditingBoundaryCrossi ngRule boundaryCrossingRule) 1154 VisiblePosition startOfParagraph(const VisiblePosition& c, EditingBoundaryCrossi ngRule boundaryCrossingRule)
1155 { 1155 {
1156 Position p = c.deepEquivalent(); 1156 Position p = c.deepEquivalent();
1157 Node* startNode = p.anchorNode(); 1157 Node* startNode = p.anchorNode();
1158 1158
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
1219 n = NodeTraversal::previousPostOrder(*n, startBlock); 1219 n = NodeTraversal::previousPostOrder(*n, startBlock);
1220 } 1220 }
1221 } 1221 }
1222 1222
1223 if (type == PositionAnchorType::OffsetInAnchor) 1223 if (type == PositionAnchorType::OffsetInAnchor)
1224 return VisiblePosition(Position(node, offset)); 1224 return VisiblePosition(Position(node, offset));
1225 1225
1226 return VisiblePosition(Position(node, type)); 1226 return VisiblePosition(Position(node, type));
1227 } 1227 }
1228 1228
1229 VisiblePosition endOfParagraph(const VisiblePosition &c, EditingBoundaryCrossing Rule boundaryCrossingRule) 1229 VisiblePosition endOfParagraph(const VisiblePosition& c, EditingBoundaryCrossing Rule boundaryCrossingRule)
1230 { 1230 {
1231 if (c.isNull()) 1231 if (c.isNull())
1232 return VisiblePosition(); 1232 return VisiblePosition();
1233 1233
1234 Position p = c.deepEquivalent(); 1234 Position p = c.deepEquivalent();
1235 Node* startNode = p.anchorNode(); 1235 Node* startNode = p.anchorNode();
1236 1236
1237 if (isRenderedAsNonInlineTableImageOrHR(startNode)) 1237 if (isRenderedAsNonInlineTableImageOrHR(startNode))
1238 return VisiblePosition(positionAfterNode(startNode)); 1238 return VisiblePosition(positionAfterNode(startNode));
1239 1239
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
1307 { 1307 {
1308 VisiblePosition paragraphEnd(endOfParagraph(visiblePosition, CanSkipOverEdit ingBoundary)); 1308 VisiblePosition paragraphEnd(endOfParagraph(visiblePosition, CanSkipOverEdit ingBoundary));
1309 VisiblePosition afterParagraphEnd(paragraphEnd.next(CannotCrossEditingBounda ry)); 1309 VisiblePosition afterParagraphEnd(paragraphEnd.next(CannotCrossEditingBounda ry));
1310 // The position after the last position in the last cell of a table 1310 // The position after the last position in the last cell of a table
1311 // is not the start of the next paragraph. 1311 // is not the start of the next paragraph.
1312 if (isFirstPositionAfterTable(afterParagraphEnd)) 1312 if (isFirstPositionAfterTable(afterParagraphEnd))
1313 return afterParagraphEnd.next(CannotCrossEditingBoundary); 1313 return afterParagraphEnd.next(CannotCrossEditingBoundary);
1314 return afterParagraphEnd; 1314 return afterParagraphEnd;
1315 } 1315 }
1316 1316
1317 bool inSameParagraph(const VisiblePosition &a, const VisiblePosition &b, Editing BoundaryCrossingRule boundaryCrossingRule) 1317 bool inSameParagraph(const VisiblePosition& a, const VisiblePosition& b, Editing BoundaryCrossingRule boundaryCrossingRule)
1318 { 1318 {
1319 return a.isNotNull() && startOfParagraph(a, boundaryCrossingRule).deepEquiva lent() == startOfParagraph(b, boundaryCrossingRule).deepEquivalent(); 1319 return a.isNotNull() && startOfParagraph(a, boundaryCrossingRule).deepEquiva lent() == startOfParagraph(b, boundaryCrossingRule).deepEquivalent();
1320 } 1320 }
1321 1321
1322 bool isStartOfParagraph(const VisiblePosition &pos, EditingBoundaryCrossingRule boundaryCrossingRule) 1322 bool isStartOfParagraph(const VisiblePosition& pos, EditingBoundaryCrossingRule boundaryCrossingRule)
1323 { 1323 {
1324 return pos.isNotNull() && pos.deepEquivalent() == startOfParagraph(pos, boun daryCrossingRule).deepEquivalent(); 1324 return pos.isNotNull() && pos.deepEquivalent() == startOfParagraph(pos, boun daryCrossingRule).deepEquivalent();
1325 } 1325 }
1326 1326
1327 bool isEndOfParagraph(const VisiblePosition &pos, EditingBoundaryCrossingRule bo undaryCrossingRule) 1327 bool isEndOfParagraph(const VisiblePosition& pos, EditingBoundaryCrossingRule bo undaryCrossingRule)
1328 { 1328 {
1329 return pos.isNotNull() && pos.deepEquivalent() == endOfParagraph(pos, bounda ryCrossingRule).deepEquivalent(); 1329 return pos.isNotNull() && pos.deepEquivalent() == endOfParagraph(pos, bounda ryCrossingRule).deepEquivalent();
1330 } 1330 }
1331 1331
1332 VisiblePosition previousParagraphPosition(const VisiblePosition& p, LayoutUnit x ) 1332 VisiblePosition previousParagraphPosition(const VisiblePosition& p, LayoutUnit x )
1333 { 1333 {
1334 VisiblePosition pos = p; 1334 VisiblePosition pos = p;
1335 do { 1335 do {
1336 VisiblePosition n = previousLinePosition(pos, x); 1336 VisiblePosition n = previousLinePosition(pos, x);
1337 if (n.isNull() || n.deepEquivalent() == pos.deepEquivalent()) 1337 if (n.isNull() || n.deepEquivalent() == pos.deepEquivalent())
(...skipping 24 matching lines...) Expand all
1362 return startBlock ? VisiblePosition(firstPositionInNode(startBlock)) : Visib lePosition(); 1362 return startBlock ? VisiblePosition(firstPositionInNode(startBlock)) : Visib lePosition();
1363 } 1363 }
1364 1364
1365 VisiblePosition endOfBlock(const VisiblePosition& visiblePosition, EditingBounda ryCrossingRule rule) 1365 VisiblePosition endOfBlock(const VisiblePosition& visiblePosition, EditingBounda ryCrossingRule rule)
1366 { 1366 {
1367 Position position = visiblePosition.deepEquivalent(); 1367 Position position = visiblePosition.deepEquivalent();
1368 Element* endBlock = position.computeContainerNode() ? enclosingBlock(positio n.computeContainerNode(), rule) : 0; 1368 Element* endBlock = position.computeContainerNode() ? enclosingBlock(positio n.computeContainerNode(), rule) : 0;
1369 return endBlock ? VisiblePosition(lastPositionInNode(endBlock)) : VisiblePos ition(); 1369 return endBlock ? VisiblePosition(lastPositionInNode(endBlock)) : VisiblePos ition();
1370 } 1370 }
1371 1371
1372 bool inSameBlock(const VisiblePosition &a, const VisiblePosition &b) 1372 bool inSameBlock(const VisiblePosition& a, const VisiblePosition& b)
1373 { 1373 {
1374 return !a.isNull() && enclosingBlock(a.deepEquivalent().computeContainerNode ()) == enclosingBlock(b.deepEquivalent().computeContainerNode()); 1374 return !a.isNull() && enclosingBlock(a.deepEquivalent().computeContainerNode ()) == enclosingBlock(b.deepEquivalent().computeContainerNode());
1375 } 1375 }
1376 1376
1377 bool isStartOfBlock(const VisiblePosition &pos) 1377 bool isStartOfBlock(const VisiblePosition& pos)
1378 { 1378 {
1379 return pos.isNotNull() && pos.deepEquivalent() == startOfBlock(pos, CanCross EditingBoundary).deepEquivalent(); 1379 return pos.isNotNull() && pos.deepEquivalent() == startOfBlock(pos, CanCross EditingBoundary).deepEquivalent();
1380 } 1380 }
1381 1381
1382 bool isEndOfBlock(const VisiblePosition &pos) 1382 bool isEndOfBlock(const VisiblePosition& pos)
1383 { 1383 {
1384 return pos.isNotNull() && pos.deepEquivalent() == endOfBlock(pos, CanCrossEd itingBoundary).deepEquivalent(); 1384 return pos.isNotNull() && pos.deepEquivalent() == endOfBlock(pos, CanCrossEd itingBoundary).deepEquivalent();
1385 } 1385 }
1386 1386
1387 // --------- 1387 // ---------
1388 1388
1389 VisiblePosition startOfDocument(const Node* node) 1389 VisiblePosition startOfDocument(const Node* node)
1390 { 1390 {
1391 if (!node || !node->document().documentElement()) 1391 if (!node || !node->document().documentElement())
1392 return VisiblePosition(); 1392 return VisiblePosition();
1393 1393
1394 return VisiblePosition(firstPositionInNode(node->document().documentElement( ))); 1394 return VisiblePosition(firstPositionInNode(node->document().documentElement( )));
1395 } 1395 }
1396 1396
1397 VisiblePosition startOfDocument(const VisiblePosition &c) 1397 VisiblePosition startOfDocument(const VisiblePosition& c)
1398 { 1398 {
1399 return startOfDocument(c.deepEquivalent().anchorNode()); 1399 return startOfDocument(c.deepEquivalent().anchorNode());
1400 } 1400 }
1401 1401
1402 VisiblePosition endOfDocument(const Node* node) 1402 VisiblePosition endOfDocument(const Node* node)
1403 { 1403 {
1404 if (!node || !node->document().documentElement()) 1404 if (!node || !node->document().documentElement())
1405 return VisiblePosition(); 1405 return VisiblePosition();
1406 1406
1407 Element* doc = node->document().documentElement(); 1407 Element* doc = node->document().documentElement();
1408 return VisiblePosition(lastPositionInNode(doc)); 1408 return VisiblePosition(lastPositionInNode(doc));
1409 } 1409 }
1410 1410
1411 VisiblePosition endOfDocument(const VisiblePosition &c) 1411 VisiblePosition endOfDocument(const VisiblePosition& c)
1412 { 1412 {
1413 return endOfDocument(c.deepEquivalent().anchorNode()); 1413 return endOfDocument(c.deepEquivalent().anchorNode());
1414 } 1414 }
1415 1415
1416 bool isStartOfDocument(const VisiblePosition &p) 1416 bool isStartOfDocument(const VisiblePosition& p)
1417 { 1417 {
1418 return p.isNotNull() && p.previous(CanCrossEditingBoundary).isNull(); 1418 return p.isNotNull() && p.previous(CanCrossEditingBoundary).isNull();
1419 } 1419 }
1420 1420
1421 bool isEndOfDocument(const VisiblePosition &p) 1421 bool isEndOfDocument(const VisiblePosition& p)
1422 { 1422 {
1423 return p.isNotNull() && p.next(CanCrossEditingBoundary).isNull(); 1423 return p.isNotNull() && p.next(CanCrossEditingBoundary).isNull();
1424 } 1424 }
1425 1425
1426 // --------- 1426 // ---------
1427 1427
1428 VisiblePosition startOfEditableContent(const VisiblePosition& visiblePosition) 1428 VisiblePosition startOfEditableContent(const VisiblePosition& visiblePosition)
1429 { 1429 {
1430 ContainerNode* highestRoot = highestEditableRoot(visiblePosition.deepEquival ent()); 1430 ContainerNode* highestRoot = highestEditableRoot(visiblePosition.deepEquival ent());
1431 if (!highestRoot) 1431 if (!highestRoot)
1432 return VisiblePosition(); 1432 return VisiblePosition();
1433 1433
1434 return VisiblePosition(firstPositionInNode(highestRoot)); 1434 return VisiblePosition(firstPositionInNode(highestRoot));
1435 } 1435 }
1436 1436
1437 VisiblePosition endOfEditableContent(const VisiblePosition& visiblePosition) 1437 VisiblePosition endOfEditableContent(const VisiblePosition& visiblePosition)
1438 { 1438 {
1439 ContainerNode* highestRoot = highestEditableRoot(visiblePosition.deepEquival ent()); 1439 ContainerNode* highestRoot = highestEditableRoot(visiblePosition.deepEquival ent());
1440 if (!highestRoot) 1440 if (!highestRoot)
1441 return VisiblePosition(); 1441 return VisiblePosition();
1442 1442
1443 return VisiblePosition(lastPositionInNode(highestRoot)); 1443 return VisiblePosition(lastPositionInNode(highestRoot));
1444 } 1444 }
1445 1445
1446 bool isEndOfEditableOrNonEditableContent(const VisiblePosition &p) 1446 bool isEndOfEditableOrNonEditableContent(const VisiblePosition& p)
1447 { 1447 {
1448 return p.isNotNull() && p.next().isNull(); 1448 return p.isNotNull() && p.next().isNull();
1449 } 1449 }
1450 1450
1451 VisiblePosition leftBoundaryOfLine(const VisiblePosition& c, TextDirection direc tion) 1451 VisiblePosition leftBoundaryOfLine(const VisiblePosition& c, TextDirection direc tion)
1452 { 1452 {
1453 return direction == LTR ? logicalStartOfLine(c) : logicalEndOfLine(c); 1453 return direction == LTR ? logicalStartOfLine(c) : logicalEndOfLine(c);
1454 } 1454 }
1455 1455
1456 VisiblePosition rightBoundaryOfLine(const VisiblePosition& c, TextDirection dire ction) 1456 VisiblePosition rightBoundaryOfLine(const VisiblePosition& c, TextDirection dire ction)
(...skipping 874 matching lines...) Expand 10 before | Expand all | Expand 10 after
2331 { 2331 {
2332 return isVisuallyEquivalentCandidateAlgorithm<EditingStrategy>(position); 2332 return isVisuallyEquivalentCandidateAlgorithm<EditingStrategy>(position);
2333 } 2333 }
2334 2334
2335 bool isVisuallyEquivalentCandidate(const PositionInComposedTree& position) 2335 bool isVisuallyEquivalentCandidate(const PositionInComposedTree& position)
2336 { 2336 {
2337 return isVisuallyEquivalentCandidateAlgorithm<EditingInComposedTreeStrategy> (position); 2337 return isVisuallyEquivalentCandidateAlgorithm<EditingInComposedTreeStrategy> (position);
2338 } 2338 }
2339 2339
2340 } // namespace blink 2340 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/editing/VisibleUnits.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698