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

implement export of RTF_ATNREF, RTF_ATRFSTART and RTF_ATRFEND

Change-Id: I829ec1fbca990f3d42121270f0bf3647dbd08a30
üst 75bcb45a
{\rtf1\pard\plain
aaa
{\*\atrfstart 0}
bbb
{\*\atrfend 0}
{\*\atnid M}
{\*\atnauthor Miklos}
\chatn
{\*\annotation
{\*\atnref 0}
{\*\atndate 0}
Content}
ccc
\par
}
......@@ -50,6 +50,7 @@ public:
void testFdo50087();
void testFdo50831();
void testFdo48335();
void testFdo38244();
CPPUNIT_TEST_SUITE(Test);
#if !defined(MACOSX) && !defined(WNT)
......@@ -60,6 +61,7 @@ public:
CPPUNIT_TEST(testFdo50087);
CPPUNIT_TEST(testFdo50831);
CPPUNIT_TEST(testFdo48335);
CPPUNIT_TEST(testFdo38244);
#endif
CPPUNIT_TEST_SUITE_END();
......@@ -174,6 +176,32 @@ void Test::testFdo48335()
CPPUNIT_ASSERT_EQUAL(OUString("SoftPageBreak"), aValue);
}
void Test::testFdo38244()
{
// See ooxmlexport's testFdo38244().
roundtrip("fdo38244.rtf");
// Test comment range feature.
uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
uno::Reference<container::XEnumerationAccess> xParaEnumAccess(xTextDocument->getText(), uno::UNO_QUERY);
uno::Reference<container::XEnumeration> xParaEnum = xParaEnumAccess->createEnumeration();
uno::Reference<container::XEnumerationAccess> xRunEnumAccess(xParaEnum->nextElement(), uno::UNO_QUERY);
uno::Reference<container::XEnumeration> xRunEnum = xRunEnumAccess->createEnumeration();
xRunEnum->nextElement();
uno::Reference<beans::XPropertySet> xPropertySet(xRunEnum->nextElement(), uno::UNO_QUERY);
CPPUNIT_ASSERT_EQUAL(OUString("TextFieldStart"), getProperty<OUString>(xPropertySet, "TextPortionType"));
xRunEnum->nextElement();
xPropertySet.set(xRunEnum->nextElement(), uno::UNO_QUERY);
CPPUNIT_ASSERT_EQUAL(OUString("TextFieldEnd"), getProperty<OUString>(xPropertySet, "TextPortionType"));
// Test initials.
uno::Reference<text::XTextFieldsSupplier> xTextFieldsSupplier(mxComponent, uno::UNO_QUERY);
uno::Reference<container::XEnumerationAccess> xFieldsAccess(xTextFieldsSupplier->getTextFields());
uno::Reference<container::XEnumeration> xFields(xFieldsAccess->createEnumeration());
xPropertySet.set(xFields->nextElement(), uno::UNO_QUERY);
CPPUNIT_ASSERT_EQUAL(OUString("M"), getProperty<OUString>(xPropertySet, "Initials"));
}
CPPUNIT_TEST_SUITE_REGISTRATION(Test);
CPPUNIT_PLUGIN_IMPLEMENT();
......
......@@ -3002,7 +3002,7 @@ void RtfAttributeOutput::PostitField( const SwField* pFld )
const SwPostItField& rPFld = *(SwPostItField*)pFld;
m_aRunText->append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_ATNID " ");
m_aRunText->append(OUStringToOString(OUString(rPFld.GetPar1()), m_rExport.eCurrentEncoding));
m_aRunText->append(OUStringToOString(OUString(rPFld.GetInitials()), m_rExport.eCurrentEncoding));
m_aRunText->append("}");
m_aRunText->append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_ATNAUTHOR " ");
m_aRunText->append(OUStringToOString(OUString(rPFld.GetPar1()), m_rExport.eCurrentEncoding));
......@@ -3010,6 +3010,9 @@ void RtfAttributeOutput::PostitField( const SwField* pFld )
m_aRunText->append(OOO_STRING_SVTOOLS_RTF_CHATN);
m_aRunText->append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_ANNOTATION);
m_aRunText->append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_ATNREF " ");
m_aRunText->append(sal_Int32(m_nPostitFieldsMaxId++));
m_aRunText->append('}');
m_aRunText->append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_ATNDATE " ");
m_aRunText->append((sal_Int32)sw::ms::DateTime2DTTM(rPFld.GetDateTime()));
m_aRunText->append('}');
......@@ -3017,6 +3020,20 @@ void RtfAttributeOutput::PostitField( const SwField* pFld )
m_aRunText->append('}');
}
void RtfAttributeOutput::WritePostitFieldStart()
{
m_aRunText->append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_ATRFSTART " ");
m_aRunText->append(sal_Int32(m_nPostitFieldsMaxId));
m_aRunText->append("}");
}
void RtfAttributeOutput::WritePostitFieldEnd()
{
m_aRunText->append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_ATRFEND " ");
m_aRunText->append(sal_Int32(m_nPostitFieldsMaxId));
m_aRunText->append("}");
}
bool RtfAttributeOutput::DropdownField( const SwField* /*pFld*/ )
{
// this is handled in OutputFlyFrame_Impl()
......@@ -3040,6 +3057,7 @@ RtfAttributeOutput::RtfAttributeOutput( RtfExport &rExport )
m_aCells(),
m_bSingleEmptyRun(false),
m_bInRun(false),
m_nPostitFieldsMaxId(0),
m_pPrevPageDesc(0)
{
SAL_INFO("sw.rtf", OSL_THIS_FUNC);
......
......@@ -75,6 +75,10 @@ public:
/// Called after we end outputting the attributes.
virtual void EndRunProperties( const SwRedlineData* pRedlineData );
virtual void WritePostitFieldStart();
virtual void WritePostitFieldEnd();
/// Output text (inside a run).
virtual void RunText( const String& rText, rtl_TextEncoding eCharSet = RTL_TEXTENCODING_UTF8 );
......@@ -545,6 +549,9 @@ private:
bool m_bSingleEmptyRun;
bool m_bInRun;
unsigned int m_nPostitFieldsMaxId;
public:
RtfAttributeOutput( RtfExport &rExport );
......
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