Hi,
Today's RTF regression fix. :-)
See
http://cgit.freedesktop.org/libreoffice/core/commit/?id=116016d
It depends on a trivial refactoring:
http://cgit.freedesktop.org/libreoffice/core/commit/?id=f1fdcde
I'm attaching a backport of both.
Thanks,
Miklos
From 3db2211850ec4b1f07ad0208942945719ef344ad Mon Sep 17 00:00:00 2001
From: Miklos Vajna vmik...@suse.cz
Date: Wed, 25 Apr 2012 11:28:49 +0200
Subject: [PATCH 1/2] avoid code duplication by introducing
RTFDocumentImpl::singleChar
---
writerfilter/source/rtftok/rtfdocumentimpl.cxx | 86 ++--
writerfilter/source/rtftok/rtfdocumentimpl.hxx |2 +
2 files changed, 24 insertions(+), 64 deletions(-)
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index f36e763..0a93829a 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -886,6 +886,24 @@ bool RTFFrame::inFrame()
|| nY 0;
}
+void RTFDocumentImpl::singleChar(sal_uInt8 nValue)
+{
+sal_uInt8 sValue[] = { nValue };
+if (!m_pCurrentBuffer)
+{
+Mapper().startCharacterGroup();
+Mapper().text(sValue, 1);
+Mapper().endCharacterGroup();
+}
+else
+{
+m_pCurrentBuffer-push_back(make_pair(BUFFER_STARTRUN, RTFValue::Pointer_t()));
+RTFValue::Pointer_t pValue(new RTFValue(*sValue));
+m_pCurrentBuffer-push_back(make_pair(BUFFER_TEXT, pValue));
+m_pCurrentBuffer-push_back(make_pair(BUFFER_ENDRUN, RTFValue::Pointer_t()));
+}
+}
+
void RTFDocumentImpl::text(OUString rString)
{
bool bRet = true;
@@ -1137,22 +1155,7 @@ int RTFDocumentImpl::dispatchDestination(RTFKeyword nKeyword)
if (aBuf.toString().equals(EQ))
m_bEq = true;
else
-{
-sal_uInt8 sFieldStart[] = { 0x13 };
-if (!m_pCurrentBuffer)
-{
-Mapper().startCharacterGroup();
-Mapper().text(sFieldStart, 1);
-Mapper().endCharacterGroup();
-}
-else
-{
-m_pCurrentBuffer-push_back(make_pair(BUFFER_STARTRUN, RTFValue::Pointer_t()));
-RTFValue::Pointer_t pValue(new RTFValue(*sFieldStart));
-m_pCurrentBuffer-push_back(make_pair(BUFFER_TEXT, pValue));
-m_pCurrentBuffer-push_back(make_pair(BUFFER_ENDRUN, RTFValue::Pointer_t()));
-}
-}
+singleChar(0x13);
m_aStates.top().nDestinationState = DESTINATION_FIELDINSTRUCTION;
}
break;
@@ -3096,42 +3099,12 @@ int RTFDocumentImpl::popState()
m_aFormfieldSprms-clear();
}
if (!m_bEq)
-{
-sal_uInt8 sFieldSep[] = { 0x14 };
-if (!m_pCurrentBuffer)
-{
-Mapper().startCharacterGroup();
-Mapper().text(sFieldSep, 1);
-Mapper().endCharacterGroup();
-}
-else
-{
-m_pCurrentBuffer-push_back(make_pair(BUFFER_STARTRUN, RTFValue::Pointer_t()));
-RTFValue::Pointer_t pValue(new RTFValue(*sFieldSep));
-m_pCurrentBuffer-push_back(make_pair(BUFFER_TEXT, pValue));
-m_pCurrentBuffer-push_back(make_pair(BUFFER_ENDRUN, RTFValue::Pointer_t()));
-}
-}
+singleChar(0x14);
}
else if (m_aStates.top().nDestinationState == DESTINATION_FIELDRESULT)
{
if (!m_bEq)
-{
-sal_uInt8 sFieldEnd[] = { 0x15 };
-if (!m_pCurrentBuffer)
-{
-Mapper().startCharacterGroup();
-Mapper().text(sFieldEnd, 1);
-Mapper().endCharacterGroup();
-}
-else
-{
-m_pCurrentBuffer-push_back(make_pair(BUFFER_STARTRUN, RTFValue::Pointer_t()));
-RTFValue::Pointer_t pValue(new RTFValue(*sFieldEnd));
-m_pCurrentBuffer-push_back(make_pair(BUFFER_TEXT, pValue));
-m_pCurrentBuffer-push_back(make_pair(BUFFER_ENDRUN, RTFValue::Pointer_t()));
-}
-}
+singleChar(0x15);
else
m_bEq = false;
}
@@ -3542,22 +3515,7 @@ int RTFDocumentImpl::popState()
else if (aState.nDestinationState == DESTINATION_FIELD)
{
if (aState.nFieldStatus == FIELD_INSTRUCTION)
-{
-sal_uInt8 sFieldEnd[] = { 0x15 };
-if (!m_pCurrentBuffer)
-{
-Mapper().startCharacterGroup();
-Mapper().text(sFieldEnd, 1);
-Mapper().endCharacterGroup();
-}
-else
-{
-