• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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, 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 CharacterData_h
24 #define CharacterData_h
25 
26 #include "Node.h"
27 
28 namespace WebCore {
29 
30 class CharacterData : public Node {
31 public:
data()32     String data() const { return m_data; }
33     void setData(const String&, ExceptionCode&);
length()34     unsigned length() const { return m_data->length(); }
35     String substringData(unsigned offset, unsigned count, ExceptionCode&);
36     void appendData(const String&, ExceptionCode&);
37     void insertData(unsigned offset, const String&, ExceptionCode&);
38     void deleteData(unsigned offset, unsigned count, ExceptionCode&);
39     void replaceData(unsigned offset, unsigned count, const String&, ExceptionCode&);
40 
41     bool containsOnlyWhitespace() const;
42 
dataImpl()43     StringImpl* dataImpl() { return m_data.get(); }
44 
45     // Like appendData, but optimized for the parser (e.g., no mutation events).
46     // Returns how much could be added before length limit was met.
47     unsigned parserAppendData(const UChar*, unsigned dataLength, unsigned lengthLimit);
48 
49 protected:
CharacterData(Document * document,const String & text,ConstructionType type)50     CharacterData(Document* document, const String& text, ConstructionType type)
51         : Node(document, type)
52         , m_data(text.impl() ? text.impl() : StringImpl::empty())
53     {
54         ASSERT(type == CreateComment || type == CreateText);
55     }
56 
57     virtual bool rendererIsNeeded(RenderStyle*);
58 
setDataImpl(PassRefPtr<StringImpl> impl)59     void setDataImpl(PassRefPtr<StringImpl> impl) { m_data = impl; }
60     void dispatchModifiedEvent(StringImpl* oldValue);
61 
62 private:
63     virtual String nodeValue() const;
64     virtual void setNodeValue(const String&, ExceptionCode&);
isCharacterDataNode()65     virtual bool isCharacterDataNode() const { return true; }
66     virtual int maxCharacterOffset() const;
67     virtual bool offsetInCharacters() const;
68     void setDataAndUpdate(PassRefPtr<StringImpl>, unsigned offsetOfReplacedData, unsigned oldLength, unsigned newLength);
69     void updateRenderer(unsigned offsetOfReplacedData, unsigned lengthOfReplacedData);
70     void checkCharDataOperation(unsigned offset, ExceptionCode&);
71 
72     RefPtr<StringImpl> m_data;
73 };
74 
75 } // namespace WebCore
76 
77 #endif // CharacterData_h
78 
79