2 // Created: 27.06.01 15:56:11
3 // Author: Alexander GRIGORIEV
4 // Copyright: OpenCascade 2001
7 #include <LDOM_MemManager.hxx>
8 #include <LDOM_BasicAttribute.hxx>
9 #include <LDOM_BasicElement.hxx>
10 #include <LDOM_BasicText.hxx>
12 //=======================================================================
15 //=======================================================================
17 const LDOM_BasicNode& LDOM_Node::Origin () const
19 if (myOrigin == NULL) {
20 static LDOM_BasicNode aNullNode;
26 //=======================================================================
27 //function : getOwnerDocument
29 //=======================================================================
31 const LDOM_MemManager& LDOM_Node::getOwnerDocument () const
33 return myDocument -> Self();
36 //=======================================================================
37 //function : operator =
38 //purpose : Assignment
39 //=======================================================================
41 LDOM_Node& LDOM_Node::operator = (const LDOM_Node& theOther)
43 myDocument = theOther.myDocument;
44 myOrigin = theOther.myOrigin;
45 myLastChild = theOther.myLastChild;
49 //=======================================================================
50 //function : operator =
52 //=======================================================================
54 LDOM_Node& LDOM_Node::operator = (const LDOM_NullPtr * /*aNull*/)
62 //=======================================================================
65 //=======================================================================
67 Standard_Boolean LDOM_Node::isNull () const
69 return myOrigin == NULL || myOrigin -> isNull();
72 //=======================================================================
73 //function : operator ==
74 //purpose : Compare two Nodes
75 //=======================================================================
77 Standard_Boolean LDOM_Node::operator == (const LDOM_Node& anOther) const
80 return anOther.isNull();
81 return myOrigin == anOther.myOrigin;
84 //=======================================================================
85 //function : operator !=
86 //purpose : Compare two Nodes
87 //=======================================================================
89 Standard_Boolean LDOM_Node::operator != (const LDOM_Node& anOther) const
92 return !anOther.isNull();
93 return myOrigin != anOther.myOrigin;
96 //=======================================================================
97 //function : getNodeType
99 //=======================================================================
101 LDOM_Node::NodeType LDOM_Node::getNodeType () const
103 return myOrigin == NULL ? UNKNOWN : myOrigin -> getNodeType();
106 //=======================================================================
107 //function : getNodeName
109 //=======================================================================
111 LDOMString LDOM_Node::getNodeName () const
113 switch (getNodeType()) {
116 const LDOM_BasicElement& anElement= *(const LDOM_BasicElement *) myOrigin;
117 return LDOMString::CreateDirectString (anElement.GetTagName(),
118 myDocument -> Self());
122 const LDOM_BasicAttribute& anAttr= *(const LDOM_BasicAttribute*) myOrigin;
123 return LDOMString::CreateDirectString (anAttr.GetName(),
124 myDocument -> Self());
128 return LDOMString ();
131 //=======================================================================
132 //function : getNodeValue
134 //=======================================================================
136 LDOMString LDOM_Node::getNodeValue () const
138 switch (getNodeType()) {
141 const LDOM_BasicAttribute& anAttr= *(const LDOM_BasicAttribute*) myOrigin;
142 return LDOMString (anAttr.GetValue(), myDocument -> Self());
145 case CDATA_SECTION_NODE:
148 const LDOM_BasicText& aText = * (const LDOM_BasicText *) myOrigin;
149 return LDOMString (aText.GetData(), myDocument -> Self());
153 return LDOMString ();
156 //=======================================================================
157 //function : getFirstChild
159 //=======================================================================
161 LDOM_Node LDOM_Node::getFirstChild () const
163 const NodeType aType = getNodeType ();
164 if (aType == ELEMENT_NODE) {
165 const LDOM_BasicElement& anElement = * (const LDOM_BasicElement *) myOrigin;
166 const LDOM_BasicNode * aChild = anElement.GetFirstChild();
168 if (aChild -> getNodeType() != LDOM_Node::ATTRIBUTE_NODE)
169 return LDOM_Node (* aChild, myDocument);
174 //=======================================================================
175 //function : getLastChild
177 //=======================================================================
179 LDOM_Node LDOM_Node::getLastChild () const
181 const NodeType aType = getNodeType ();
182 if (aType == ELEMENT_NODE) {
183 if (myLastChild == NULL) {
184 const LDOM_BasicElement& anElement = *(const LDOM_BasicElement*) myOrigin;
185 (const LDOM_BasicNode *&) myLastChild = anElement.GetLastChild();
187 return LDOM_Node (* myLastChild, myDocument);
192 //=======================================================================
193 //function : getNextSibling
195 //=======================================================================
197 LDOM_Node LDOM_Node::getNextSibling () const
199 const LDOM_BasicNode * aSibling = myOrigin -> mySibling;
201 if (aSibling -> getNodeType () != ATTRIBUTE_NODE)
202 return LDOM_Node (* aSibling, myDocument);
206 //=======================================================================
207 //function : removeChild
209 //=======================================================================
211 void LDOM_Node::removeChild (const LDOM_Node& aChild)
213 const NodeType aType = getNodeType ();
214 if (aType == ELEMENT_NODE) {
215 const LDOM_BasicElement& anElement = * (LDOM_BasicElement *) myOrigin;
217 anElement.RemoveChild (aChild.myOrigin);
218 if (aChild.myOrigin == myLastChild)
219 // myLastChild = anElement.GetLastChild();
224 //=======================================================================
225 //function : appendChild
227 //=======================================================================
229 void LDOM_Node::appendChild (const LDOM_Node& aChild)
231 const NodeType aType = getNodeType ();
232 if (aType == ELEMENT_NODE && aChild != NULL) {
234 aChild.myOrigin -> SetSibling (myLastChild -> mySibling);
235 (const LDOM_BasicNode *&) myLastChild -> mySibling = aChild.myOrigin;
237 const LDOM_BasicElement& anElement = * (LDOM_BasicElement *) myOrigin;
238 anElement.AppendChild (aChild.myOrigin, myLastChild);
240 myLastChild = aChild.myOrigin;
244 //=======================================================================
245 //function : hasChildNodes
247 //=======================================================================
249 Standard_Boolean LDOM_Node::hasChildNodes () const
251 const NodeType aType = getNodeType ();
252 if (aType == ELEMENT_NODE) {
253 const LDOM_BasicElement& anElement = * (const LDOM_BasicElement *) myOrigin;
254 const LDOM_BasicNode * aChild = anElement.GetFirstChild();
255 if (aChild) return ! aChild -> isNull();
257 return Standard_False;
260 //=======================================================================
261 //function : SetValueClear
263 //=======================================================================
265 void LDOM_Node::SetValueClear () const
267 LDOMBasicString * aValue = NULL;
268 switch (getNodeType()) {
271 const LDOM_BasicAttribute& anAttr= *(const LDOM_BasicAttribute*) myOrigin;
272 aValue = (LDOMBasicString *) & anAttr.GetValue();
276 case CDATA_SECTION_NODE:
279 const LDOM_BasicText& aText = * (const LDOM_BasicText *) myOrigin;
280 aValue = (LDOMBasicString *) & aText.GetData();
285 if (aValue -> Type() == LDOMBasicString::LDOM_AsciiDoc)
286 aValue -> myType = LDOMBasicString::LDOM_AsciiDocClear;