--- parser3/src/classes/xdoc.C 2001/10/19 14:56:16 1.31 +++ parser3/src/classes/xdoc.C 2001/10/26 12:21:35 1.35 @@ -4,7 +4,7 @@ Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com) Author: Alexander Petrosyan (http://design.ru/paf) - $Id: xdoc.C,v 1.31 2001/10/19 14:56:16 parser Exp $ + $Id: xdoc.C,v 1.35 2001/10/26 12:21:35 paf Exp $ */ #include "pa_types.h" #include "classes.h" @@ -12,7 +12,7 @@ #include "pa_request.h" #include "pa_vxdoc.h" -#include "pa_xslt_stylesheet_manager.h" +#include "pa_stylesheet_manager.h" #include "pa_stylesheet_connection.h" #include "pa_vfile.h" #include "xnode.h" @@ -87,7 +87,7 @@ static void _createElement(Request& r, c VXnode& result=*new(pool) VXnode(pool, node, false); r.write_no_lang(result); } catch(const XalanDOMException& e) { - Exception::convert(pool, &method_name, e); + Exception::provide_source(pool, &method_name, e); } } @@ -149,7 +149,7 @@ static void _createCDATASection(Request& VXnode& result=*new(pool) VXnode(pool, node, false); r.write_no_lang(result); } catch(const XalanDOMException& e) { - Exception::convert(pool, &method_name, e); + Exception::provide_source(pool, &method_name, e); } } @@ -169,7 +169,7 @@ static void _createProcessingInstruction VXnode& result=*new(pool) VXnode(pool, node, false); r.write_no_lang(result); } catch(const XalanDOMException& e) { - Exception::convert(pool, &method_name, e); + Exception::provide_source(pool, &method_name, e); } } @@ -188,7 +188,7 @@ static void _createAttribute(Request& r, VXnode& result=*new(pool) VXnode(pool, node, false); r.write_no_lang(result); } catch(const XalanDOMException& e) { - Exception::convert(pool, &method_name, e); + Exception::provide_source(pool, &method_name, e); } } // EntityReference createEntityReference(in DOMString name) raises(DOMException); @@ -206,7 +206,7 @@ static void _createEntityReference(Reque VXnode& result=*new(pool) VXnode(pool, node, false); r.write_no_lang(result); } catch(const XalanDOMException& e) { - Exception::convert(pool, &method_name, e); + Exception::provide_source(pool, &method_name, e); } } @@ -381,7 +381,7 @@ static void create_optioned_listener( if(params->size()>index) { Value& voptions=params->as_no_junction(index, "options must be string"); if(voptions.is_defined()) { - if(Hash *options=voptions.get_hash()) { + if(Hash *options=voptions.get_hash(&method_name)) { // $.method[xml|html|text] if(Value *vmethod=static_cast(options->get(*new(pool) String(pool, XDOC_OUTPUT_METHOD_OPTION_NAME)))) @@ -452,7 +452,7 @@ static void _save(Request& r, const Stri FormatterTreeWalker treeWalker(*formatterListener); treeWalker.traverse(&node); // Walk that node and produce the XML... } catch(const XSLException& e) { - Exception::convert(pool, &method_name, e); + Exception::provide_source(pool, &method_name, e); } } @@ -481,7 +481,7 @@ static void _string(Request& r, const St // write out result r.write_no_lang(parserString); } catch(const XSLException& e) { - Exception::convert(pool, &method_name, e); + Exception::provide_source(pool, &method_name, e); } } @@ -520,7 +520,7 @@ static void _file(Request& r, const Stri vfile.set(false/*tainted*/, cstr, strlen(cstr), 0/*file_name*/, vcontent_type); r.write_no_lang(vfile); } catch(const XSLException& e) { - Exception::convert(pool, &method_name, e); + Exception::provide_source(pool, &method_name, e); } } @@ -540,19 +540,19 @@ static void _set(Request& r, const Strin parsedSource = new XalanDefaultParsedSource2(&stream); } catch (XSLException& e) { - Exception::convert(pool, &method_name, e); + Exception::provide_source(pool, &method_name, e); } catch (SAXParseException& e) { - Exception::convert(pool, &method_name, e); + Exception::provide_source(pool, &method_name, e); } catch (SAXException& e) { - Exception::convert(pool, &method_name, e); + Exception::provide_source(pool, &method_name, e); } catch (XMLException& e) { - Exception::convert(pool, &method_name, e); + Exception::provide_source(pool, &method_name, e); } catch(const XalanDOMException& e) { - Exception::convert(pool, &method_name, e); + Exception::provide_source(pool, &method_name, e); } // replace any previous parsed source @@ -592,19 +592,19 @@ static void _load(Request& r, const Stri parsedSource = new XalanDefaultParsedSource2(filespec); } catch (XSLException& e) { - Exception::convert(pool, &method_name, e); + Exception::provide_source(pool, &method_name, e); } catch (SAXParseException& e) { - Exception::convert(pool, &method_name, e); + Exception::provide_source(pool, &method_name, e); } catch (SAXException& e) { - Exception::convert(pool, &method_name, e); + Exception::provide_source(pool, &method_name, e); } catch (XMLException& e) { - Exception::convert(pool, &method_name, e); + Exception::provide_source(pool, &method_name, e); } catch(const XalanDOMException& e) { - Exception::convert(pool, &method_name, e); + Exception::provide_source(pool, &method_name, e); } // replace any previous parsed source @@ -621,69 +621,7 @@ static void add_xslt_param(const Hash::K 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); - - // params - if(params->size()>1) { - Value& vparams=params->as_no_junction(1, "transform parameters parameter must be string"); - if(vparams.is_defined()) - if(Hash *params=vparams.get_hash()) - params->for_each(add_xslt_param, &vdoc.transformer()); - else - throw Exception(0, 0, - &method_name, - "transform parameters parameter must be hash"); - } - - // source - const XalanParsedSource &parsed_source=vdoc.get_parsed_source(pool, &method_name); - - // stylesheet - const String& stylesheet_file_name=params->as_string(0, "file name must be string"); - 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=vdoc.parser_liaison().createDocument(); - - // transform - try { - vdoc.transformer().transform2( - parsed_source, - &connection.stylesheet(true/*nocache* /), - target); - } - catch (XSLException& e) { - connection.close(); - Exception::convert(pool, &stylesheet_file_name, e); - } - catch (SAXParseException& e) { - connection.close(); - Exception::convert(pool, &stylesheet_file_name, e); - } - catch (SAXException& e) { - connection.close(); - Exception::convert(pool, &stylesheet_file_name, e); - } - catch (XMLException& e) { - connection.close(); - Exception::convert(pool, &stylesheet_file_name, e); - } - catch(const XalanDOMException& e) { - connection.close(); - Exception::convert(pool, &stylesheet_file_name, e); - } - // write out result - VXdoc& result=*new(pool) VXdoc(pool); - result.set_document(*target); - r.write_no_lang(result); -} -*/ static void _transform(Request& r, const String& method_name, MethodParams *params) { Pool& pool=r.pool(); VXdoc& vdoc=*static_cast(r.self); @@ -692,7 +630,7 @@ static void _transform(Request& r, const if(params->size()>1) { Value& vparams=params->as_no_junction(1, "transform parameters parameter must be string"); if(vparams.is_defined()) - if(Hash *params=vparams.get_hash()) + if(Hash *params=vparams.get_hash(&method_name)) params->for_each(add_xslt_param, &vdoc.transformer()); else throw Exception(0, 0, @@ -700,44 +638,49 @@ static void _transform(Request& r, const "transform parameters parameter must be hash"); } - // source - XalanDocument &xalan_document=vdoc.get_document(pool, &method_name); - // stylesheet const String& stylesheet_file_name=params->as_string(0, "file name must be string"); const String& stylesheet_filespec=r.absolute(stylesheet_file_name); //_asm int 3; - Stylesheet_connection& connection=XSLT_stylesheet_manager->get_connection(stylesheet_filespec); + Stylesheet_connection& connection=stylesheet_manager->get_connection(stylesheet_filespec); // target - XalanDocument* target=vdoc.parser_liaison().createDocument(); + XalanDocument* target=vdoc.parser_xerces_liaison().createDocument(); // transform try { - vdoc.transformer().transform2( - &xalan_document, - &connection.stylesheet(true/*nocache*/), - target); + if(vdoc.has_parsed_source()) { // set|load, not create? + vdoc.transformer().transform2( + vdoc.get_parsed_source(pool, &method_name), + &connection.stylesheet(true/*nocache*/), + target); + } else { + target=vdoc.parser_xerces_liaison().createDocument(); + vdoc.transformer().transform2( + vdoc.get_document(pool, &method_name), + &connection.stylesheet(true/*nocache*/), + target); + } } catch (XSLException& e) { connection.close(); - Exception::convert(pool, &stylesheet_file_name, e); + Exception::provide_source(pool, &stylesheet_file_name, e); } catch (SAXParseException& e) { connection.close(); - Exception::convert(pool, &stylesheet_file_name, e); + Exception::provide_source(pool, &stylesheet_file_name, e); } catch (SAXException& e) { connection.close(); - Exception::convert(pool, &stylesheet_file_name, e); + Exception::provide_source(pool, &stylesheet_file_name, e); } catch (XMLException& e) { connection.close(); - Exception::convert(pool, &stylesheet_file_name, e); + Exception::provide_source(pool, &stylesheet_file_name, e); } catch(const XalanDOMException& e) { connection.close(); - Exception::convert(pool, &stylesheet_file_name, e); + Exception::provide_source(pool, &stylesheet_file_name, e); } // write out result @@ -840,7 +783,7 @@ Methoded *Xdoc_class; Methoded *MXdoc_create(Pool& pool) { return #ifdef XML - Xdoc_class=new(pool) MXdoc(pool); + Xdoc_class=new(pool) MXdoc(pool) #else 0 #endif