diff options
Diffstat (limited to 'sax/source/expatwrap/sax_expat.cxx')
-rw-r--r-- | sax/source/expatwrap/sax_expat.cxx | 272 |
1 files changed, 136 insertions, 136 deletions
diff --git a/sax/source/expatwrap/sax_expat.cxx b/sax/source/expatwrap/sax_expat.cxx index 704b51f5cceb..cb070ab9f574 100644 --- a/sax/source/expatwrap/sax_expat.cxx +++ b/sax/source/expatwrap/sax_expat.cxx @@ -2,7 +2,7 @@ /************************************************************************* * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * + * * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite @@ -62,7 +62,7 @@ using namespace ::com::sun::star::io; #include "xml2utf.hxx" namespace sax_expatwrap { - + // Useful macros for correct String conversion depending on the choosen expat-mode #ifdef XML_UNICODE OUString XmlNChar2OUString( const XML_Char *p , int nLen ) @@ -96,7 +96,7 @@ OUString XmlChar2OUString( const XML_Char *p ) } else return OUString(); } - + #define XML_CHAR_TO_OUSTRING(x) XmlChar2OUString(x) #define XML_CHAR_N_TO_USTRING(x,n) XmlNChar2OUString(x,n) @@ -107,9 +107,9 @@ OUString XmlChar2OUString( const XML_Char *p ) /* -* The following macro encapsulates any call to an event handler. +* The following macro encapsulates any call to an event handler. * It ensures, that exceptions thrown by the event handler are -* treated properly. +* treated properly. */ #define CALL_ELEMENT_HANDLER_AND_CARE_FOR_EXCEPTIONS(pThis,call) \ if( ! pThis->bExceptionWasThrown ) { \ @@ -138,8 +138,8 @@ OUString XmlChar2OUString( const XML_Char *p ) }\ ((void)0) -#define IMPLEMENTATION_NAME "com.sun.star.comp.extensions.xml.sax.ParserExpat" -#define SERVICE_NAME "com.sun.star.xml.sax.Parser" +#define IMPLEMENTATION_NAME "com.sun.star.comp.extensions.xml.sax.ParserExpat" +#define SERVICE_NAME "com.sun.star.xml.sax.Parser" class SaxExpatParser_Impl; @@ -151,25 +151,25 @@ class SaxExpatParser : XServiceInfo > { - -public: + +public: SaxExpatParser(); ~SaxExpatParser(); - + public: // The implementation details - static Sequence< OUString > getSupportedServiceNames_Static(void) throw (); + static Sequence< OUString > getSupportedServiceNames_Static(void) throw (); public: // The SAX-Parser-Interface - virtual void SAL_CALL parseStream( const InputSource& structSource) - throw ( SAXException, - IOException, + virtual void SAL_CALL parseStream( const InputSource& structSource) + throw ( SAXException, + IOException, RuntimeException); - virtual void SAL_CALL setDocumentHandler(const Reference< XDocumentHandler > & xHandler) + virtual void SAL_CALL setDocumentHandler(const Reference< XDocumentHandler > & xHandler) throw (RuntimeException); - + virtual void SAL_CALL setErrorHandler(const Reference< XErrorHandler > & xHandler) throw (RuntimeException); virtual void SAL_CALL setDTDHandler(const Reference < XDTDHandler > & xHandler) @@ -177,8 +177,8 @@ public: virtual void SAL_CALL setEntityResolver(const Reference< XEntityResolver >& xResolver) throw (RuntimeException); - virtual void SAL_CALL setLocale( const Locale &locale ) throw (RuntimeException); - + virtual void SAL_CALL setLocale( const Locale &locale ) throw (RuntimeException); + public: // XServiceInfo OUString SAL_CALL getImplementationName() throw (); Sequence< OUString > SAL_CALL getSupportedServiceNames(void) throw (); @@ -186,16 +186,16 @@ public: // XServiceInfo private: - SaxExpatParser_Impl *m_pImpl; - + SaxExpatParser_Impl *m_pImpl; + }; //-------------------------------------- -// the extern interface +// the extern interface //--------------------------------------- Reference< XInterface > SAL_CALL SaxExpatParser_CreateInstance( const Reference< XMultiServiceFactory > & ) throw(Exception) -{ +{ SaxExpatParser *p = new SaxExpatParser; return Reference< XInterface > ( (OWeakObject * ) p ); @@ -203,7 +203,7 @@ Reference< XInterface > SAL_CALL SaxExpatParser_CreateInstance( -Sequence< OUString > SaxExpatParser::getSupportedServiceNames_Static(void) throw () +Sequence< OUString > SaxExpatParser::getSupportedServiceNames_Static(void) throw () { Sequence<OUString> aRet(1); aRet.getArray()[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(SERVICE_NAME) ); @@ -219,8 +219,8 @@ Sequence< OUString > SaxExpatParser::getSupportedServiceNames_Static(void) th // Entity binds all information neede for a single file struct Entity { - InputSource structSource; - XML_Parser pParser; + InputSource structSource; + XML_Parser pParser; XMLFile2UTFConverter converter; }; @@ -228,22 +228,22 @@ struct Entity class SaxExpatParser_Impl { public: // module scope - Mutex aMutex; + Mutex aMutex; - Reference< XDocumentHandler > rDocumentHandler; + Reference< XDocumentHandler > rDocumentHandler; Reference< XExtendedDocumentHandler > rExtendedDocumentHandler; - - Reference< XErrorHandler > rErrorHandler; - Reference< XDTDHandler > rDTDHandler; + + Reference< XErrorHandler > rErrorHandler; + Reference< XDTDHandler > rDTDHandler; Reference< XEntityResolver > rEntityResolver; - Reference < XLocator > rDocumentLocator; + Reference < XLocator > rDocumentLocator; - Reference < XAttributeList > rAttrList; - AttributeList *pAttrList; + Reference < XAttributeList > rAttrList; + AttributeList *pAttrList; - // External entity stack - vector<struct Entity> vecEntity; + // External entity stack + vector<struct Entity> vecEntity; void pushEntity( const struct Entity &entity ) { vecEntity.push_back( entity ); } void popEntity() @@ -252,38 +252,38 @@ public: // module scope { return vecEntity.back(); } - // Exception cannot be thrown through the C-XmlParser (possible resource leaks), + // Exception cannot be thrown through the C-XmlParser (possible resource leaks), // therefor the exception must be saved somewhere. - SAXParseException exception; + SAXParseException exception; RuntimeException rtexception; - sal_Bool bExceptionWasThrown; + sal_Bool bExceptionWasThrown; sal_Bool bRTExceptionWasThrown; - Locale locale; + Locale locale; -public: +public: // the C-Callbacks for the expat parser void static callbackStartElement(void *userData, const XML_Char *name , const XML_Char **atts); void static callbackEndElement(void *userData, const XML_Char *name); void static callbackCharacters( void *userData , const XML_Char *s , int nLen ); - void static callbackProcessingInstruction( void *userData , - const XML_Char *sTarget , + void static callbackProcessingInstruction( void *userData , + const XML_Char *sTarget , const XML_Char *sData ); - void static callbackUnparsedEntityDecl( void *userData , + void static callbackUnparsedEntityDecl( void *userData , const XML_Char *entityName, const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId, const XML_Char *notationName); - - void static callbackNotationDecl( void *userData, + + void static callbackNotationDecl( void *userData, const XML_Char *notationName, const XML_Char *base, const XML_Char *systemId, const XML_Char *publicId); - int static callbackExternalEntityRef( XML_Parser parser, + int static callbackExternalEntityRef( XML_Parser parser, const XML_Char *openEntityNames, const XML_Char *base, const XML_Char *systemId, @@ -322,7 +322,7 @@ extern "C" { SaxExpatParser_Impl::callbackProcessingInstruction(userData,sTarget,sData ); } - static void call_callbackUnparsedEntityDecl(void *userData , + static void call_callbackUnparsedEntityDecl(void *userData , const XML_Char *entityName, const XML_Char *base, const XML_Char *systemId, @@ -382,9 +382,9 @@ class LocatorImpl : public: LocatorImpl( SaxExpatParser_Impl *p ) { - m_pParser = p; + m_pParser = p; } - + public: //XLocator virtual sal_Int32 SAL_CALL getColumnNumber(void) throw () { @@ -420,7 +420,7 @@ public: //XLocator private: SaxExpatParser_Impl *m_pParser; -}; +}; @@ -431,19 +431,19 @@ SaxExpatParser::SaxExpatParser( ) LocatorImpl *pLoc = new LocatorImpl( m_pImpl ); m_pImpl->rDocumentLocator = Reference< XLocator > ( pLoc ); - + // performance-Improvment. Reference is needed when calling the startTag callback. // Handing out the same object with every call is allowed (see sax-specification) m_pImpl->pAttrList = new AttributeList; m_pImpl->rAttrList = Reference< XAttributeList > ( m_pImpl->pAttrList ); - + m_pImpl->bExceptionWasThrown = sal_False; m_pImpl->bRTExceptionWasThrown = sal_False; } SaxExpatParser::~SaxExpatParser() { - delete m_pImpl; + delete m_pImpl; } @@ -451,17 +451,17 @@ SaxExpatParser::~SaxExpatParser() * * parseStream does Parser-startup initializations. The SaxExpatParser_Impl::parse() method does * the file-specific initialization work. (During a parser run, external files may be opened) -* +* ****************/ -void SaxExpatParser::parseStream( const InputSource& structSource) - throw (SAXException, - IOException, +void SaxExpatParser::parseStream( const InputSource& structSource) + throw (SAXException, + IOException, RuntimeException) { // Only one text at one time MutexGuard guard( m_pImpl->aMutex ); - - + + struct Entity entity; entity.structSource = structSource; @@ -475,9 +475,9 @@ void SaxExpatParser::parseStream( const InputSource& structSource) if( entity.structSource.sEncoding.getLength() ) { entity.converter.setEncoding( - OUStringToOString( entity.structSource.sEncoding , RTL_TEXTENCODING_ASCII_US ) ); + OUStringToOString( entity.structSource.sEncoding , RTL_TEXTENCODING_ASCII_US ) ); } - + // create parser with proper encoding entity.pParser = XML_ParserCreate( 0 ); if( ! entity.pParser ) @@ -486,28 +486,28 @@ void SaxExpatParser::parseStream( const InputSource& structSource) Reference< XInterface > (), Any() ); } - // set all necessary C-Callbacks + // set all necessary C-Callbacks XML_SetUserData( entity.pParser , m_pImpl ); - XML_SetElementHandler( entity.pParser , - call_callbackStartElement , + XML_SetElementHandler( entity.pParser , + call_callbackStartElement , call_callbackEndElement ); XML_SetCharacterDataHandler( entity.pParser , call_callbackCharacters ); - XML_SetProcessingInstructionHandler(entity.pParser , + XML_SetProcessingInstructionHandler(entity.pParser , call_callbackProcessingInstruction ); - XML_SetUnparsedEntityDeclHandler( entity.pParser, + XML_SetUnparsedEntityDeclHandler( entity.pParser, call_callbackUnparsedEntityDecl ); XML_SetNotationDeclHandler( entity.pParser, call_callbackNotationDecl ); - XML_SetExternalEntityRefHandler( entity.pParser, - call_callbackExternalEntityRef); - XML_SetUnknownEncodingHandler( entity.pParser, call_callbackUnknownEncoding ,0); - + XML_SetExternalEntityRefHandler( entity.pParser, + call_callbackExternalEntityRef); + XML_SetUnknownEncodingHandler( entity.pParser, call_callbackUnknownEncoding ,0); + if( m_pImpl->rExtendedDocumentHandler.is() ) { // These handlers just delegate calls to the ExtendedHandler. If no extended handler is // given, these callbacks can be ignored XML_SetDefaultHandlerExpand( entity.pParser, call_callbackDefault ); XML_SetCommentHandler( entity.pParser, call_callbackComment ); - XML_SetCdataSectionHandler( entity.pParser , + XML_SetCdataSectionHandler( entity.pParser , call_callbackStartCDATA , call_callbackEndCDATA ); } @@ -527,17 +527,17 @@ void SaxExpatParser::parseStream( const InputSource& structSource) // finish document if( m_pImpl->rDocumentHandler.is() ) { - m_pImpl->rDocumentHandler->endDocument(); + m_pImpl->rDocumentHandler->endDocument(); } } -// catch( SAXParseException &e ) -// { -// m_pImpl->popEntity(); -// XML_ParserFree( entity.pParser ); +// catch( SAXParseException &e ) +// { +// m_pImpl->popEntity(); +// XML_ParserFree( entity.pParser ); // Any aAny; // aAny <<= e; -// throw SAXException( e.Message, e.Context, aAny ); -// } +// throw SAXException( e.Message, e.Context, aAny ); +// } catch( SAXException & ) { m_pImpl->popEntity(); @@ -560,15 +560,15 @@ void SaxExpatParser::parseStream( const InputSource& structSource) m_pImpl->popEntity(); XML_ParserFree( entity.pParser ); } - -void SaxExpatParser::setDocumentHandler(const Reference< XDocumentHandler > & xHandler) + +void SaxExpatParser::setDocumentHandler(const Reference< XDocumentHandler > & xHandler) throw (RuntimeException) { m_pImpl->rDocumentHandler = xHandler; m_pImpl->rExtendedDocumentHandler = Reference< XExtendedDocumentHandler >( xHandler , UNO_QUERY ); } - + void SaxExpatParser::setErrorHandler(const Reference< XErrorHandler > & xHandler) throw (RuntimeException) { @@ -588,9 +588,9 @@ void SaxExpatParser::setEntityResolver(const Reference < XEntityResolver > & xRe } -void SaxExpatParser::setLocale( const Locale & locale ) throw (RuntimeException) +void SaxExpatParser::setLocale( const Locale & locale ) throw (RuntimeException) { - m_pImpl->locale = locale; + m_pImpl->locale = locale; } // XServiceInfo @@ -615,7 +615,7 @@ sal_Bool SaxExpatParser::supportsService(const OUString& ServiceName) throw () // XServiceInfo Sequence< OUString > SaxExpatParser::getSupportedServiceNames(void) throw () { - + Sequence<OUString> seq(1); seq.getArray()[0] = OUString::createFromAscii( SERVICE_NAME ); return seq; @@ -698,7 +698,7 @@ OUString getErrorMessage( XML_Error xmlE, OUString sSystemId , sal_Int32 nLine ) Message = OUString::createFromAscii( "external entity reference" ); } else if( XML_ERROR_NOT_STANDALONE == xmlE ) { - Message = OUString::createFromAscii( "not standalone" ); + Message = OUString::createFromAscii( "not standalone" ); } OUString str = OUString::createFromAscii( "[" ); @@ -724,21 +724,21 @@ void SaxExpatParser_Impl::parse( ) while( nRead ) { nRead = getEntity().converter.readAndConvert( seqOut , nBufSize ); - if( ! nRead ) { - XML_Parse( getEntity().pParser , - ( const char * ) seqOut.getArray() , - 0 , - 1 ); + if( ! nRead ) { + XML_Parse( getEntity().pParser , + ( const char * ) seqOut.getArray() , + 0 , + 1 ); break; - } + } sal_Bool bContinue = ( XML_Parse( getEntity().pParser , (const char *) seqOut.getArray(), nRead, 0 ) != 0 ); - + if( ! bContinue || this->bExceptionWasThrown ) { - + if ( this->bRTExceptionWasThrown ) throw rtexception; @@ -747,16 +747,16 @@ void SaxExpatParser_Impl::parse( ) OUString sSystemId = rDocumentLocator->getSystemId(); sal_Int32 nLine = rDocumentLocator->getLineNumber(); - SAXParseException aExcept( - getErrorMessage(xmlE , sSystemId, nLine) , - Reference< XInterface >(), + SAXParseException aExcept( + getErrorMessage(xmlE , sSystemId, nLine) , + Reference< XInterface >(), Any( &exception , getCppuType( &exception) ), rDocumentLocator->getPublicId(), rDocumentLocator->getSystemId(), rDocumentLocator->getLineNumber(), rDocumentLocator->getColumnNumber() ); - + if( rErrorHandler.is() ) { // error handler is set, so the handler may throw the exception @@ -777,33 +777,33 @@ void SaxExpatParser_Impl::parse( ) // The C-Callbacks // //----------------------------------------- -void SaxExpatParser_Impl::callbackStartElement( void *pvThis , - const XML_Char *pwName , +void SaxExpatParser_Impl::callbackStartElement( void *pvThis , + const XML_Char *pwName , const XML_Char **awAttributes ) { // in case of two concurrent threads, there is only the danger of an leak, // which is neglectable for one string static OUString g_CDATA( RTL_CONSTASCII_USTRINGPARAM( "CDATA" ) ); - + SaxExpatParser_Impl *pImpl = ((SaxExpatParser_Impl*)pvThis); - + if( pImpl->rDocumentHandler.is() ) { int i = 0; - pImpl->pAttrList->clear(); - + pImpl->pAttrList->clear(); + while( awAttributes[i] ) { OSL_ASSERT( awAttributes[i+1] ); pImpl->pAttrList->addAttribute( - XML_CHAR_TO_OUSTRING( awAttributes[i] ) , + XML_CHAR_TO_OUSTRING( awAttributes[i] ) , g_CDATA , // expat doesn't know types XML_CHAR_TO_OUSTRING( awAttributes[i+1] ) ); - i +=2; + i +=2; } CALL_ELEMENT_HANDLER_AND_CARE_FOR_EXCEPTIONS( - pImpl , - rDocumentHandler->startElement( XML_CHAR_TO_OUSTRING( pwName ) , + pImpl , + rDocumentHandler->startElement( XML_CHAR_TO_OUSTRING( pwName ) , pImpl->rAttrList ) ); } } @@ -811,7 +811,7 @@ void SaxExpatParser_Impl::callbackStartElement( void *pvThis , void SaxExpatParser_Impl::callbackEndElement( void *pvThis , const XML_Char *pwName ) { SaxExpatParser_Impl *pImpl = ((SaxExpatParser_Impl*)pvThis); - + if( pImpl->rDocumentHandler.is() ) { CALL_ELEMENT_HANDLER_AND_CARE_FOR_EXCEPTIONS( pImpl, rDocumentHandler->endElement( XML_CHAR_TO_OUSTRING( pwName ) ) ); @@ -824,22 +824,22 @@ void SaxExpatParser_Impl::callbackCharacters( void *pvThis , const XML_Char *s , SaxExpatParser_Impl *pImpl = ((SaxExpatParser_Impl*)pvThis); if( pImpl->rDocumentHandler.is() ) { - CALL_ELEMENT_HANDLER_AND_CARE_FOR_EXCEPTIONS( pImpl , + CALL_ELEMENT_HANDLER_AND_CARE_FOR_EXCEPTIONS( pImpl , rDocumentHandler->characters( XML_CHAR_N_TO_USTRING(s,nLen) ) ); } } -void SaxExpatParser_Impl::callbackProcessingInstruction( void *pvThis, - const XML_Char *sTarget , +void SaxExpatParser_Impl::callbackProcessingInstruction( void *pvThis, + const XML_Char *sTarget , const XML_Char *sData ) { SaxExpatParser_Impl *pImpl = ((SaxExpatParser_Impl*)pvThis); if( pImpl->rDocumentHandler.is() ) { - CALL_ELEMENT_HANDLER_AND_CARE_FOR_EXCEPTIONS( + CALL_ELEMENT_HANDLER_AND_CARE_FOR_EXCEPTIONS( pImpl , rDocumentHandler->processingInstruction( XML_CHAR_TO_OUSTRING( sTarget ), XML_CHAR_TO_OUSTRING( sData ) ) ); - } + } } @@ -853,30 +853,30 @@ void SaxExpatParser_Impl::callbackUnparsedEntityDecl(void *pvThis , SaxExpatParser_Impl *pImpl = ((SaxExpatParser_Impl*)pvThis); if( pImpl->rDTDHandler.is() ) { CALL_ELEMENT_HANDLER_AND_CARE_FOR_EXCEPTIONS( - pImpl , + pImpl , rDTDHandler->unparsedEntityDecl( - XML_CHAR_TO_OUSTRING( entityName ), + XML_CHAR_TO_OUSTRING( entityName ), XML_CHAR_TO_OUSTRING( publicId ) , XML_CHAR_TO_OUSTRING( systemId ) , XML_CHAR_TO_OUSTRING( notationName ) ) ); } } - -void SaxExpatParser_Impl::callbackNotationDecl( void *pvThis, + +void SaxExpatParser_Impl::callbackNotationDecl( void *pvThis, const XML_Char *notationName, const XML_Char * /*base*/, const XML_Char *systemId, const XML_Char *publicId) { SaxExpatParser_Impl *pImpl = ((SaxExpatParser_Impl*)pvThis); - if( pImpl->rDTDHandler.is() ) { + if( pImpl->rDTDHandler.is() ) { CALL_ELEMENT_HANDLER_AND_CARE_FOR_EXCEPTIONS( pImpl, - rDTDHandler->notationDecl( XML_CHAR_TO_OUSTRING( notationName ) , + rDTDHandler->notationDecl( XML_CHAR_TO_OUSTRING( notationName ) , XML_CHAR_TO_OUSTRING( publicId ) , XML_CHAR_TO_OUSTRING( systemId ) ) ); } -} +} @@ -891,7 +891,7 @@ int SaxExpatParser_Impl::callbackExternalEntityRef( XML_Parser parser, SaxExpatParser_Impl *pImpl = ((SaxExpatParser_Impl*)XML_GetUserData( parser )); struct Entity entity; - + if( pImpl->rEntityResolver.is() ) { try { @@ -946,7 +946,7 @@ int SaxExpatParser_Impl::callbackExternalEntityRef( XML_Parser parser, } pImpl->popEntity(); - + XML_ParserFree( entity.pParser ); } @@ -958,7 +958,7 @@ int SaxExpatParser_Impl::callbackUnknownEncoding(void * /*encodingHandlerData*/, XML_Encoding * /*info*/) { return 0; -} +} void SaxExpatParser_Impl::callbackDefault( void *pvThis, const XML_Char *s, int len) { @@ -1003,9 +1003,9 @@ void SaxExpatParser_Impl::callErrorHandler( SaxExpatParser_Impl *pImpl , pImpl->bExceptionWasThrown = sal_True; } catch( SAXException & ex ) { - pImpl->exception = SAXParseException( - ex.Message, - ex.Context, + pImpl->exception = SAXParseException( + ex.Message, + ex.Context, ex.WrappedException, pImpl->rDocumentLocator->getPublicId(), pImpl->rDocumentLocator->getSystemId(), @@ -1013,7 +1013,7 @@ void SaxExpatParser_Impl::callErrorHandler( SaxExpatParser_Impl *pImpl , pImpl->rDocumentLocator->getColumnNumber() ); pImpl->bExceptionWasThrown = sal_True; - } + } } void SaxExpatParser_Impl::callbackEndCDATA( void *pvThis ) @@ -1026,7 +1026,7 @@ void SaxExpatParser_Impl::callbackEndCDATA( void *pvThis ) } using namespace sax_expatwrap; -extern "C" +extern "C" { void SAL_CALL component_getImplementationEnvironment( @@ -1045,16 +1045,16 @@ sal_Bool SAL_CALL component_writeInfo( { Reference< XRegistryKey > xKey( reinterpret_cast< XRegistryKey * >( pRegistryKey ) ); - + Reference< XRegistryKey > xNewKey = xKey->createKey( OUString::createFromAscii( "/" IMPLEMENTATION_NAME "/UNO/SERVICES" ) ); xNewKey->createKey( OUString::createFromAscii( SERVICE_NAME ) ); - + xNewKey = xKey->createKey( OUString::createFromAscii("/") + SaxWriter_getImplementationName()+ OUString::createFromAscii( "/UNO/SERVICES" ) ); xNewKey->createKey( SaxWriter_getServiceName() ); - + return sal_True; } catch (InvalidRegistryException &) @@ -1070,15 +1070,15 @@ void * SAL_CALL component_getFactory( const sal_Char * pImplName, void * pServiceManager, void * /*pRegistryKey*/ ) { void * pRet = 0; - + if (pServiceManager ) { Reference< XSingleServiceFactory > xRet; Reference< XMultiServiceFactory > xSMgr = reinterpret_cast< XMultiServiceFactory * > ( pServiceManager ); - + OUString aImplementationName = OUString::createFromAscii( pImplName ); - + if (aImplementationName == OUString( RTL_CONSTASCII_USTRINGPARAM( IMPLEMENTATION_NAME ) ) ) { @@ -1099,10 +1099,10 @@ void * SAL_CALL component_getFactory( pRet = xRet.get(); } } - + return pRet; } - + } |