Kaydet (Commit) eac3e6e7 authored tarafından Miklos Vajna's avatar Miklos Vajna

n#789482 DOCX: export track change data after w:hyperlink

Change-Id: If204523d7da544b11b2d809993ada180476104ef
üst dd77f79f
......@@ -66,6 +66,7 @@ public:
void testFdo47669();
void testTableBorders();
void testFdo51550();
void testN789482();
CPPUNIT_TEST_SUITE(Test);
#if !defined(MACOSX) && !defined(WNT)
......@@ -103,6 +104,7 @@ void Test::run()
{"fdo47669.docx", &Test::testFdo47669},
{"table-borders.docx", &Test::testTableBorders},
{"fdo51550.odt", &Test::testFdo51550},
{"n789482.docx", &Test::testN789482},
};
// Don't test the first import of these, for some reason those tests fail
const char* aBlacklist[] = {
......@@ -482,6 +484,24 @@ void Test::testFdo51550()
CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xDraws->getCount());
}
void Test::testN789482()
{
// The problem was that w:del was exported before w:hyperlink, resulting in an invalid XML.
uno::Reference<text::XTextRange> xParagraph = getParagraph(1);
getRun(xParagraph, 1, "Before. ");
CPPUNIT_ASSERT_EQUAL(OUString("Delete"), getProperty<OUString>(getRun(xParagraph, 2), "RedlineType"));
CPPUNIT_ASSERT_EQUAL(sal_True, getProperty<sal_Bool>(getRun(xParagraph, 2), "IsStart"));
getRun(xParagraph, 3, "www.test.com");
CPPUNIT_ASSERT_EQUAL(OUString("http://www.test.com/"), getProperty<OUString>(getRun(xParagraph, 3), "HyperLinkURL"));
CPPUNIT_ASSERT_EQUAL(OUString("Delete"), getProperty<OUString>(getRun(xParagraph, 4), "RedlineType"));
CPPUNIT_ASSERT_EQUAL(sal_False, getProperty<sal_Bool>(getRun(xParagraph, 4), "IsStart"));
getRun(xParagraph, 5, " After.");
}
CPPUNIT_TEST_SUITE_REGISTRATION(Test);
CPPUNIT_PLUGIN_IMPLEMENT();
......
......@@ -461,8 +461,9 @@ void DocxAttributeOutput::EndParagraphProperties()
void DocxAttributeOutput::StartRun( const SwRedlineData* pRedlineData, bool /*bSingleEmptyRun*/ )
{
// if there is some redlining in the document, output it
StartRedline( pRedlineData );
// Don't start redline data here, possibly there is a hyperlink later, and
// that has to be started first.
m_pRedlineData = pRedlineData;
// postpone the output of the start of a run (there are elements that need
// to be written before the start of the run, but we learn which they are
......@@ -539,6 +540,9 @@ void DocxAttributeOutput::EndRun()
m_startedHyperlink = true;
}
// if there is some redlining in the document, output it
StartRedline();
DoWriteBookmarks( );
WriteCommentRanges();
......@@ -1237,12 +1241,11 @@ void DocxAttributeOutput::Redline( const SwRedlineData* /*pRedline*/ )
OSL_TRACE( "TODO DocxAttributeOutput::Redline( const SwRedlineData* pRedline )" );
}
void DocxAttributeOutput::StartRedline( const SwRedlineData* pRedlineData )
void DocxAttributeOutput::StartRedline()
{
m_pRedlineData = pRedlineData;
if ( !m_pRedlineData )
return;
const SwRedlineData* pRedlineData = m_pRedlineData;
// FIXME check if it's necessary to travel over the Next()'s in pRedlineData
......
......@@ -132,7 +132,7 @@ public:
///
/// Start of the tag that encloses the run, fills the info according to
/// the value of m_pRedlineData.
void StartRedline( const SwRedlineData* pRedlineData );
void StartRedline();
/// Output redlining.
///
......
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