• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2004, 2006, 2008 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25 
26 #ifndef htmlediting_h
27 #define htmlediting_h
28 
29 #include <wtf/Forward.h>
30 #include "HTMLNames.h"
31 
32 namespace WebCore {
33 
34 class Document;
35 class Element;
36 class HTMLElement;
37 class Node;
38 class Position;
39 class Range;
40 class Selection;
41 class String;
42 class VisiblePosition;
43 
44 Position rangeCompliantEquivalent(const Position&);
45 Position rangeCompliantEquivalent(const VisiblePosition&);
46 int maxDeepOffset(const Node*);
47 bool isAtomicNode(const Node*);
48 bool editingIgnoresContent(const Node*);
49 bool canHaveChildrenForEditing(const Node*);
50 Node* highestEditableRoot(const Position&);
51 VisiblePosition firstEditablePositionAfterPositionInRoot(const Position&, Node*);
52 VisiblePosition lastEditablePositionBeforePositionInRoot(const Position&, Node*);
53 int comparePositions(const Position&, const Position&);
54 Node* lowestEditableAncestor(Node*);
55 bool isContentEditable(const Node*);
56 Position nextCandidate(const Position&);
57 Position nextVisuallyDistinctCandidate(const Position&);
58 Position previousCandidate(const Position&);
59 Position previousVisuallyDistinctCandidate(const Position&);
60 bool isEditablePosition(const Position&);
61 bool isRichlyEditablePosition(const Position&);
62 Element* editableRootForPosition(const Position&);
63 bool isBlock(const Node*);
64 Node* enclosingBlock(Node*);
65 
66 String stringWithRebalancedWhitespace(const String&, bool, bool);
67 const String& nonBreakingSpaceString();
68 
69 //------------------------------------------------------------------------------------------
70 
71 Position positionBeforeNode(const Node*);
72 Position positionAfterNode(const Node*);
73 
74 PassRefPtr<Range> avoidIntersectionWithNode(const Range*, Node*);
75 Selection avoidIntersectionWithNode(const Selection&, Node*);
76 
77 bool isSpecialElement(const Node*);
78 bool validBlockTag(const String&);
79 
80 PassRefPtr<HTMLElement> createDefaultParagraphElement(Document*);
81 PassRefPtr<HTMLElement> createBreakElement(Document*);
82 PassRefPtr<HTMLElement> createOrderedListElement(Document*);
83 PassRefPtr<HTMLElement> createUnorderedListElement(Document*);
84 PassRefPtr<HTMLElement> createListItemElement(Document*);
85 PassRefPtr<HTMLElement> createHTMLElement(Document*, const QualifiedName&);
86 PassRefPtr<HTMLElement> createHTMLElement(Document*, const AtomicString&);
87 
88 bool isTabSpanNode(const Node*);
89 bool isTabSpanTextNode(const Node*);
90 Node* tabSpanNode(const Node*);
91 Position positionBeforeTabSpan(const Position&);
92 PassRefPtr<Element> createTabSpanElement(Document*);
93 PassRefPtr<Element> createTabSpanElement(Document*, PassRefPtr<Node> tabTextNode);
94 PassRefPtr<Element> createTabSpanElement(Document*, const String& tabText);
95 
96 bool isNodeRendered(const Node*);
97 bool isMailBlockquote(const Node*);
98 Node* nearestMailBlockquote(const Node*);
99 unsigned numEnclosingMailBlockquotes(const Position&);
100 int caretMinOffset(const Node*);
101 int caretMaxOffset(const Node*);
102 
103 //------------------------------------------------------------------------------------------
104 
105 bool isTableStructureNode(const Node*);
106 PassRefPtr<Element> createBlockPlaceholderElement(Document*);
107 
108 bool isFirstVisiblePositionInSpecialElement(const Position&);
109 Position positionBeforeContainingSpecialElement(const Position&, Node** containingSpecialElement=0);
110 bool isLastVisiblePositionInSpecialElement(const Position&);
111 Position positionAfterContainingSpecialElement(const Position&, Node** containingSpecialElement=0);
112 Position positionOutsideContainingSpecialElement(const Position&, Node** containingSpecialElement=0);
113 Node* isLastPositionBeforeTable(const VisiblePosition&);
114 Node* isFirstPositionAfterTable(const VisiblePosition&);
115 
116 Node* enclosingNodeWithTag(const Position&, const QualifiedName&);
117 Node* enclosingNodeOfType(const Position&, bool (*nodeIsOfType)(const Node*), bool onlyReturnEditableNodes = true);
118 Node* highestEnclosingNodeOfType(const Position&, bool (*nodeIsOfType)(const Node*));
119 Node* enclosingTableCell(const Position&);
120 Node* enclosingEmptyListItem(const VisiblePosition&);
121 Node* enclosingAnchorElement(const Position&);
122 bool isListElement(Node*);
123 HTMLElement* enclosingList(Node*);
124 HTMLElement* outermostEnclosingList(Node*);
125 Node* enclosingListChild(Node*);
126 Node* highestAncestor(Node*);
127 bool isTableElement(Node*);
128 bool isTableCell(const Node*);
129 
130 bool lineBreakExistsAtPosition(const VisiblePosition&);
131 
132 Selection selectionForParagraphIteration(const Selection&);
133 
134 int indexForVisiblePosition(VisiblePosition&);
135 
136 }
137 
138 #endif
139