| OLD | NEW |
| 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 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 155 return prev; | 155 return prev; |
| 156 | 156 |
| 157 return next; | 157 return next; |
| 158 } | 158 } |
| 159 | 159 |
| 160 Position canonicalPositionOf(const Position& position) | 160 Position canonicalPositionOf(const Position& position) |
| 161 { | 161 { |
| 162 return canonicalPosition(position); | 162 return canonicalPosition(position); |
| 163 } | 163 } |
| 164 | 164 |
| 165 PositionInComposedTree canonicalPositionOf(const PositionInComposedTree& positio
n) | 165 PositionInFlatTree canonicalPositionOf(const PositionInFlatTree& position) |
| 166 { | 166 { |
| 167 return canonicalPosition(position); | 167 return canonicalPosition(position); |
| 168 } | 168 } |
| 169 | 169 |
| 170 template <typename Strategy> | 170 template <typename Strategy> |
| 171 static PositionWithAffinityTemplate<Strategy> honorEditingBoundaryAtOrBefore(con
st PositionWithAffinityTemplate<Strategy>& pos, const PositionTemplate<Strategy>
& anchor) | 171 static PositionWithAffinityTemplate<Strategy> honorEditingBoundaryAtOrBefore(con
st PositionWithAffinityTemplate<Strategy>& pos, const PositionTemplate<Strategy>
& anchor) |
| 172 { | 172 { |
| 173 if (pos.isNull()) | 173 if (pos.isNull()) |
| 174 return pos; | 174 return pos; |
| 175 | 175 |
| (...skipping 691 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 867 return c; | 867 return c; |
| 868 } | 868 } |
| 869 return previousBoundary(p, startWordBoundary); | 869 return previousBoundary(p, startWordBoundary); |
| 870 } | 870 } |
| 871 | 871 |
| 872 VisiblePosition startOfWord(const VisiblePosition& c, EWordSide side) | 872 VisiblePosition startOfWord(const VisiblePosition& c, EWordSide side) |
| 873 { | 873 { |
| 874 return startOfWordAlgorithm<EditingStrategy>(c, side); | 874 return startOfWordAlgorithm<EditingStrategy>(c, side); |
| 875 } | 875 } |
| 876 | 876 |
| 877 VisiblePositionInComposedTree startOfWord(const VisiblePositionInComposedTree& c
, EWordSide side) | 877 VisiblePositionInFlatTree startOfWord(const VisiblePositionInFlatTree& c, EWordS
ide side) |
| 878 { | 878 { |
| 879 return startOfWordAlgorithm<EditingInComposedTreeStrategy>(c, side); | 879 return startOfWordAlgorithm<EditingInFlatTreeStrategy>(c, side); |
| 880 } | 880 } |
| 881 | 881 |
| 882 static unsigned endWordBoundary(const UChar* characters, unsigned length, unsign
ed offset, BoundarySearchContextAvailability mayHaveMoreContext, bool& needMoreC
ontext) | 882 static unsigned endWordBoundary(const UChar* characters, unsigned length, unsign
ed offset, BoundarySearchContextAvailability mayHaveMoreContext, bool& needMoreC
ontext) |
| 883 { | 883 { |
| 884 ASSERT(offset <= length); | 884 ASSERT(offset <= length); |
| 885 if (mayHaveMoreContext && endOfFirstWordBoundaryContext(characters + offset,
length - offset) == static_cast<int>(length - offset)) { | 885 if (mayHaveMoreContext && endOfFirstWordBoundaryContext(characters + offset,
length - offset) == static_cast<int>(length - offset)) { |
| 886 needMoreContext = true; | 886 needMoreContext = true; |
| 887 return length; | 887 return length; |
| 888 } | 888 } |
| 889 needMoreContext = false; | 889 needMoreContext = false; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 906 } | 906 } |
| 907 | 907 |
| 908 return nextBoundary(p, endWordBoundary); | 908 return nextBoundary(p, endWordBoundary); |
| 909 } | 909 } |
| 910 | 910 |
| 911 VisiblePosition endOfWord(const VisiblePosition& c, EWordSide side) | 911 VisiblePosition endOfWord(const VisiblePosition& c, EWordSide side) |
| 912 { | 912 { |
| 913 return endOfWordAlgorithm<EditingStrategy>(c, side); | 913 return endOfWordAlgorithm<EditingStrategy>(c, side); |
| 914 } | 914 } |
| 915 | 915 |
| 916 VisiblePositionInComposedTree endOfWord(const VisiblePositionInComposedTree& c,
EWordSide side) | 916 VisiblePositionInFlatTree endOfWord(const VisiblePositionInFlatTree& c, EWordSid
e side) |
| 917 { | 917 { |
| 918 return endOfWordAlgorithm<EditingInComposedTreeStrategy>(c, side); | 918 return endOfWordAlgorithm<EditingInFlatTreeStrategy>(c, side); |
| 919 } | 919 } |
| 920 | 920 |
| 921 static unsigned previousWordPositionBoundary(const UChar* characters, unsigned l
ength, unsigned offset, BoundarySearchContextAvailability mayHaveMoreContext, bo
ol& needMoreContext) | 921 static unsigned previousWordPositionBoundary(const UChar* characters, unsigned l
ength, unsigned offset, BoundarySearchContextAvailability mayHaveMoreContext, bo
ol& needMoreContext) |
| 922 { | 922 { |
| 923 if (mayHaveMoreContext && !startOfLastWordBoundaryContext(characters, offset
)) { | 923 if (mayHaveMoreContext && !startOfLastWordBoundaryContext(characters, offset
)) { |
| 924 needMoreContext = true; | 924 needMoreContext = true; |
| 925 return 0; | 925 return 0; |
| 926 } | 926 } |
| 927 needMoreContext = false; | 927 needMoreContext = false; |
| 928 return findNextWordFromIndex(characters, length, offset, false); | 928 return findNextWordFromIndex(characters, length, offset, false); |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1002 // Please refer to https://bugs.webkit.org/show_bug.cgi?id=49107 for detail. | 1002 // Please refer to https://bugs.webkit.org/show_bug.cgi?id=49107 for detail. |
| 1003 PositionWithAffinityTemplate<Strategy> visPos = startPositionForLine(c, UseI
nlineBoxOrdering); | 1003 PositionWithAffinityTemplate<Strategy> visPos = startPositionForLine(c, UseI
nlineBoxOrdering); |
| 1004 return honorEditingBoundaryAtOrBefore(visPos, c.position()); | 1004 return honorEditingBoundaryAtOrBefore(visPos, c.position()); |
| 1005 } | 1005 } |
| 1006 | 1006 |
| 1007 static PositionWithAffinity startOfLine(const PositionWithAffinity& currentPosit
ion) | 1007 static PositionWithAffinity startOfLine(const PositionWithAffinity& currentPosit
ion) |
| 1008 { | 1008 { |
| 1009 return startOfLineAlgorithm<EditingStrategy>(currentPosition); | 1009 return startOfLineAlgorithm<EditingStrategy>(currentPosition); |
| 1010 } | 1010 } |
| 1011 | 1011 |
| 1012 static PositionInComposedTreeWithAffinity startOfLine(const PositionInComposedTr
eeWithAffinity& currentPosition) | 1012 static PositionInFlatTreeWithAffinity startOfLine(const PositionInFlatTreeWithAf
finity& currentPosition) |
| 1013 { | 1013 { |
| 1014 return startOfLineAlgorithm<EditingInComposedTreeStrategy>(currentPosition); | 1014 return startOfLineAlgorithm<EditingInFlatTreeStrategy>(currentPosition); |
| 1015 } | 1015 } |
| 1016 | 1016 |
| 1017 // FIXME: Rename this function to reflect the fact it ignores bidi levels. | 1017 // FIXME: Rename this function to reflect the fact it ignores bidi levels. |
| 1018 VisiblePosition startOfLine(const VisiblePosition& currentPosition) | 1018 VisiblePosition startOfLine(const VisiblePosition& currentPosition) |
| 1019 { | 1019 { |
| 1020 return createVisiblePosition(startOfLine(currentPosition.toPositionWithAffin
ity())); | 1020 return createVisiblePosition(startOfLine(currentPosition.toPositionWithAffin
ity())); |
| 1021 } | 1021 } |
| 1022 | 1022 |
| 1023 VisiblePositionInComposedTree startOfLine(const VisiblePositionInComposedTree& c
urrentPosition) | 1023 VisiblePositionInFlatTree startOfLine(const VisiblePositionInFlatTree& currentPo
sition) |
| 1024 { | 1024 { |
| 1025 return createVisiblePosition(startOfLine(currentPosition.toPositionWithAffin
ity())); | 1025 return createVisiblePosition(startOfLine(currentPosition.toPositionWithAffin
ity())); |
| 1026 } | 1026 } |
| 1027 | 1027 |
| 1028 template <typename Strategy> | 1028 template <typename Strategy> |
| 1029 static PositionWithAffinityTemplate<Strategy> logicalStartOfLineAlgorithm(const
PositionWithAffinityTemplate<Strategy>& c) | 1029 static PositionWithAffinityTemplate<Strategy> logicalStartOfLineAlgorithm(const
PositionWithAffinityTemplate<Strategy>& c) |
| 1030 { | 1030 { |
| 1031 // TODO: this is the current behavior that might need to be fixed. | 1031 // TODO: this is the current behavior that might need to be fixed. |
| 1032 // Please refer to https://bugs.webkit.org/show_bug.cgi?id=49107 for detail. | 1032 // Please refer to https://bugs.webkit.org/show_bug.cgi?id=49107 for detail. |
| 1033 PositionWithAffinityTemplate<Strategy> visPos = startPositionForLine(c, UseL
ogicalOrdering); | 1033 PositionWithAffinityTemplate<Strategy> visPos = startPositionForLine(c, UseL
ogicalOrdering); |
| 1034 | 1034 |
| 1035 if (ContainerNode* editableRoot = highestEditableRoot(c.position())) { | 1035 if (ContainerNode* editableRoot = highestEditableRoot(c.position())) { |
| 1036 if (!editableRoot->contains(visPos.position().computeContainerNode())) | 1036 if (!editableRoot->contains(visPos.position().computeContainerNode())) |
| 1037 return PositionWithAffinityTemplate<Strategy>(PositionTemplate<Strat
egy>::firstPositionInNode(editableRoot)); | 1037 return PositionWithAffinityTemplate<Strategy>(PositionTemplate<Strat
egy>::firstPositionInNode(editableRoot)); |
| 1038 } | 1038 } |
| 1039 | 1039 |
| 1040 return honorEditingBoundaryAtOrBefore(visPos, c.position()); | 1040 return honorEditingBoundaryAtOrBefore(visPos, c.position()); |
| 1041 } | 1041 } |
| 1042 | 1042 |
| 1043 VisiblePosition logicalStartOfLine(const VisiblePosition& currentPosition) | 1043 VisiblePosition logicalStartOfLine(const VisiblePosition& currentPosition) |
| 1044 { | 1044 { |
| 1045 return createVisiblePosition(logicalStartOfLineAlgorithm<EditingStrategy>(cu
rrentPosition.toPositionWithAffinity())); | 1045 return createVisiblePosition(logicalStartOfLineAlgorithm<EditingStrategy>(cu
rrentPosition.toPositionWithAffinity())); |
| 1046 } | 1046 } |
| 1047 | 1047 |
| 1048 VisiblePositionInComposedTree logicalStartOfLine(const VisiblePositionInComposed
Tree& currentPosition) | 1048 VisiblePositionInFlatTree logicalStartOfLine(const VisiblePositionInFlatTree& cu
rrentPosition) |
| 1049 { | 1049 { |
| 1050 return createVisiblePosition(logicalStartOfLineAlgorithm<EditingInComposedTr
eeStrategy>(currentPosition.toPositionWithAffinity())); | 1050 return createVisiblePosition(logicalStartOfLineAlgorithm<EditingInFlatTreeSt
rategy>(currentPosition.toPositionWithAffinity())); |
| 1051 } | 1051 } |
| 1052 | 1052 |
| 1053 template <typename Strategy> | 1053 template <typename Strategy> |
| 1054 static VisiblePositionTemplate<Strategy> endPositionForLine(const VisiblePositio
nTemplate<Strategy>& c, LineEndpointComputationMode mode) | 1054 static VisiblePositionTemplate<Strategy> endPositionForLine(const VisiblePositio
nTemplate<Strategy>& c, LineEndpointComputationMode mode) |
| 1055 { | 1055 { |
| 1056 if (c.isNull()) | 1056 if (c.isNull()) |
| 1057 return VisiblePositionTemplate<Strategy>(); | 1057 return VisiblePositionTemplate<Strategy>(); |
| 1058 | 1058 |
| 1059 RootInlineBox* rootBox = RenderedPosition(c).rootBox(); | 1059 RootInlineBox* rootBox = RenderedPosition(c).rootBox(); |
| 1060 if (!rootBox) { | 1060 if (!rootBox) { |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1130 | 1130 |
| 1131 return honorEditingBoundaryAtOrAfter(visPos, currentPosition.deepEquivalent(
)); | 1131 return honorEditingBoundaryAtOrAfter(visPos, currentPosition.deepEquivalent(
)); |
| 1132 } | 1132 } |
| 1133 | 1133 |
| 1134 // TODO(yosin) Rename this function to reflect the fact it ignores bidi levels. | 1134 // TODO(yosin) Rename this function to reflect the fact it ignores bidi levels. |
| 1135 VisiblePosition endOfLine(const VisiblePosition& currentPosition) | 1135 VisiblePosition endOfLine(const VisiblePosition& currentPosition) |
| 1136 { | 1136 { |
| 1137 return endOfLineAlgorithm<EditingStrategy>(currentPosition); | 1137 return endOfLineAlgorithm<EditingStrategy>(currentPosition); |
| 1138 } | 1138 } |
| 1139 | 1139 |
| 1140 VisiblePositionInComposedTree endOfLine(const VisiblePositionInComposedTree& cur
rentPosition) | 1140 VisiblePositionInFlatTree endOfLine(const VisiblePositionInFlatTree& currentPosi
tion) |
| 1141 { | 1141 { |
| 1142 return endOfLineAlgorithm<EditingInComposedTreeStrategy>(currentPosition); | 1142 return endOfLineAlgorithm<EditingInFlatTreeStrategy>(currentPosition); |
| 1143 } | 1143 } |
| 1144 | 1144 |
| 1145 template <typename Strategy> | 1145 template <typename Strategy> |
| 1146 static bool inSameLogicalLine(const VisiblePositionTemplate<Strategy>& a, const
VisiblePositionTemplate<Strategy>& b) | 1146 static bool inSameLogicalLine(const VisiblePositionTemplate<Strategy>& a, const
VisiblePositionTemplate<Strategy>& b) |
| 1147 { | 1147 { |
| 1148 return a.isNotNull() && logicalStartOfLine(a).deepEquivalent() == logicalSta
rtOfLine(b).deepEquivalent(); | 1148 return a.isNotNull() && logicalStartOfLine(a).deepEquivalent() == logicalSta
rtOfLine(b).deepEquivalent(); |
| 1149 } | 1149 } |
| 1150 | 1150 |
| 1151 template <typename Strategy> | 1151 template <typename Strategy> |
| 1152 VisiblePositionTemplate<Strategy> logicalEndOfLineAlgorithm(const VisiblePositio
nTemplate<Strategy>& currentPosition) | 1152 VisiblePositionTemplate<Strategy> logicalEndOfLineAlgorithm(const VisiblePositio
nTemplate<Strategy>& currentPosition) |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1172 } | 1172 } |
| 1173 | 1173 |
| 1174 return honorEditingBoundaryAtOrAfter(visPos, currentPosition.deepEquivalent(
)); | 1174 return honorEditingBoundaryAtOrAfter(visPos, currentPosition.deepEquivalent(
)); |
| 1175 } | 1175 } |
| 1176 | 1176 |
| 1177 VisiblePosition logicalEndOfLine(const VisiblePosition& currentPosition) | 1177 VisiblePosition logicalEndOfLine(const VisiblePosition& currentPosition) |
| 1178 { | 1178 { |
| 1179 return logicalEndOfLineAlgorithm<EditingStrategy>(currentPosition); | 1179 return logicalEndOfLineAlgorithm<EditingStrategy>(currentPosition); |
| 1180 } | 1180 } |
| 1181 | 1181 |
| 1182 VisiblePositionInComposedTree logicalEndOfLine(const VisiblePositionInComposedTr
ee& currentPosition) | 1182 VisiblePositionInFlatTree logicalEndOfLine(const VisiblePositionInFlatTree& curr
entPosition) |
| 1183 { | 1183 { |
| 1184 return logicalEndOfLineAlgorithm<EditingInComposedTreeStrategy>(currentPosit
ion); | 1184 return logicalEndOfLineAlgorithm<EditingInFlatTreeStrategy>(currentPosition)
; |
| 1185 } | 1185 } |
| 1186 | 1186 |
| 1187 template <typename Strategy> | 1187 template <typename Strategy> |
| 1188 bool inSameLineAlgorithm(const PositionWithAffinityTemplate<Strategy>& position1
, const PositionWithAffinityTemplate<Strategy>& position2) | 1188 bool inSameLineAlgorithm(const PositionWithAffinityTemplate<Strategy>& position1
, const PositionWithAffinityTemplate<Strategy>& position2) |
| 1189 { | 1189 { |
| 1190 if (position1.isNull() || position2.isNull()) | 1190 if (position1.isNull() || position2.isNull()) |
| 1191 return false; | 1191 return false; |
| 1192 PositionWithAffinityTemplate<Strategy> startOfLine1 = startOfLine(position1)
; | 1192 PositionWithAffinityTemplate<Strategy> startOfLine1 = startOfLine(position1)
; |
| 1193 PositionWithAffinityTemplate<Strategy> startOfLine2 = startOfLine(position2)
; | 1193 PositionWithAffinityTemplate<Strategy> startOfLine2 = startOfLine(position2)
; |
| 1194 if (startOfLine1 == startOfLine2) | 1194 if (startOfLine1 == startOfLine2) |
| 1195 return true; | 1195 return true; |
| 1196 PositionTemplate<Strategy> canonicalized1 = canonicalPositionOf(startOfLine1
.position()); | 1196 PositionTemplate<Strategy> canonicalized1 = canonicalPositionOf(startOfLine1
.position()); |
| 1197 if (canonicalized1 == startOfLine2.position()) | 1197 if (canonicalized1 == startOfLine2.position()) |
| 1198 return true; | 1198 return true; |
| 1199 return canonicalized1 == canonicalPositionOf(startOfLine2.position()); | 1199 return canonicalized1 == canonicalPositionOf(startOfLine2.position()); |
| 1200 } | 1200 } |
| 1201 | 1201 |
| 1202 bool inSameLine(const PositionWithAffinity& a, const PositionWithAffinity& b) | 1202 bool inSameLine(const PositionWithAffinity& a, const PositionWithAffinity& b) |
| 1203 { | 1203 { |
| 1204 return inSameLineAlgorithm<EditingStrategy>(a, b); | 1204 return inSameLineAlgorithm<EditingStrategy>(a, b); |
| 1205 } | 1205 } |
| 1206 | 1206 |
| 1207 bool inSameLine(const PositionInComposedTreeWithAffinity& position1, const Posit
ionInComposedTreeWithAffinity& position2) | 1207 bool inSameLine(const PositionInFlatTreeWithAffinity& position1, const PositionI
nFlatTreeWithAffinity& position2) |
| 1208 { | 1208 { |
| 1209 return inSameLineAlgorithm<EditingInComposedTreeStrategy>(position1, positio
n2); | 1209 return inSameLineAlgorithm<EditingInFlatTreeStrategy>(position1, position2); |
| 1210 } | 1210 } |
| 1211 | 1211 |
| 1212 bool inSameLine(const VisiblePosition& position1, const VisiblePosition& positio
n2) | 1212 bool inSameLine(const VisiblePosition& position1, const VisiblePosition& positio
n2) |
| 1213 { | 1213 { |
| 1214 return inSameLine(position1.toPositionWithAffinity(), position2.toPositionWi
thAffinity()); | 1214 return inSameLine(position1.toPositionWithAffinity(), position2.toPositionWi
thAffinity()); |
| 1215 } | 1215 } |
| 1216 | 1216 |
| 1217 bool inSameLine(const VisiblePositionInComposedTree& position1, const VisiblePos
itionInComposedTree& position2) | 1217 bool inSameLine(const VisiblePositionInFlatTree& position1, const VisiblePositio
nInFlatTree& position2) |
| 1218 { | 1218 { |
| 1219 return inSameLine(position1.toPositionWithAffinity(), position2.toPositionWi
thAffinity()); | 1219 return inSameLine(position1.toPositionWithAffinity(), position2.toPositionWi
thAffinity()); |
| 1220 } | 1220 } |
| 1221 | 1221 |
| 1222 template <typename Strategy> | 1222 template <typename Strategy> |
| 1223 bool isStartOfLineAlgorithm(const VisiblePositionTemplate<Strategy>& p) | 1223 bool isStartOfLineAlgorithm(const VisiblePositionTemplate<Strategy>& p) |
| 1224 { | 1224 { |
| 1225 return p.isNotNull() && p.deepEquivalent() == startOfLine(p).deepEquivalent(
); | 1225 return p.isNotNull() && p.deepEquivalent() == startOfLine(p).deepEquivalent(
); |
| 1226 } | 1226 } |
| 1227 | 1227 |
| 1228 bool isStartOfLine(const VisiblePosition& p) | 1228 bool isStartOfLine(const VisiblePosition& p) |
| 1229 { | 1229 { |
| 1230 return isStartOfLineAlgorithm<EditingStrategy>(p); | 1230 return isStartOfLineAlgorithm<EditingStrategy>(p); |
| 1231 } | 1231 } |
| 1232 | 1232 |
| 1233 bool isStartOfLine(const VisiblePositionInComposedTree& p) | 1233 bool isStartOfLine(const VisiblePositionInFlatTree& p) |
| 1234 { | 1234 { |
| 1235 return isStartOfLineAlgorithm<EditingInComposedTreeStrategy>(p); | 1235 return isStartOfLineAlgorithm<EditingInFlatTreeStrategy>(p); |
| 1236 } | 1236 } |
| 1237 | 1237 |
| 1238 template <typename Strategy> | 1238 template <typename Strategy> |
| 1239 bool isEndOfLineAlgorithm(const VisiblePositionTemplate<Strategy>& p) | 1239 bool isEndOfLineAlgorithm(const VisiblePositionTemplate<Strategy>& p) |
| 1240 { | 1240 { |
| 1241 return p.isNotNull() && p.deepEquivalent() == endOfLine(p).deepEquivalent(); | 1241 return p.isNotNull() && p.deepEquivalent() == endOfLine(p).deepEquivalent(); |
| 1242 } | 1242 } |
| 1243 | 1243 |
| 1244 bool isEndOfLine(const VisiblePosition& p) | 1244 bool isEndOfLine(const VisiblePosition& p) |
| 1245 { | 1245 { |
| 1246 return isEndOfLineAlgorithm<EditingStrategy>(p); | 1246 return isEndOfLineAlgorithm<EditingStrategy>(p); |
| 1247 } | 1247 } |
| 1248 | 1248 |
| 1249 bool isEndOfLine(const VisiblePositionInComposedTree& p) | 1249 bool isEndOfLine(const VisiblePositionInFlatTree& p) |
| 1250 { | 1250 { |
| 1251 return isEndOfLineAlgorithm<EditingInComposedTreeStrategy>(p); | 1251 return isEndOfLineAlgorithm<EditingInFlatTreeStrategy>(p); |
| 1252 } | 1252 } |
| 1253 | 1253 |
| 1254 template <typename Strategy> | 1254 template <typename Strategy> |
| 1255 static bool isLogicalEndOfLineAlgorithm(const VisiblePositionTemplate<Strategy>&
p) | 1255 static bool isLogicalEndOfLineAlgorithm(const VisiblePositionTemplate<Strategy>&
p) |
| 1256 { | 1256 { |
| 1257 return p.isNotNull() && p.deepEquivalent() == logicalEndOfLine(p).deepEquiva
lent(); | 1257 return p.isNotNull() && p.deepEquivalent() == logicalEndOfLine(p).deepEquiva
lent(); |
| 1258 } | 1258 } |
| 1259 | 1259 |
| 1260 bool isLogicalEndOfLine(const VisiblePosition& p) | 1260 bool isLogicalEndOfLine(const VisiblePosition& p) |
| 1261 { | 1261 { |
| 1262 return isLogicalEndOfLineAlgorithm<EditingStrategy>(p); | 1262 return isLogicalEndOfLineAlgorithm<EditingStrategy>(p); |
| 1263 } | 1263 } |
| 1264 | 1264 |
| 1265 bool isLogicalEndOfLine(const VisiblePositionInComposedTree& p) | 1265 bool isLogicalEndOfLine(const VisiblePositionInFlatTree& p) |
| 1266 { | 1266 { |
| 1267 return isLogicalEndOfLineAlgorithm<EditingInComposedTreeStrategy>(p); | 1267 return isLogicalEndOfLineAlgorithm<EditingInFlatTreeStrategy>(p); |
| 1268 } | 1268 } |
| 1269 | 1269 |
| 1270 static inline LayoutPoint absoluteLineDirectionPointToLocalPointInBlock(RootInli
neBox* root, LayoutUnit lineDirectionPoint) | 1270 static inline LayoutPoint absoluteLineDirectionPointToLocalPointInBlock(RootInli
neBox* root, LayoutUnit lineDirectionPoint) |
| 1271 { | 1271 { |
| 1272 ASSERT(root); | 1272 ASSERT(root); |
| 1273 LayoutBlockFlow& containingBlock = root->block(); | 1273 LayoutBlockFlow& containingBlock = root->block(); |
| 1274 FloatPoint absoluteBlockPoint = containingBlock.localToAbsolute(FloatPoint()
); | 1274 FloatPoint absoluteBlockPoint = containingBlock.localToAbsolute(FloatPoint()
); |
| 1275 if (containingBlock.hasOverflowClip()) | 1275 if (containingBlock.hasOverflowClip()) |
| 1276 absoluteBlockPoint -= FloatSize(containingBlock.scrolledContentOffset())
; | 1276 absoluteBlockPoint -= FloatSize(containingBlock.scrolledContentOffset())
; |
| 1277 | 1277 |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1403 static VisiblePositionTemplate<Strategy> startOfSentenceAlgorithm(const VisibleP
ositionTemplate<Strategy>& c) | 1403 static VisiblePositionTemplate<Strategy> startOfSentenceAlgorithm(const VisibleP
ositionTemplate<Strategy>& c) |
| 1404 { | 1404 { |
| 1405 return previousBoundary(c, startSentenceBoundary); | 1405 return previousBoundary(c, startSentenceBoundary); |
| 1406 } | 1406 } |
| 1407 | 1407 |
| 1408 VisiblePosition startOfSentence(const VisiblePosition& c) | 1408 VisiblePosition startOfSentence(const VisiblePosition& c) |
| 1409 { | 1409 { |
| 1410 return startOfSentenceAlgorithm<EditingStrategy>(c); | 1410 return startOfSentenceAlgorithm<EditingStrategy>(c); |
| 1411 } | 1411 } |
| 1412 | 1412 |
| 1413 VisiblePositionInComposedTree startOfSentence(const VisiblePositionInComposedTre
e& c) | 1413 VisiblePositionInFlatTree startOfSentence(const VisiblePositionInFlatTree& c) |
| 1414 { | 1414 { |
| 1415 return startOfSentenceAlgorithm<EditingInComposedTreeStrategy>(c); | 1415 return startOfSentenceAlgorithm<EditingInFlatTreeStrategy>(c); |
| 1416 } | 1416 } |
| 1417 | 1417 |
| 1418 static unsigned endSentenceBoundary(const UChar* characters, unsigned length, un
signed, BoundarySearchContextAvailability, bool&) | 1418 static unsigned endSentenceBoundary(const UChar* characters, unsigned length, un
signed, BoundarySearchContextAvailability, bool&) |
| 1419 { | 1419 { |
| 1420 TextBreakIterator* iterator = sentenceBreakIterator(characters, length); | 1420 TextBreakIterator* iterator = sentenceBreakIterator(characters, length); |
| 1421 return iterator->next(); | 1421 return iterator->next(); |
| 1422 } | 1422 } |
| 1423 | 1423 |
| 1424 // TODO(yosin) This includes the space after the punctuation that marks the end | 1424 // TODO(yosin) This includes the space after the punctuation that marks the end |
| 1425 // of the sentence. | 1425 // of the sentence. |
| 1426 template <typename Strategy> | 1426 template <typename Strategy> |
| 1427 static VisiblePositionTemplate<Strategy> endOfSentenceAlgorithm(const VisiblePos
itionTemplate<Strategy>& c) | 1427 static VisiblePositionTemplate<Strategy> endOfSentenceAlgorithm(const VisiblePos
itionTemplate<Strategy>& c) |
| 1428 { | 1428 { |
| 1429 return nextBoundary(c, endSentenceBoundary); | 1429 return nextBoundary(c, endSentenceBoundary); |
| 1430 } | 1430 } |
| 1431 | 1431 |
| 1432 VisiblePosition endOfSentence(const VisiblePosition& c) | 1432 VisiblePosition endOfSentence(const VisiblePosition& c) |
| 1433 { | 1433 { |
| 1434 return endOfSentenceAlgorithm<EditingStrategy>(c); | 1434 return endOfSentenceAlgorithm<EditingStrategy>(c); |
| 1435 } | 1435 } |
| 1436 | 1436 |
| 1437 VisiblePositionInComposedTree endOfSentence(const VisiblePositionInComposedTree&
c) | 1437 VisiblePositionInFlatTree endOfSentence(const VisiblePositionInFlatTree& c) |
| 1438 { | 1438 { |
| 1439 return endOfSentenceAlgorithm<EditingInComposedTreeStrategy>(c); | 1439 return endOfSentenceAlgorithm<EditingInFlatTreeStrategy>(c); |
| 1440 } | 1440 } |
| 1441 | 1441 |
| 1442 static unsigned previousSentencePositionBoundary(const UChar* characters, unsign
ed length, unsigned, BoundarySearchContextAvailability, bool&) | 1442 static unsigned previousSentencePositionBoundary(const UChar* characters, unsign
ed length, unsigned, BoundarySearchContextAvailability, bool&) |
| 1443 { | 1443 { |
| 1444 // FIXME: This is identical to startSentenceBoundary. I'm pretty sure that's
not right. | 1444 // FIXME: This is identical to startSentenceBoundary. I'm pretty sure that's
not right. |
| 1445 TextBreakIterator* iterator = sentenceBreakIterator(characters, length); | 1445 TextBreakIterator* iterator = sentenceBreakIterator(characters, length); |
| 1446 // FIXME: The following function can return -1; we don't handle that. | 1446 // FIXME: The following function can return -1; we don't handle that. |
| 1447 return iterator->preceding(length); | 1447 return iterator->preceding(length); |
| 1448 } | 1448 } |
| 1449 | 1449 |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1541 return createVisiblePosition(PositionTemplate<Strategy>(node, offset)); | 1541 return createVisiblePosition(PositionTemplate<Strategy>(node, offset)); |
| 1542 | 1542 |
| 1543 return createVisiblePosition(PositionTemplate<Strategy>(node, type)); | 1543 return createVisiblePosition(PositionTemplate<Strategy>(node, type)); |
| 1544 } | 1544 } |
| 1545 | 1545 |
| 1546 VisiblePosition startOfParagraph(const VisiblePosition& c, EditingBoundaryCrossi
ngRule boundaryCrossingRule) | 1546 VisiblePosition startOfParagraph(const VisiblePosition& c, EditingBoundaryCrossi
ngRule boundaryCrossingRule) |
| 1547 { | 1547 { |
| 1548 return startOfParagraphAlgorithm<EditingStrategy>(c, boundaryCrossingRule); | 1548 return startOfParagraphAlgorithm<EditingStrategy>(c, boundaryCrossingRule); |
| 1549 } | 1549 } |
| 1550 | 1550 |
| 1551 VisiblePositionInComposedTree startOfParagraph(const VisiblePositionInComposedTr
ee& c, EditingBoundaryCrossingRule boundaryCrossingRule) | 1551 VisiblePositionInFlatTree startOfParagraph(const VisiblePositionInFlatTree& c, E
ditingBoundaryCrossingRule boundaryCrossingRule) |
| 1552 { | 1552 { |
| 1553 return startOfParagraphAlgorithm<EditingInComposedTreeStrategy>(c, boundaryC
rossingRule); | 1553 return startOfParagraphAlgorithm<EditingInFlatTreeStrategy>(c, boundaryCross
ingRule); |
| 1554 } | 1554 } |
| 1555 | 1555 |
| 1556 template <typename Strategy> | 1556 template <typename Strategy> |
| 1557 static VisiblePositionTemplate<Strategy> endOfParagraphAlgorithm(const VisiblePo
sitionTemplate<Strategy>& c, EditingBoundaryCrossingRule boundaryCrossingRule) | 1557 static VisiblePositionTemplate<Strategy> endOfParagraphAlgorithm(const VisiblePo
sitionTemplate<Strategy>& c, EditingBoundaryCrossingRule boundaryCrossingRule) |
| 1558 { | 1558 { |
| 1559 if (c.isNull()) | 1559 if (c.isNull()) |
| 1560 return VisiblePositionTemplate<Strategy>(); | 1560 return VisiblePositionTemplate<Strategy>(); |
| 1561 | 1561 |
| 1562 const PositionTemplate<Strategy> p = c.deepEquivalent(); | 1562 const PositionTemplate<Strategy> p = c.deepEquivalent(); |
| 1563 Node* startNode = p.anchorNode(); | 1563 Node* startNode = p.anchorNode(); |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1628 return createVisiblePosition(PositionTemplate<Strategy>(node, offset)); | 1628 return createVisiblePosition(PositionTemplate<Strategy>(node, offset)); |
| 1629 | 1629 |
| 1630 return createVisiblePosition(PositionTemplate<Strategy>(node, type)); | 1630 return createVisiblePosition(PositionTemplate<Strategy>(node, type)); |
| 1631 } | 1631 } |
| 1632 | 1632 |
| 1633 VisiblePosition endOfParagraph(const VisiblePosition& c, EditingBoundaryCrossing
Rule boundaryCrossingRule) | 1633 VisiblePosition endOfParagraph(const VisiblePosition& c, EditingBoundaryCrossing
Rule boundaryCrossingRule) |
| 1634 { | 1634 { |
| 1635 return endOfParagraphAlgorithm<EditingStrategy>(c, boundaryCrossingRule); | 1635 return endOfParagraphAlgorithm<EditingStrategy>(c, boundaryCrossingRule); |
| 1636 } | 1636 } |
| 1637 | 1637 |
| 1638 VisiblePositionInComposedTree endOfParagraph(const VisiblePositionInComposedTree
& c, EditingBoundaryCrossingRule boundaryCrossingRule) | 1638 VisiblePositionInFlatTree endOfParagraph(const VisiblePositionInFlatTree& c, Edi
tingBoundaryCrossingRule boundaryCrossingRule) |
| 1639 { | 1639 { |
| 1640 return endOfParagraphAlgorithm<EditingInComposedTreeStrategy>(c, boundaryCro
ssingRule); | 1640 return endOfParagraphAlgorithm<EditingInFlatTreeStrategy>(c, boundaryCrossin
gRule); |
| 1641 } | 1641 } |
| 1642 | 1642 |
| 1643 // FIXME: isStartOfParagraph(startOfNextParagraph(pos)) is not always true | 1643 // FIXME: isStartOfParagraph(startOfNextParagraph(pos)) is not always true |
| 1644 VisiblePosition startOfNextParagraph(const VisiblePosition& visiblePosition) | 1644 VisiblePosition startOfNextParagraph(const VisiblePosition& visiblePosition) |
| 1645 { | 1645 { |
| 1646 VisiblePosition paragraphEnd(endOfParagraph(visiblePosition, CanSkipOverEdit
ingBoundary)); | 1646 VisiblePosition paragraphEnd(endOfParagraph(visiblePosition, CanSkipOverEdit
ingBoundary)); |
| 1647 VisiblePosition afterParagraphEnd(nextPositionOf(paragraphEnd, CannotCrossEd
itingBoundary)); | 1647 VisiblePosition afterParagraphEnd(nextPositionOf(paragraphEnd, CannotCrossEd
itingBoundary)); |
| 1648 // The position after the last position in the last cell of a table | 1648 // The position after the last position in the last cell of a table |
| 1649 // is not the start of the next paragraph. | 1649 // is not the start of the next paragraph. |
| 1650 if (isFirstPositionAfterTable(afterParagraphEnd)) | 1650 if (isFirstPositionAfterTable(afterParagraphEnd)) |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1661 static bool isStartOfParagraphAlgorithm(const VisiblePositionTemplate<Strategy>&
pos, EditingBoundaryCrossingRule boundaryCrossingRule) | 1661 static bool isStartOfParagraphAlgorithm(const VisiblePositionTemplate<Strategy>&
pos, EditingBoundaryCrossingRule boundaryCrossingRule) |
| 1662 { | 1662 { |
| 1663 return pos.isNotNull() && pos.deepEquivalent() == startOfParagraph(pos, boun
daryCrossingRule).deepEquivalent(); | 1663 return pos.isNotNull() && pos.deepEquivalent() == startOfParagraph(pos, boun
daryCrossingRule).deepEquivalent(); |
| 1664 } | 1664 } |
| 1665 | 1665 |
| 1666 bool isStartOfParagraph(const VisiblePosition& pos, EditingBoundaryCrossingRule
boundaryCrossingRule) | 1666 bool isStartOfParagraph(const VisiblePosition& pos, EditingBoundaryCrossingRule
boundaryCrossingRule) |
| 1667 { | 1667 { |
| 1668 return isStartOfParagraphAlgorithm<EditingStrategy>(pos, boundaryCrossingRul
e); | 1668 return isStartOfParagraphAlgorithm<EditingStrategy>(pos, boundaryCrossingRul
e); |
| 1669 } | 1669 } |
| 1670 | 1670 |
| 1671 bool isStartOfParagraph(const VisiblePositionInComposedTree& pos, EditingBoundar
yCrossingRule boundaryCrossingRule) | 1671 bool isStartOfParagraph(const VisiblePositionInFlatTree& pos, EditingBoundaryCro
ssingRule boundaryCrossingRule) |
| 1672 { | 1672 { |
| 1673 return isStartOfParagraphAlgorithm<EditingInComposedTreeStrategy>(pos, bound
aryCrossingRule); | 1673 return isStartOfParagraphAlgorithm<EditingInFlatTreeStrategy>(pos, boundaryC
rossingRule); |
| 1674 } | 1674 } |
| 1675 | 1675 |
| 1676 template <typename Strategy> | 1676 template <typename Strategy> |
| 1677 static bool isEndOfParagraphAlgorithm(const VisiblePositionTemplate<Strategy>& p
os, EditingBoundaryCrossingRule boundaryCrossingRule) | 1677 static bool isEndOfParagraphAlgorithm(const VisiblePositionTemplate<Strategy>& p
os, EditingBoundaryCrossingRule boundaryCrossingRule) |
| 1678 { | 1678 { |
| 1679 return pos.isNotNull() && pos.deepEquivalent() == endOfParagraph(pos, bounda
ryCrossingRule).deepEquivalent(); | 1679 return pos.isNotNull() && pos.deepEquivalent() == endOfParagraph(pos, bounda
ryCrossingRule).deepEquivalent(); |
| 1680 } | 1680 } |
| 1681 | 1681 |
| 1682 bool isEndOfParagraph(const VisiblePosition& pos, EditingBoundaryCrossingRule bo
undaryCrossingRule) | 1682 bool isEndOfParagraph(const VisiblePosition& pos, EditingBoundaryCrossingRule bo
undaryCrossingRule) |
| 1683 { | 1683 { |
| 1684 return isEndOfParagraphAlgorithm<EditingStrategy>(pos, boundaryCrossingRule)
; | 1684 return isEndOfParagraphAlgorithm<EditingStrategy>(pos, boundaryCrossingRule)
; |
| 1685 } | 1685 } |
| 1686 | 1686 |
| 1687 bool isEndOfParagraph(const VisiblePositionInComposedTree& pos, EditingBoundaryC
rossingRule boundaryCrossingRule) | 1687 bool isEndOfParagraph(const VisiblePositionInFlatTree& pos, EditingBoundaryCross
ingRule boundaryCrossingRule) |
| 1688 { | 1688 { |
| 1689 return isEndOfParagraphAlgorithm<EditingInComposedTreeStrategy>(pos, boundar
yCrossingRule); | 1689 return isEndOfParagraphAlgorithm<EditingInFlatTreeStrategy>(pos, boundaryCro
ssingRule); |
| 1690 } | 1690 } |
| 1691 | 1691 |
| 1692 VisiblePosition previousParagraphPosition(const VisiblePosition& p, LayoutUnit x
) | 1692 VisiblePosition previousParagraphPosition(const VisiblePosition& p, LayoutUnit x
) |
| 1693 { | 1693 { |
| 1694 VisiblePosition pos = p; | 1694 VisiblePosition pos = p; |
| 1695 do { | 1695 do { |
| 1696 VisiblePosition n = previousLinePosition(pos, x); | 1696 VisiblePosition n = previousLinePosition(pos, x); |
| 1697 if (n.isNull() || n.deepEquivalent() == pos.deepEquivalent()) | 1697 if (n.isNull() || n.deepEquivalent() == pos.deepEquivalent()) |
| 1698 break; | 1698 break; |
| 1699 pos = n; | 1699 pos = n; |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1754 return VisiblePositionTemplate<Strategy>(); | 1754 return VisiblePositionTemplate<Strategy>(); |
| 1755 | 1755 |
| 1756 return createVisiblePosition(PositionTemplate<Strategy>::firstPositionInNode
(node->document().documentElement())); | 1756 return createVisiblePosition(PositionTemplate<Strategy>::firstPositionInNode
(node->document().documentElement())); |
| 1757 } | 1757 } |
| 1758 | 1758 |
| 1759 VisiblePosition startOfDocument(const VisiblePosition& c) | 1759 VisiblePosition startOfDocument(const VisiblePosition& c) |
| 1760 { | 1760 { |
| 1761 return startOfDocumentAlgorithm<EditingStrategy>(c); | 1761 return startOfDocumentAlgorithm<EditingStrategy>(c); |
| 1762 } | 1762 } |
| 1763 | 1763 |
| 1764 VisiblePositionInComposedTree startOfDocument(const VisiblePositionInComposedTre
e& c) | 1764 VisiblePositionInFlatTree startOfDocument(const VisiblePositionInFlatTree& c) |
| 1765 { | 1765 { |
| 1766 return startOfDocumentAlgorithm<EditingInComposedTreeStrategy>(c); | 1766 return startOfDocumentAlgorithm<EditingInFlatTreeStrategy>(c); |
| 1767 } | 1767 } |
| 1768 | 1768 |
| 1769 template <typename Strategy> | 1769 template <typename Strategy> |
| 1770 static VisiblePositionTemplate<Strategy> endOfDocumentAlgorithm(const VisiblePos
itionTemplate<Strategy>& visiblePosition) | 1770 static VisiblePositionTemplate<Strategy> endOfDocumentAlgorithm(const VisiblePos
itionTemplate<Strategy>& visiblePosition) |
| 1771 { | 1771 { |
| 1772 Node* node = visiblePosition.deepEquivalent().anchorNode(); | 1772 Node* node = visiblePosition.deepEquivalent().anchorNode(); |
| 1773 if (!node || !node->document().documentElement()) | 1773 if (!node || !node->document().documentElement()) |
| 1774 return VisiblePositionTemplate<Strategy>(); | 1774 return VisiblePositionTemplate<Strategy>(); |
| 1775 | 1775 |
| 1776 Element* doc = node->document().documentElement(); | 1776 Element* doc = node->document().documentElement(); |
| 1777 return createVisiblePosition(PositionTemplate<Strategy>::lastPositionInNode(
doc)); | 1777 return createVisiblePosition(PositionTemplate<Strategy>::lastPositionInNode(
doc)); |
| 1778 } | 1778 } |
| 1779 | 1779 |
| 1780 VisiblePosition endOfDocument(const VisiblePosition& c) | 1780 VisiblePosition endOfDocument(const VisiblePosition& c) |
| 1781 { | 1781 { |
| 1782 return endOfDocumentAlgorithm<EditingStrategy>(c); | 1782 return endOfDocumentAlgorithm<EditingStrategy>(c); |
| 1783 } | 1783 } |
| 1784 | 1784 |
| 1785 VisiblePositionInComposedTree endOfDocument(const VisiblePositionInComposedTree&
c) | 1785 VisiblePositionInFlatTree endOfDocument(const VisiblePositionInFlatTree& c) |
| 1786 { | 1786 { |
| 1787 return endOfDocumentAlgorithm<EditingInComposedTreeStrategy>(c); | 1787 return endOfDocumentAlgorithm<EditingInFlatTreeStrategy>(c); |
| 1788 } | 1788 } |
| 1789 | 1789 |
| 1790 bool isStartOfDocument(const VisiblePosition& p) | 1790 bool isStartOfDocument(const VisiblePosition& p) |
| 1791 { | 1791 { |
| 1792 return p.isNotNull() && previousPositionOf(p, CanCrossEditingBoundary).isNul
l(); | 1792 return p.isNotNull() && previousPositionOf(p, CanCrossEditingBoundary).isNul
l(); |
| 1793 } | 1793 } |
| 1794 | 1794 |
| 1795 bool isEndOfDocument(const VisiblePosition& p) | 1795 bool isEndOfDocument(const VisiblePosition& p) |
| 1796 { | 1796 { |
| 1797 return p.isNotNull() && nextPositionOf(p, CanCrossEditingBoundary).isNull(); | 1797 return p.isNotNull() && nextPositionOf(p, CanCrossEditingBoundary).isNull(); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1817 return createVisiblePosition(lastPositionInNode(highestRoot)); | 1817 return createVisiblePosition(lastPositionInNode(highestRoot)); |
| 1818 } | 1818 } |
| 1819 | 1819 |
| 1820 bool isEndOfEditableOrNonEditableContent(const VisiblePosition& position) | 1820 bool isEndOfEditableOrNonEditableContent(const VisiblePosition& position) |
| 1821 { | 1821 { |
| 1822 return position.isNotNull() && nextPositionOf(position).isNull(); | 1822 return position.isNotNull() && nextPositionOf(position).isNull(); |
| 1823 } | 1823 } |
| 1824 | 1824 |
| 1825 // TODO(yosin) We should rename |isEndOfEditableOrNonEditableContent()| what | 1825 // TODO(yosin) We should rename |isEndOfEditableOrNonEditableContent()| what |
| 1826 // this function does, e.g. |isLastVisiblePositionOrEndOfInnerEditor()|. | 1826 // this function does, e.g. |isLastVisiblePositionOrEndOfInnerEditor()|. |
| 1827 bool isEndOfEditableOrNonEditableContent(const VisiblePositionInComposedTree& po
sition) | 1827 bool isEndOfEditableOrNonEditableContent(const VisiblePositionInFlatTree& positi
on) |
| 1828 { | 1828 { |
| 1829 if (position.isNull()) | 1829 if (position.isNull()) |
| 1830 return false; | 1830 return false; |
| 1831 const VisiblePositionInComposedTree nextPosition = nextPositionOf(position); | 1831 const VisiblePositionInFlatTree nextPosition = nextPositionOf(position); |
| 1832 if (nextPosition.isNull()) | 1832 if (nextPosition.isNull()) |
| 1833 return true; | 1833 return true; |
| 1834 // In DOM version, following condition, the last position of inner editor | 1834 // In DOM version, following condition, the last position of inner editor |
| 1835 // of INPUT/TEXTAREA element, by |nextPosition().isNull()|, because of | 1835 // of INPUT/TEXTAREA element, by |nextPosition().isNull()|, because of |
| 1836 // an inner editor is an only leaf node. | 1836 // an inner editor is an only leaf node. |
| 1837 if (!nextPosition.deepEquivalent().isAfterAnchor()) | 1837 if (!nextPosition.deepEquivalent().isAfterAnchor()) |
| 1838 return false; | 1838 return false; |
| 1839 return isHTMLTextFormControlElement(nextPosition.deepEquivalent().anchorNode
()); | 1839 return isHTMLTextFormControlElement(nextPosition.deepEquivalent().anchorNode
()); |
| 1840 } | 1840 } |
| 1841 | 1841 |
| (...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2078 static InlineBoxPosition computeInlineBoxPositionTemplate(const PositionTemplate
<Strategy>& position, TextAffinity affinity) | 2078 static InlineBoxPosition computeInlineBoxPositionTemplate(const PositionTemplate
<Strategy>& position, TextAffinity affinity) |
| 2079 { | 2079 { |
| 2080 return computeInlineBoxPositionTemplate<Strategy>(position, affinity, primar
yDirectionOf(*position.anchorNode())); | 2080 return computeInlineBoxPositionTemplate<Strategy>(position, affinity, primar
yDirectionOf(*position.anchorNode())); |
| 2081 } | 2081 } |
| 2082 | 2082 |
| 2083 InlineBoxPosition computeInlineBoxPosition(const Position& position, TextAffinit
y affinity) | 2083 InlineBoxPosition computeInlineBoxPosition(const Position& position, TextAffinit
y affinity) |
| 2084 { | 2084 { |
| 2085 return computeInlineBoxPositionTemplate<EditingStrategy>(position, affinity)
; | 2085 return computeInlineBoxPositionTemplate<EditingStrategy>(position, affinity)
; |
| 2086 } | 2086 } |
| 2087 | 2087 |
| 2088 InlineBoxPosition computeInlineBoxPosition(const PositionInComposedTree& positio
n, TextAffinity affinity) | 2088 InlineBoxPosition computeInlineBoxPosition(const PositionInFlatTree& position, T
extAffinity affinity) |
| 2089 { | 2089 { |
| 2090 return computeInlineBoxPositionTemplate<EditingInComposedTreeStrategy>(posit
ion, affinity); | 2090 return computeInlineBoxPositionTemplate<EditingInFlatTreeStrategy>(position,
affinity); |
| 2091 } | 2091 } |
| 2092 | 2092 |
| 2093 InlineBoxPosition computeInlineBoxPosition(const VisiblePosition& position) | 2093 InlineBoxPosition computeInlineBoxPosition(const VisiblePosition& position) |
| 2094 { | 2094 { |
| 2095 return computeInlineBoxPosition(position.deepEquivalent(), position.affinity
()); | 2095 return computeInlineBoxPosition(position.deepEquivalent(), position.affinity
()); |
| 2096 } | 2096 } |
| 2097 | 2097 |
| 2098 InlineBoxPosition computeInlineBoxPosition(const VisiblePositionInComposedTree&
position) | 2098 InlineBoxPosition computeInlineBoxPosition(const VisiblePositionInFlatTree& posi
tion) |
| 2099 { | 2099 { |
| 2100 return computeInlineBoxPosition(position.deepEquivalent(), position.affinity
()); | 2100 return computeInlineBoxPosition(position.deepEquivalent(), position.affinity
()); |
| 2101 } | 2101 } |
| 2102 | 2102 |
| 2103 InlineBoxPosition computeInlineBoxPosition(const Position& position, TextAffinit
y affinity, TextDirection primaryDirection) | 2103 InlineBoxPosition computeInlineBoxPosition(const Position& position, TextAffinit
y affinity, TextDirection primaryDirection) |
| 2104 { | 2104 { |
| 2105 return computeInlineBoxPositionTemplate<EditingStrategy>(position, affinity,
primaryDirection); | 2105 return computeInlineBoxPositionTemplate<EditingStrategy>(position, affinity,
primaryDirection); |
| 2106 } | 2106 } |
| 2107 | 2107 |
| 2108 InlineBoxPosition computeInlineBoxPosition(const PositionInComposedTree& positio
n, TextAffinity affinity, TextDirection primaryDirection) | 2108 InlineBoxPosition computeInlineBoxPosition(const PositionInFlatTree& position, T
extAffinity affinity, TextDirection primaryDirection) |
| 2109 { | 2109 { |
| 2110 return computeInlineBoxPositionTemplate<EditingInComposedTreeStrategy>(posit
ion, affinity, primaryDirection); | 2110 return computeInlineBoxPositionTemplate<EditingInFlatTreeStrategy>(position,
affinity, primaryDirection); |
| 2111 } | 2111 } |
| 2112 | 2112 |
| 2113 template <typename Strategy> | 2113 template <typename Strategy> |
| 2114 LayoutRect localCaretRectOfPositionTemplate(const PositionWithAffinityTemplate<S
trategy>& position, LayoutObject*& layoutObject) | 2114 LayoutRect localCaretRectOfPositionTemplate(const PositionWithAffinityTemplate<S
trategy>& position, LayoutObject*& layoutObject) |
| 2115 { | 2115 { |
| 2116 if (position.position().isNull()) { | 2116 if (position.position().isNull()) { |
| 2117 layoutObject = nullptr; | 2117 layoutObject = nullptr; |
| 2118 return LayoutRect(); | 2118 return LayoutRect(); |
| 2119 } | 2119 } |
| 2120 Node* node = position.position().anchorNode(); | 2120 Node* node = position.position().anchorNode(); |
| 2121 | 2121 |
| 2122 layoutObject = node->layoutObject(); | 2122 layoutObject = node->layoutObject(); |
| 2123 if (!layoutObject) | 2123 if (!layoutObject) |
| 2124 return LayoutRect(); | 2124 return LayoutRect(); |
| 2125 | 2125 |
| 2126 InlineBoxPosition boxPosition = computeInlineBoxPosition(position.position()
, position.affinity()); | 2126 InlineBoxPosition boxPosition = computeInlineBoxPosition(position.position()
, position.affinity()); |
| 2127 | 2127 |
| 2128 if (boxPosition.inlineBox) | 2128 if (boxPosition.inlineBox) |
| 2129 layoutObject = LineLayoutAPIShim::layoutObjectFrom(boxPosition.inlineBox
->lineLayoutItem()); | 2129 layoutObject = LineLayoutAPIShim::layoutObjectFrom(boxPosition.inlineBox
->lineLayoutItem()); |
| 2130 | 2130 |
| 2131 return layoutObject->localCaretRect(boxPosition.inlineBox, boxPosition.offse
tInBox); | 2131 return layoutObject->localCaretRect(boxPosition.inlineBox, boxPosition.offse
tInBox); |
| 2132 } | 2132 } |
| 2133 | 2133 |
| 2134 LayoutRect localCaretRectOfPosition(const PositionWithAffinity& position, Layout
Object*& layoutObject) | 2134 LayoutRect localCaretRectOfPosition(const PositionWithAffinity& position, Layout
Object*& layoutObject) |
| 2135 { | 2135 { |
| 2136 return localCaretRectOfPositionTemplate<EditingStrategy>(position, layoutObj
ect); | 2136 return localCaretRectOfPositionTemplate<EditingStrategy>(position, layoutObj
ect); |
| 2137 } | 2137 } |
| 2138 | 2138 |
| 2139 LayoutRect localCaretRectOfPosition(const PositionInComposedTreeWithAffinity& po
sition, LayoutObject*& layoutObject) | 2139 LayoutRect localCaretRectOfPosition(const PositionInFlatTreeWithAffinity& positi
on, LayoutObject*& layoutObject) |
| 2140 { | 2140 { |
| 2141 return localCaretRectOfPositionTemplate<EditingInComposedTreeStrategy>(posit
ion, layoutObject); | 2141 return localCaretRectOfPositionTemplate<EditingInFlatTreeStrategy>(position,
layoutObject); |
| 2142 } | 2142 } |
| 2143 | 2143 |
| 2144 static int boundingBoxLogicalHeight(LayoutObject *o, const IntRect &rect) | 2144 static int boundingBoxLogicalHeight(LayoutObject *o, const IntRect &rect) |
| 2145 { | 2145 { |
| 2146 return o->style()->isHorizontalWritingMode() ? rect.height() : rect.width(); | 2146 return o->style()->isHorizontalWritingMode() ? rect.height() : rect.width(); |
| 2147 } | 2147 } |
| 2148 | 2148 |
| 2149 bool hasRenderedNonAnonymousDescendantsWithHeight(LayoutObject* layoutObject) | 2149 bool hasRenderedNonAnonymousDescendantsWithHeight(LayoutObject* layoutObject) |
| 2150 { | 2150 { |
| 2151 LayoutObject* stop = layoutObject->nextInPreOrderAfterChildren(); | 2151 LayoutObject* stop = layoutObject->nextInPreOrderAfterChildren(); |
| (...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2580 } | 2580 } |
| 2581 } | 2581 } |
| 2582 return lastVisible.deprecatedComputePosition(); | 2582 return lastVisible.deprecatedComputePosition(); |
| 2583 } | 2583 } |
| 2584 | 2584 |
| 2585 Position mostBackwardCaretPosition(const Position& position, EditingBoundaryCros
singRule rule) | 2585 Position mostBackwardCaretPosition(const Position& position, EditingBoundaryCros
singRule rule) |
| 2586 { | 2586 { |
| 2587 return mostBackwardCaretPosition<EditingStrategy>(position, rule); | 2587 return mostBackwardCaretPosition<EditingStrategy>(position, rule); |
| 2588 } | 2588 } |
| 2589 | 2589 |
| 2590 PositionInComposedTree mostBackwardCaretPosition(const PositionInComposedTree& p
osition, EditingBoundaryCrossingRule rule) | 2590 PositionInFlatTree mostBackwardCaretPosition(const PositionInFlatTree& position,
EditingBoundaryCrossingRule rule) |
| 2591 { | 2591 { |
| 2592 return mostBackwardCaretPosition<EditingInComposedTreeStrategy>(position, ru
le); | 2592 return mostBackwardCaretPosition<EditingInFlatTreeStrategy>(position, rule); |
| 2593 } | 2593 } |
| 2594 | 2594 |
| 2595 template <typename Strategy> | 2595 template <typename Strategy> |
| 2596 PositionTemplate<Strategy> mostForwardCaretPosition(const PositionTemplate<Strat
egy>& position, EditingBoundaryCrossingRule rule) | 2596 PositionTemplate<Strategy> mostForwardCaretPosition(const PositionTemplate<Strat
egy>& position, EditingBoundaryCrossingRule rule) |
| 2597 { | 2597 { |
| 2598 TRACE_EVENT0("input", "VisibleUnits::mostForwardCaretPosition"); | 2598 TRACE_EVENT0("input", "VisibleUnits::mostForwardCaretPosition"); |
| 2599 | 2599 |
| 2600 Node* startNode = position.anchorNode(); | 2600 Node* startNode = position.anchorNode(); |
| 2601 if (!startNode) | 2601 if (!startNode) |
| 2602 return PositionTemplate<Strategy>(); | 2602 return PositionTemplate<Strategy>(); |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2712 } | 2712 } |
| 2713 | 2713 |
| 2714 return lastVisible.deprecatedComputePosition(); | 2714 return lastVisible.deprecatedComputePosition(); |
| 2715 } | 2715 } |
| 2716 | 2716 |
| 2717 Position mostForwardCaretPosition(const Position& position, EditingBoundaryCross
ingRule rule) | 2717 Position mostForwardCaretPosition(const Position& position, EditingBoundaryCross
ingRule rule) |
| 2718 { | 2718 { |
| 2719 return mostForwardCaretPosition<EditingStrategy>(position, rule); | 2719 return mostForwardCaretPosition<EditingStrategy>(position, rule); |
| 2720 } | 2720 } |
| 2721 | 2721 |
| 2722 PositionInComposedTree mostForwardCaretPosition(const PositionInComposedTree& po
sition, EditingBoundaryCrossingRule rule) | 2722 PositionInFlatTree mostForwardCaretPosition(const PositionInFlatTree& position,
EditingBoundaryCrossingRule rule) |
| 2723 { | 2723 { |
| 2724 return mostForwardCaretPosition<EditingInComposedTreeStrategy>(position, rul
e); | 2724 return mostForwardCaretPosition<EditingInFlatTreeStrategy>(position, rule); |
| 2725 } | 2725 } |
| 2726 | 2726 |
| 2727 // Returns true if the visually equivalent positions around have different | 2727 // Returns true if the visually equivalent positions around have different |
| 2728 // editability. A position is considered at editing boundary if one of the | 2728 // editability. A position is considered at editing boundary if one of the |
| 2729 // following is true: | 2729 // following is true: |
| 2730 // 1. It is the first position in the node and the next visually equivalent | 2730 // 1. It is the first position in the node and the next visually equivalent |
| 2731 // position is non editable. | 2731 // position is non editable. |
| 2732 // 2. It is the last position in the node and the previous visually equivalent | 2732 // 2. It is the last position in the node and the previous visually equivalent |
| 2733 // position is non editable. | 2733 // position is non editable. |
| 2734 // 3. It is an editable position and both the next and previous visually | 2734 // 3. It is an editable position and both the next and previous visually |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2810 } | 2810 } |
| 2811 | 2811 |
| 2812 return false; | 2812 return false; |
| 2813 } | 2813 } |
| 2814 | 2814 |
| 2815 bool isVisuallyEquivalentCandidate(const Position& position) | 2815 bool isVisuallyEquivalentCandidate(const Position& position) |
| 2816 { | 2816 { |
| 2817 return isVisuallyEquivalentCandidateAlgorithm<EditingStrategy>(position); | 2817 return isVisuallyEquivalentCandidateAlgorithm<EditingStrategy>(position); |
| 2818 } | 2818 } |
| 2819 | 2819 |
| 2820 bool isVisuallyEquivalentCandidate(const PositionInComposedTree& position) | 2820 bool isVisuallyEquivalentCandidate(const PositionInFlatTree& position) |
| 2821 { | 2821 { |
| 2822 return isVisuallyEquivalentCandidateAlgorithm<EditingInComposedTreeStrategy>
(position); | 2822 return isVisuallyEquivalentCandidateAlgorithm<EditingInFlatTreeStrategy>(pos
ition); |
| 2823 } | 2823 } |
| 2824 | 2824 |
| 2825 template <typename Strategy> | 2825 template <typename Strategy> |
| 2826 static IntRect absoluteCaretBoundsOfAlgorithm(const VisiblePositionTemplate<Stra
tegy>& visiblePosition) | 2826 static IntRect absoluteCaretBoundsOfAlgorithm(const VisiblePositionTemplate<Stra
tegy>& visiblePosition) |
| 2827 { | 2827 { |
| 2828 LayoutObject* layoutObject; | 2828 LayoutObject* layoutObject; |
| 2829 LayoutRect localRect = localCaretRectOfPosition(visiblePosition.toPositionWi
thAffinity(), layoutObject); | 2829 LayoutRect localRect = localCaretRectOfPosition(visiblePosition.toPositionWi
thAffinity(), layoutObject); |
| 2830 if (localRect.isEmpty() || !layoutObject) | 2830 if (localRect.isEmpty() || !layoutObject) |
| 2831 return IntRect(); | 2831 return IntRect(); |
| 2832 | 2832 |
| 2833 return layoutObject->localToAbsoluteQuad(FloatRect(localRect)).enclosingBoun
dingBox(); | 2833 return layoutObject->localToAbsoluteQuad(FloatRect(localRect)).enclosingBoun
dingBox(); |
| 2834 } | 2834 } |
| 2835 | 2835 |
| 2836 IntRect absoluteCaretBoundsOf(const VisiblePosition& visiblePosition) | 2836 IntRect absoluteCaretBoundsOf(const VisiblePosition& visiblePosition) |
| 2837 { | 2837 { |
| 2838 return absoluteCaretBoundsOfAlgorithm<EditingStrategy>(visiblePosition); | 2838 return absoluteCaretBoundsOfAlgorithm<EditingStrategy>(visiblePosition); |
| 2839 } | 2839 } |
| 2840 | 2840 |
| 2841 IntRect absoluteCaretBoundsOf(const VisiblePositionInComposedTree& visiblePositi
on) | 2841 IntRect absoluteCaretBoundsOf(const VisiblePositionInFlatTree& visiblePosition) |
| 2842 { | 2842 { |
| 2843 return absoluteCaretBoundsOfAlgorithm<EditingInComposedTreeStrategy>(visible
Position); | 2843 return absoluteCaretBoundsOfAlgorithm<EditingInFlatTreeStrategy>(visiblePosi
tion); |
| 2844 } | 2844 } |
| 2845 | 2845 |
| 2846 template <typename Strategy> | 2846 template <typename Strategy> |
| 2847 static VisiblePositionTemplate<Strategy> skipToEndOfEditingBoundary(const Visibl
ePositionTemplate<Strategy>& pos, const PositionTemplate<Strategy>& anchor) | 2847 static VisiblePositionTemplate<Strategy> skipToEndOfEditingBoundary(const Visibl
ePositionTemplate<Strategy>& pos, const PositionTemplate<Strategy>& anchor) |
| 2848 { | 2848 { |
| 2849 if (pos.isNull()) | 2849 if (pos.isNull()) |
| 2850 return pos; | 2850 return pos; |
| 2851 | 2851 |
| 2852 ContainerNode* highestRoot = highestEditableRoot(anchor); | 2852 ContainerNode* highestRoot = highestEditableRoot(anchor); |
| 2853 ContainerNode* highestRootOfPos = highestEditableRoot(pos.deepEquivalent()); | 2853 ContainerNode* highestRootOfPos = highestEditableRoot(pos.deepEquivalent()); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2886 return 0; | 2886 return 0; |
| 2887 | 2887 |
| 2888 return textNode->data().characterStartingAt(offset); | 2888 return textNode->data().characterStartingAt(offset); |
| 2889 } | 2889 } |
| 2890 | 2890 |
| 2891 UChar32 characterAfter(const VisiblePosition& visiblePosition) | 2891 UChar32 characterAfter(const VisiblePosition& visiblePosition) |
| 2892 { | 2892 { |
| 2893 return characterAfterAlgorithm<EditingStrategy>(visiblePosition); | 2893 return characterAfterAlgorithm<EditingStrategy>(visiblePosition); |
| 2894 } | 2894 } |
| 2895 | 2895 |
| 2896 UChar32 characterAfter(const VisiblePositionInComposedTree& visiblePosition) | 2896 UChar32 characterAfter(const VisiblePositionInFlatTree& visiblePosition) |
| 2897 { | 2897 { |
| 2898 return characterAfterAlgorithm<EditingInComposedTreeStrategy>(visiblePositio
n); | 2898 return characterAfterAlgorithm<EditingInFlatTreeStrategy>(visiblePosition); |
| 2899 } | 2899 } |
| 2900 | 2900 |
| 2901 template <typename Strategy> | 2901 template <typename Strategy> |
| 2902 static UChar32 characterBeforeAlgorithm(const VisiblePositionTemplate<Strategy>&
visiblePosition) | 2902 static UChar32 characterBeforeAlgorithm(const VisiblePositionTemplate<Strategy>&
visiblePosition) |
| 2903 { | 2903 { |
| 2904 return characterAfter(previousPositionOf(visiblePosition)); | 2904 return characterAfter(previousPositionOf(visiblePosition)); |
| 2905 } | 2905 } |
| 2906 | 2906 |
| 2907 UChar32 characterBefore(const VisiblePosition& visiblePosition) | 2907 UChar32 characterBefore(const VisiblePosition& visiblePosition) |
| 2908 { | 2908 { |
| 2909 return characterBeforeAlgorithm<EditingStrategy>(visiblePosition); | 2909 return characterBeforeAlgorithm<EditingStrategy>(visiblePosition); |
| 2910 } | 2910 } |
| 2911 | 2911 |
| 2912 UChar32 characterBefore(const VisiblePositionInComposedTree& visiblePosition) | 2912 UChar32 characterBefore(const VisiblePositionInFlatTree& visiblePosition) |
| 2913 { | 2913 { |
| 2914 return characterBeforeAlgorithm<EditingInComposedTreeStrategy>(visiblePositi
on); | 2914 return characterBeforeAlgorithm<EditingInFlatTreeStrategy>(visiblePosition); |
| 2915 } | 2915 } |
| 2916 | 2916 |
| 2917 template <typename Strategy> | 2917 template <typename Strategy> |
| 2918 static PositionTemplate<Strategy> leftVisuallyDistinctCandidate(const VisiblePos
itionTemplate<Strategy>& visiblePosition) | 2918 static PositionTemplate<Strategy> leftVisuallyDistinctCandidate(const VisiblePos
itionTemplate<Strategy>& visiblePosition) |
| 2919 { | 2919 { |
| 2920 const PositionTemplate<Strategy> deepPosition = visiblePosition.deepEquivale
nt(); | 2920 const PositionTemplate<Strategy> deepPosition = visiblePosition.deepEquivale
nt(); |
| 2921 PositionTemplate<Strategy> p = deepPosition; | 2921 PositionTemplate<Strategy> p = deepPosition; |
| 2922 | 2922 |
| 2923 if (p.isNull()) | 2923 if (p.isNull()) |
| 2924 return PositionTemplate<Strategy>(); | 2924 return PositionTemplate<Strategy>(); |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3078 ASSERT(left.deepEquivalent() != visiblePosition.deepEquivalent()); | 3078 ASSERT(left.deepEquivalent() != visiblePosition.deepEquivalent()); |
| 3079 | 3079 |
| 3080 return directionOfEnclosingBlock(left.deepEquivalent()) == LTR ? honorEditin
gBoundaryAtOrBefore(left, visiblePosition.deepEquivalent()) : honorEditingBounda
ryAtOrAfter(left, visiblePosition.deepEquivalent()); | 3080 return directionOfEnclosingBlock(left.deepEquivalent()) == LTR ? honorEditin
gBoundaryAtOrBefore(left, visiblePosition.deepEquivalent()) : honorEditingBounda
ryAtOrAfter(left, visiblePosition.deepEquivalent()); |
| 3081 } | 3081 } |
| 3082 | 3082 |
| 3083 VisiblePosition leftPositionOf(const VisiblePosition& visiblePosition) | 3083 VisiblePosition leftPositionOf(const VisiblePosition& visiblePosition) |
| 3084 { | 3084 { |
| 3085 return leftPositionOfAlgorithm<EditingStrategy>(visiblePosition); | 3085 return leftPositionOfAlgorithm<EditingStrategy>(visiblePosition); |
| 3086 } | 3086 } |
| 3087 | 3087 |
| 3088 VisiblePositionInComposedTree leftPositionOf(const VisiblePositionInComposedTree
& visiblePosition) | 3088 VisiblePositionInFlatTree leftPositionOf(const VisiblePositionInFlatTree& visibl
ePosition) |
| 3089 { | 3089 { |
| 3090 return leftPositionOfAlgorithm<EditingInComposedTreeStrategy>(visiblePositio
n); | 3090 return leftPositionOfAlgorithm<EditingInFlatTreeStrategy>(visiblePosition); |
| 3091 } | 3091 } |
| 3092 | 3092 |
| 3093 template <typename Strategy> | 3093 template <typename Strategy> |
| 3094 static PositionTemplate<Strategy> rightVisuallyDistinctCandidate(const VisiblePo
sitionTemplate<Strategy>& visiblePosition) | 3094 static PositionTemplate<Strategy> rightVisuallyDistinctCandidate(const VisiblePo
sitionTemplate<Strategy>& visiblePosition) |
| 3095 { | 3095 { |
| 3096 const PositionTemplate<Strategy> deepPosition = visiblePosition.deepEquivale
nt(); | 3096 const PositionTemplate<Strategy> deepPosition = visiblePosition.deepEquivale
nt(); |
| 3097 PositionTemplate<Strategy> p = deepPosition; | 3097 PositionTemplate<Strategy> p = deepPosition; |
| 3098 if (p.isNull()) | 3098 if (p.isNull()) |
| 3099 return PositionTemplate<Strategy>(); | 3099 return PositionTemplate<Strategy>(); |
| 3100 | 3100 |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3256 ASSERT(right.deepEquivalent() != visiblePosition.deepEquivalent()); | 3256 ASSERT(right.deepEquivalent() != visiblePosition.deepEquivalent()); |
| 3257 | 3257 |
| 3258 return directionOfEnclosingBlock(right.deepEquivalent()) == LTR ? honorEditi
ngBoundaryAtOrAfter(right, visiblePosition.deepEquivalent()) : honorEditingBound
aryAtOrBefore(right, visiblePosition.deepEquivalent()); | 3258 return directionOfEnclosingBlock(right.deepEquivalent()) == LTR ? honorEditi
ngBoundaryAtOrAfter(right, visiblePosition.deepEquivalent()) : honorEditingBound
aryAtOrBefore(right, visiblePosition.deepEquivalent()); |
| 3259 } | 3259 } |
| 3260 | 3260 |
| 3261 VisiblePosition rightPositionOf(const VisiblePosition& visiblePosition) | 3261 VisiblePosition rightPositionOf(const VisiblePosition& visiblePosition) |
| 3262 { | 3262 { |
| 3263 return rightPositionOfAlgorithm<EditingStrategy>(visiblePosition); | 3263 return rightPositionOfAlgorithm<EditingStrategy>(visiblePosition); |
| 3264 } | 3264 } |
| 3265 | 3265 |
| 3266 VisiblePositionInComposedTree rightPositionOf(const VisiblePositionInComposedTre
e& visiblePosition) | 3266 VisiblePositionInFlatTree rightPositionOf(const VisiblePositionInFlatTree& visib
lePosition) |
| 3267 { | 3267 { |
| 3268 return rightPositionOfAlgorithm<EditingInComposedTreeStrategy>(visiblePositi
on); | 3268 return rightPositionOfAlgorithm<EditingInFlatTreeStrategy>(visiblePosition); |
| 3269 } | 3269 } |
| 3270 | 3270 |
| 3271 template <typename Strategy> | 3271 template <typename Strategy> |
| 3272 static VisiblePositionTemplate<Strategy> nextPositionOfAlgorithm(const VisiblePo
sitionTemplate<Strategy>& visiblePosition, EditingBoundaryCrossingRule rule) | 3272 static VisiblePositionTemplate<Strategy> nextPositionOfAlgorithm(const VisiblePo
sitionTemplate<Strategy>& visiblePosition, EditingBoundaryCrossingRule rule) |
| 3273 { | 3273 { |
| 3274 const VisiblePositionTemplate<Strategy> next = createVisiblePosition(nextVis
uallyDistinctCandidate(visiblePosition.deepEquivalent()), visiblePosition.affini
ty()); | 3274 const VisiblePositionTemplate<Strategy> next = createVisiblePosition(nextVis
uallyDistinctCandidate(visiblePosition.deepEquivalent()), visiblePosition.affini
ty()); |
| 3275 | 3275 |
| 3276 switch (rule) { | 3276 switch (rule) { |
| 3277 case CanCrossEditingBoundary: | 3277 case CanCrossEditingBoundary: |
| 3278 return next; | 3278 return next; |
| 3279 case CannotCrossEditingBoundary: | 3279 case CannotCrossEditingBoundary: |
| 3280 return honorEditingBoundaryAtOrAfter(next, visiblePosition.deepEquivalen
t()); | 3280 return honorEditingBoundaryAtOrAfter(next, visiblePosition.deepEquivalen
t()); |
| 3281 case CanSkipOverEditingBoundary: | 3281 case CanSkipOverEditingBoundary: |
| 3282 return skipToEndOfEditingBoundary(next, visiblePosition.deepEquivalent()
); | 3282 return skipToEndOfEditingBoundary(next, visiblePosition.deepEquivalent()
); |
| 3283 } | 3283 } |
| 3284 ASSERT_NOT_REACHED(); | 3284 ASSERT_NOT_REACHED(); |
| 3285 return honorEditingBoundaryAtOrAfter(next, visiblePosition.deepEquivalent())
; | 3285 return honorEditingBoundaryAtOrAfter(next, visiblePosition.deepEquivalent())
; |
| 3286 } | 3286 } |
| 3287 | 3287 |
| 3288 VisiblePosition nextPositionOf(const VisiblePosition& visiblePosition, EditingBo
undaryCrossingRule rule) | 3288 VisiblePosition nextPositionOf(const VisiblePosition& visiblePosition, EditingBo
undaryCrossingRule rule) |
| 3289 { | 3289 { |
| 3290 return nextPositionOfAlgorithm<EditingStrategy>(visiblePosition, rule); | 3290 return nextPositionOfAlgorithm<EditingStrategy>(visiblePosition, rule); |
| 3291 } | 3291 } |
| 3292 | 3292 |
| 3293 VisiblePositionInComposedTree nextPositionOf(const VisiblePositionInComposedTree
& visiblePosition, EditingBoundaryCrossingRule rule) | 3293 VisiblePositionInFlatTree nextPositionOf(const VisiblePositionInFlatTree& visibl
ePosition, EditingBoundaryCrossingRule rule) |
| 3294 { | 3294 { |
| 3295 return nextPositionOfAlgorithm<EditingInComposedTreeStrategy>(visiblePositio
n, rule); | 3295 return nextPositionOfAlgorithm<EditingInFlatTreeStrategy>(visiblePosition, r
ule); |
| 3296 } | 3296 } |
| 3297 | 3297 |
| 3298 template <typename Strategy> | 3298 template <typename Strategy> |
| 3299 static VisiblePositionTemplate<Strategy> skipToStartOfEditingBoundary(const Visi
blePositionTemplate<Strategy>& pos, const PositionTemplate<Strategy>& anchor) | 3299 static VisiblePositionTemplate<Strategy> skipToStartOfEditingBoundary(const Visi
blePositionTemplate<Strategy>& pos, const PositionTemplate<Strategy>& anchor) |
| 3300 { | 3300 { |
| 3301 if (pos.isNull()) | 3301 if (pos.isNull()) |
| 3302 return pos; | 3302 return pos; |
| 3303 | 3303 |
| 3304 ContainerNode* highestRoot = highestEditableRoot(anchor); | 3304 ContainerNode* highestRoot = highestEditableRoot(anchor); |
| 3305 ContainerNode* highestRootOfPos = highestEditableRoot(pos.deepEquivalent()); | 3305 ContainerNode* highestRootOfPos = highestEditableRoot(pos.deepEquivalent()); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3346 | 3346 |
| 3347 ASSERT_NOT_REACHED(); | 3347 ASSERT_NOT_REACHED(); |
| 3348 return honorEditingBoundaryAtOrBefore(prev, visiblePosition.deepEquivalent()
); | 3348 return honorEditingBoundaryAtOrBefore(prev, visiblePosition.deepEquivalent()
); |
| 3349 } | 3349 } |
| 3350 | 3350 |
| 3351 VisiblePosition previousPositionOf(const VisiblePosition& visiblePosition, Editi
ngBoundaryCrossingRule rule) | 3351 VisiblePosition previousPositionOf(const VisiblePosition& visiblePosition, Editi
ngBoundaryCrossingRule rule) |
| 3352 { | 3352 { |
| 3353 return previousPositionOfAlgorithm<EditingStrategy>(visiblePosition, rule); | 3353 return previousPositionOfAlgorithm<EditingStrategy>(visiblePosition, rule); |
| 3354 } | 3354 } |
| 3355 | 3355 |
| 3356 VisiblePositionInComposedTree previousPositionOf(const VisiblePositionInComposed
Tree& visiblePosition, EditingBoundaryCrossingRule rule) | 3356 VisiblePositionInFlatTree previousPositionOf(const VisiblePositionInFlatTree& vi
siblePosition, EditingBoundaryCrossingRule rule) |
| 3357 { | 3357 { |
| 3358 return previousPositionOfAlgorithm<EditingInComposedTreeStrategy>(visiblePos
ition, rule); | 3358 return previousPositionOfAlgorithm<EditingInFlatTreeStrategy>(visiblePositio
n, rule); |
| 3359 } | 3359 } |
| 3360 | 3360 |
| 3361 } // namespace blink | 3361 } // namespace blink |
| OLD | NEW |