--- parser3/src/classes/Attic/dom.C 2001/09/13 14:10:54 1.19 +++ parser3/src/classes/Attic/dom.C 2001/09/15 14:22:47 1.22 @@ -5,7 +5,7 @@ Author: Alexander Petrosyan (http://design.ru/paf) */ -static const char *RCSId="$Id: dom.C,v 1.19 2001/09/13 14:10:54 parser Exp $"; +static const char *RCSId="$Id: dom.C,v 1.22 2001/09/15 14:22:47 parser Exp $"; #if _MSC_VER # pragma warning(disable:4291) // disable warning @@ -16,6 +16,8 @@ static const char *RCSId="$Id: dom.C,v 1 #include "pa_request.h" #include "pa_vdom.h" #include "pa_vfile.h" +#include "pa_xslt_stylesheet_manager.h" +#include "pa_stylesheet_connection.h" #include #include @@ -69,12 +71,12 @@ static void _set(Request& r, const Strin std::istrstream stream(xml.cstr()); XalanParsedSource* parsedSource; - int error=vDom.get_transformer().parseSource(&stream, parsedSource); + int error=vDom.transformer().parseSource(&stream, parsedSource); if(error) PTHROW(0, 0, &method_name, - vDom.get_transformer().getLastError()); + vDom.transformer().getLastError()); // replace any previous parsed source vDom.set_parsed_source(*parsedSource); @@ -85,22 +87,22 @@ static void _load(Request& r, const Stri VDom& vDom=*static_cast(r.self); // filespec - const String& filename=params->as_string(0, "file name must not be code"); - const char *filespec=r.absolute(filename).cstr(String::UL_FILE_NAME); + const String& file_name=params->as_string(0, "file name must not be code"); + const char *filespec=r.absolute(file_name).cstr(String::UL_FILE_SPEC); XalanParsedSource* parsedSource; - int error=vDom.get_transformer().parseSource(filespec, parsedSource); + int error=vDom.transformer().parseSource(filespec, parsedSource); if(error) PTHROW(0, 0, - &filename, - vDom.get_transformer().getLastError()); + &file_name, + vDom.transformer().getLastError()); // replace any previous parsed source vDom.set_parsed_source(*parsedSource); } -const char *strX(const XalanDOMString& s) { +static const char *strX(const XalanDOMString& s) { return XMLString::transcode(s.c_str()); } @@ -147,10 +149,10 @@ private: }; -void create_optioned_listener( - const char *& content_type, const char *& charset, FormatterListener *& listener, - Pool& pool, - const String& method_name, MethodParams *params, int index, Writer& writer) { +static void create_optioned_listener( + const char *& content_type, const char *& charset, FormatterListener *& listener, + Pool& pool, + const String& method_name, MethodParams *params, int index, Writer& writer) { charset=0; const String *method=0; XalanDOMString xalan_encoding; @@ -214,8 +216,8 @@ static void _save(Request& r, const Stri VDom& vDom=*static_cast(r.self); // filespec - const String& filename=params->as_string(1, "file name must not be code"); - const char *filespec=r.absolute(filename).cstr(String::UL_FILE_NAME); + const String& file_name=params->as_string(1, "file name must not be code"); + const char *filespec=r.absolute(file_name).cstr(String::UL_FILE_SPEC); // document XalanDocument& document=vDom.get_document(pool, &method_name); @@ -291,7 +293,7 @@ static void _file(Request& r, const Stri vcontent_type=vhcontent_type; } else vcontent_type=new(pool) VString(*scontent_type); - vfile.set(false/*tainted*/, cstr, strlen(cstr), 0/*filename*/, vcontent_type); + vfile.set(false/*tainted*/, cstr, strlen(cstr), 0/*file_name*/, vcontent_type); r.write_no_lang(vfile); } catch(const XSLException& e) { _throw(pool, &method_name, e); @@ -300,7 +302,7 @@ static void _file(Request& r, const Stri static void add_xslt_param(const Hash::Key& aattribute, Hash::Val *ameaning, - void *info) { + void *info) { XalanTransformer& transformer=*static_cast(info); const char *attribute_cstr=aattribute.cstr(); const char *meaning_cstr=static_cast(ameaning)->as_string().cstr(); @@ -318,7 +320,7 @@ static void _xslt(Request& r, const Stri Value& vparams=params->as_no_junction(1, "transform parameters parameter must not be code"); if(vparams.is_defined()) if(Hash *params=vparams.get_hash()) - params->for_each(add_xslt_param, &vDom.get_transformer()); + params->for_each(add_xslt_param, &vDom.transformer()); else PTHROW(0, 0, &method_name, @@ -329,19 +331,25 @@ static void _xslt(Request& r, const Stri XalanParsedSource &parsed_source=vDom.get_parsed_source(pool, &method_name); // stylesheet - const String& stylesheet_filename=params->as_string(0, "file name must not be code"); - const char *stylesheet_filespec=r.absolute(stylesheet_filename).cstr(String::UL_FILE_NAME); + const String& stylesheet_file_name=params->as_string(0, "file name must not be code"); + const String& stylesheet_filespec=r.absolute(stylesheet_file_name); + //_asm int 3; + Stylesheet_connection& connection=XSLT_stylesheet_manager->get_connection(stylesheet_filespec); // target - XalanDocument* target=vDom.get_parser_liaison().createDocument(); + XalanDocument* target=vDom.parser_liaison().createDocument(); XSLTResultTarget domResultTarget(target); // transform - int error=vDom.get_transformer().transform(parsed_source, stylesheet_filespec, domResultTarget); + int error=vDom.transformer().transform( + parsed_source, + &connection.stylesheet(), + domResultTarget); + connection.close(); if(error) PTHROW(0, 0, - &stylesheet_filename, - vDom.get_transformer().getLastError()); + &stylesheet_file_name, + vDom.transformer().getLastError()); // write out result VDom& result=*new(pool) VDom(pool); @@ -369,8 +377,8 @@ MDom::MDom(Pool& apool) : Methoded(apool // ^dom.file[options hash] file with "" add_native_method("file", Method::CT_DYNAMIC, _file, 1, 1); - // ^dom.xslt[stylesheet filename] - // ^dom.xslt[stylesheet filename;params hash] + // ^dom.xslt[stylesheet file_name] + // ^dom.xslt[stylesheet file_name;params hash] add_native_method("xslt", Method::CT_DYNAMIC, _xslt, 1, 2); }