[Libreoffice-commits] core.git: sw/qa sw/source writerfilter/source
Miklos Vajna
vmiklos at collabora.co.uk
Wed Jan 22 07:22:15 PST 2014
sw/qa/extras/ooxmlimport/ooxmlimport.cxx | 6 +++++-
sw/source/filter/ww8/docxattributeoutput.cxx | 17 ++++++++++++++++-
writerfilter/source/dmapper/StyleSheetTable.cxx | 14 ++++++++++++++
3 files changed, 35 insertions(+), 2 deletions(-)
New commits:
commit 8766011bccfd0f12f8dd77d2f94eb16e2e8c3471
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date: Wed Jan 22 13:26:07 2014 +0100
DOCX import: set document-level font size default based on default para style
DOCX has two defaults: there can be default paragraph/run properties,
and also a paragraph/character style can be marked as default.
In this case the problem was that no doc-level default was specified,
but the default para style set a char height, and shape text is expected
to inherit that. Fix this by setting doc-level font size to default para
style, in case it's not set yet -- that matches what the binary import
does.
Also, adjust the export side, so that these duplicated default font size
is not written on export.
Change-Id: I63b368e7704142171d58f48d08052ac7616ab166
diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
index bf17257..ac5c8c65 100644
--- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
+++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
@@ -984,8 +984,12 @@ DECLARE_OOXMLIMPORT_TEST(testGroupshapeChildRotation, "groupshape-child-rotation
DECLARE_OOXMLIMPORT_TEST(testGroupshapeSmarttag, "groupshape-smarttag.docx")
{
uno::Reference<drawing::XShapes> xGroupShape(getShape(1), uno::UNO_QUERY);
+ uno::Reference<text::XTextRange> xShape(xGroupShape->getByIndex(0), uno::UNO_QUERY);
// First run of shape text was missing due to the w:smartTag wrapper around it.
- CPPUNIT_ASSERT_EQUAL(OUString("Box 2"), uno::Reference<text::XTextRange>(xGroupShape->getByIndex(0), uno::UNO_QUERY)->getString());
+ CPPUNIT_ASSERT_EQUAL(OUString("Box 2"), xShape->getString());
+
+ // Font size of the shape text was 10.
+ CPPUNIT_ASSERT_EQUAL(12.f, getProperty<float>(xShape->getText(), "CharHeight"));
}
DECLARE_OOXMLIMPORT_TEST(testN793262, "n793262.docx")
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index 98b36f6..92e0881 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -2590,6 +2590,21 @@ void DocxAttributeOutput::LatentStyles()
m_pSerializer->endElementNS(XML_w, XML_latentStyles);
}
+/// Should the font size we have written out as a default one?
+bool lcl_isDefaultFontSize(const SvxFontHeightItem& rFontHeight, SwDoc* pDoc)
+{
+ bool bRet = rFontHeight.GetHeight() != 200; // see StyleSheetTable_Impl::StyleSheetTable_Impl() where we set this default
+ // Additionally, if the default para style has the same font size, then don't write it here.
+ SwTxtFmtColl* pDefaultStyle = pDoc->GetTxtCollFromPool(RES_POOLCOLL_STANDARD);
+ if (pDefaultStyle)
+ {
+ const SfxPoolItem* pItem = 0;
+ if (pDefaultStyle->GetAttrSet().HasItem(RES_CHRATR_FONTSIZE, &pItem))
+ return static_cast<const SvxFontHeightItem*>(pItem)->GetHeight() != rFontHeight.GetHeight();
+ }
+ return bRet;
+}
+
void DocxAttributeOutput::OutputDefaultItem(const SfxPoolItem& rHt)
{
bool bMustWrite = true;
@@ -2614,7 +2629,7 @@ void DocxAttributeOutput::OutputDefaultItem(const SfxPoolItem& rHt)
bMustWrite = true;
break;
case RES_CHRATR_FONTSIZE:
- bMustWrite = static_cast< const SvxFontHeightItem& >(rHt).GetHeight() != 200; // see StyleSheetTable_Impl::StyleSheetTable_Impl() where we set this default
+ bMustWrite = lcl_isDefaultFontSize(static_cast< const SvxFontHeightItem& >(rHt), m_rExport.pDoc);
break;
case RES_CHRATR_KERNING:
bMustWrite = static_cast< const SvxKerningItem& >(rHt).GetValue() != 0;
diff --git a/writerfilter/source/dmapper/StyleSheetTable.cxx b/writerfilter/source/dmapper/StyleSheetTable.cxx
index 05648a6..c7c098b 100644
--- a/writerfilter/source/dmapper/StyleSheetTable.cxx
+++ b/writerfilter/source/dmapper/StyleSheetTable.cxx
@@ -795,6 +795,20 @@ void StyleSheetTable::lcl_sprm(Sprm & rSprm)
m_pImpl->m_pCurrentEntry->pProperties->InsertProps(pProps);
m_pImpl->m_rDMapper.PopStyleSheetProperties( );
+
+ if (m_pImpl->m_pCurrentEntry->nStyleTypeCode == STYLE_TYPE_PARA && m_pImpl->m_pCurrentEntry->bIsDefaultStyle)
+ {
+ // The current style is the default paragraph style.
+ PropertyMapPtr pProperties = m_pImpl->m_pCurrentEntry->pProperties;
+ if (pProperties->find(PROP_CHAR_HEIGHT) != pProperties->end() && m_pImpl->m_pDefaultParaProps->find(PROP_CHAR_HEIGHT) == m_pImpl->m_pDefaultParaProps->end())
+ {
+ // We provide a character height value, but a document-level default wasn't set.
+ if (m_pImpl->m_xTextDefaults.is())
+ {
+ m_pImpl->m_xTextDefaults->setPropertyValue("CharHeight", pProperties->operator[](PROP_CHAR_HEIGHT).getValue());
+ }
+ }
+ }
}
}
break;
More information about the Libreoffice-commits
mailing list