Annotation of parser3/src/types/pa_vxnode.C, revision 1.13
1.1 parser 1: /** @node
2: Parser: @b dnode parser type.
3:
4: Copyright(c) 2001 ArtLebedev Group(http://www.artlebedev.com)
1.11 paf 5: Author: Alexander Petrosyan <paf@design.ru>(http://paf.design.ru)
1.1 parser 6:
1.13 ! paf 7: $Id: pa_vxnode.C,v 1.12 2001/12/27 19:57:10 paf Exp $
1.1 parser 8: */
9: #include "pa_config_includes.h"
10: #ifdef XML
11:
12: #include "pa_vxnode.h"
13: #include "pa_vxdoc.h"
14: #include "pa_vstring.h"
15: #include "pa_vbool.h"
16: #include "pa_vhash.h"
17:
18: void VXnode_cleanup(void *vxnode) {
19: //_asm int 3;
1.12 paf 20: static_cast<VXnode *>(vxnode)->~VXnode();
1.1 parser 21: }
22:
1.3 parser 23: Value *VXnode::get_element(const String& name) {
1.12 paf 24: // $CLASS,$method
25: if(Value *result=VStateless_object::get_element(name))
26: return result;
27:
28: // fields
29:
1.13 ! paf 30: GdomeNode *selfNode=get_node(&name);
1.12 paf 31: GdomeException exc;
32:
33: if(name=="nodeName") {
34: return NEW VString(transcode(gdome_n_nodeName(selfNode, &exc)));
35: } else if(name=="nodeValue") {
36: return NEW VString(transcode(gdome_n_nodeValue(selfNode, &exc)));
37: } else if(name=="nodeType") {
38: return NEW VInt(pool(), gdome_n_nodeType(selfNode, &exc));
39: } else if(name=="parentNode") {
1.13 ! paf 40: if(GdomeNode *result_node=gdome_n_parentNode(selfNode, &exc))
! 41: return NEW VXnode(pool(), result_node);
1.12 paf 42: } else if(name=="childNodes") {
43: if(GdomeNode *currentNode=gdome_n_firstChild(selfNode, &exc)) {
44: VHash *result=NEW VHash(pool());
45: int i=0;
46: do {
47: String& skey=*NEW String(pool());
48: {
49: char *buf=(char *)malloc(MAX_NUMBER);
50: snprintf(buf, MAX_NUMBER, "%d", ++i);
51: skey << buf;
52: }
1.13 ! paf 53: result->hash(&name).put(skey, NEW VXnode(pool(), currentNode));
1.12 paf 54: } while(currentNode=gdome_n_nextSibling(currentNode, &exc));
1.3 parser 55: return result;
1.12 paf 56: }
57: } else if(name=="firstChild") {
1.13 ! paf 58: if(GdomeNode *result_node=gdome_n_firstChild(selfNode, &exc))
! 59: return NEW VXnode(pool(), result_node);
1.12 paf 60: } else if(name=="lastChild") {
1.13 ! paf 61: if(GdomeNode *result_node=gdome_n_lastChild(selfNode, &exc))
! 62: return NEW VXnode(pool(), result_node);
1.12 paf 63: } else if(name=="previousSibling") {
1.13 ! paf 64: if(GdomeNode *result_node=gdome_n_previousSibling(selfNode, &exc))
! 65: return NEW VXnode(pool(), result_node);
1.12 paf 66: } else if(name=="nextSibling") {
1.13 ! paf 67: if(GdomeNode *result_node=gdome_n_nextSibling(selfNode, &exc))
! 68: return NEW VXnode(pool(), result_node);
1.12 paf 69: } else if(name=="ownerDocument") {
70: if(GdomeDocument *document=gdome_n_ownerDocument(selfNode, &exc))
71: return NEW VXdoc(pool(), document);
1.13 ! paf 72: } else switch(gdome_n_nodeType(selfNode, &exc)) {
! 73: case GDOME_ELEMENT_NODE:
1.12 paf 74: if(name=="attributes") {
1.13 ! paf 75: if(GdomeNamedNodeMap *attributes=gdome_n_attributes(selfNode, &exc)) {
1.12 paf 76: VHash *result=NEW VHash(pool());
1.13 ! paf 77: gulong length=gdome_nnm_length(attributes, &exc);
! 78: for(gulong i=0; i<length; i++) {
! 79: GdomeNode *attr_node=gdome_nnm_item(attributes, i, &exc);
1.12 paf 80: result->hash(0).put(
81: transcode(gdome_n_nodeName(attr_node, &exc)),
1.13 ! paf 82: NEW VXnode(pool(), attr_node));
1.3 parser 83: }
1.12 paf 84: return result;
85: }
86: } else if(name=="tagName") {
1.13 ! paf 87: return NEW VString(transcode(gdome_el_tagName(GDOME_EL(selfNode), &exc)));
1.2 parser 88: }
1.12 paf 89: break;
1.13 ! paf 90: case GDOME_ATTRIBUTE_NODE:
1.12 paf 91: if(name=="specified")
1.13 ! paf 92: return NEW VBool(pool(), gdome_a_specified(GDOME_A(selfNode), &exc)!=0);
1.12 paf 93: break;
94: /*
1.13 ! paf 95: case GDOME_COMMENT_NODE:
1.12 paf 96: substringData(unsigned int offset, unsigned int count)
97: */
1.13 ! paf 98: case GDOME_PROCESSING_INSTRUCTION_NODE:
1.12 paf 99: if(name=="target")
1.13 ! paf 100: return NEW VString(transcode(gdome_pi_target(GDOME_PI(selfNode), &exc)));
1.12 paf 101: break;
1.13 ! paf 102: case GDOME_DOCUMENT_TYPE_NODE:
1.12 paf 103: {
1.13 ! paf 104: GdomeDocumentType *doctype=GDOME_DT(selfNode);
1.12 paf 105: if(name=="name") {
106: // readonly attribute DOMString name;
107: // The name of DTD; i.e., the name immediately following
108: // the DOCTYPE keyword in an XML source document.
109: return NEW VString(transcode(gdome_dt_name(doctype, &exc)));
1.1 parser 110: }
1.12 paf 111: /*
112: readonly attribute NamedNodeMap entities;
113: readonly attribute NamedNodeMap notations;
114: virtual const XalanNamedNodeMap* getEntities () const = 0
115: This function returns a NamedNodeMap containing the general entities, both external and internal, declared in the DTD. More...
116: virtual const XalanNamedNodeMap* getNotations () const = 0
117: This function returns a named selfNode map containing an entry for each notation declared in a document's DTD. More...
118: */
119: }
120: break;
1.13 ! paf 121: case GDOME_NOTATION_NODE:
1.12 paf 122: {
1.13 ! paf 123: GdomeNotation *notation=GDOME_NOT(selfNode);
1.12 paf 124: if(name=="publicId") {
125: // readonly attribute DOMString publicId;
126: return NEW VString(transcode(gdome_not_publicId(notation, &exc)));
127: } else if(name=="systemId") {
128: // readonly attribute DOMString systemId;
129: return NEW VString(transcode(gdome_not_systemId(notation, &exc)));
1.4 parser 130: }
1.12 paf 131: }
132: break;
133: }
1.3 parser 134:
1.1 parser 135: return 0;
136: }
137:
138: #endif
E-mail: