[Libreoffice-commits] core.git: 3 commits - sw/qa sw/source
Miklos Vajna
vmiklos at suse.cz
Fri Apr 5 06:25:27 PDT 2013
dev/null |binary
sw/qa/extras/ooxmlexport/data/i120928.docx |binary
sw/qa/extras/ooxmlexport/ooxmlexport.cxx | 22 +++++++++++++
sw/qa/extras/ooxmlimport/ooxmlimport.cxx | 23 --------------
sw/source/filter/ww8/docxattributeoutput.cxx | 43 ++++++++++++++++++++++++++-
sw/source/filter/ww8/docxattributeoutput.hxx | 3 +
sw/source/filter/ww8/docxexport.cxx | 25 +++++++++++++++
sw/source/filter/ww8/docxexport.hxx | 3 +
sw/source/filter/ww8/wrtww8.cxx | 6 +--
sw/source/filter/ww8/wrtww8.hxx | 11 +++---
10 files changed, 103 insertions(+), 33 deletions(-)
New commits:
commit 0644a20605965b36fcc983e4c1158820fd858726
Author: Miklos Vajna <vmiklos at suse.cz>
Date: Fri Apr 5 15:12:30 2013 +0200
Get rid of copy&paste by moving code from WW8Export to MSWordExportBase
Change-Id: I1a36fb3d20d1e67484668b7ba8feb1c96505af59
diff --git a/sw/source/filter/ww8/docxexport.cxx b/sw/source/filter/ww8/docxexport.cxx
index 42cb103..e7bec6f 100644
--- a/sw/source/filter/ww8/docxexport.cxx
+++ b/sw/source/filter/ww8/docxexport.cxx
@@ -528,66 +528,6 @@ void DocxExport::WritePostitFields()
}
}
-int DocxExport::CollectGrfsOfBullets()
-{
- m_vecBulletPic.clear();
-
- if ( pDoc )
- {
- int nCountRule = pDoc->GetNumRuleTbl().size();
- for (int n = 0; n < nCountRule; ++n)
- {
- const SwNumRule &rRule = *( pDoc->GetNumRuleTbl().at(n) );
- sal_uInt16 nLevels = rRule.IsContinusNum() ? 1 : 9;
- for (sal_uInt16 nLvl = 0; nLvl < nLevels; ++nLvl)
- {
- const SwNumFmt &rFmt = rRule.Get(nLvl);
- if (SVX_NUM_BITMAP != rFmt.GetNumberingType())
- {
- continue;
- }
- const Graphic *pGraf = rFmt.GetBrush()? rFmt.GetBrush()->GetGraphic():0;
- if ( pGraf )
- {
- bool bHas = false;
- for (unsigned i = 0; i < m_vecBulletPic.size(); ++i)
- {
- if (m_vecBulletPic[i]->GetChecksum() == pGraf->GetChecksum())
- {
- bHas = true;
- break;
- }
- }
- if (!bHas)
- {
- m_vecBulletPic.push_back(pGraf);
- }
- }
- }
- }
- }
-
- return m_vecBulletPic.size();
-}
-
-int DocxExport::GetGrfIndex(const SvxBrushItem& rBrush)
-{
- int nIndex = -1;
- if ( rBrush.GetGraphic() )
- {
- for (unsigned i = 0; i < m_vecBulletPic.size(); ++i)
- {
- if (m_vecBulletPic[i]->GetChecksum() == rBrush.GetGraphic()->GetChecksum())
- {
- nIndex = i;
- break;
- }
- }
- }
-
- return nIndex;
-}
-
void DocxExport::BulletDefinitions()
{
for (size_t i = 0; i < m_vecBulletPic.size(); ++i)
diff --git a/sw/source/filter/ww8/docxexport.hxx b/sw/source/filter/ww8/docxexport.hxx
index 797dd94..ac5637d 100644
--- a/sw/source/filter/ww8/docxexport.hxx
+++ b/sw/source/filter/ww8/docxexport.hxx
@@ -85,8 +85,6 @@ class DocxExport : public MSWordExportBase
DocxSettingsData settings;
- std::vector<const Graphic*> m_vecBulletPic;
-
public:
DocxExportFilter& GetFilter() { return *m_pFilter; };
@@ -148,9 +146,6 @@ public:
void WriteOutliner(const OutlinerParaObject& rOutliner, sal_uInt8 nTyp);
- int CollectGrfsOfBullets();
- int GetGrfIndex(const SvxBrushItem& rBrush);
-
protected:
/// Format-dependant part of the actual export.
virtual void ExportDocument_Impl();
diff --git a/sw/source/filter/ww8/wrtww8.cxx b/sw/source/filter/ww8/wrtww8.cxx
index a666980..86e3f57 100644
--- a/sw/source/filter/ww8/wrtww8.cxx
+++ b/sw/source/filter/ww8/wrtww8.cxx
@@ -1406,7 +1406,7 @@ void WW8Export::AppendBookmark( const rtl::OUString& rName, bool bSkip )
}
// #i120928 collect all the graphics of bullets applied to paragraphs
-int WW8Export::CollectGrfsOfBullets() const
+int MSWordExportBase::CollectGrfsOfBullets()
{
m_vecBulletPic.clear();
@@ -1505,8 +1505,8 @@ void WW8Export::OutGrfBullets(const sw::Frame & rFrame)
Set_UInt8( pArr, nAttrMagicIdx++ );
pChpPlc->AppendFkpEntry( Strm().Tell(), static_cast< short >(pArr - aArr), aArr );
}
-//Achieve the index position
-int WW8Export::GetGrfIndex(const SvxBrushItem& rBrush)
+
+int MSWordExportBase::GetGrfIndex(const SvxBrushItem& rBrush)
{
int nIndex = -1;
if ( rBrush.GetGraphic() )
diff --git a/sw/source/filter/ww8/wrtww8.hxx b/sw/source/filter/ww8/wrtww8.hxx
index aae74df..8628545 100644
--- a/sw/source/filter/ww8/wrtww8.hxx
+++ b/sw/source/filter/ww8/wrtww8.hxx
@@ -747,6 +747,8 @@ public:
const SfxPoolItem* HasItem( sal_uInt16 nWhich ) const;
+ /// Returns the index of a picture bullet, used in numberings.
+ int GetGrfIndex(const SvxBrushItem& rBrush);
protected:
/// Format-dependant part of the actual export.
@@ -784,7 +786,6 @@ protected:
/// Return value indicates if an inherited outline numbering is suppressed.
virtual bool DisallowInheritingOutlineNumbering(const SwFmt &rFmt) = 0;
-protected:
/// Output SwStartNode
virtual void OutputStartNode( const SwStartNode& );
@@ -823,6 +824,10 @@ protected:
const NfKeywordTable & GetNfKeywordTable();
+ /// Populates m_vecBulletPic with all the bullet graphics used by numberings.
+ int CollectGrfsOfBullets();
+ std::vector<const Graphic*> m_vecBulletPic; ///< Vector to record all the graphics of bullets
+
public:
MSWordExportBase( SwDoc *pDocument, SwPaM *pCurrentPam, SwPaM *pOriginalPam );
virtual ~MSWordExportBase();
@@ -912,8 +917,6 @@ public:
sal_uInt8 bWrtWW8 : 1; ///< Write WW95 (false) or WW97 (true) file format
- mutable std::vector<const Graphic*> m_vecBulletPic; ///< Vector to record all the graphics of bullets
-
protected:
SwWW8Writer *m_pWriter; ///< Pointer to the writer
WW8AttributeOutput *m_pAttrOutput; ///< Converting attributes to stream data
@@ -1009,9 +1012,7 @@ public:
virtual void AppendBookmark( const rtl::OUString& rName, bool bSkip = false );
virtual void ExportGrfBullet(const SwTxtNode& rNd);
- int CollectGrfsOfBullets() const;
void OutGrfBullets(const sw::Frame &rFrame);
- int GetGrfIndex(const SvxBrushItem& rBrush);
void MoveFieldMarks(sal_uLong nFrom, sal_uLong nTo);
commit e63950dc82ad7b30763c22391aec767111cf97d5
Author: Miklos Vajna <vmiklos at suse.cz>
Date: Fri Apr 5 15:01:31 2013 +0200
w:numPicBullet export testcase
Change-Id: Ia8a32b6d9fcb53e3974940c173edb2fe4c9e1ab3
diff --git a/sw/qa/extras/ooxmlexport/data/i120928.docx b/sw/qa/extras/ooxmlexport/data/i120928.docx
new file mode 100644
index 0000000..ce78653
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/i120928.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
index 05908c4..35bb3b6 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
@@ -86,6 +86,7 @@ public:
void testTableStylerPrSz();
void testMathLiteral();
void testFdo48557();
+ void testI120928();
CPPUNIT_TEST_SUITE(Test);
#if !defined(MACOSX) && !defined(WNT)
@@ -132,6 +133,7 @@ void Test::run()
{"table-style-rPr-sz.docx", &Test::testTableStylerPrSz},
{"math-literal.docx", &Test::testMathLiteral},
{"fdo48557.odt", &Test::testFdo48557},
+ {"i120928.docx", &Test::testI120928},
};
// Don't test the first import of these, for some reason those tests fail
const char* aBlacklist[] = {
@@ -672,6 +674,26 @@ void Test::testFdo48557()
CPPUNIT_ASSERT_EQUAL(sal_Int32(150), getProperty<sal_Int32>(xFrame, "BottomBorderDistance"));
}
+void Test::testI120928()
+{
+ // w:numPicBullet was ignored, leading to missing graphic bullet in numbering.
+ uno::Reference<beans::XPropertySet> xPropertySet(getStyles("NumberingStyles")->getByName("WWNum1"), uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xLevels(xPropertySet->getPropertyValue("NumberingRules"), uno::UNO_QUERY);
+ uno::Sequence<beans::PropertyValue> aProps;
+ xLevels->getByIndex(0) >>= aProps; // 1st level
+
+ bool bIsGraphic = false;
+ for (int i = 0; i < aProps.getLength(); ++i)
+ {
+ const beans::PropertyValue& rProp = aProps[i];
+
+ if (rProp.Name == "NumberingType")
+ CPPUNIT_ASSERT_EQUAL(style::NumberingType::BITMAP, rProp.Value.get<sal_Int16>());
+ else if (rProp.Name == "GraphicURL")
+ bIsGraphic = true;
+ }
+ CPPUNIT_ASSERT_EQUAL(true, bIsGraphic);
+}
CPPUNIT_TEST_SUITE_REGISTRATION(Test);
diff --git a/sw/qa/extras/ooxmlimport/data/i120928.docx b/sw/qa/extras/ooxmlimport/data/i120928.docx
deleted file mode 100644
index ce78653..0000000
Binary files a/sw/qa/extras/ooxmlimport/data/i120928.docx and /dev/null differ
diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
index 14228f1..7c4051c 100644
--- a/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
+++ b/sw/qa/extras/ooxmlimport/ooxmlimport.cxx
@@ -124,7 +124,6 @@ public:
void testFdo60922();
void testFdo59273();
void testTableWidth();
- void testI120928();
CPPUNIT_TEST_SUITE(Test);
#if !defined(MACOSX) && !defined(WNT)
@@ -200,7 +199,6 @@ void Test::run()
{"fdo60922.docx", &Test::testFdo60922},
{"fdo59273.docx", &Test::testFdo59273},
{"table_width.docx", &Test::testTableWidth},
- {"i120928.docx", &Test::testI120928},
};
header();
for (unsigned int i = 0; i < SAL_N_ELEMENTS(aMethods); ++i)
@@ -1315,27 +1313,6 @@ void Test::testTableWidth()
CPPUNIT_ASSERT_EQUAL(true, bool(getProperty<sal_Bool>(xTables->getByIndex(0), "IsWidthRelative")));
}
-void Test::testI120928()
-{
- // w:numPicBullet was ignored, leading to missing graphic bullet in numbering.
- uno::Reference<beans::XPropertySet> xPropertySet(getStyles("NumberingStyles")->getByName("WWNum1"), uno::UNO_QUERY);
- uno::Reference<container::XIndexAccess> xLevels(xPropertySet->getPropertyValue("NumberingRules"), uno::UNO_QUERY);
- uno::Sequence<beans::PropertyValue> aProps;
- xLevels->getByIndex(0) >>= aProps; // 1st level
-
- bool bIsGraphic = false;
- for (int i = 0; i < aProps.getLength(); ++i)
- {
- const beans::PropertyValue& rProp = aProps[i];
-
- if (rProp.Name == "NumberingType")
- CPPUNIT_ASSERT_EQUAL(style::NumberingType::BITMAP, rProp.Value.get<sal_Int16>());
- else if (rProp.Name == "GraphicURL")
- bIsGraphic = true;
- }
- CPPUNIT_ASSERT_EQUAL(true, bIsGraphic);
-}
-
CPPUNIT_TEST_SUITE_REGISTRATION(Test);
CPPUNIT_PLUGIN_IMPLEMENT();
commit 13183219b7bd39b7a5c8088b2679e346c4f3280c
Author: Miklos Vajna <vmiklos at suse.cz>
Date: Fri Apr 5 14:54:19 2013 +0200
DOCX export of w:numPicBullet
Change-Id: Ib8bcfb6bc63a5f14fbc36edc39a907b4955628e9
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index 0ffc3a1..d5341ca 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -3204,7 +3204,7 @@ void DocxAttributeOutput::NumberingLevel( sal_uInt8 nLevel,
sal_Int16 nFirstLineIndex,
sal_Int16 nListTabPos,
const String &rNumberingString,
- const SvxBrushItem* )
+ const SvxBrushItem* pBrush)
{
m_pSerializer->startElementNS( XML_w, XML_lvl,
FSNS( XML_w, XML_ilvl ), OString::valueOf( sal_Int32( nLevel ) ).getStr(),
@@ -3264,6 +3264,18 @@ void DocxAttributeOutput::NumberingLevel( sal_uInt8 nLevel,
FSNS( XML_w, XML_val ), OUStringToOString( aBuffer.makeStringAndClear(), RTL_TEXTENCODING_UTF8 ).getStr(),
FSEND );
+ // bullet
+ if (nNumberingType == SVX_NUM_BITMAP && pBrush)
+ {
+ int nIndex = m_rExport.GetGrfIndex(*pBrush);
+ if (nIndex != -1)
+ {
+ m_pSerializer->singleElementNS(XML_w, XML_lvlPicBulletId,
+ FSNS(XML_w, XML_val), OString::number(nIndex).getStr(),
+ FSEND);
+ }
+ }
+
// justification
const char *pJc;
bool ecmaDialect = ( m_rExport.GetFilter().getVersion() == oox::core::ECMA_DIALECT );
@@ -4923,4 +4935,33 @@ bool DocxAttributeOutput::HasPostitFields() const
return !m_postitFields.empty();
}
+void DocxAttributeOutput::BulletDefinition(int nId, const Graphic& rGraphic, Size aSize)
+{
+ m_pSerializer->startElementNS(XML_w, XML_numPicBullet,
+ FSNS(XML_w, XML_numPicBulletId), OString::number(nId).getStr(),
+ FSEND);
+
+ OStringBuffer aStyle;
+ // Size is in twips, we need it in points.
+ aStyle.append("width:").append(double(aSize.Width()) / 20);
+ aStyle.append("pt;height:").append(double(aSize.Height()) / 20).append("pt");
+ m_pSerializer->startElementNS( XML_w, XML_pict, FSEND);
+ m_pSerializer->startElementNS( XML_v, XML_shape,
+ XML_style, aStyle.getStr(),
+ FSNS(XML_o, XML_bullet), "t",
+ FSEND);
+
+ m_rDrawingML.SetFS(m_pSerializer);
+ OUString aRelId = m_rDrawingML.WriteImage(rGraphic);
+ m_pSerializer->singleElementNS( XML_v, XML_imagedata,
+ FSNS(XML_r, XML_id), OUStringToOString(aRelId, RTL_TEXTENCODING_UTF8),
+ FSNS(XML_o, XML_title), "",
+ FSEND);
+
+ m_pSerializer->endElementNS(XML_v, XML_shape);
+ m_pSerializer->endElementNS(XML_w, XML_pict);
+
+ m_pSerializer->endElementNS(XML_w, XML_numPicBullet);
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/filter/ww8/docxattributeoutput.hxx b/sw/source/filter/ww8/docxattributeoutput.hxx
index 2591f0b..7c33d07 100644
--- a/sw/source/filter/ww8/docxattributeoutput.hxx
+++ b/sw/source/filter/ww8/docxattributeoutput.hxx
@@ -684,6 +684,9 @@ public:
/// VMLTextExport
virtual void WriteOutliner(const OutlinerParaObject& rParaObj);
virtual oox::drawingml::DrawingML& GetDrawingML();
+
+ /// Exports the definition (image, size) of a single numbering picture bullet.
+ void BulletDefinition(int nId, const Graphic& rGraphic, Size aSize);
};
#endif // _DOCXATTRIBUTEOUTPUT_HXX_
diff --git a/sw/source/filter/ww8/docxexport.cxx b/sw/source/filter/ww8/docxexport.cxx
index 74854fa..42cb103 100644
--- a/sw/source/filter/ww8/docxexport.cxx
+++ b/sw/source/filter/ww8/docxexport.cxx
@@ -47,6 +47,7 @@
#include <editeng/editobj.hxx>
#include <editeng/outlobj.hxx>
+#include <editeng/brushitem.hxx>
#include <docary.hxx>
#include <numrule.hxx>
@@ -60,6 +61,7 @@
#include <comphelper/string.hxx>
#include <rtl/ustrbuf.hxx>
#include <vcl/font.hxx>
+#include <vcl/svapp.hxx>
using namespace sax_fastparser;
using namespace ::comphelper;
@@ -154,7 +156,8 @@ void DocxExport::AppendBookmark( const OUString& rName, bool /*bSkip*/ )
void DocxExport::ExportGrfBullet(const SwTxtNode&)
{
- SAL_INFO("sw.docx", "TODO: " << OSL_THIS_FUNC);
+ // Just collect the bullets for now, numbering.xml is not yet started.
+ CollectGrfsOfBullets();
}
::rtl::OString DocxExport::AddRelation( const OUString& rType, const OUString& rTarget )
@@ -525,6 +528,81 @@ void DocxExport::WritePostitFields()
}
}
+int DocxExport::CollectGrfsOfBullets()
+{
+ m_vecBulletPic.clear();
+
+ if ( pDoc )
+ {
+ int nCountRule = pDoc->GetNumRuleTbl().size();
+ for (int n = 0; n < nCountRule; ++n)
+ {
+ const SwNumRule &rRule = *( pDoc->GetNumRuleTbl().at(n) );
+ sal_uInt16 nLevels = rRule.IsContinusNum() ? 1 : 9;
+ for (sal_uInt16 nLvl = 0; nLvl < nLevels; ++nLvl)
+ {
+ const SwNumFmt &rFmt = rRule.Get(nLvl);
+ if (SVX_NUM_BITMAP != rFmt.GetNumberingType())
+ {
+ continue;
+ }
+ const Graphic *pGraf = rFmt.GetBrush()? rFmt.GetBrush()->GetGraphic():0;
+ if ( pGraf )
+ {
+ bool bHas = false;
+ for (unsigned i = 0; i < m_vecBulletPic.size(); ++i)
+ {
+ if (m_vecBulletPic[i]->GetChecksum() == pGraf->GetChecksum())
+ {
+ bHas = true;
+ break;
+ }
+ }
+ if (!bHas)
+ {
+ m_vecBulletPic.push_back(pGraf);
+ }
+ }
+ }
+ }
+ }
+
+ return m_vecBulletPic.size();
+}
+
+int DocxExport::GetGrfIndex(const SvxBrushItem& rBrush)
+{
+ int nIndex = -1;
+ if ( rBrush.GetGraphic() )
+ {
+ for (unsigned i = 0; i < m_vecBulletPic.size(); ++i)
+ {
+ if (m_vecBulletPic[i]->GetChecksum() == rBrush.GetGraphic()->GetChecksum())
+ {
+ nIndex = i;
+ break;
+ }
+ }
+ }
+
+ return nIndex;
+}
+
+void DocxExport::BulletDefinitions()
+{
+ for (size_t i = 0; i < m_vecBulletPic.size(); ++i)
+ {
+ const MapMode aMapMode(MAP_TWIP);
+ const Graphic& rGraphic = *m_vecBulletPic[i];
+ Size aSize(rGraphic.GetPrefSize());
+ if (MAP_PIXEL == rGraphic.GetPrefMapMode().GetMapUnit())
+ aSize = Application::GetDefaultDevice()->PixelToLogic(aSize, aMapMode);
+ else
+ aSize = OutputDevice::LogicToLogic(aSize,rGraphic.GetPrefMapMode(), aMapMode);
+ m_pAttrOutput->BulletDefinition(i, rGraphic, aSize);
+ }
+}
+
void DocxExport::WriteNumbering()
{
if ( !pUsedNumTbl )
@@ -542,8 +620,13 @@ void DocxExport::WriteNumbering()
pNumberingFS->startElementNS( XML_w, XML_numbering,
FSNS( XML_xmlns, XML_w ), "http://schemas.openxmlformats.org/wordprocessingml/2006/main",
+ FSNS( XML_xmlns, XML_o ), "urn:schemas-microsoft-com:office:office",
+ FSNS( XML_xmlns, XML_r ), "http://schemas.openxmlformats.org/officeDocument/2006/relationships",
+ FSNS( XML_xmlns, XML_v ), "urn:schemas-microsoft-com:vml",
FSEND );
+ BulletDefinitions();
+
AbstractNumberingDefinitions();
NumberingDefinitions();
diff --git a/sw/source/filter/ww8/docxexport.hxx b/sw/source/filter/ww8/docxexport.hxx
index 203dbea..797dd94 100644
--- a/sw/source/filter/ww8/docxexport.hxx
+++ b/sw/source/filter/ww8/docxexport.hxx
@@ -85,6 +85,8 @@ class DocxExport : public MSWordExportBase
DocxSettingsData settings;
+ std::vector<const Graphic*> m_vecBulletPic;
+
public:
DocxExportFilter& GetFilter() { return *m_pFilter; };
@@ -146,6 +148,9 @@ public:
void WriteOutliner(const OutlinerParaObject& rOutliner, sal_uInt8 nTyp);
+ int CollectGrfsOfBullets();
+ int GetGrfIndex(const SvxBrushItem& rBrush);
+
protected:
/// Format-dependant part of the actual export.
virtual void ExportDocument_Impl();
@@ -202,6 +207,9 @@ private:
/// Write word/settings.xml
void WriteSettings();
+ /// Write the numbering picture bullets part of word/numbering.xml
+ void BulletDefinitions();
+
/// All xml namespaces to be used at the top of any text .xml file (main doc, headers, footers,...)
sax_fastparser::XFastAttributeListRef MainXmlNamespaces( sax_fastparser::FSHelperPtr serializer );
More information about the Libreoffice-commits
mailing list