[Libreoffice-commits] core.git: 3 commits - include/oox oox/inc oox/source
Markus Mohrhard
markus.mohrhard at collabora.co.uk
Mon Mar 9 17:00:38 PDT 2015
include/oox/core/contexthandler.hxx | 4 --
include/oox/core/contexthandler2.hxx | 8 ----
include/oox/core/xmlfilterbase.hxx | 7 +--
oox/inc/drawingml/chart/chartcontextbase.hxx | 10 -----
oox/inc/drawingml/chart/chartspacemodel.hxx | 2 -
oox/source/core/xmlfilterbase.cxx | 42 ++++++++++++++++++++--
oox/source/drawingml/chart/chartspacefragment.cxx | 7 +++
oox/source/drawingml/chart/chartspacemodel.cxx | 4 +-
oox/source/drawingml/shape.cxx | 3 +
9 files changed, 53 insertions(+), 34 deletions(-)
New commits:
commit 23a1717881ebfa3638b969aa4bad38a81d26d29d
Author: Markus Mohrhard <markus.mohrhard at collabora.co.uk>
Date: Tue Mar 10 00:59:28 2015 +0100
handle MSO 2007 vs OOXML in auto title chart import
Change-Id: Id884a4c90c24b38a1dd22a41d271dcc551b59adc
diff --git a/oox/inc/drawingml/chart/chartspacemodel.hxx b/oox/inc/drawingml/chart/chartspacemodel.hxx
index e8ddb9c..4a98bbf 100644
--- a/oox/inc/drawingml/chart/chartspacemodel.hxx
+++ b/oox/inc/drawingml/chart/chartspacemodel.hxx
@@ -58,7 +58,7 @@ struct ChartSpaceModel
bool mbShowLabelsOverMax;/// True = show labels over chart maximum.
bool mbPivotChart; /// True = pivot chart.
- explicit ChartSpaceModel();
+ explicit ChartSpaceModel(bool bMSO2007Doc);
~ChartSpaceModel();
};
diff --git a/oox/source/drawingml/chart/chartspacefragment.cxx b/oox/source/drawingml/chart/chartspacefragment.cxx
index ac12bf5..eb014ef 100644
--- a/oox/source/drawingml/chart/chartspacefragment.cxx
+++ b/oox/source/drawingml/chart/chartspacefragment.cxx
@@ -81,8 +81,13 @@ ContextHandlerRef ChartSpaceFragment::onCreateContext( sal_Int32 nElement, const
switch( nElement )
{
case C_TOKEN( autoTitleDeleted ):
- mrModel.mbAutoTitleDel = rAttribs.getBool( XML_val, true ); // TODO: OOXML_spec
+ {
+ bool bMSO2007Document = getFilter().isMSO2007Document();
+
+ // default value is false for MSO 2007 and true in OOXML
+ mrModel.mbAutoTitleDel = rAttribs.getBool( XML_val, !bMSO2007Document );
return 0;
+ }
case C_TOKEN( backWall ):
return new WallFloorContext( *this, mrModel.mxBackWall.create() );
case C_TOKEN( dispBlanksAs ):
diff --git a/oox/source/drawingml/chart/chartspacemodel.cxx b/oox/source/drawingml/chart/chartspacemodel.cxx
index ea14c3c..7dab058 100644
--- a/oox/source/drawingml/chart/chartspacemodel.cxx
+++ b/oox/source/drawingml/chart/chartspacemodel.cxx
@@ -24,10 +24,10 @@ namespace oox {
namespace drawingml {
namespace chart {
-ChartSpaceModel::ChartSpaceModel() :
+ChartSpaceModel::ChartSpaceModel(bool bMSO2007Doc) :
mnDispBlanksAs( XML_gap ), // not zero as specified, TODO: OOXML_spec
mnStyle( 2 ),
- mbAutoTitleDel( true ),
+ mbAutoTitleDel( !bMSO2007Doc ), // difference between OOXML spec and MSO 2007
mbPlotVisOnly( false ),
mbShowLabelsOverMax( false ),
mbPivotChart( false )
diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx
index 59350e2..bea5cd2 100644
--- a/oox/source/drawingml/shape.cxx
+++ b/oox/source/drawingml/shape.cxx
@@ -1271,7 +1271,8 @@ void Shape::finalizeXShape( XmlFilterBase& rFilter, const Reference< XShapes >&
Reference< chart2::XChartDocument > xChartDoc( xDocModel, UNO_QUERY_THROW );
// load the chart data from the XML fragment
- chart::ChartSpaceModel aModel;
+ bool bMSO2007Doc = rFilter.isMSO2007Document();
+ chart::ChartSpaceModel aModel(bMSO2007Doc);
chart::ChartSpaceFragment *pChartSpaceFragment = new chart::ChartSpaceFragment(
rFilter, mxChartShapeInfo->maFragmentPath, aModel );
const OUString aThemeOverrideFragmentPath( pChartSpaceFragment->
commit 15174177091367332b57cd79575e2f7dd27388b2
Author: Markus Mohrhard <markus.mohrhard at collabora.co.uk>
Date: Tue Mar 10 00:34:07 2015 +0100
detect MSO 2007 OOXML documents
Change-Id: I4052c6f1e5dde71ce4cede1ec9a313f461861d71
diff --git a/include/oox/core/xmlfilterbase.hxx b/include/oox/core/xmlfilterbase.hxx
index 9fccf1f..d522fd6 100644
--- a/include/oox/core/xmlfilterbase.hxx
+++ b/include/oox/core/xmlfilterbase.hxx
@@ -234,6 +234,8 @@ public:
FastParser* createParser() const;
+ bool isMSO2007Document() const;
+
protected:
virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >
implGetInputStream( utl::MediaDescriptor& rMediaDesc ) const SAL_OVERRIDE;
diff --git a/oox/source/core/xmlfilterbase.cxx b/oox/source/core/xmlfilterbase.cxx
index 4920cc6..3eccfe9 100644
--- a/oox/source/core/xmlfilterbase.cxx
+++ b/oox/source/core/xmlfilterbase.cxx
@@ -206,7 +206,8 @@ XmlFilterBase::XmlFilterBase( const Reference< XComponentContext >& rxContext )
FilterBase( rxContext ),
mxImpl( new XmlFilterBaseImpl( rxContext ) ),
mnRelId( 1 ),
- mnMaxDocId( 0 )
+ mnMaxDocId( 0 ),
+ mbMSO2007(false)
{
}
@@ -222,6 +223,35 @@ XmlFilterBase::~XmlFilterBase()
mxImpl->maFastParser.setDocumentHandler( 0 );
}
+namespace {
+
+bool is2007MSODocument(Reference<XDocumentProperties> xDocProps)
+{
+ if (!xDocProps->getGenerator().startsWithIgnoreAsciiCase("Microsoft"))
+ return false;
+
+ uno::Reference<beans::XPropertyAccess> xUserDefProps(xDocProps->getUserDefinedProperties(), uno::UNO_QUERY);
+ if (!xUserDefProps.is())
+ return false;
+
+ comphelper::SequenceAsHashMap aUserDefinedProperties(xUserDefProps->getPropertyValues());
+ comphelper::SequenceAsHashMap::iterator it = aUserDefinedProperties.find("AppVersion");
+ if (it == aUserDefinedProperties.end())
+ return false;
+
+ OUString aValue;
+ if (!(it->second >>= aValue))
+ return false;
+
+ if (!aValue.startsWithIgnoreAsciiCase("12."))
+ return false;
+
+ SAL_WARN("oox", "a MSO 2007 document");
+ return true;
+}
+
+}
+
void XmlFilterBase::importDocumentProperties()
{
Reference< XMultiServiceFactory > xFactory( getComponentContext()->getServiceManager(), UNO_QUERY );
@@ -238,7 +268,9 @@ void XmlFilterBase::importDocumentProperties()
xContext);
Reference< XOOXMLDocumentPropertiesImporter > xImporter( xTemp, UNO_QUERY );
Reference< XDocumentPropertiesSupplier > xPropSupplier( xModel, UNO_QUERY);
- xImporter->importProperties( xDocumentStorage, xPropSupplier->getDocumentProperties() );
+ Reference< XDocumentProperties > xDocProps = xPropSupplier->getDocumentProperties();
+ xImporter->importProperties( xDocumentStorage, xDocProps );
+ mbMSO2007 = is2007MSODocument(xDocProps);
}
FastParser* XmlFilterBase::createParser() const
@@ -880,6 +912,11 @@ StorageRef XmlFilterBase::implCreateStorage( const Reference< XStream >& rxOutSt
return StorageRef( new ZipStorage( getComponentContext(), rxOutStream ) );
}
+bool XmlFilterBase::isMSO2007Document() const
+{
+ return mbMSO2007;
+}
+
} // namespace core
} // namespace oox
commit 180e1de3f6bad36b00dfe3aeba43172e5e9a735e
Author: Markus Mohrhard <markus.mohrhard at collabora.co.uk>
Date: Mon Mar 9 23:41:33 2015 +0100
remove whitespaces
Change-Id: Ie9d303a7200cf2a6bfd8c0f5f547cfffccaa0444
diff --git a/include/oox/core/contexthandler.hxx b/include/oox/core/contexthandler.hxx
index a65c17e6..3df0de5 100644
--- a/include/oox/core/contexthandler.hxx
+++ b/include/oox/core/contexthandler.hxx
@@ -42,8 +42,6 @@ class FragmentHandler;
struct Relation;
class Relations;
-
-
class ContextHandler;
typedef ::rtl::Reference< ContextHandler > ContextHandlerRef;
@@ -108,8 +106,6 @@ private:
FragmentBaseDataRef mxBaseData; ///< Base data of the fragment.
};
-
-
} // namespace core
} // namespace oox
diff --git a/include/oox/core/contexthandler2.hxx b/include/oox/core/contexthandler2.hxx
index 6e4b27d..048a2ec 100644
--- a/include/oox/core/contexthandler2.hxx
+++ b/include/oox/core/contexthandler2.hxx
@@ -30,12 +30,8 @@
namespace oox {
namespace core {
-
-
const sal_Int32 XML_ROOT_CONTEXT = SAL_MAX_INT32;
-
-
struct ElementInfo;
/** Helper class that provides a context stack.
@@ -211,8 +207,6 @@ protected:
bool mbEnableTrimSpace; ///< True = trim whitespace in characters().
};
-
-
class OOX_DLLPUBLIC ContextHandler2 : public ContextHandler, public ContextHandler2Helper
{
public:
@@ -264,8 +258,6 @@ public:
virtual void onEndRecord() SAL_OVERRIDE;
};
-
-
} // namespace core
} // namespace oox
diff --git a/include/oox/core/xmlfilterbase.hxx b/include/oox/core/xmlfilterbase.hxx
index c4e4b56..9fccf1f 100644
--- a/include/oox/core/xmlfilterbase.hxx
+++ b/include/oox/core/xmlfilterbase.hxx
@@ -68,8 +68,6 @@ struct TextField {
};
typedef std::vector< TextField > TextFieldStack;
-
-
struct XmlFilterBaseImpl;
class OOX_DLLPUBLIC XmlFilterBase : public FilterBase
@@ -255,12 +253,11 @@ private:
::std::unique_ptr< XmlFilterBaseImpl > mxImpl;
sal_Int32 mnRelId;
sal_Int32 mnMaxDocId;
+ bool mbMSO2007;
};
typedef ::rtl::Reference< XmlFilterBase > XmlFilterRef;
-
-
} // namespace core
} // namespace oox
diff --git a/oox/inc/drawingml/chart/chartcontextbase.hxx b/oox/inc/drawingml/chart/chartcontextbase.hxx
index 9bf80ce..c160fb9 100644
--- a/oox/inc/drawingml/chart/chartcontextbase.hxx
+++ b/oox/inc/drawingml/chart/chartcontextbase.hxx
@@ -28,8 +28,6 @@ namespace oox {
namespace drawingml {
namespace chart {
-
-
template< typename ModelType >
class ContextBase : public ::oox::core::ContextHandler2
{
@@ -42,8 +40,6 @@ protected:
ModelType& mrModel;
};
-
-
template< typename ModelType >
class FragmentBase : public ::oox::core::FragmentHandler2
{
@@ -56,8 +52,6 @@ protected:
ModelType& mrModel;
};
-
-
/** Help class for all contexts that have only the c:spPr child element.
*/
class ShapePrWrapperContext : public ContextBase< Shape >
@@ -69,8 +63,6 @@ public:
virtual ::oox::core::ContextHandlerRef onCreateContext( sal_Int32 nElement, const AttributeList& rAttribs ) SAL_OVERRIDE;
};
-
-
struct LayoutModel;
/** Handler for a chart layout context (c:layout element).
@@ -84,8 +76,6 @@ public:
virtual ::oox::core::ContextHandlerRef onCreateContext( sal_Int32 nElement, const AttributeList& rAttribs ) SAL_OVERRIDE;
};
-
-
} // namespace chart
} // namespace drawingml
} // namespace oox
diff --git a/oox/source/core/xmlfilterbase.cxx b/oox/source/core/xmlfilterbase.cxx
index 5c34ead..4920cc6 100644
--- a/oox/source/core/xmlfilterbase.cxx
+++ b/oox/source/core/xmlfilterbase.cxx
@@ -780,7 +780,6 @@ writeCustomProperties( XmlFilterBase& rSelf, Reference< XDocumentProperties > xP
pAppProps->endElement( XML_Properties );
}
-
XmlFilterBase& XmlFilterBase::exportDocumentProperties( Reference< XDocumentProperties > xProperties )
{
if( xProperties.is() )
More information about the Libreoffice-commits
mailing list