| 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 * Copyright (C) 2008, 2009, 2010, 2011 Google Inc. All rights reserved. | 3 * Copyright (C) 2008, 2009, 2010, 2011 Google Inc. All rights reserved. |
| 4 * Copyright (C) 2011 Igalia S.L. | 4 * Copyright (C) 2011 Igalia S.L. |
| 5 * Copyright (C) 2011 Motorola Mobility. All rights reserved. | 5 * Copyright (C) 2011 Motorola Mobility. All rights reserved. |
| 6 * | 6 * |
| 7 * Redistribution and use in source and binary forms, with or without | 7 * Redistribution and use in source and binary forms, with or without |
| 8 * modification, are permitted provided that the following conditions | 8 * modification, are permitted provided that the following conditions |
| 9 * are met: | 9 * are met: |
| 10 * 1. Redistributions of source code must retain the above copyright | 10 * 1. Redistributions of source code must retain the above copyright |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 174 } | 174 } |
| 175 | 175 |
| 176 void StyledMarkupAccumulator::wrapWithNode(ContainerNode& node, bool convertBloc
ksToInlines, RangeFullySelectsNode rangeFullySelectsNode) | 176 void StyledMarkupAccumulator::wrapWithNode(ContainerNode& node, bool convertBloc
ksToInlines, RangeFullySelectsNode rangeFullySelectsNode) |
| 177 { | 177 { |
| 178 StringBuilder markup; | 178 StringBuilder markup; |
| 179 if (node.isElementNode()) | 179 if (node.isElementNode()) |
| 180 appendElement(markup, toElement(node), convertBlocksToInlines && isBlock
(&node), rangeFullySelectsNode); | 180 appendElement(markup, toElement(node), convertBlocksToInlines && isBlock
(&node), rangeFullySelectsNode); |
| 181 else | 181 else |
| 182 appendStartMarkup(markup, node, 0); | 182 appendStartMarkup(markup, node, 0); |
| 183 m_reversedPrecedingMarkup.append(markup.toString()); | 183 m_reversedPrecedingMarkup.append(markup.toString()); |
| 184 appendEndTag(node); | 184 if (node.isElementNode()) |
| 185 appendEndTag(toElement(node)); |
| 185 if (m_nodes) | 186 if (m_nodes) |
| 186 m_nodes->append(&node); | 187 m_nodes->append(&node); |
| 187 } | 188 } |
| 188 | 189 |
| 189 void StyledMarkupAccumulator::wrapWithStyleNode(StylePropertySet* style, const D
ocument& document, bool isBlock) | 190 void StyledMarkupAccumulator::wrapWithStyleNode(StylePropertySet* style, const D
ocument& document, bool isBlock) |
| 190 { | 191 { |
| 191 StringBuilder openTag; | 192 StringBuilder openTag; |
| 192 appendStyleNodeOpenTag(openTag, style, document, isBlock); | 193 appendStyleNodeOpenTag(openTag, style, document, isBlock); |
| 193 m_reversedPrecedingMarkup.append(openTag.toString()); | 194 m_reversedPrecedingMarkup.append(openTag.toString()); |
| 194 appendString(styleNodeCloseTag(isBlock)); | 195 appendString(styleNodeCloseTag(isBlock)); |
| (...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 395 } else { | 396 } else { |
| 396 // Add the node to the markup if we're not skipping the descendants | 397 // Add the node to the markup if we're not skipping the descendants |
| 397 if (shouldEmit) | 398 if (shouldEmit) |
| 398 appendStartTag(*n); | 399 appendStartTag(*n); |
| 399 | 400 |
| 400 // If node has no children, close the tag now. | 401 // If node has no children, close the tag now. |
| 401 if (n->isContainerNode() && toContainerNode(n)->hasChildren()) { | 402 if (n->isContainerNode() && toContainerNode(n)->hasChildren()) { |
| 402 openedTag = true; | 403 openedTag = true; |
| 403 ancestorsToClose.append(toContainerNode(n)); | 404 ancestorsToClose.append(toContainerNode(n)); |
| 404 } else { | 405 } else { |
| 405 if (shouldEmit) | 406 if (shouldEmit && n->isElementNode()) |
| 406 appendEndTag(*n); | 407 appendEndTag(toElement(*n)); |
| 407 lastClosed = n; | 408 lastClosed = n; |
| 408 } | 409 } |
| 409 } | 410 } |
| 410 | 411 |
| 411 // If we didn't insert open tag and there's no more siblings or we're at
the end of the traversal, take care of ancestors. | 412 // If we didn't insert open tag and there's no more siblings or we're at
the end of the traversal, take care of ancestors. |
| 412 // FIXME: What happens if we just inserted open tag and reached the end? | 413 // FIXME: What happens if we just inserted open tag and reached the end? |
| 413 if (!openedTag && (!n->nextSibling() || next == pastEnd)) { | 414 if (!openedTag && (!n->nextSibling() || next == pastEnd)) { |
| 414 // Close up the ancestors. | 415 // Close up the ancestors. |
| 415 while (!ancestorsToClose.isEmpty()) { | 416 while (!ancestorsToClose.isEmpty()) { |
| 416 ContainerNode* ancestor = ancestorsToClose.last(); | 417 ContainerNode* ancestor = ancestorsToClose.last(); |
| 417 ASSERT(ancestor); | 418 ASSERT(ancestor); |
| 418 if (next != pastEnd && next->isDescendantOf(ancestor)) | 419 if (next != pastEnd && next->isDescendantOf(ancestor)) |
| 419 break; | 420 break; |
| 420 // Not at the end of the range, close ancestors up to sibling of
next node. | 421 // Not at the end of the range, close ancestors up to sibling of
next node. |
| 421 if (shouldEmit) | 422 if (shouldEmit && ancestor->isElementNode()) |
| 422 appendEndTag(*ancestor); | 423 appendEndTag(toElement(*ancestor)); |
| 423 lastClosed = ancestor; | 424 lastClosed = ancestor; |
| 424 ancestorsToClose.removeLast(); | 425 ancestorsToClose.removeLast(); |
| 425 } | 426 } |
| 426 | 427 |
| 427 // Surround the currently accumulated markup with markup for ancesto
rs we never opened as we leave the subtree(s) rooted at those ancestors. | 428 // Surround the currently accumulated markup with markup for ancesto
rs we never opened as we leave the subtree(s) rooted at those ancestors. |
| 428 ContainerNode* nextParent = next ? next->parentNode() : 0; | 429 ContainerNode* nextParent = next ? next->parentNode() : 0; |
| 429 if (next != pastEnd && n != nextParent) { | 430 if (next != pastEnd && n != nextParent) { |
| 430 Node* lastAncestorClosedOrSelf = n->isDescendantOf(lastClosed) ?
lastClosed : n; | 431 Node* lastAncestorClosedOrSelf = n->isDescendantOf(lastClosed) ?
lastClosed : n; |
| 431 for (ContainerNode* parent = lastAncestorClosedOrSelf->parentNod
e(); parent && parent != nextParent; parent = parent->parentNode()) { | 432 for (ContainerNode* parent = lastAncestorClosedOrSelf->parentNod
e(); parent && parent != nextParent; parent = parent->parentNode()) { |
| 432 // All ancestors that aren't in the ancestorsToClose list sh
ould either be a) unrendered: | 433 // All ancestors that aren't in the ancestorsToClose list sh
ould either be a) unrendered: |
| (...skipping 676 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1109 node->document().updateLayoutIgnorePendingStylesheets(); | 1110 node->document().updateLayoutIgnorePendingStylesheets(); |
| 1110 | 1111 |
| 1111 StyledMarkupAccumulator accumulator(0, ResolveAllURLs, AnnotateForNavigation
Transition, nullptr, 0); | 1112 StyledMarkupAccumulator accumulator(0, ResolveAllURLs, AnnotateForNavigation
Transition, nullptr, 0); |
| 1112 accumulator.serializeNodes(node, NodeTraversal::nextSkippingChildren(*node))
; | 1113 accumulator.serializeNodes(node, NodeTraversal::nextSkippingChildren(*node))
; |
| 1113 | 1114 |
| 1114 static const char* documentMarkup = "<!DOCTYPE html><meta name=\"viewport\"
content=\"width=device-width, user-scalable=0\">"; | 1115 static const char* documentMarkup = "<!DOCTYPE html><meta name=\"viewport\"
content=\"width=device-width, user-scalable=0\">"; |
| 1115 return documentMarkup + accumulator.takeResults(); | 1116 return documentMarkup + accumulator.takeResults(); |
| 1116 } | 1117 } |
| 1117 | 1118 |
| 1118 } | 1119 } |
| OLD | NEW |