Annotation of parser3/src/types/pa_vxnode.C, revision 1.16

1.1       parser      1: /** @node
                      2:        Parser: @b dnode parser type.
                      3: 
1.16    ! paf         4:        Copyright(c) 2001, 2002 ArtLebedev Group (http://www.artlebedev.com)
1.15      paf         5:        Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
1.1       parser      6: 
1.16    ! paf         7:        $Id: pa_vxnode.C,v 1.15 2002/02/08 08:31:33 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: