20#include <com/sun/star/xml/sax/InputSource.hpp>
21#include <com/sun/star/xml/sax/Parser.hpp>
22#include <com/sun/star/xml/sax/XAttributeList.hpp>
46 std::vector< std::unique_ptr<filter_info_impl> >& rFilters )
53 xParser->setDocumentHandler( pImporter );
56 source.aInputStream = xIS;
59 xParser->parseStream( source );
61 pImporter->fillFilterVector( rFilters );
76 rFilters.push_back( std::move(pFilter) );
86 sal_Int32 nLastIndex = 0;
88 size_t nNextIndex = rData.find( delimiter );
90 std::u16string_view aSubdata;
94 nLastIndex = nNextIndex == std::u16string_view::npos ? 0 : nNextIndex + 1;
95 nNextIndex = rData.find( delimiter, nLastIndex );
99 if( (
index > 0) && (nLastIndex == 0) )
103 if( nNextIndex == std::u16string_view::npos )
105 aSubdata = rData.substr( nLastIndex );
109 aSubdata = rData.substr( nLastIndex, nNextIndex - nLastIndex );
118 [&rType](
const std::unique_ptr<Node>& rxNode) { return rxNode->maName == rType; });
129 pFilter->maFilterName = pNode->maName;
130 pFilter->maInterfaceName = pNode->maPropertyMap[
"UIName"];
132 OUString
aData = pNode->maPropertyMap[
"Data"];
146 std::u16string_view aAdapterService(
getSubdata( 0, aDelim, aFilterUserData ) );
148 pFilter->mbNeedsXSLT2 = OUString(
getSubdata( 1, aDelim, aFilterUserData )).toBoolean();
149 pFilter->maImportService =
getSubdata( 2, aDelim, aFilterUserData );
150 pFilter->maExportService =
getSubdata( 3, aDelim, aFilterUserData );
151 pFilter->maImportXSLT =
getSubdata( 4, aDelim, aFilterUserData );
152 pFilter->maExportXSLT =
getSubdata( 5, aDelim, aFilterUserData );
153 pFilter->maComment =
getSubdata( 7, aDelim, aFilterUserData );
161 OUString aTypeUserData( pTypeNode->maPropertyMap[
"Data"] );
163 pFilter->maDocType =
getSubdata( 2, aComma, aTypeUserData );
164 pFilter->maExtension =
getSubdata( 4, aComma, aTypeUserData );
170 if( pTypeNode ==
nullptr )
173 if( pFilter->maFilterName.isEmpty() )
176 if( pFilter->maInterfaceName.isEmpty() )
179 if( pFilter->maType.isEmpty() )
182 if( pFilter->maFlags == 0 )
185 if( aFilterService !=
u"com.sun.star.comp.Writer.XmlFilterAdaptor" )
188 if( aAdapterService !=
u"com.sun.star.documentconversion.XSLTFilter" )
191 if( pFilter->maExtension.isEmpty() )
215 if(
aName ==
"oor:component-data" ||
aName ==
"oor:node" )
222 if(
aName ==
"node" )
224 OUString aNodeName( xAttribs->getValueByName(
"oor:name" ) );
226 if( aNodeName ==
"Filters" )
230 else if( aNodeName ==
"Types" )
238 if(
aName ==
"node" )
240 maNodeName = xAttribs->getValueByName(
"oor:name" );
247 if(
aName ==
"prop" )
255 if(
aName ==
"value" )
270 switch( eCurrentState )
275 std::unique_ptr<Node> pNode(
new Node);
PropertyMap maPropertyMap
std::vector< std::unique_ptr< Node > > maFilterNodes
virtual void SAL_CALL startElement(const OUString &aName, const css::uno::Reference< css::xml::sax::XAttributeList > &xAttribs) override
virtual void SAL_CALL setDocumentLocator(const css::uno::Reference< css::xml::sax::XLocator > &xLocator) override
void fillFilterVector(std::vector< std::unique_ptr< filter_info_impl > > &rFilters)
virtual void SAL_CALL endDocument() override
virtual void SAL_CALL endElement(const OUString &aName) override
std::unique_ptr< filter_info_impl > createFilterForNode(Node *pNode)
virtual void SAL_CALL ignorableWhitespace(const OUString &aWhitespaces) override
std::vector< std::unique_ptr< Node > > maTypeNodes
virtual ~TypeDetectionImporter() override
Node * findTypeNode(const OUString &rType)
virtual void SAL_CALL startDocument() override
std::stack< ImportState > maStack
virtual void SAL_CALL characters(const OUString &aChars) override
static void doImport(const css::uno::Reference< css::uno::XComponentContext > &rxContext, const css::uno::Reference< css::io::XInputStream > &xOS, std::vector< std::unique_ptr< filter_info_impl > > &rFilters)
virtual void SAL_CALL processingInstruction(const OUString &aTarget, const OUString &aData) override
#define TOOLS_WARN_EXCEPTION(area, stream)
constexpr OUStringLiteral aData
Shape IDs per cluster in DGG atom.
sal_Int32 toInt32(std::u16string_view str, sal_Int16 radix=10)
static std::u16string_view getSubdata(int index, sal_Unicode delimiter, std::u16string_view rData)