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

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

Issue 15622005: Introduce LiteralSet (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Literal, Literal, Literal Created 7 years, 7 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 | Annotate | Revision Log
« no previous file with comments | « Source/core/editing/FormatBlockCommand.cpp ('k') | Source/wtf/LiteralSet.h » ('j') | 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) 2005, 2006, 2008 Apple Inc. All rights reserved. 2 * Copyright (C) 2005, 2006, 2008 Apple Inc. All rights reserved.
3 * Copyright (C) 2009, 2010, 2011 Google Inc. All rights reserved. 3 * Copyright (C) 2009, 2010, 2011 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 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 #include "core/editing/TextIterator.h" 51 #include "core/editing/TextIterator.h"
52 #include "core/editing/VisibleUnits.h" 52 #include "core/editing/VisibleUnits.h"
53 #include "core/editing/htmlediting.h" 53 #include "core/editing/htmlediting.h"
54 #include "core/editing/markup.h" 54 #include "core/editing/markup.h"
55 #include "core/html/HTMLElement.h" 55 #include "core/html/HTMLElement.h"
56 #include "core/html/HTMLInputElement.h" 56 #include "core/html/HTMLInputElement.h"
57 #include "core/page/Frame.h" 57 #include "core/page/Frame.h"
58 #include "core/rendering/RenderInline.h" 58 #include "core/rendering/RenderInline.h"
59 #include "core/rendering/RenderObject.h" 59 #include "core/rendering/RenderObject.h"
60 #include "core/rendering/RenderText.h" 60 #include "core/rendering/RenderText.h"
61 #include <wtf/StdLibExtras.h> 61 #include "wtf/StdLibExtras.h"
62 #include <wtf/Vector.h> 62 #include "wtf/Vector.h"
63 63
64 namespace WebCore { 64 namespace WebCore {
65 65
66 using namespace HTMLNames; 66 using namespace HTMLNames;
67 67
68 enum EFragmentType { EmptyFragment, SingleTextNodeFragment, TreeFragment }; 68 enum EFragmentType { EmptyFragment, SingleTextNodeFragment, TreeFragment };
69 69
70 // --- ReplacementFragment helper class 70 // --- ReplacementFragment helper class
71 71
72 class ReplacementFragment { 72 class ReplacementFragment {
(...skipping 478 matching lines...) Expand 10 before | Expand all | Expand 10 after
551 551
552 // Mutate using the CSSOM wrapper so we get the same event behavior as a script. 552 // Mutate using the CSSOM wrapper so we get the same event behavior as a script.
553 if (isBlock(element)) 553 if (isBlock(element))
554 element->style()->setPropertyInternal(CSSPropertyDisplay, "inlin e", false, IGNORE_EXCEPTION); 554 element->style()->setPropertyInternal(CSSPropertyDisplay, "inlin e", false, IGNORE_EXCEPTION);
555 if (element->renderer() && element->renderer()->style()->isFloating( )) 555 if (element->renderer() && element->renderer()->style()->isFloating( ))
556 element->style()->setPropertyInternal(CSSPropertyFloat, "none", false, IGNORE_EXCEPTION); 556 element->style()->setPropertyInternal(CSSPropertyFloat, "none", false, IGNORE_EXCEPTION);
557 } 557 }
558 } 558 }
559 } 559 }
560 560
561 static bool isProhibitedParagraphChild(const AtomicString& name) 561 static bool isProhibitedParagraphChild(const QualifiedName& name)
562 { 562 {
563 // https://dvcs.w3.org/hg/editing/raw-file/57abe6d3cb60/editing.html#prohibi ted-paragraph-child 563 // https://dvcs.w3.org/hg/editing/raw-file/57abe6d3cb60/editing.html#prohibi ted-paragraph-child
564 DEFINE_STATIC_LOCAL(HashSet<AtomicString>, elements, ()); 564 DEFINE_STATIC_LOCAL(LocalNameLiteralSet, prohibitedChildren, ());
565 if (elements.isEmpty()) { 565 if (!prohibitedChildren.isInitialized()) {
566 elements.add(addressTag.localName()); 566 static const QualifiedName* prohibitedChildrenData[] = {
567 elements.add(articleTag.localName()); 567 &addressTag,
568 elements.add(asideTag.localName()); 568 &articleTag,
569 elements.add(blockquoteTag.localName()); 569 &asideTag,
570 elements.add(captionTag.localName()); 570 &blockquoteTag,
571 elements.add(centerTag.localName()); 571 &captionTag,
572 elements.add(colTag.localName()); 572 &centerTag,
573 elements.add(colgroupTag.localName()); 573 &colTag,
574 elements.add(ddTag.localName()); 574 &colgroupTag,
575 elements.add(detailsTag.localName()); 575 &ddTag,
576 elements.add(dirTag.localName()); 576 &detailsTag,
577 elements.add(divTag.localName()); 577 &dirTag,
578 elements.add(dlTag.localName()); 578 &divTag,
579 elements.add(dtTag.localName()); 579 &dlTag,
580 elements.add(fieldsetTag.localName()); 580 &dtTag,
581 elements.add(figcaptionTag.localName()); 581 &fieldsetTag,
582 elements.add(figureTag.localName()); 582 &figcaptionTag,
583 elements.add(footerTag.localName()); 583 &figureTag,
584 elements.add(formTag.localName()); 584 &footerTag,
585 elements.add(h1Tag.localName()); 585 &formTag,
586 elements.add(h2Tag.localName()); 586 &h1Tag,
587 elements.add(h3Tag.localName()); 587 &h2Tag,
588 elements.add(h4Tag.localName()); 588 &h3Tag,
589 elements.add(h5Tag.localName()); 589 &h4Tag,
590 elements.add(h6Tag.localName()); 590 &h5Tag,
591 elements.add(headerTag.localName()); 591 &h6Tag,
592 elements.add(hgroupTag.localName()); 592 &headerTag,
593 elements.add(hrTag.localName()); 593 &hgroupTag,
594 elements.add(liTag.localName()); 594 &hrTag,
595 elements.add(listingTag.localName()); 595 &liTag,
596 elements.add(mainTag.localName()); // Missing in the specification. 596 &listingTag,
597 elements.add(menuTag.localName()); 597 &mainTag, // Missing in the specification.
598 elements.add(navTag.localName()); 598 &menuTag,
599 elements.add(olTag.localName()); 599 &navTag,
600 elements.add(pTag.localName()); 600 &olTag,
601 elements.add(plaintextTag.localName()); 601 &pTag,
602 elements.add(preTag.localName()); 602 &plaintextTag,
603 elements.add(sectionTag.localName()); 603 &preTag,
604 elements.add(summaryTag.localName()); 604 &sectionTag,
605 elements.add(tableTag.localName()); 605 &summaryTag,
606 elements.add(tbodyTag.localName()); 606 &tableTag,
607 elements.add(tdTag.localName()); 607 &tbodyTag,
608 elements.add(tfootTag.localName()); 608 &tdTag,
609 elements.add(thTag.localName()); 609 &tfootTag,
610 elements.add(theadTag.localName()); 610 &thTag,
611 elements.add(trTag.localName()); 611 &theadTag,
612 elements.add(ulTag.localName()); 612 &trTag,
613 elements.add(xmpTag.localName()); 613 &ulTag,
614 &xmpTag,
615 };
616 prohibitedChildren.init(prohibitedChildrenData, WTF_ARRAY_LENGTH(prohibi tedChildrenData));
614 } 617 }
615 return elements.contains(name); 618 return prohibitedChildren.contains(&name);
616 } 619 }
617 620
618 void ReplaceSelectionCommand::makeInsertedContentRoundTrippableWithHTMLTreeBuild er(InsertedNodes& insertedNodes) 621 void ReplaceSelectionCommand::makeInsertedContentRoundTrippableWithHTMLTreeBuild er(InsertedNodes& insertedNodes)
619 { 622 {
620 RefPtr<Node> pastEndNode = insertedNodes.pastLastLeaf(); 623 RefPtr<Node> pastEndNode = insertedNodes.pastLastLeaf();
621 RefPtr<Node> next; 624 RefPtr<Node> next;
622 for (RefPtr<Node> node = insertedNodes.firstNodeInserted(); node && node != pastEndNode; node = next) { 625 for (RefPtr<Node> node = insertedNodes.firstNodeInserted(); node && node != pastEndNode; node = next) {
623 next = NodeTraversal::next(node.get()); 626 next = NodeTraversal::next(node.get());
624 627
625 if (!node->isHTMLElement()) 628 if (!node->isHTMLElement())
626 continue; 629 continue;
627 630
628 if (isProhibitedParagraphChild(toHTMLElement(node.get())->localName())) { 631 if (isProhibitedParagraphChild(toHTMLElement(node.get())->tagQName())) {
629 if (HTMLElement* paragraphElement = toHTMLElement(enclosingNodeWithT ag(positionInParentBeforeNode(node.get()), pTag))) 632 if (HTMLElement* paragraphElement = toHTMLElement(enclosingNodeWithT ag(positionInParentBeforeNode(node.get()), pTag)))
630 moveNodeOutOfAncestor(node, paragraphElement); 633 moveNodeOutOfAncestor(node, paragraphElement);
631 } 634 }
632 635
633 if (isHeaderElement(node.get())) { 636 if (isHeaderElement(node.get())) {
634 if (HTMLElement* headerElement = static_cast<HTMLElement*>(highestEn closingNodeOfType(positionInParentBeforeNode(node.get()), isHeaderElement))) 637 if (HTMLElement* headerElement = static_cast<HTMLElement*>(highestEn closingNodeOfType(positionInParentBeforeNode(node.get()), isHeaderElement)))
635 moveNodeOutOfAncestor(node, headerElement); 638 moveNodeOutOfAncestor(node, headerElement);
636 } 639 }
637 } 640 }
638 } 641 }
(...skipping 850 matching lines...) Expand 10 before | Expand all | Expand 10 after
1489 removeNodeAndPruneAncestors(nodeAfterInsertionPos.get()); 1492 removeNodeAndPruneAncestors(nodeAfterInsertionPos.get());
1490 1493
1491 VisibleSelection selectionAfterReplace(m_selectReplacement ? start : end, en d); 1494 VisibleSelection selectionAfterReplace(m_selectReplacement ? start : end, en d);
1492 1495
1493 setEndingSelection(selectionAfterReplace); 1496 setEndingSelection(selectionAfterReplace);
1494 1497
1495 return true; 1498 return true;
1496 } 1499 }
1497 1500
1498 } // namespace WebCore 1501 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/editing/FormatBlockCommand.cpp ('k') | Source/wtf/LiteralSet.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698