67ab168c0acdd4bf4444210fee3b389e08ba52f9
[WebKit-https.git] / Source / WebCore / dom / Text.h
1 /*
2  * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3  *           (C) 1999 Antti Koivisto (koivisto@kde.org)
4  * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Library General Public
8  * License as published by the Free Software Foundation; either
9  * version 2 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Library General Public License for more details.
15  *
16  * You should have received a copy of the GNU Library General Public License
17  * along with this library; see the file COPYING.LIB.  If not, write to
18  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19  * Boston, MA 02110-1301, USA.
20  *
21  */
22
23 #ifndef Text_h
24 #define Text_h
25
26 #include "CharacterData.h"
27
28 namespace WebCore {
29
30 class RenderText;
31
32 class Text : public CharacterData {
33 public:
34     static const unsigned defaultLengthLimit = 1 << 16;
35
36     static PassRefPtr<Text> create(Document*, const String&);
37     static PassRefPtr<Text> createWithLengthLimit(Document*, const String&, unsigned positionInString, unsigned lengthLimit = defaultLengthLimit);
38     static PassRefPtr<Text> createEditingText(Document*, const String&);
39
40     PassRefPtr<Text> splitText(unsigned offset, ExceptionCode&);
41
42     // DOM Level 3: http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-1312295772
43
44     String wholeText() const;
45     PassRefPtr<Text> replaceWholeText(const String&, ExceptionCode&);
46     
47     void recalcTextStyle(StyleChange);
48     void createTextRendererIfNeeded();
49     bool textRendererIsNeeded(const NodeRenderingContext&);
50     RenderText* createTextRenderer(RenderArena*, RenderStyle*);
51     void updateTextRenderer(unsigned offsetOfReplacedData, unsigned lengthOfReplacedData);
52
53     virtual void attach();
54     
55     virtual bool canContainRangeEndPoint() const { return true; }
56
57 protected:
58     Text(Document* document, const String& data, ConstructionType type)
59         : CharacterData(document, data, type)
60     {
61     }
62
63 private:
64     virtual String nodeName() const;
65     virtual NodeType nodeType() const;
66     virtual PassRefPtr<Node> cloneNode(bool deep);
67     virtual bool childTypeAllowed(NodeType) const;
68
69     virtual PassRefPtr<Text> virtualCreate(const String&);
70
71 #ifndef NDEBUG
72     virtual void formatForDebugger(char* buffer, unsigned length) const;
73 #endif
74 };
75
76 inline Text* toText(Node* node)
77 {
78     ASSERT_WITH_SECURITY_IMPLICATION(!node || node->isTextNode());
79     return static_cast<Text*>(node);
80 }
81
82 } // namespace WebCore
83
84 #endif // Text_h