Annotation of parser3/src/types/pa_vdnode.C, revision 1.6
1.1 parser 1: /** @node
2: Parser: @b dnode parser type.
3:
4: Copyright(c) 2001 ArtLebedev Group(http://www.artlebedev.com)
5:
6: Author: Alexander Petrosyan <paf@design.ru>(http://design.ru/paf)
7: */
1.6 ! parser 8: #include "pa_config_includes.h"
! 9: #ifdef XML
! 10: static const char *RCSId="$Id: compile.C,v 1.48 2001/09/18 16:05:42 parser Exp $";
1.1 parser 11:
12: #include "pa_vdnode.h"
1.2 parser 13: #include "pa_vdom.h"
1.1 parser 14: #include "pa_vstring.h"
1.3 parser 15: #include "pa_vbool.h"
1.1 parser 16:
17: #include <util/XMLString.hpp>
18: #include <util/PlatformUtils.hpp>
19: #include <util/TransService.hpp>
1.2 parser 20: #include <XalanDOM/XalanNamedNodeMap.hpp>
1.3 parser 21: #include <XalanDOM/XalanAttr.hpp>
22: #include <XalanDOM/XalanProcessingInstruction.hpp>
23:
1.1 parser 24: /*
25: void VDnode_cleanup(void *vnode) {
26: //_asm int 3;
27: static_cast<VDDom *>(vnode)->cleanup();
28: }
29: */
30:
31: /// VDnode: $CLASS,$method
32: Value *VDnode::get_element(const String& aname) {
33: // $CLASS,$method
34: if(Value *result=VStateless_object::get_element(aname))
35: return result;
36:
37: // fields
38:
1.3 parser 39: XalanNode *self=&get_node(pool(), &aname);
1.2 parser 40:
1.1 parser 41: if(aname=="name") {
1.5 parser 42: return NEW VString(transcode(self->getNodeName()));
1.2 parser 43: } else if(aname=="value") {
1.5 parser 44: return NEW VString(transcode(self->getNodeValue()));
1.2 parser 45: } else if(aname=="type") {
46: static const char *type_names[]={
1.4 parser 47: "unknown", "element", "attribute", "text", "cdata", "entityref",
48: "entity", "pi", "comment", "document", "doctype", "docfragment",
1.2 parser 49: "notation"
50: };
1.3 parser 51: XalanNode::NodeType node_type=self->getNodeType();
1.2 parser 52: if(node_type > sizeof(type_names)/sizeof(type_names[0]))
53: node_type=XalanNode::UNKNOWN_NODE;
54: return NEW VString(*NEW String(pool(), type_names[node_type]));
55: } else if(aname=="parent") {
1.3 parser 56: if(XalanNode *result_node=self->getParentNode())
1.2 parser 57: return NEW VDnode(pool(), result_node);
58: } else if(aname=="first-child") {
1.3 parser 59: if(XalanNode *result_node=self->getFirstChild())
1.2 parser 60: return NEW VDnode(pool(), result_node);
61: } else if(aname=="last-child") {
1.3 parser 62: if(XalanNode *result_node=self->getLastChild())
1.2 parser 63: return NEW VDnode(pool(), result_node);
64: } else if(aname=="previous-sibling") {
1.3 parser 65: if(XalanNode *result_node=self->getPreviousSibling())
1.2 parser 66: return NEW VDnode(pool(), result_node);
67: } else if(aname=="next-sibling") {
1.3 parser 68: if(XalanNode *result_node=self->getNextSibling())
1.2 parser 69: return NEW VDnode(pool(), result_node);
70: } else if(aname=="owner") {
1.3 parser 71: if(XalanDocument *document=self->getOwnerDocument())
1.2 parser 72: return NEW VDom(pool(), document);
1.3 parser 73: } else switch(self->getNodeType()) {
74: case XalanNode::ELEMENT_NODE:
75: if(aname=="attributes") {
76: if(const XalanNamedNodeMap *attributes=self->getAttributes()) {
77: VHash *result=NEW VHash(pool());
78: for(int i=0; i<attributes->getLength(); i++) {
79: XalanNode *attr_node=attributes->item(i);
80: result->hash().put(
1.5 parser 81: transcode(attr_node->getNodeName()),
1.3 parser 82: NEW VDnode(pool(), attr_node));
83: }
84: return result;
85: }
86: }
87: break;
88: case XalanNode::ATTRIBUTE_NODE:
89: if(aname=="specified")
90: return NEW VBool(pool(), static_cast<XalanAttr *>(self)->getSpecified());
91: break;
92: /*
93: case XalanNode::TEXT_NODE:
94: case XalanNode::CDATA_SECTION_NODE:
95: case XalanNode::COMMENT_NODE:
96: substringData(unsigned int offset, unsigned int count)
97: */
98: //case XalanNode::ENTITY_REFERENCE_NODE:
99: //case XalanNode::ENTITY_NODE:
100: case XalanNode::PROCESSING_INSTRUCTION_NODE:
101: if(aname=="target")
1.5 parser 102: return NEW VString(transcode(static_cast<XalanProcessingInstruction *>(self)->getTarget()));
1.3 parser 103: break;
104: /*
105: case XalanNode::DOCUMENT_NODE:
106: virtual XalanDocumentType* getDoctype () const = 0
107: Get Document Type Declaration (see DocumentType) associated with this document. More...
108: virtual XalanDOMImplementation* getImplementation () const = 0
109: Return the DOMImplementation object that handles this document.
110: virtual XalanElement* getDocumentElement () const = 0
111: Return a reference to the root element of the document.
112: virtual XalanNodeList* getElementsByTagName (const XalanDOMString& tagname) const = 0
113: Returns a NodeList of all the elements with a given tag name. More...
114: */
115: /*
116: case XalanNode::DOCUMENT_TYPE_NODE:
117: virtual const XalanDOMString& getName () const = 0
118: The name of DTD; i.e., the name immediately following the DOCTYPE keyword in an XML source document.
119: virtual const XalanNamedNodeMap* getEntities () const = 0
120: This function returns a NamedNodeMap containing the general entities, both external and internal, declared in the DTD. More...
121: virtual const XalanNamedNodeMap* getNotations () const = 0
122: This function returns a named node map containing an entry for each notation declared in a document's DTD. More...*/
123: // case XalanNode::DOCUMENT_FRAGMENT_NODE:
124: // case XalanNode::NOTATION_NODE;
125: }
1.1 parser 126:
1.2 parser 127:
1.1 parser 128: return 0;
129: }
1.6 ! parser 130:
! 131: #endif
E-mail: