00001 #ifndef DocumentImpl_HEADER_GUARD_
00002 #define DocumentImpl_HEADER_GUARD_
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073 #include <xercesc/util/XercesDefs.hpp>
00074 #include "ParentNode.hpp"
00075 #include "DOM_Node.hpp"
00076 #include "DOM_Element.hpp"
00077 #include "xercesc/util/RefVectorOf.hpp"
00078 #include "xercesc/util/RefHashTableOf.hpp"
00079 #include "XMLDeclImpl.hpp"
00080
00081 class DocumentTypeImpl;
00082 class ElementImpl;
00083 class AttrImpl;
00084 class CDATASectionImpl;
00085 class CommentImpl;
00086 class DeepNodeListImpl;
00087 class DocumentFragmentImpl;
00088 class DocumentTypeImpl;
00089 class DStringPool;
00090 class EntityImpl;
00091 class EntityReferenceImpl;
00092 class NotationImpl;
00093 class ProcessingInstructionImpl;
00094 class TextImpl;
00095 class NodeIteratorImpl;
00096 class TreeWalkerImpl;
00097 class DOM_NodeFilter;
00098 class NodeFilterImpl;
00099 class DOM_DOMImplementation;
00100 class DOMString;
00101 class NodeIDMap;
00102 class RangeImpl;
00103
00104 typedef RefVectorOf<NodeIteratorImpl> NodeIterators;
00105 typedef RefVectorOf<TreeWalkerImpl> TreeWalkers;
00106 typedef RefVectorOf<RangeImpl> RangeImpls;
00107
00108
00109 class CDOM_EXPORT DocumentImpl: public ParentNode {
00110 private:
00111
00112
00113
00114
00115 void setDocumentType(DocumentTypeImpl *doctype);
00116
00117 DocumentTypeImpl *docType;
00118 ElementImpl *docElement;
00119 DStringPool *namePool;
00120 NodeIDMap *fNodeIDMap;
00121
00122 NodeIterators *iterators;
00123 TreeWalkers *treeWalkers;
00124 RefHashTableOf<void> *userData;
00125 RangeImpls *ranges;
00126
00161 int fChanges;
00162
00164 bool errorChecking;
00165
00166 friend class NodeIteratorImpl;
00167 friend class TreeWalkerImpl;
00168 friend class RangeImpl;
00169 friend class DOMParser;
00170
00171 public:
00172 DocumentImpl();
00173 DocumentImpl(const DOMString &namespaceURI,
00174 const DOMString &qualifiedName, DocumentTypeImpl *doctype);
00175 virtual ~DocumentImpl();
00176 virtual bool isDocumentImpl();
00177
00178 virtual NodeImpl *cloneNode(bool deep);
00179 virtual DOMString getNodeName();
00180 virtual short getNodeType();
00181 virtual DocumentImpl * getOwnerDocument();
00182 virtual AttrImpl *createAttribute(const DOMString &name);
00183 virtual CDATASectionImpl *createCDATASection(const DOMString &data);
00184 virtual CommentImpl *createComment(const DOMString &data);
00185 virtual DocumentFragmentImpl *createDocumentFragment();
00186 virtual DocumentTypeImpl *createDocumentType(const DOMString &name);
00187 virtual DocumentTypeImpl *createDocumentType(const DOMString &qName,
00188 const DOMString &publicId,
00189 const DOMString &systemId);
00190 virtual ElementImpl *createElement(const DOMString & tagName);
00191 virtual ElementImpl *createElement(const XMLCh *tagName);
00192 virtual EntityImpl *createEntity(const DOMString & name);
00193 virtual EntityReferenceImpl *createEntityReference(const DOMString & name);
00194 virtual NotationImpl *createNotation(const DOMString & name);
00195 virtual ProcessingInstructionImpl *createProcessingInstruction(const DOMString & target, const DOMString & data);
00196 virtual TextImpl *createTextNode(const DOMString & data);
00197 virtual DocumentTypeImpl *getDoctype();
00198 virtual ElementImpl *getDocumentElement();
00199 virtual DeepNodeListImpl *getElementsByTagName(const DOMString & tagname);
00200 virtual NodeImpl *insertBefore(NodeImpl *newChild, NodeImpl *refChild);
00201 static bool isXMLName(const DOMString & s);
00202 virtual void referenced();
00203 virtual NodeImpl *removeChild(NodeImpl *oldChild);
00204 virtual void unreferenced();
00205 static NodeIteratorImpl* createNodeIterator(DOM_Node root, unsigned long whatToShow, DOM_NodeFilter* filter, bool entityReferenceExpansion);
00206 static TreeWalkerImpl* createTreeWalker(DOM_Node root, unsigned long whatToShow, DOM_NodeFilter* filter, bool entityReferenceExpansion);
00207 virtual XMLDeclImpl* createXMLDecl(const DOMString& version, const DOMString& encoding, const DOMString& standalone);
00208 virtual void* getUserData();
00209 virtual void setUserData(void* value);
00210 virtual RangeImpl* createRange();
00211 virtual RangeImpls* getRanges();
00212 virtual void removeRange(RangeImpl* range);
00213
00214
00215
00216 virtual void setUserData(NodeImpl* n, void* data);
00217 virtual void* getUserData(NodeImpl* n);
00218
00219
00220 virtual NodeImpl *importNode(NodeImpl *source, bool deep);
00221 virtual ElementImpl *createElementNS(const DOMString &namespaceURI,
00222 const DOMString &qualifiedName);
00223 virtual AttrImpl *createAttributeNS(const DOMString &namespaceURI,
00224 const DOMString &qualifiedName);
00225 virtual DeepNodeListImpl *getElementsByTagNameNS(const DOMString &namespaceURI,
00226 const DOMString &localName);
00227 virtual ElementImpl *getElementById(const DOMString &elementId);
00228
00229
00230
00231 static int indexofQualifiedName(const DOMString & qName);
00232 static bool isKidOK(NodeImpl *parent, NodeImpl *child);
00233
00234 inline NodeIDMap * getNodeIDMap() {return fNodeIDMap;};
00235
00236 virtual void changed();
00237 virtual int changes();
00238
00257 inline void setErrorChecking(bool check) {
00258 errorChecking = check;
00259 }
00260
00264 inline bool getErrorChecking() {
00265 return errorChecking;
00266 }
00267
00268
00269
00270
00271 static void reinitDocumentImpl();
00272
00273 };
00274
00275 #endif