OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2006, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2008 Apple Inc. All rights reserved. |
3 * Copyright (C) 2010 Google Inc. All rights reserved. | 3 * Copyright (C) 2010 Google Inc. All rights reserved. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
136 VisiblePosition endAfterSelection = endOfParagraph(nextPositionOf(endOfLastP
aragraph)); | 136 VisiblePosition endAfterSelection = endOfParagraph(nextPositionOf(endOfLastP
aragraph)); |
137 m_endOfLastParagraph = endOfLastParagraph.deepEquivalent(); | 137 m_endOfLastParagraph = endOfLastParagraph.deepEquivalent(); |
138 | 138 |
139 bool atEnd = false; | 139 bool atEnd = false; |
140 Position end; | 140 Position end; |
141 while (endOfCurrentParagraph.deepEquivalent() != endAfterSelection.deepEquiv
alent() && !atEnd) { | 141 while (endOfCurrentParagraph.deepEquivalent() != endAfterSelection.deepEquiv
alent() && !atEnd) { |
142 if (endOfCurrentParagraph.deepEquivalent() == m_endOfLastParagraph) | 142 if (endOfCurrentParagraph.deepEquivalent() == m_endOfLastParagraph) |
143 atEnd = true; | 143 atEnd = true; |
144 | 144 |
145 rangeForParagraphSplittingTextNodesIfNeeded(endOfCurrentParagraph, start
, end); | 145 rangeForParagraphSplittingTextNodesIfNeeded(endOfCurrentParagraph, start
, end); |
146 endOfCurrentParagraph = createVisiblePosition(end); | 146 endOfCurrentParagraph = createVisiblePositionDeprecated(end); |
147 | 147 |
148 Node* enclosingCell = enclosingNodeOfType(start, &isTableCell); | 148 Node* enclosingCell = enclosingNodeOfType(start, &isTableCell); |
149 VisiblePosition endOfNextParagraph = endOfNextParagrahSplittingTextNodes
IfNeeded(endOfCurrentParagraph, start, end); | 149 VisiblePosition endOfNextParagraph = endOfNextParagrahSplittingTextNodes
IfNeeded(endOfCurrentParagraph, start, end); |
150 | 150 |
151 formatRange(start, end, m_endOfLastParagraph, blockquoteForNextIndent, e
ditingState); | 151 formatRange(start, end, m_endOfLastParagraph, blockquoteForNextIndent, e
ditingState); |
152 if (editingState->isAborted()) | 152 if (editingState->isAborted()) |
153 return; | 153 return; |
154 | 154 |
155 // Don't put the next paragraph in the blockquote we just created for th
is paragraph unless | 155 // Don't put the next paragraph in the blockquote we just created for th
is paragraph unless |
156 // the next paragraph is in the same cell. | 156 // the next paragraph is in the same cell. |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
201 | 201 |
202 bool isStartAndEndOnSameNode = false; | 202 bool isStartAndEndOnSameNode = false; |
203 if (const ComputedStyle* startStyle = computedStyleOfEnclosingTextNode(start
)) { | 203 if (const ComputedStyle* startStyle = computedStyleOfEnclosingTextNode(start
)) { |
204 isStartAndEndOnSameNode = computedStyleOfEnclosingTextNode(end) && start
.computeContainerNode() == end.computeContainerNode(); | 204 isStartAndEndOnSameNode = computedStyleOfEnclosingTextNode(end) && start
.computeContainerNode() == end.computeContainerNode(); |
205 bool isStartAndEndOfLastParagraphOnSameNode = computedStyleOfEnclosingTe
xtNode(m_endOfLastParagraph) && start.computeContainerNode() == m_endOfLastParag
raph.computeContainerNode(); | 205 bool isStartAndEndOfLastParagraphOnSameNode = computedStyleOfEnclosingTe
xtNode(m_endOfLastParagraph) && start.computeContainerNode() == m_endOfLastParag
raph.computeContainerNode(); |
206 | 206 |
207 // Avoid obtanining the start of next paragraph for start | 207 // Avoid obtanining the start of next paragraph for start |
208 // TODO(yosin) We should use |PositionMoveType::CodePoint| for | 208 // TODO(yosin) We should use |PositionMoveType::CodePoint| for |
209 // |previousPositionOf()|. | 209 // |previousPositionOf()|. |
210 if (startStyle->preserveNewline() && isNewLineAtPosition(start) && !isNe
wLineAtPosition(previousPositionOf(start, PositionMoveType::CodeUnit)) && start.
offsetInContainerNode() > 0) | 210 if (startStyle->preserveNewline() && isNewLineAtPosition(start) && !isNe
wLineAtPosition(previousPositionOf(start, PositionMoveType::CodeUnit)) && start.
offsetInContainerNode() > 0) |
211 start = startOfParagraph(createVisiblePosition(previousPositionOf(en
d, PositionMoveType::CodeUnit))).deepEquivalent(); | 211 start = startOfParagraph(createVisiblePositionDeprecated(previousPos
itionOf(end, PositionMoveType::CodeUnit))).deepEquivalent(); |
212 | 212 |
213 // If start is in the middle of a text node, split. | 213 // If start is in the middle of a text node, split. |
214 if (!startStyle->collapseWhiteSpace() && start.offsetInContainerNode() >
0) { | 214 if (!startStyle->collapseWhiteSpace() && start.offsetInContainerNode() >
0) { |
215 int startOffset = start.offsetInContainerNode(); | 215 int startOffset = start.offsetInContainerNode(); |
216 Text* startText = toText(start.computeContainerNode()); | 216 Text* startText = toText(start.computeContainerNode()); |
217 splitTextNode(startText, startOffset); | 217 splitTextNode(startText, startOffset); |
218 start = Position::firstPositionInNode(startText); | 218 start = Position::firstPositionInNode(startText); |
219 if (isStartAndEndOnSameNode) { | 219 if (isStartAndEndOnSameNode) { |
220 DCHECK_GE(end.offsetInContainerNode(), startOffset); | 220 DCHECK_GE(end.offsetInContainerNode(), startOffset); |
221 end = Position(startText, end.offsetInContainerNode() - startOff
set); | 221 end = Position(startText, end.offsetInContainerNode() - startOff
set); |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
288 if (m_endOfLastParagraph.offsetInContainerNode() < position.offsetInCont
ainerNode()) { | 288 if (m_endOfLastParagraph.offsetInContainerNode() < position.offsetInCont
ainerNode()) { |
289 // We can only fix endOfLastParagraph if the previous node was still
text and hasn't been modified by script. | 289 // We can only fix endOfLastParagraph if the previous node was still
text and hasn't been modified by script. |
290 if (text->previousSibling()->isTextNode() | 290 if (text->previousSibling()->isTextNode() |
291 && static_cast<unsigned>(m_endOfLastParagraph.offsetInContainerN
ode()) <= toText(text->previousSibling())->length()) | 291 && static_cast<unsigned>(m_endOfLastParagraph.offsetInContainerN
ode()) <= toText(text->previousSibling())->length()) |
292 m_endOfLastParagraph = Position(toText(text->previousSibling()),
m_endOfLastParagraph.offsetInContainerNode()); | 292 m_endOfLastParagraph = Position(toText(text->previousSibling()),
m_endOfLastParagraph.offsetInContainerNode()); |
293 } else { | 293 } else { |
294 m_endOfLastParagraph = Position(text, m_endOfLastParagraph.offsetInC
ontainerNode() - 1); | 294 m_endOfLastParagraph = Position(text, m_endOfLastParagraph.offsetInC
ontainerNode() - 1); |
295 } | 295 } |
296 } | 296 } |
297 | 297 |
298 return createVisiblePosition(Position(text, position.offsetInContainerNode()
- 1)); | 298 return createVisiblePositionDeprecated(Position(text, position.offsetInConta
inerNode() - 1)); |
299 } | 299 } |
300 | 300 |
301 HTMLElement* ApplyBlockElementCommand::createBlockElement() const | 301 HTMLElement* ApplyBlockElementCommand::createBlockElement() const |
302 { | 302 { |
303 HTMLElement* element = createHTMLElement(document(), m_tagName); | 303 HTMLElement* element = createHTMLElement(document(), m_tagName); |
304 if (m_inlineStyle.length()) | 304 if (m_inlineStyle.length()) |
305 element->setAttribute(styleAttr, m_inlineStyle); | 305 element->setAttribute(styleAttr, m_inlineStyle); |
306 return element; | 306 return element; |
307 } | 307 } |
308 | 308 |
309 DEFINE_TRACE(ApplyBlockElementCommand) | 309 DEFINE_TRACE(ApplyBlockElementCommand) |
310 { | 310 { |
311 visitor->trace(m_endOfLastParagraph); | 311 visitor->trace(m_endOfLastParagraph); |
312 CompositeEditCommand::trace(visitor); | 312 CompositeEditCommand::trace(visitor); |
313 } | 313 } |
314 | 314 |
315 } // namespace blink | 315 } // namespace blink |
OLD | NEW |