--- parser3/src/classes/xnode.C 2009/04/10 11:31:06 1.82 +++ parser3/src/classes/xnode.C 2011/05/25 04:00:40 1.85 @@ -7,7 +7,7 @@ #include "classes.h" #ifdef XML -static const char * const IDENT_XNODE_C="$Date: 2009/04/10 11:31:06 $"; +static const char * const IDENT_XNODE_C="$Date: 2011/05/25 04:00:40 $"; #include "pa_vmethod_frame.h" @@ -99,7 +99,7 @@ private: xmlNode& as_node(MethodParams& params, int index, const char* msg) { Value& value=params.as_no_junction(index, msg); - if(Value* vxnode=value.as(VXNODE_TYPE, false)) + if(Value* vxnode=value.as(VXNODE_TYPE)) return static_cast(vxnode)->get_xmlnode(); else throw Exception(PARSER_RUNTIME, @@ -111,6 +111,31 @@ xmlChar* as_xmlchar(Request& r, MethodPa return r.transcode(params.as_string(index, msg)); } +xmlChar* as_xmlqname(Request& r, MethodParams& params, int index, const char* msg) { + xmlChar* qname=r.transcode(params.as_string(index, msg ? msg : XML_QUALIFIED_NAME_MUST_BE_STRING)); + if(xmlValidateQName(qname, 0)) + throw XmlException(0, XML_INVALID_QUALIFIED_NAME, qname); + return qname; +} + +xmlChar* as_xmlncname(Request& r, MethodParams& params, int index, const char* msg) { + xmlChar* ncname=r.transcode(params.as_string(index, msg ? msg : XML_NC_NAME_MUST_BE_STRING)); + if(xmlValidateNCName(ncname, 0)) + throw XmlException(0, XML_INVALID_NC_NAME, ncname); + return ncname; +} + +xmlChar* as_xmlname(Request& r, MethodParams& params, int index, const char* msg) { + xmlChar* localName=r.transcode(params.as_string(index, msg ? msg : XML_LOCAL_NAME_MUST_BE_STRING)); + if(xmlValidateName(localName, 0)) + throw XmlException(0, XML_INVALID_LOCAL_NAME, localName); + return localName; +} + +xmlChar* as_xmlnsuri(Request& r, MethodParams& params, int index) { + return r.transcode(params.as_string(index, XML_NAMESPACEURI_MUST_BE_STRING)); +} + xmlAttr& as_attr(MethodParams& params, int index, const char* msg) { xmlNode& xmlnode=as_node(params, index, msg); if(xmlnode.type!=XML_ATTRIBUTE_NODE) @@ -330,7 +355,7 @@ static void _hasChildNodes(Request& r, M xmlNode& node=vnode.get_xmlnode(); // write out result - r.write_no_lang(*new VBool(node.children!=0)); + r.write_no_lang(VBool::get(node.children!=0)); } // Node cloneNode(in boolean deep); @@ -558,7 +583,7 @@ static void _hasAttribute(Request& r, Me // @todo: when name="xmlns" // write out result - r.write_no_lang(*new VBool(xmlHasProp(&element, name)!=0)); + r.write_no_lang(VBool::get(xmlHasProp(&element, name)!=0)); } // boolean hasAttributeNS(n DOMString namespaceURI, in DOMString localName) raises(DOMException); @@ -570,7 +595,7 @@ static void _hasAttributeNS(Request& r, const xmlChar* localName=as_xmlchar(r, params, 1, LOCALNAME_MUST_BE_STRING); // write out result - r.write_no_lang(*new VBool(xmlHasNsProp(&element, localName, namespaceURI)!=0)); + r.write_no_lang(VBool::get(xmlHasNsProp(&element, localName, namespaceURI)!=0)); } // boolean hasAttributes @@ -579,7 +604,7 @@ static void _hasAttributes(Request& r, M xmlNode& element=get_self_element(vnode); // write out result - r.write_no_lang(*new VBool(element.properties!=0)); + r.write_no_lang(VBool::get(element.properties!=0)); } static void _getElementsByTagNameNS(Request& r, MethodParams& params) { @@ -715,7 +740,7 @@ static void selectNodeHandler(Request& r } break; case XPATH_BOOLEAN: - result=new VBool(res->boolval!=0); + result=&VBool::get(res->boolval!=0); break; case XPATH_NUMBER: result=new VDouble(res->floatval); @@ -737,7 +762,7 @@ static void selectBoolHandler(Request&, Value*& result) { switch(res->type) { case XPATH_BOOLEAN: - result=new VBool(res->boolval!=0); + result=&VBool::get(res->boolval!=0); break; case XPATH_NODESET: if(!(res->nodesetval && res->nodesetval->nodeNr))