summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@frugalware.org>2011-12-20 12:37:21 +0100
committerMiklos Vajna <vmiklos@frugalware.org>2011-12-20 12:42:41 +0100
commit80bab876c3efce923b98caac2a6373e666664761 (patch)
treef1fb2b6d084d26ee414220e43f80d21687741906
parent40f129a99e691babaf7320cb32dff7ec5c77275c (diff)
fdo#42109 fix RTF import of fields inside tables
(cherry picked from commit 133f4d750a46dc67797d2f23f25a1bb39620d59f)
-rw-r--r--writerfilter/source/rtftok/rtfdocumentimpl.cxx53
-rw-r--r--writerfilter/source/rtftok/rtfdocumentimpl.hxx1
2 files changed, 45 insertions, 9 deletions
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index 4c8648e2cc2c..aef9966e236a 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -935,6 +935,11 @@ void RTFDocumentImpl::replayBuffer(RTFBuffer_t& rBuffer)
}
else if (aPair.first == BUFFER_STARTRUN)
Mapper().startCharacterGroup();
+ else if (aPair.first == BUFFER_TEXT)
+ {
+ sal_uInt8 nValue = aPair.second->getInt();
+ Mapper().text(&nValue, 1);
+ }
else if (aPair.first == BUFFER_UTEXT)
{
OUString aString(aPair.second->getString());
@@ -1002,9 +1007,19 @@ int RTFDocumentImpl::dispatchDestination(RTFKeyword nKeyword)
else
{
sal_uInt8 sFieldStart[] = { 0x13 };
- Mapper().startCharacterGroup();
- Mapper().text(sFieldStart, 1);
- Mapper().endCharacterGroup();
+ 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()));
+ }
}
m_aStates.top().nDestinationState = DESTINATION_FIELDINSTRUCTION;
}
@@ -2792,9 +2807,19 @@ int RTFDocumentImpl::popState()
if (!m_bEq)
{
sal_uInt8 sFieldSep[] = { 0x14 };
- Mapper().startCharacterGroup();
- Mapper().text(sFieldSep, 1);
- Mapper().endCharacterGroup();
+ 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()));
+ }
}
}
else if (m_aStates.top().nDestinationState == DESTINATION_FIELDRESULT)
@@ -2802,9 +2827,19 @@ int RTFDocumentImpl::popState()
if (!m_bEq)
{
sal_uInt8 sFieldEnd[] = { 0x15 };
- Mapper().startCharacterGroup();
- Mapper().text(sFieldEnd, 1);
- Mapper().endCharacterGroup();
+ 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()));
+ }
}
else
m_bEq = false;
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.hxx b/writerfilter/source/rtftok/rtfdocumentimpl.hxx
index 4370d9a8c832..80136771dd86 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.hxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.hxx
@@ -135,6 +135,7 @@ namespace writerfilter {
BUFFER_PROPS,
BUFFER_CELLEND,
BUFFER_STARTRUN,
+ BUFFER_TEXT,
BUFFER_UTEXT,
BUFFER_ENDRUN,
BUFFER_PAR