Kaydet (Commit) 2bda2100 authored tarafından Michael Stahl's avatar Michael Stahl

reportdesign: split up ORptFilter::CreateContext()

This was handling XML elements at 3 different levels; add some more
context classes to handle the nesting better.

There was one tricky case: the ORptExport::exportContainer()
can export a office:report element inside office:body
inside report:sub-document, but i don't know how to
create a report like that.

This was previously handled on import via the fallback to
SvXMLImportContext (created for office:body) calling
ORptFilter::CreateContext(), but now it needs explicit handling
in OXMLSubDocument::CreateChildContext_().

Change-Id: I839986599b2b936f57bb65da355ac1be811fe999
üst dfe635d4
...@@ -25,14 +25,19 @@ namespace rptxml ...@@ -25,14 +25,19 @@ namespace rptxml
{ {
enum XMLDocTokens enum XMLDocTokens
{ {
XML_TOK_DOC_AUTOSTYLES,
XML_TOK_DOC_SETTINGS, XML_TOK_DOC_SETTINGS,
XML_TOK_DOC_REPORT,
XML_TOK_DOC_STYLES, XML_TOK_DOC_STYLES,
XML_TOK_DOC_FONTDECLS, XML_TOK_DOC_CONTENT,
XML_TOK_DOC_MASTERSTYLES,
XML_TOK_DOC_META XML_TOK_DOC_META
}; };
enum XMLDocContentTokens
{
XML_TOK_CONTENT_AUTOSTYLES,
XML_TOK_CONTENT_STYLES,
XML_TOK_CONTENT_FONTDECLS,
XML_TOK_CONTENT_MASTERSTYLES,
XML_TOK_CONTENT_BODY,
};
enum XMLReportToken enum XMLReportToken
{ {
XML_TOK_REPORT_HEADER, XML_TOK_REPORT_HEADER,
...@@ -53,7 +58,8 @@ namespace rptxml ...@@ -53,7 +58,8 @@ namespace rptxml
XML_TOK_REPORT_MIMETYPE , XML_TOK_REPORT_MIMETYPE ,
XML_TOK_REPORT_NAME , XML_TOK_REPORT_NAME ,
XML_TOK_MASTER_DETAIL_FIELDS , XML_TOK_MASTER_DETAIL_FIELDS ,
XML_TOK_SUB_FRAME XML_TOK_SUB_FRAME ,
XML_TOK_SUB_BODY ,
}; };
enum XMLGroup enum XMLGroup
{ {
......
...@@ -352,6 +352,7 @@ SvXMLTokenMap* OXMLHelper::GetReportElemTokenMap() ...@@ -352,6 +352,7 @@ SvXMLTokenMap* OXMLHelper::GetReportElemTokenMap()
{ XML_NAMESPACE_DRAW, XML_NAME, XML_TOK_REPORT_NAME }, { XML_NAMESPACE_DRAW, XML_NAME, XML_TOK_REPORT_NAME },
{ XML_NAMESPACE_REPORT, XML_MASTER_DETAIL_FIELDS, XML_TOK_MASTER_DETAIL_FIELDS }, { XML_NAMESPACE_REPORT, XML_MASTER_DETAIL_FIELDS, XML_TOK_MASTER_DETAIL_FIELDS },
{ XML_NAMESPACE_DRAW, XML_FRAME, XML_TOK_SUB_FRAME }, { XML_NAMESPACE_DRAW, XML_FRAME, XML_TOK_SUB_FRAME },
{ XML_NAMESPACE_OFFICE, XML_BODY, XML_TOK_SUB_BODY },
XML_TOKEN_MAP_END XML_TOKEN_MAP_END
}; };
return new SvXMLTokenMap( aElemTokenMap ); return new SvXMLTokenMap( aElemTokenMap );
......
...@@ -87,6 +87,12 @@ SvXMLImportContextRef OXMLSubDocument::CreateChildContext_( ...@@ -87,6 +87,12 @@ SvXMLImportContextRef OXMLSubDocument::CreateChildContext_(
} }
} }
break; break;
// FIXME: is it *intentional* that this is supported?
// ORptExport::exportContainer() can export this but the import
// used to be rather accidental previously
case XML_TOK_SUB_BODY:
xContext = new RptXMLDocumentBodyContext(GetImport(), _nPrefix, _rLocalName);
break;
default: default:
break; break;
} }
......
...@@ -70,6 +70,7 @@ private: ...@@ -70,6 +70,7 @@ private:
TGroupFunctionMap m_aFunctions; TGroupFunctionMap m_aFunctions;
mutable ::std::unique_ptr<SvXMLTokenMap> m_pDocElemTokenMap; mutable ::std::unique_ptr<SvXMLTokenMap> m_pDocElemTokenMap;
mutable ::std::unique_ptr<SvXMLTokenMap> m_pDocContentElemTokenMap;
mutable ::std::unique_ptr<SvXMLTokenMap> m_pReportElemTokenMap; mutable ::std::unique_ptr<SvXMLTokenMap> m_pReportElemTokenMap;
mutable ::std::unique_ptr<SvXMLTokenMap> m_pGroupElemTokenMap; mutable ::std::unique_ptr<SvXMLTokenMap> m_pGroupElemTokenMap;
mutable ::std::unique_ptr<SvXMLTokenMap> m_pSectionElemTokenMap; mutable ::std::unique_ptr<SvXMLTokenMap> m_pSectionElemTokenMap;
...@@ -94,6 +95,8 @@ private: ...@@ -94,6 +95,8 @@ private:
/// @throws RuntimeException /// @throws RuntimeException
bool implImport( const Sequence< PropertyValue >& rDescriptor ); bool implImport( const Sequence< PropertyValue >& rDescriptor );
public:
using SvXMLImport::SetMasterStyles;
SvXMLImportContext* CreateStylesContext(const OUString& rLocalName, SvXMLImportContext* CreateStylesContext(const OUString& rLocalName,
const Reference< XAttributeList>& xAttrList, bool bIsAutoStyle ); const Reference< XAttributeList>& xAttrList, bool bIsAutoStyle );
SvXMLImportContext* CreateMetaContext(const OUString& rLocalName); SvXMLImportContext* CreateMetaContext(const OUString& rLocalName);
...@@ -131,6 +134,7 @@ public: ...@@ -131,6 +134,7 @@ public:
virtual void SAL_CALL endDocument() override; virtual void SAL_CALL endDocument() override;
const SvXMLTokenMap& GetDocElemTokenMap() const; const SvXMLTokenMap& GetDocElemTokenMap() const;
const SvXMLTokenMap& GetDocContentElemTokenMap() const;
const SvXMLTokenMap& GetReportElemTokenMap() const; const SvXMLTokenMap& GetReportElemTokenMap() const;
const SvXMLTokenMap& GetGroupElemTokenMap() const; const SvXMLTokenMap& GetGroupElemTokenMap() const;
const SvXMLTokenMap& GetSectionElemTokenMap() const; const SvXMLTokenMap& GetSectionElemTokenMap() const;
...@@ -228,6 +232,21 @@ public: ...@@ -228,6 +232,21 @@ public:
}; };
class RptXMLDocumentBodyContext : public SvXMLImportContext
{
public:
RptXMLDocumentBodyContext(SvXMLImport & rImport,
sal_uInt16 const nPrefix,
const OUString& rLocalName)
: SvXMLImportContext(rImport, nPrefix, rLocalName)
{
}
virtual SvXMLImportContextRef CreateChildContext(sal_uInt16 const nPrefix,
const OUString& rLocalName,
const css::uno::Reference<css::xml::sax::XAttributeList> & xAttrList) override;
};
} // rptxml } // rptxml
#endif // INCLUDED_REPORTDESIGN_SOURCE_FILTER_XML_XMLFILTER_HXX #endif // INCLUDED_REPORTDESIGN_SOURCE_FILTER_XML_XMLFILTER_HXX
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment