--- parser3/src/classes/xdoc.C 2001/10/26 12:21:35 1.35 +++ parser3/src/classes/xdoc.C 2001/11/12 10:00:31 1.45 @@ -2,9 +2,9 @@ Parser: @b xdoc parser class. Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com) - Author: Alexander Petrosyan (http://design.ru/paf) + Author: Alexander Petrosyan (http://paf.design.ru) - $Id: xdoc.C,v 1.35 2001/10/26 12:21:35 paf Exp $ + $Id: xdoc.C,v 1.45 2001/11/12 10:00:31 paf Exp $ */ #include "pa_types.h" #include "classes.h" @@ -511,9 +511,9 @@ static void _file(Request& r, const Stri Value *vcontent_type; if(charset) { VHash *vhcontent_type=new(pool) VHash(pool); - vhcontent_type->hash().put(*value_name, new(pool) VString(*scontent_type)); + vhcontent_type->hash(&method_name).put(*value_name, new(pool) VString(*scontent_type)); String *scharset=new(pool) String(pool, charset); - vhcontent_type->hash().put(*new(pool) String(pool, "charset"), new(pool) VString(*scharset)); + vhcontent_type->hash(&method_name).put(*new(pool) String(pool, "charset"), new(pool) VString(*scharset)); vcontent_type=vhcontent_type; } else vcontent_type=new(pool) VString(*scontent_type); @@ -533,7 +533,8 @@ static void _set(Request& r, const Strin Temp_lang temp_lang(r, String::UL_XML); const String& xml=r.process(vxml).as_string(); - std::istrstream stream(xml.cstr()); + std::istrstream stream( + xml.cstr(String::UL_UNSPECIFIED, r.connection)); const XalanParsedSource* parsedSource; try { @@ -611,17 +612,17 @@ static void _load(Request& r, const Stri vdoc.set_parsed_source(*parsedSource); } +/// @test lang=String::UL_UNSPECIFIED? static void add_xslt_param(const Hash::Key& aattribute, Hash::Val *ameaning, void *info) { XalanTransformer2& transformer=*static_cast(info); - const char *attribute_cstr=aattribute.cstr(); - const char *meaning_cstr=static_cast(ameaning)->as_string().cstr(); + const char *attribute_cstr=aattribute.cstr(String::UL_UNSPECIFIED); + const char *meaning_cstr=static_cast(ameaning)->as_string().cstr(String::UL_UNSPECIFIED); transformer.setStylesheetParam( XalanDOMString(attribute_cstr), XalanDOMString(meaning_cstr)); } - static void _transform(Request& r, const String& method_name, MethodParams *params) { Pool& pool=r.pool(); VXdoc& vdoc=*static_cast(r.self); @@ -649,6 +650,11 @@ static void _transform(Request& r, const // transform try { + // note: + // actually, never found any difference between the two + // but still there some extra "xerces" words at start of transform body + // wich were originally "xalan" + // not daring to change that if(vdoc.has_parsed_source()) { // set|load, not create? vdoc.transformer().transform2( vdoc.get_parsed_source(pool, &method_name), @@ -683,6 +689,9 @@ static void _transform(Request& r, const Exception::provide_source(pool, &stylesheet_file_name, e); } + // close + connection.close(); + // write out result VXdoc& result=*new(pool) VXdoc(pool, target, false/*owns not*/); r.write_no_lang(result);