--- parser3/src/classes/xdoc.C 2002/11/25 14:57:32 1.106 +++ parser3/src/classes/xdoc.C 2003/01/31 12:34:27 1.108.2.2 @@ -1,14 +1,14 @@ /** @file Parser: @b xdoc parser class. - Copyright (c) 2001, 2002 ArtLebedev Group (http://www.artlebedev.com) + Copyright (c) 2001-2003 ArtLebedev Group (http://www.artlebedev.com) Author: Alexandr Petrosian (http://paf.design.ru) */ #include "classes.h" #ifdef XML -static const char* IDENT_XDOC_C="$Date: 2002/11/25 14:57:32 $"; +static const char* IDENT_XDOC_C="$Date: 2003/01/31 12:34:27 $"; #include "pa_stylesheet_connection.h" #include "pa_request.h" @@ -41,7 +41,7 @@ extern "C" { class MXdoc : public MXnode { public: // VStateless_class - Value *create_new_value(Pool& pool) { return new(pool) VXdoc(pool, 0); } + ValuePtr create_new_value() { return ValuePtr(new VXdoc(0); } public: MXdoc(Pool& pool); @@ -410,7 +410,7 @@ static void _create(Request& r, const St Temp_lang temp_lang(r, String::UL_XML); const String& xml=r.process_to_string(param); - const char *cstr=xml.cstr(String::UL_UNSPECIFIED); + const char* cstr=xml.cstr(String::UL_UNSPECIFIED); document=(GdomeDocument *) gdome_xml_n_mkref((xmlNode *)xmlParseMemory( cstr, strlen(cstr) @@ -448,14 +448,14 @@ static void _create(Request& r, const St exc); xmlDoc *doc=gdome_xml_doc_get_xmlDoc(document); - const char *source_charset_name=pool.get_source_charset().name().cstr(); + const char* source_charset_name=pool.get_source_charset().name().cstr(); doc->encoding=pool.get_source_charset().transcode_buf2xchar(source_charset_name, strlen(source_charset_name)); /// +xalan createXMLDecl ? } // URI - const char *URI_cstr; + const char* URI_cstr; if(params->size()>1) { // absolute(param) const String& URI=params->as_string(0, "URI must be string"); URI_cstr=r.absolute(URI).cstr(); @@ -483,27 +483,31 @@ static void _load(Request& r, const Stri :0); GdomeDocument *document=(GdomeDocument *) - gdome_xml_n_mkref((xmlNode *)xmlParseMemory((const char *)data, size)); + gdome_xml_n_mkref((xmlNode *)xmlParseMemory((const char* )data, size)); if(!document || xmlHaveGenericErrors()) { GdomeException exc=0; throw Exception( &uri, exc); } + const char* URI_cstr=uri.cstr(); + xmlDoc *doc=gdome_xml_doc_get_xmlDoc(document); + if(URI_cstr) + doc->URL=pool.transcode_buf2xchar(URI_cstr, strlen(URI_cstr)); // replace any previous parsed source vdoc.set_document(document); } static void param_option_over_output_option(Pool& pool, - Hash *param_options, const char *option_name, + Hash *param_options, const char* option_name, const String *& output_option) { if(Value *value=static_cast(param_options->get(*new(pool) String(pool, option_name)))) output_option=&value->as_string(); } static void param_option_over_output_option(Pool& pool, - Hash *param_options, const char *option_name, + Hash *param_options, const char* option_name, bool& output_option) { if(Value *value=static_cast(param_options->get(*new(pool) String(pool, option_name)))) { @@ -592,7 +596,7 @@ static void xdoc2buf(Pool& pool, VXdoc& prepare_output_options(pool, method_name, params, index, oo); - const char *encoding_cstr=oo.encoding->cstr(); + const char* encoding_cstr=oo.encoding->cstr(); xmlCharEncodingHandler *encoder=xmlFindCharEncodingHandler(encoding_cstr); if(!encoder) throw Exception("parser.runtime", @@ -715,12 +719,12 @@ static void add_xslt_param(const Hash::K void *info) { Value *meaning=static_cast(ameaning); Pool& pool=meaning->pool(); - const char ** & current_transform_param=*(const char ***)info; + const char* * & current_transform_param=*(const char* **)info; *current_transform_param++=pool.transcode(aattribute)->str; *current_transform_param++=pool.transcode(meaning->as_string())->str; } static VXdoc& _transform(Pool& pool, const String *doc_source, const String *stylesheet_source, - VXdoc& vdoc, xsltStylesheetPtr stylesheet, const char **transform_params) { + VXdoc& vdoc, xsltStylesheetPtr stylesheet, const char* *transform_params) { xmlDoc *document=gdome_xml_doc_get_xmlDoc(vdoc.get_document(doc_source)); xsltTransformContext_auto_ptr transformContext( xsltNewTransformContext(stylesheet, document)); @@ -733,7 +737,7 @@ static VXdoc& _transform(Pool& pool, con stylesheet, document, 0/*already quoted-inserted transform_params*/, - 0/*const char *output*/, + 0/*const char* output*/, 0/*FILE *profile*/, transformContext.get()); if(!transformed || xmlHaveGenericErrors()) { @@ -788,13 +792,13 @@ static void _transform(Request& r, const VXdoc& vdoc=*static_cast(r.get_self()); // params - const char **transform_params=0; + const char* *transform_params=0; if(params->size()>1) { Value& vparams=params->as_no_junction(1, "transform parameters must be hash"); if(!vparams.is_string()) if(Hash *params=vparams.get_hash(&method_name)) { - const char **current_transform_param=transform_params= - (const char **)pool.malloc(sizeof(const char *)*(params->size()*2+1)); + const char* *current_transform_param=transform_params= + (const char* *)pool.malloc(sizeof(const char* )*(params->size()*2+1)); params->for_each(add_xslt_param, ¤t_transform_param); transform_params[params->size()*2]=0; } else