KHtml

dom_textimpl.h
1 /*
2  * This file is part of the DOM implementation for KDE.
3  *
4  * Copyright (C) 1999-2003 Lars Knoll ([email protected])
5  * (C) 2001-2003 Dirk Mueller ([email protected])
6  * (C) 1999 Antti Koivisto ([email protected])
7  * (C) 2003 Apple Computer, Inc
8  *
9  * This library is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Library General Public
11  * License as published by the Free Software Foundation; either
12  * version 2 of the License, or (at your option) any later version.
13  *
14  * This library is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17  * Library General Public License for more details.
18  *
19  * You should have received a copy of the GNU Library General Public License
20  * along with this library; see the file COPYING.LIB. If not, write to
21  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
22  * Boston, MA 02110-1301, USA.
23  *
24  */
25 #ifndef _DOM_CharacterDataImpl_h_
26 #define _DOM_CharacterDataImpl_h_
27 
28 #include "xml/dom_nodeimpl.h"
29 #include "dom/dom_string.h"
30 
31 namespace DOM
32 {
33 
34 class DocumentImpl;
35 class CharacterData;
36 class Text;
37 
38 class CharacterDataImpl : public NodeImpl
39 {
40 public:
41  CharacterDataImpl(DocumentImpl *doc, DOMStringImpl *_text);
42 
43  virtual ~CharacterDataImpl();
44 
45  // DOM methods & attributes for CharacterData
46 
47  virtual void setData(const DOMString &_data, int &exceptioncode);
48  virtual unsigned long length() const;
49  virtual DOMString substringData(const unsigned long offset, const unsigned long count, int &exceptioncode);
50  virtual void appendData(const DOMString &arg, int &exceptioncode);
51  virtual void insertData(const unsigned long offset, const DOMString &arg, int &exceptioncode);
52  virtual void deleteData(const unsigned long offset, const unsigned long count, int &exceptioncode);
53  virtual void replaceData(const unsigned long offset, const unsigned long count, const DOMString &arg, int &exceptioncode);
54 
55  bool containsOnlyWhitespace() const override;
56 
57  // DOM methods overridden from parent classes
58 
59  DOMString nodeValue() const override;
60  void setNodeValue(const DOMString &_nodeValue, int &exceptioncode) override;
61 
62  // Other methods (not part of DOM)
63 
64  DOMStringImpl *string() const
65  {
66  return str;
67  }
68  DOMString data() const
69  {
70  return str;
71  }
72 
73  virtual void checkCharDataOperation(const unsigned long offset, int &exceptioncode);
74 
75  bool offsetInCharacters() const override
76  {
77  return true;
78  }
79  int maxCharacterOffset() const override
80  {
81  return static_cast<int>(length());
82  }
83 
84  long maxOffset() const override;
85  long caretMinOffset() const override;
86  long caretMaxOffset() const override;
87  unsigned long caretMaxRenderedOffset() const override;
88 
89  bool rendererIsNeeded(khtml::RenderStyle *) override;
90 
91 protected:
92  // note: since DOMStrings are shared, str should always be copied when making
93  // a change or returning a string
94  DOMStringImpl *str;
95 
96  void dispatchModifiedEvent(DOMStringImpl *prevValue);
97 };
98 
99 // ----------------------------------------------------------------------------
100 
101 class CommentImpl : public CharacterDataImpl
102 {
103 public:
104  CommentImpl(DocumentImpl *doc, DOMStringImpl *_text)
105  : CharacterDataImpl(doc, _text) {}
106  CommentImpl(DocumentImpl *doc)
107  : CharacterDataImpl(doc, nullptr) {}
108  // DOM methods overridden from parent classes
109  DOMString nodeName() const override;
110  unsigned short nodeType() const override;
111  WTF::PassRefPtr<NodeImpl> cloneNode(bool deep) override;
112 
113  // Other methods (not part of DOM)
114 
115  Id id() const override;
116  bool childTypeAllowed(unsigned short type) override;
117 
118  DOMString toString() const override;
119 };
120 
121 // ----------------------------------------------------------------------------
122 
123 class TextImpl : public CharacterDataImpl
124 {
125 public:
126  TextImpl(DocumentImpl *impl, DOMStringImpl *_text)
127  : CharacterDataImpl(impl, _text) {}
128  TextImpl(DocumentImpl *impl)
129  : CharacterDataImpl(impl, nullptr) {}
130 
131  // DOM methods & attributes for CharacterData
132 
133  TextImpl *splitText(const unsigned long offset, int &exceptioncode);
134 
135  // DOM Level 3: https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-1312295772
136  DOMString wholeText() const;
137  TextImpl *replaceWholeText(const DOMString &newText, int &ec);
138 
139  // DOM methods overridden from parent classes
140  DOMString nodeName() const override;
141  unsigned short nodeType() const override;
142  WTF::PassRefPtr<NodeImpl> cloneNode(bool deep) override;
143 
144  // Other methods (not part of DOM)
145 
146  bool isTextNode() const override
147  {
148  return true;
149  }
150  Id id() const override;
151  void attach() override;
152  bool rendererIsNeeded(khtml::RenderStyle *) override;
153  khtml::RenderObject *createRenderer(khtml::RenderArena *, khtml::RenderStyle *) override;
154  void recalcStyle(StyleChange = NoChange) override;
155  bool affectedByNoInherit() const override
156  {
157  return true;
158  }
159  bool childTypeAllowed(unsigned short type) override;
160 
161  DOMStringImpl *renderString() const;
162 
163  DOMString toString() const override;
164  /** Return the text for the node, with < replaced with &lt; and so on.
165  * @param startOffset The number of characters counted from the left, zero indexed, counting "<" as one character, to start from. Use -1 to start from 0.
166  * @param endOffset The number of characters counted from the left, zero indexed, counting "<" as one character, to end on. Use -1 to end at the end of the string.
167  * @return An html escaped version of the substring.
168  */
169  DOMString toString(long long startOffset, long long endOffset) const;
170 protected:
171  virtual TextImpl *createNew(DOMStringImpl *_str);
172 };
173 
174 // ----------------------------------------------------------------------------
175 
176 class CDATASectionImpl : public TextImpl
177 {
178 public:
179  CDATASectionImpl(DocumentImpl *impl, DOMStringImpl *_text)
180  : TextImpl(impl, _text) {}
181  CDATASectionImpl(DocumentImpl *impl)
182  : TextImpl(impl) {}
183 
184  // DOM methods overridden from parent classes
185  DOMString nodeName() const override;
186  unsigned short nodeType() const override;
187  WTF::PassRefPtr<NodeImpl> cloneNode(bool deep) override;
188 
189  // Other methods (not part of DOM)
190 
191  bool childTypeAllowed(unsigned short type) override;
192 
193  DOMString toString() const override;
194 
195 protected:
196  TextImpl *createNew(DOMStringImpl *_str) override;
197 };
198 
199 // ----------------------------------------------------------------------------
200 
201 class EditingTextImpl : public TextImpl
202 {
203 public:
204  EditingTextImpl(DocumentImpl *impl, const DOMString &text);
205  EditingTextImpl(DocumentImpl *impl);
206  virtual ~EditingTextImpl();
207 
208  bool rendererIsNeeded(khtml::RenderStyle *) override;
209 };
210 
211 } //namespace
212 #endif
This class implements the basic string we use in the DOM.
Definition: dom_string.h:44
int64_t Id
This library provides a full-featured HTML parser and widget.
char * toString(const T &value)
Base Class for all rendering tree objects.
This file is part of the KDE documentation.
Documentation copyright © 1996-2021 The KDE developers.
Generated on Tue Oct 26 2021 22:48:01 by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.