29#include <com/sun/star/lang/XServiceInfo.hpp>
30#include <com/sun/star/lang/XInitialization.hpp>
31#include <com/sun/star/uno/XComponentContext.hpp>
32#include <com/sun/star/xml/sax/XExtendedDocumentHandler.hpp>
33#include <com/sun/star/xml/sax/XParser.hpp>
34#include <com/sun/star/xml/sax/SAXParseException.hpp>
35#include <com/sun/star/io/IOException.hpp>
36#include <com/sun/star/io/XSeekable.hpp>
37#include <com/sun/star/lang/WrappedTargetRuntimeException.hpp>
49using namespace ::
cppu;
58#define XML_CHAR_TO_OUSTRING(x) OUString(x , strlen( x ), RTL_TEXTENCODING_UTF8)
59#define XML_CHAR_N_TO_USTRING(x,n) OUString(x,n, RTL_TEXTENCODING_UTF8 )
67#define CALL_ELEMENT_HANDLER_AND_CARE_FOR_EXCEPTIONS(pThis,call) \
68 if( ! pThis->bExceptionWasThrown ) { \
72 catch( const SAXParseException &e ) {\
73 callErrorHandler( pThis , e );\
75 catch( const SAXException &e ) {\
76 callErrorHandler( pThis , SAXParseException(\
80 pThis->rDocumentLocator->getPublicId(),\
81 pThis->rDocumentLocator->getSystemId(),\
82 pThis->rDocumentLocator->getLineNumber(),\
83 pThis->rDocumentLocator->getColumnNumber()\
86 catch( const css::uno::RuntimeException &e ) {\
87 pThis->bExceptionWasThrown = true; \
88 pThis->bRTExceptionWasThrown = true; \
89 pImpl->rtexception = e; \
91 catch( const css::uno::Exception &e ) {\
92 pThis->bExceptionWasThrown = true; \
93 pThis->bRTExceptionWasThrown = true; \
94 pImpl->rtexception = WrappedTargetRuntimeException("Non-runtime UNO exception caught during parse", e.Context, css::uno::Any(e)); \
100class SaxExpatParser_Impl;
104 :
public WeakImplHelper< XInitialization
113 virtual void SAL_CALL initialize(css::uno::Sequence<css::uno::Any>
const& rArguments)
override;
116 virtual void SAL_CALL parseStream(
const InputSource& structSource)
override;
117 virtual void SAL_CALL setDocumentHandler(
const css::uno::Reference< XDocumentHandler > & xHandler)
override;
119 virtual void SAL_CALL setErrorHandler(
const css::uno::Reference< XErrorHandler > & xHandler)
override;
120 virtual void SAL_CALL setDTDHandler(
const css::uno::Reference < XDTDHandler > & xHandler)
override;
121 virtual void SAL_CALL setEntityResolver(
const css::uno::Reference< XEntityResolver >& xResolver)
override;
123 virtual void SAL_CALL
setLocale(
const Locale &locale )
override;
131 std::unique_ptr<SaxExpatParser_Impl>
m_pImpl;
138 InputSource structSource;
144class SaxExpatParser_Impl
150 css::uno::Reference< XDocumentHandler > rDocumentHandler;
151 css::uno::Reference< XExtendedDocumentHandler > rExtendedDocumentHandler;
153 css::uno::Reference< XErrorHandler > rErrorHandler;
154 css::uno::Reference< XDTDHandler > rDTDHandler;
155 css::uno::Reference< XEntityResolver > rEntityResolver;
156 css::uno::Reference < XLocator > rDocumentLocator;
162 std::vector<struct Entity> vecEntity;
163 void pushEntity( Entity &&entity )
164 { vecEntity.push_back( std::move(entity) ); }
166 { vecEntity.pop_back( ); }
167 struct Entity &getEntity()
168 {
return vecEntity.back(); }
173 SAXParseException exception;
174 css::uno::RuntimeException rtexception;
175 bool bExceptionWasThrown;
176 bool bRTExceptionWasThrown;
179 SaxExpatParser_Impl()
180 : m_bEnableDoS(false)
181 , bExceptionWasThrown(false)
182 , bRTExceptionWasThrown(false)
187 void static callbackStartElement(
void *userData,
const XML_Char *name ,
const XML_Char **atts);
188 void static callbackEndElement(
void *userData,
const XML_Char *name);
189 void static callbackCharacters(
void *userData ,
const XML_Char *s ,
int nLen );
190 void static callbackProcessingInstruction(
void *userData ,
191 const XML_Char *sTarget ,
192 const XML_Char *sData );
194 void static callbackEntityDecl(
void *userData ,
195 const XML_Char *entityName,
196 int is_parameter_entity,
197 const XML_Char *value,
199 const XML_Char *base,
200 const XML_Char *systemId,
201 const XML_Char *publicId,
202 const XML_Char *notationName);
204 void static callbackNotationDecl(
void *userData,
205 const XML_Char *notationName,
206 const XML_Char *base,
207 const XML_Char *systemId,
208 const XML_Char *publicId);
210 bool static callbackExternalEntityRef( XML_Parser parser,
211 const XML_Char *openEntityNames,
212 const XML_Char *base,
213 const XML_Char *systemId,
214 const XML_Char *publicId);
216 int static callbackUnknownEncoding(
void *encodingHandlerData,
217 const XML_Char *name,
220 void static callbackDefault(
void *userData,
const XML_Char *s,
int len);
222 void static callbackStartCDATA(
void *userData );
223 void static callbackEndCDATA(
void *userData );
224 void static callbackComment(
void *userData ,
const XML_Char *s );
225 void static callErrorHandler( SaxExpatParser_Impl *pImpl ,
const SAXParseException &e );
233 static void call_callbackStartElement(
void *userData,
const XML_Char *name ,
const XML_Char **atts)
235 SaxExpatParser_Impl::callbackStartElement(userData,name,atts);
237 static void call_callbackEndElement(
void *userData,
const XML_Char *name)
239 SaxExpatParser_Impl::callbackEndElement(userData,name);
241 static void call_callbackCharacters(
void *userData ,
const XML_Char *s ,
int nLen )
243 SaxExpatParser_Impl::callbackCharacters(userData,s,nLen);
245 static void call_callbackProcessingInstruction(
void *userData,
const XML_Char *sTarget,
const XML_Char *sData )
247 SaxExpatParser_Impl::callbackProcessingInstruction(userData,sTarget,sData );
249 static void call_callbackEntityDecl(
void *userData ,
250 const XML_Char *entityName,
251 int is_parameter_entity,
252 const XML_Char *value,
254 const XML_Char *base,
255 const XML_Char *systemId,
256 const XML_Char *publicId,
257 const XML_Char *notationName)
259 SaxExpatParser_Impl::callbackEntityDecl(userData, entityName,
260 is_parameter_entity, value, value_length,
261 base, systemId, publicId, notationName);
263 static void call_callbackNotationDecl(
void *userData,
264 const XML_Char *notationName,
265 const XML_Char *base,
266 const XML_Char *systemId,
267 const XML_Char *publicId)
269 SaxExpatParser_Impl::callbackNotationDecl(userData,notationName,base,systemId,publicId);
271 static int call_callbackExternalEntityRef(XML_Parser parser,
272 const XML_Char *openEntityNames,
273 const XML_Char *base,
274 const XML_Char *systemId,
275 const XML_Char *publicId)
277 return SaxExpatParser_Impl::callbackExternalEntityRef(parser,openEntityNames,base,systemId,publicId);
279 static int call_callbackUnknownEncoding(
void *encodingHandlerData,
280 const XML_Char *name,
283 return SaxExpatParser_Impl::callbackUnknownEncoding(encodingHandlerData,name,info);
285 static void call_callbackDefault(
void *userData,
const XML_Char *s,
int len)
287 SaxExpatParser_Impl::callbackDefault(userData,s,len);
289 static void call_callbackStartCDATA(
void *userData )
291 SaxExpatParser_Impl::callbackStartCDATA(userData);
293 static void call_callbackEndCDATA(
void *userData )
295 SaxExpatParser_Impl::callbackEndCDATA(userData);
297 static void call_callbackComment(
void *userData ,
const XML_Char *s )
299 SaxExpatParser_Impl::callbackComment(userData,s);
307 public WeakImplHelper< XLocator, css::io::XSeekable >
311 explicit LocatorImpl(SaxExpatParser_Impl *p)
317 virtual sal_Int32 SAL_CALL getColumnNumber()
override
319 return XML_GetCurrentColumnNumber( m_pParser->getEntity().pParser );
321 virtual sal_Int32 SAL_CALL getLineNumber()
override
323 return XML_GetCurrentLineNumber( m_pParser->getEntity().pParser );
325 virtual OUString SAL_CALL getPublicId()
override
327 return m_pParser->getEntity().structSource.sPublicId;
329 virtual OUString SAL_CALL getSystemId()
override
331 return m_pParser->getEntity().structSource.sSystemId;
336 virtual void SAL_CALL seek( sal_Int64 )
override
339 virtual sal_Int64 SAL_CALL getPosition()
override
341 return XML_GetCurrentByteIndex( m_pParser->getEntity().pParser );
343 virtual ::sal_Int64 SAL_CALL
getLength()
override
350 SaxExpatParser_Impl *m_pParser;
354SaxExpatParser::SaxExpatParser( )
356 m_pImpl.reset(
new SaxExpatParser_Impl );
359 m_pImpl->rDocumentLocator = pLoc;
365 m_pImpl->bExceptionWasThrown =
false;
366 m_pImpl->bRTExceptionWasThrown =
false;
371SaxExpatParser::initialize(css::uno::Sequence< css::uno::Any >
const& rArguments)
374 if (rArguments.hasElements())
377 if ((rArguments[0] >>= str) &&
"DoSmeplease" == str)
379 std::unique_lock guard(
m_pImpl->aMutex );
389 XML_Parser m_xmlParser;
391 ParserCleanup(SaxExpatParser_Impl& rParser, XML_Parser xmlParser)
393 , m_xmlParser(xmlParser)
400 XML_ParserFree(m_xmlParser);
410void SaxExpatParser::parseStream(
const InputSource& structSource)
413 std::unique_lock guard(
m_pImpl->aMutex );
416 struct Entity entity;
417 entity.structSource = structSource;
419 if( ! entity.structSource.aInputStream.is() )
421 throw SAXException(
"No input source",
422 css::uno::Reference< css::uno::XInterface > () , css::uno::Any() );
425 entity.converter.setInputStream( entity.structSource.aInputStream );
426 if( !entity.structSource.sEncoding.isEmpty() )
428 entity.converter.setEncoding(
429 OUStringToOString( entity.structSource.sEncoding , RTL_TEXTENCODING_ASCII_US ) );
433 entity.pParser = XML_ParserCreate(
nullptr );
434 if( ! entity.pParser )
436 throw SAXException(
"Couldn't create parser",
437 css::uno::Reference< css::uno::XInterface > (), css::uno::Any() );
441 XML_SetUserData( entity.pParser,
m_pImpl.get() );
442 XML_SetElementHandler( entity.pParser ,
443 call_callbackStartElement ,
444 call_callbackEndElement );
445 XML_SetCharacterDataHandler( entity.pParser , call_callbackCharacters );
446 XML_SetProcessingInstructionHandler(entity.pParser ,
447 call_callbackProcessingInstruction );
450 XML_SetEntityDeclHandler(entity.pParser, call_callbackEntityDecl);
452 XML_SetNotationDeclHandler( entity.pParser, call_callbackNotationDecl );
453 XML_SetExternalEntityRefHandler( entity.pParser,
454 call_callbackExternalEntityRef);
455 XML_SetUnknownEncodingHandler( entity.pParser, call_callbackUnknownEncoding ,
nullptr);
457 if(
m_pImpl->rExtendedDocumentHandler.is() ) {
461 XML_SetDefaultHandlerExpand( entity.pParser, call_callbackDefault );
462 XML_SetCommentHandler( entity.pParser, call_callbackComment );
463 XML_SetCdataSectionHandler( entity.pParser ,
464 call_callbackStartCDATA ,
465 call_callbackEndCDATA );
469 m_pImpl->exception = SAXParseException();
470 auto const xmlParser = entity.pParser;
471 m_pImpl->pushEntity( std::move(entity) );
473 ParserCleanup aEnsureFree(*m_pImpl, xmlParser);
476 if(
m_pImpl->rDocumentHandler.is() ) {
477 m_pImpl->rDocumentHandler->setDocumentLocator(
m_pImpl->rDocumentLocator );
478 m_pImpl->rDocumentHandler->startDocument();
484 if(
m_pImpl->rDocumentHandler.is() ) {
485 m_pImpl->rDocumentHandler->endDocument();
489void SaxExpatParser::setDocumentHandler(
const css::uno::Reference< XDocumentHandler > & xHandler)
491 m_pImpl->rDocumentHandler = xHandler;
492 m_pImpl->rExtendedDocumentHandler =
493 css::uno::Reference< XExtendedDocumentHandler >( xHandler , css::uno::UNO_QUERY );
496void SaxExpatParser::setErrorHandler(
const css::uno::Reference< XErrorHandler > & xHandler)
498 m_pImpl->rErrorHandler = xHandler;
501void SaxExpatParser::setDTDHandler(
const css::uno::Reference< XDTDHandler > & xHandler)
503 m_pImpl->rDTDHandler = xHandler;
506void SaxExpatParser::setEntityResolver(
const css::uno::Reference < XEntityResolver > & xResolver)
508 m_pImpl->rEntityResolver = xResolver;
512void SaxExpatParser::setLocale(
const Locale & )
518OUString SaxExpatParser::getImplementationName()
520 return "com.sun.star.comp.extensions.xml.sax.ParserExpat";
524sal_Bool SaxExpatParser::supportsService(
const OUString& ServiceName)
530css::uno::Sequence< OUString > SaxExpatParser::getSupportedServiceNames()
532 return {
"com.sun.star.xml.sax.Parser" };
542OUString getErrorMessage( XML_Error xmlE, std::u16string_view sSystemId , sal_Int32 nLine )
545 if( XML_ERROR_NONE == xmlE ) {
548 else if( XML_ERROR_NO_MEMORY == xmlE ) {
549 Message =
"no memory";
551 else if( XML_ERROR_SYNTAX == xmlE ) {
554 else if( XML_ERROR_NO_ELEMENTS == xmlE ) {
555 Message =
"no elements";
557 else if( XML_ERROR_INVALID_TOKEN == xmlE ) {
558 Message =
"invalid token";
560 else if( XML_ERROR_UNCLOSED_TOKEN == xmlE ) {
561 Message =
"unclosed token";
563 else if( XML_ERROR_PARTIAL_CHAR == xmlE ) {
564 Message =
"partial char";
566 else if( XML_ERROR_TAG_MISMATCH == xmlE ) {
567 Message =
"tag mismatch";
569 else if( XML_ERROR_DUPLICATE_ATTRIBUTE == xmlE ) {
570 Message =
"duplicate attribute";
572 else if( XML_ERROR_JUNK_AFTER_DOC_ELEMENT == xmlE ) {
573 Message =
"junk after doc element";
575 else if( XML_ERROR_PARAM_ENTITY_REF == xmlE ) {
576 Message =
"parameter entity reference";
578 else if( XML_ERROR_UNDEFINED_ENTITY == xmlE ) {
579 Message =
"undefined entity";
581 else if( XML_ERROR_RECURSIVE_ENTITY_REF == xmlE ) {
582 Message =
"recursive entity reference";
584 else if( XML_ERROR_ASYNC_ENTITY == xmlE ) {
585 Message =
"async entity";
587 else if( XML_ERROR_BAD_CHAR_REF == xmlE ) {
588 Message =
"bad char reference";
590 else if( XML_ERROR_BINARY_ENTITY_REF == xmlE ) {
591 Message =
"binary entity reference";
593 else if( XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF == xmlE ) {
594 Message =
"attribute external entity reference";
596 else if( XML_ERROR_MISPLACED_XML_PI == xmlE ) {
597 Message =
"misplaced xml processing instruction";
599 else if( XML_ERROR_UNKNOWN_ENCODING == xmlE ) {
600 Message =
"unknown encoding";
602 else if( XML_ERROR_INCORRECT_ENCODING == xmlE ) {
603 Message =
"incorrect encoding";
605 else if( XML_ERROR_UNCLOSED_CDATA_SECTION == xmlE ) {
606 Message =
"unclosed cdata section";
608 else if( XML_ERROR_EXTERNAL_ENTITY_HANDLING == xmlE ) {
609 Message =
"external entity reference";
611 else if( XML_ERROR_NOT_STANDALONE == xmlE ) {
612 Message =
"not standalone";
615 OUString str = OUString::Concat(
"[") +
618 OUString::number( nLine ) +
628void SaxExpatParser_Impl::parse( )
630 const int nBufSize = 16*1024;
632 int nRead = nBufSize;
633 css::uno::Sequence< sal_Int8 > seqOut(nBufSize);
636 nRead = getEntity().converter.readAndConvert( seqOut , nBufSize );
638 bool bContinue(
false);
642 XML_Status
const ret = XML_Parse( getEntity().pParser,
643 reinterpret_cast<const char *
>(seqOut.getConstArray()),
646 if (ret == XML_STATUS_OK) {
650 bContinue = ( XML_Parse( getEntity().pParser,
651 reinterpret_cast<const char *
>(seqOut.getConstArray()),
653 0 ) != XML_STATUS_ERROR );
656 if( ! bContinue || bExceptionWasThrown ) {
658 if ( bRTExceptionWasThrown )
662 XML_Error xmlE = XML_GetErrorCode( getEntity().pParser );
663 OUString sSystemId = rDocumentLocator->getSystemId();
664 sal_Int32 nLine = rDocumentLocator->getLineNumber();
666 SAXParseException aExcept(
667 getErrorMessage(xmlE , sSystemId, nLine) ,
668 css::uno::Reference< css::uno::XInterface >(),
669 css::uno::Any( &exception ,
cppu::UnoType<
decltype(exception)>::get() ),
670 rDocumentLocator->getPublicId(),
671 rDocumentLocator->getSystemId(),
672 rDocumentLocator->getLineNumber(),
673 rDocumentLocator->getColumnNumber()
676 if( rErrorHandler.is() ) {
681 rErrorHandler->fatalError( a );
695void SaxExpatParser_Impl::callbackStartElement(
void *pvThis ,
696 const XML_Char *pwName ,
697 const XML_Char **awAttributes )
699 SaxExpatParser_Impl *pImpl =
static_cast<SaxExpatParser_Impl*
>(pvThis);
701 if( !pImpl->rDocumentHandler.is() )
705 pImpl->rAttrList->Clear();
707 while( awAttributes[i] ) {
708 assert(awAttributes[i+1]);
709 pImpl->rAttrList->AddAttribute(
718 pImpl->rAttrList ) );
721void SaxExpatParser_Impl::callbackEndElement(
void *pvThis ,
const XML_Char *pwName )
723 SaxExpatParser_Impl *pImpl =
static_cast<SaxExpatParser_Impl*
>(pvThis);
725 if( pImpl->rDocumentHandler.is() ) {
732void SaxExpatParser_Impl::callbackCharacters(
void *pvThis ,
const XML_Char *s ,
int nLen )
734 SaxExpatParser_Impl *pImpl =
static_cast<SaxExpatParser_Impl*
>(pvThis);
736 if( pImpl->rDocumentHandler.is() ) {
742void SaxExpatParser_Impl::callbackProcessingInstruction(
void *pvThis,
743 const XML_Char *sTarget ,
744 const XML_Char *sData )
746 SaxExpatParser_Impl *pImpl =
static_cast<SaxExpatParser_Impl*
>(pvThis);
747 if( pImpl->rDocumentHandler.is() ) {
756void SaxExpatParser_Impl::callbackEntityDecl(
757 void *pvThis,
const XML_Char *entityName,
758 SAL_UNUSED_PARAMETER
int ,
759 const XML_Char *value, SAL_UNUSED_PARAMETER
int ,
760 SAL_UNUSED_PARAMETER
const XML_Char * ,
const XML_Char *systemId,
761 const XML_Char *publicId,
const XML_Char *notationName)
763 SaxExpatParser_Impl *pImpl =
static_cast<SaxExpatParser_Impl*
>(pvThis);
765 SAL_INFO(
"sax",
"SaxExpatParser: internal entity declaration, stopping");
766 XML_StopParser(pImpl->getEntity().pParser, XML_FALSE);
767 pImpl->exception = SAXParseException(
768 "SaxExpatParser: internal entity declaration, stopping",
769 nullptr, css::uno::Any(),
770 pImpl->rDocumentLocator->getPublicId(),
771 pImpl->rDocumentLocator->getSystemId(),
772 pImpl->rDocumentLocator->getLineNumber(),
773 pImpl->rDocumentLocator->getColumnNumber() );
774 pImpl->bExceptionWasThrown =
true;
776 if( pImpl->rDTDHandler.is() ) {
779 rDTDHandler->unparsedEntityDecl(
788void SaxExpatParser_Impl::callbackNotationDecl(
789 void *pvThis,
const XML_Char *notationName,
790 SAL_UNUSED_PARAMETER
const XML_Char * ,
const XML_Char *systemId,
791 const XML_Char *publicId)
793 SaxExpatParser_Impl *pImpl =
static_cast<SaxExpatParser_Impl*
>(pvThis);
794 if( pImpl->rDTDHandler.is() ) {
804bool SaxExpatParser_Impl::callbackExternalEntityRef(
805 XML_Parser parser,
const XML_Char *context,
806 SAL_UNUSED_PARAMETER
const XML_Char * ,
const XML_Char *systemId,
807 const XML_Char *publicId)
810 SaxExpatParser_Impl *pImpl =
static_cast<SaxExpatParser_Impl*
>(XML_GetUserData( parser ));
812 struct Entity entity;
814 if( pImpl->rEntityResolver.is() ) {
817 entity.structSource = pImpl->rEntityResolver->resolveEntity(
821 catch(
const SAXParseException & e )
823 pImpl->exception = e;
826 catch(
const SAXException & e )
828 pImpl->exception = SAXParseException(
829 e.Message , e.Context , e.WrappedException ,
830 pImpl->rDocumentLocator->getPublicId(),
831 pImpl->rDocumentLocator->getSystemId(),
832 pImpl->rDocumentLocator->getLineNumber(),
833 pImpl->rDocumentLocator->getColumnNumber() );
838 if( entity.structSource.aInputStream.is() ) {
839 entity.pParser = XML_ExternalEntityParserCreate( parser , context,
nullptr );
840 if( ! entity.pParser )
845 entity.converter.setInputStream( entity.structSource.aInputStream );
846 auto const xmlParser = entity.pParser;
847 pImpl->pushEntity( std::move(entity) );
852 catch(
const SAXParseException & e )
854 pImpl->exception = e;
859 pImpl->exception.WrappedException <<= e;
862 catch(
const css::uno::RuntimeException &e )
864 pImpl->exception.WrappedException <<=e;
870 XML_ParserFree( xmlParser );
876int SaxExpatParser_Impl::callbackUnknownEncoding(
877 SAL_UNUSED_PARAMETER
void * ,
878 SAL_UNUSED_PARAMETER
const XML_Char * ,
879 SAL_UNUSED_PARAMETER XML_Encoding * )
884void SaxExpatParser_Impl::callbackDefault(
void *pvThis,
const XML_Char *s,
int len)
886 SaxExpatParser_Impl *pImpl =
static_cast<SaxExpatParser_Impl*
>(pvThis);
892void SaxExpatParser_Impl::callbackComment(
void *pvThis ,
const XML_Char *s )
894 SaxExpatParser_Impl *pImpl =
static_cast<SaxExpatParser_Impl*
>(pvThis);
899void SaxExpatParser_Impl::callbackStartCDATA(
void *pvThis )
901 SaxExpatParser_Impl *pImpl =
static_cast<SaxExpatParser_Impl*
>(pvThis);
907void SaxExpatParser_Impl::callErrorHandler( SaxExpatParser_Impl *pImpl ,
908 const SAXParseException & e )
912 if( pImpl->rErrorHandler.is() ) {
915 pImpl->rErrorHandler->error( a );
918 pImpl->exception = e;
919 pImpl->bExceptionWasThrown =
true;
922 catch(
const SAXParseException & ex ) {
923 pImpl->exception =
ex;
924 pImpl->bExceptionWasThrown =
true;
926 catch(
const SAXException & ex ) {
927 pImpl->exception = SAXParseException(
931 pImpl->rDocumentLocator->getPublicId(),
932 pImpl->rDocumentLocator->getSystemId(),
933 pImpl->rDocumentLocator->getLineNumber(),
934 pImpl->rDocumentLocator->getColumnNumber()
936 pImpl->bExceptionWasThrown =
true;
940void SaxExpatParser_Impl::callbackEndCDATA(
void *pvThis )
942 SaxExpatParser_Impl *pImpl =
static_cast<SaxExpatParser_Impl*
>(pvThis);
949extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface *
951 css::uno::XComponentContext *,
952 css::uno::Sequence<css::uno::Any>
const &)
954 return cppu::acquire(
new SaxExpatParser);
FastSaxParserImpl & m_rParser
#define SAL_INFO(area, stream)
double getLength(const B2DPolygon &rCandidate)
void setLocale(const LanguageTag &languageTag)
css::uno::Sequence< OUString > getSupportedServiceNames()
OUString getImplementationName()
bool CPPUHELPER_DLLPUBLIC supportsService(css::lang::XServiceInfo *implementation, rtl::OUString const &name)
OString OUStringToOString(std::u16string_view str, ConnectionSettings const *settings)
bool parse(OUString const &uri, SourceProviderScannerData *data)
#define XML_CHAR_N_TO_USTRING(x, n)
#define CALL_ELEMENT_HANDLER_AND_CARE_FOR_EXCEPTIONS(pThis, call)
SAL_DLLPUBLIC_EXPORT css::uno::XInterface * com_sun_star_comp_extensions_xml_sax_ParserExpat_get_implementation(css::uno::XComponentContext *, css::uno::Sequence< css::uno::Any > const &)
#define XML_CHAR_TO_OUSTRING(x)