Kaydet (Commit) 0425ccba authored tarafından Jan Holesovsky's avatar Jan Holesovsky

sw txt export: Greatly improve the export of bullets & numbering.

Includes unit testing infrastructure for .txt export too + the actual unit
test.

Change-Id: I19a32955bbc9b97449b4240917fe2505bc3dd54c
Reviewed-on: https://gerrit.libreoffice.org/37295Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarJan Holesovsky <kendy@collabora.com>
üst 58891d58
# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
#*************************************************************************
#
# This file is part of the LibreOffice project.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
#*************************************************************************
$(eval $(call gb_CppunitTest_CppunitTest,sw_txtexport))
$(eval $(call gb_CppunitTest_add_exception_objects,sw_txtexport, \
sw/qa/extras/txtexport/txtexport \
))
$(eval $(call gb_CppunitTest_use_libraries,sw_txtexport, \
comphelper \
cppu \
cppuhelper \
i18nlangtag \
sal \
sfx \
sw \
test \
tl \
unotest \
utl \
vcl \
$(gb_UWINAPI) \
))
$(eval $(call gb_CppunitTest_use_externals,sw_txtexport,\
boost_headers \
libxml2 \
))
$(eval $(call gb_CppunitTest_set_include,sw_txtexport,\
-I$(SRCDIR)/sw/inc \
-I$(SRCDIR)/sw/source/core/inc \
-I$(SRCDIR)/sw/source/uibase/inc \
-I$(SRCDIR)/sw/qa/extras/inc \
$$(INCLUDE) \
))
$(eval $(call gb_CppunitTest_use_sdk_api,sw_txtexport))
$(eval $(call gb_CppunitTest_use_ure,sw_txtexport))
$(eval $(call gb_CppunitTest_use_vcl,sw_txtexport))
$(eval $(call gb_CppunitTest_use_rdb,sw_txtexport,services))
$(eval $(call gb_CppunitTest_use_configuration,sw_txtexport))
# vim: set noet sw=4 ts=4:
...@@ -74,6 +74,7 @@ $(eval $(call gb_Module_add_slowcheck_targets,sw,\ ...@@ -74,6 +74,7 @@ $(eval $(call gb_Module_add_slowcheck_targets,sw,\
CppunitTest_sw_rtfimport \ CppunitTest_sw_rtfimport \
CppunitTest_sw_odfexport \ CppunitTest_sw_odfexport \
CppunitTest_sw_odfimport \ CppunitTest_sw_odfimport \
CppunitTest_sw_txtexport \
CppunitTest_sw_uiwriter \ CppunitTest_sw_uiwriter \
CppunitTest_sw_mailmerge \ CppunitTest_sw_mailmerge \
CppunitTest_sw_globalfilter \ CppunitTest_sw_globalfilter \
......
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
#include <swmodeltestbase.hxx>
#include <swmodule.hxx>
#include <swdll.hxx>
#include <usrpref.hxx>
class TxtExportTest : public SwModelTestBase
{
public:
TxtExportTest() :
SwModelTestBase("/sw/qa/extras/txtexport/data/", "Text")
{}
protected:
OString readExportedFile()
{
SvMemoryStream aMemoryStream;
SvFileStream aStream(maTempFile.GetURL(), StreamMode::READ);
aStream.ReadStream(aMemoryStream);
const char* pData = static_cast<const char*>(aMemoryStream.GetData());
int offset = 0;
if (aMemoryStream.GetSize() > 2 && pData[0] == '\xEF' && pData[1] == '\xBB' && pData[2] == '\xBF')
offset = 3;
return OString(pData + offset, aMemoryStream.GetSize() - offset);
}
};
#define DECLARE_TXTEXPORT_TEST(TestName, filename) DECLARE_SW_EXPORT_TEST(TestName, filename, nullptr, TxtExportTest)
DECLARE_TXTEXPORT_TEST(testBullets, "bullets.odt")
{
OString aData = readExportedFile();
OUString aString = OStringToOUString(
"1 Heading 1" SAL_NEWLINE_STRING
"1.A Heading 2" SAL_NEWLINE_STRING
"Paragraph" SAL_NEWLINE_STRING
"" SAL_NEWLINE_STRING
" \xe2\x80\xa2 First bullet" SAL_NEWLINE_STRING
" \xe2\x80\xa2 Second bullet" SAL_NEWLINE_STRING
" \xe2\x97\xa6 Sub-second bullet" SAL_NEWLINE_STRING
" Third bullet, but deleted" SAL_NEWLINE_STRING
" \xe2\x80\xa2 Fourth bullet" SAL_NEWLINE_STRING
"" SAL_NEWLINE_STRING
"Numbering" SAL_NEWLINE_STRING
"" SAL_NEWLINE_STRING
" 1. First" SAL_NEWLINE_STRING
" 2. Second" SAL_NEWLINE_STRING
" 1. Second-first" SAL_NEWLINE_STRING
" Third, but deleted" SAL_NEWLINE_STRING
" 3. Actual third" SAL_NEWLINE_STRING
"" SAL_NEWLINE_STRING
"Paragraph after numbering" SAL_NEWLINE_STRING
"Next paragraph" SAL_NEWLINE_STRING
"Final paragraph" SAL_NEWLINE_STRING, RTL_TEXTENCODING_UTF8);
// To get the stuff back in the system's encoding
OString aExpected(OUStringToOString(aString, osl_getThreadTextEncoding()));
CPPUNIT_ASSERT_EQUAL(aExpected, aData);
}
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
...@@ -180,14 +180,33 @@ static Writer& OutASC_SwTextNode( Writer& rWrt, SwContentNode& rNode ) ...@@ -180,14 +180,33 @@ static Writer& OutASC_SwTextNode( Writer& rWrt, SwContentNode& rNode )
SwASC_AttrIter aAttrIter( static_cast<SwASCWriter&>(rWrt), rNd, nStrPos ); SwASC_AttrIter aAttrIter( static_cast<SwASCWriter&>(rWrt), rNd, nStrPos );
if( !nStrPos && rWrt.bExportPargraphNumbering ) const SwNumRule* pNumRule = rNd.GetNumRule();
if (pNumRule && !nStrPos && rWrt.bExportPargraphNumbering)
{ {
OUString numString( rNd.GetNumString() ); bool bIsOutlineNumRule = pNumRule == rNd.GetDoc()->GetOutlineNumRule();
if (!numString.isEmpty())
// indent each numbering level by 4 spaces
OUString level;
if (!bIsOutlineNumRule)
{ {
numString += " "; for (int i = 0; i <= rNd.GetActualListLevel(); ++i)
rWrt.Strm().WriteUnicodeOrByteText(numString); level += " ";
} }
// set up bullets or numbering
OUString numString(rNd.GetNumString());
if (numString.isEmpty() && !bIsOutlineNumRule)
{
if (rNd.HasBullet() && !rNd.HasVisibleNumberingOrBullet())
numString = " ";
else if (rNd.HasBullet())
numString = OUString(numfunc::GetBulletChar(rNd.GetActualListLevel()));
else if (!rNd.HasBullet() && !rNd.HasVisibleNumberingOrBullet())
numString = " ";
}
if (!level.isEmpty() || !numString.isEmpty())
rWrt.Strm().WriteUnicodeOrByteText(level + numString + " ");
} }
OUString aStr( rNd.GetText() ); OUString aStr( rNd.GetText() );
......
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