[PATCH] reformat of rtfdocumentimpl.cxx
Maxime de Roucy (via Code Review)
gerrit at gerrit.libreoffice.org
Wed Mar 27 04:15:14 PDT 2013
Hi,
I have submitted a patch for review:
https://gerrit.libreoffice.org/3084
To pull it, you can do:
git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/84/3084/1
reformat of rtfdocumentimpl.cxx
Change-Id: If79fc70f5fb8f8e48358048c03a8d39be6b197fb
---
M writerfilter/source/rtftok/rtfdocumentimpl.cxx
1 file changed, 957 insertions(+), 698 deletions(-)
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index c7fa7f1..e732688 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -1084,7 +1084,9 @@
case DESTINATION_MGROW:
m_aStates.top().aDestinationText.append(rString);
break;
- default: bRet = false; break;
+ default:
+ bRet = false;
+ break;
}
if (bRet)
return;
@@ -1694,9 +1696,11 @@
switch (nKeyword)
{
case RTF_IGNORE:
- m_bSkipUnknown = true;
- aSkip.setReset(false);
- return 0;
+ {
+ m_bSkipUnknown = true;
+ aSkip.setReset(false);
+ return 0;
+ }
break;
case RTF_PAR:
{
@@ -1922,8 +1926,10 @@
}
break;
default:
- SAL_INFO("writerfilter", "TODO handle symbol '" << lcl_RtfToString(nKeyword) << "'");
- aSkip.setParsed(false);
+ {
+ SAL_INFO("writerfilter", "TODO handle symbol '" << lcl_RtfToString(nKeyword) << "'");
+ aSkip.setParsed(false);
+ }
break;
}
return 0;
@@ -2138,11 +2144,25 @@
// Trivial paragraph flags
switch (nKeyword)
{
- case RTF_KEEP: if (m_aStates.top().pCurrentBuffer != &m_aTableBuffer) nParam = NS_sprm::LN_PFKeep; break;
- case RTF_KEEPN: if (m_aStates.top().pCurrentBuffer != &m_aTableBuffer) nParam = NS_sprm::LN_PFKeepFollow; break;
- case RTF_INTBL: m_aStates.top().pCurrentBuffer = &m_aTableBuffer; nParam = NS_sprm::LN_PFInTable; break;
- case RTF_PAGEBB: nParam = NS_sprm::LN_PFPageBreakBefore; break;
- default: break;
+ case RTF_KEEP:
+ if (m_aStates.top().pCurrentBuffer != &m_aTableBuffer)
+ nParam = NS_sprm::LN_PFKeep;
+ break;
+ case RTF_KEEPN:
+ if (m_aStates.top().pCurrentBuffer != &m_aTableBuffer)
+ nParam = NS_sprm::LN_PFKeepFollow;
+ break;
+ case RTF_INTBL:
+ {
+ m_aStates.top().pCurrentBuffer = &m_aTableBuffer;
+ nParam = NS_sprm::LN_PFInTable;
+ }
+ break;
+ case RTF_PAGEBB:
+ nParam = NS_sprm::LN_PFPageBreakBefore;
+ break;
+ default:
+ break;
}
if (nParam >= 0)
{
@@ -2177,30 +2197,36 @@
}
break;
case RTF_PARD:
- if (m_bHadPicture)
- dispatchSymbol(RTF_PAR);
- // \pard is allowed between \cell and \row, but in that case it should not reset the fact that we're inside a table.
- if (m_aStates.top().nCells == 0)
{
- m_aStates.top().aParagraphSprms = m_aDefaultState.aParagraphSprms;
- m_aStates.top().aParagraphAttributes = m_aDefaultState.aParagraphAttributes;
- if (m_aStates.top().nDestinationState != DESTINATION_SHAPETEXT)
- m_aStates.top().pCurrentBuffer = 0;
+ if (m_bHadPicture)
+ dispatchSymbol(RTF_PAR);
+ // \pard is allowed between \cell and \row, but in that case it should not reset the fact that we're inside a table.
+ if (m_aStates.top().nCells == 0)
+ {
+ m_aStates.top().aParagraphSprms = m_aDefaultState.aParagraphSprms;
+ m_aStates.top().aParagraphAttributes = m_aDefaultState.aParagraphAttributes;
+ if (m_aStates.top().nDestinationState != DESTINATION_SHAPETEXT)
+ m_aStates.top().pCurrentBuffer = 0;
+ }
+ m_aStates.top().resetFrame();
}
- m_aStates.top().resetFrame();
break;
case RTF_SECTD:
- m_aStates.top().aSectionSprms = m_aDefaultState.aSectionSprms;
- m_aStates.top().aSectionAttributes = m_aDefaultState.aSectionAttributes;
+ {
+ m_aStates.top().aSectionSprms = m_aDefaultState.aSectionSprms;
+ m_aStates.top().aSectionAttributes = m_aDefaultState.aSectionAttributes;
+ }
break;
case RTF_TROWD:
- m_aStates.top().aTableRowSprms = m_aDefaultState.aTableRowSprms;
- m_aStates.top().aTableRowSprms.set(NS_ooxml::LN_CT_TblGridBase_gridCol, RTFValue::Pointer_t(new RTFValue(-1)), false);
- m_aStates.top().aTableRowAttributes = m_aDefaultState.aTableRowAttributes;
- m_aStates.top().nCellX = 0;
- // In case the table definition is in the middle of the row
- // (invalid), make sure table definition is emitted.
- m_bNeedPap = true;
+ {
+ m_aStates.top().aTableRowSprms = m_aDefaultState.aTableRowSprms;
+ m_aStates.top().aTableRowSprms.set(NS_ooxml::LN_CT_TblGridBase_gridCol, RTFValue::Pointer_t(new RTFValue(-1)), false);
+ m_aStates.top().aTableRowAttributes = m_aDefaultState.aTableRowAttributes;
+ m_aStates.top().nCellX = 0;
+ // In case the table definition is in the middle of the row
+ // (invalid), make sure table definition is emitted.
+ m_bNeedPap = true;
+ }
break;
case RTF_WIDCTLPAR:
case RTF_NOWIDCTLPAR:
@@ -2393,12 +2419,14 @@
}
break;
case RTF_NOSUPERSUB:
- if (m_aStates.top().pCurrentBuffer == &m_aSuperBuffer)
{
- replayBuffer(m_aSuperBuffer);
- m_aStates.top().pCurrentBuffer = 0;
+ if (m_aStates.top().pCurrentBuffer == &m_aSuperBuffer)
+ {
+ replayBuffer(m_aSuperBuffer);
+ m_aStates.top().pCurrentBuffer = 0;
+ }
+ m_aStates.top().aCharacterSprms.erase(NS_ooxml::LN_EG_RPrBase_vertAlign);
}
- m_aStates.top().aCharacterSprms.erase(NS_ooxml::LN_EG_RPrBase_vertAlign);
break;
case RTF_LINEPPAGE:
case RTF_LINECONT:
@@ -2426,7 +2454,9 @@
case RTF_ENDDOC:
{
RTFValue::Pointer_t pValue(new RTFValue(NS_ooxml::LN_Value_ST_RestartNumber_eachSect));
- lcl_putNestedSprm(m_aDefaultState.aParagraphSprms, NS_ooxml::LN_EG_SectPrContents_footnotePr, NS_ooxml::LN_EG_FtnEdnNumProps_numRestart, pValue);
+ lcl_putNestedSprm(m_aDefaultState.aParagraphSprms,
+ NS_ooxml::LN_EG_SectPrContents_footnotePr,
+ NS_ooxml::LN_EG_FtnEdnNumProps_numRestart, pValue);
}
break;
case RTF_NOLINE:
@@ -2612,9 +2642,11 @@
m_aStates.top().aDrawingObject.xPropertySet->setPropertyValue("CornerRadius", uno::makeAny(sal_Int32(83)));
break;
default:
- SAL_INFO("writerfilter", "TODO handle flag '" << lcl_RtfToString(nKeyword) << "'");
- aSkip.setParsed(false);
- break;
+ {
+ SAL_INFO("writerfilter", "TODO handle flag '" << lcl_RtfToString(nKeyword) << "'");
+ aSkip.setParsed(false);
+ }
+ break;
}
return 0;
}
@@ -2698,12 +2730,38 @@
// Info group.
switch (nKeyword)
{
- case RTF_YR: m_aStates.top().nYear = nParam; nSprm = 1; break;
- case RTF_MO: m_aStates.top().nMonth = nParam; nSprm = 1; break;
- case RTF_DY: m_aStates.top().nDay = nParam; nSprm = 1; break;
- case RTF_HR: m_aStates.top().nHour = nParam; nSprm = 1; break;
- case RTF_MIN: m_aStates.top().nMinute = nParam; nSprm = 1; break;
- default: break;
+ case RTF_YR:
+ {
+ m_aStates.top().nYear = nParam;
+ nSprm = 1;
+ }
+ break;
+ case RTF_MO:
+ {
+ m_aStates.top().nMonth = nParam;
+ nSprm = 1;
+ }
+ break;
+ case RTF_DY:
+ {
+ m_aStates.top().nDay = nParam;
+ nSprm = 1;
+ }
+ break;
+ case RTF_HR:
+ {
+ m_aStates.top().nHour = nParam;
+ nSprm = 1;
+ }
+ break;
+ case RTF_MIN:
+ {
+ m_aStates.top().nMinute = nParam;
+ nSprm = 1;
+ }
+ break;
+ default:
+ break;
}
if (nSprm > 0)
return 0;
@@ -2712,11 +2770,26 @@
Id nId = 0;
switch (nKeyword)
{
- case RTF_ABSW: nId = NS_sprm::LN_PDxaWidth; break;
- case RTF_ABSH: nId = NS_sprm::LN_PWHeightAbs; break;
- case RTF_POSX: nId = NS_ooxml::LN_CT_FramePr_x; m_aStates.top().aFrame.setSprm(NS_ooxml::LN_CT_FramePr_xAlign, 0); break;
- case RTF_POSY: nId = NS_ooxml::LN_CT_FramePr_y; m_aStates.top().aFrame.setSprm(NS_ooxml::LN_CT_FramePr_yAlign, 0); break;
- default: break;
+ case RTF_ABSW:
+ nId = NS_sprm::LN_PDxaWidth;
+ break;
+ case RTF_ABSH:
+ nId = NS_sprm::LN_PWHeightAbs;
+ break;
+ case RTF_POSX:
+ {
+ nId = NS_ooxml::LN_CT_FramePr_x;
+ m_aStates.top().aFrame.setSprm(NS_ooxml::LN_CT_FramePr_xAlign, 0);
+ }
+ break;
+ case RTF_POSY:
+ {
+ nId = NS_ooxml::LN_CT_FramePr_y;
+ m_aStates.top().aFrame.setSprm(NS_ooxml::LN_CT_FramePr_yAlign, 0);
+ }
+ break;
+ default:
+ break;
}
if (nId > 0)
@@ -2776,12 +2849,15 @@
if (i == nRTFEncodings)
// not found
return 0;
+
m_aFontEncodings[m_nCurrentFontIndex] = rtl_getTextEncodingFromWindowsCodePage(aRTFEncodings[i].codepage);
}
break;
case RTF_ANSICPG:
- m_aDefaultState.nCurrentEncoding = rtl_getTextEncodingFromWindowsCodePage(nParam);
- m_aStates.top().nCurrentEncoding = rtl_getTextEncodingFromWindowsCodePage(nParam);
+ {
+ m_aDefaultState.nCurrentEncoding = rtl_getTextEncodingFromWindowsCodePage(nParam);
+ m_aStates.top().nCurrentEncoding = rtl_getTextEncodingFromWindowsCodePage(nParam);
+ }
break;
case RTF_CPG:
m_aFontEncodings[m_nCurrentFontIndex] = rtl_getTextEncodingFromWindowsCodePage(nParam);
@@ -2794,16 +2870,19 @@
}
break;
case RTF_S:
- m_aStates.top().nCurrentStyleIndex = nParam;
- if (m_aStates.top().nDestinationState == DESTINATION_STYLESHEET || m_aStates.top().nDestinationState == DESTINATION_STYLEENTRY)
{
- m_nCurrentStyleIndex = nParam;
- m_aStates.top().aTableAttributes.set(NS_rtf::LN_ISTD, pIntValue);
- RTFValue::Pointer_t pValue(new RTFValue(1));
- m_aStates.top().aTableAttributes.set(NS_rtf::LN_SGC, pValue); // paragraph style
+ m_aStates.top().nCurrentStyleIndex = nParam;
+
+ if (m_aStates.top().nDestinationState == DESTINATION_STYLESHEET || m_aStates.top().nDestinationState == DESTINATION_STYLEENTRY)
+ {
+ m_nCurrentStyleIndex = nParam;
+ m_aStates.top().aTableAttributes.set(NS_rtf::LN_ISTD, pIntValue);
+ RTFValue::Pointer_t pValue(new RTFValue(1));
+ m_aStates.top().aTableAttributes.set(NS_rtf::LN_SGC, pValue); // paragraph style
+ }
+ else
+ m_aStates.top().aParagraphAttributes.set(NS_rtf::LN_ISTD, pIntValue);
}
- else
- m_aStates.top().aParagraphAttributes.set(NS_rtf::LN_ISTD, pIntValue);
break;
case RTF_CS:
if (m_aStates.top().nDestinationState == DESTINATION_STYLESHEET || m_aStates.top().nDestinationState == DESTINATION_STYLEENTRY)
@@ -2817,13 +2896,13 @@
m_aStates.top().aCharacterAttributes.set(NS_rtf::LN_ISTD, pIntValue);
break;
case RTF_DEFF:
- m_aDefaultState.aCharacterSprms.set(NS_sprm::LN_CRgFtc0, pIntValue);
+ m_aDefaultState.aCharacterSprms.set(NS_sprm::LN_CRgFtc0, pIntValue);
break;
case RTF_DEFLANG:
- m_aDefaultState.aCharacterSprms.set(NS_sprm::LN_CRgLid0, pIntValue);
+ m_aDefaultState.aCharacterSprms.set(NS_sprm::LN_CRgLid0, pIntValue);
break;
case RTF_ADEFLANG:
- m_aDefaultState.aCharacterSprms.set(NS_sprm::LN_CLidBi, pIntValue);
+ m_aDefaultState.aCharacterSprms.set(NS_sprm::LN_CLidBi, pIntValue);
break;
case RTF_CHCBPAT:
{
@@ -3091,16 +3170,16 @@
}
break;
case RTF_COLS:
- lcl_putNestedAttribute(m_aStates.top().aSectionSprms,
- NS_ooxml::LN_EG_SectPrContents_cols, NS_ooxml::LN_CT_Columns_num, pIntValue);
+ lcl_putNestedAttribute(m_aStates.top().aSectionSprms,
+ NS_ooxml::LN_EG_SectPrContents_cols, NS_ooxml::LN_CT_Columns_num, pIntValue);
break;
case RTF_COLSX:
- lcl_putNestedAttribute(m_aStates.top().aSectionSprms,
- NS_ooxml::LN_EG_SectPrContents_cols, NS_ooxml::LN_CT_Columns_space, pIntValue);
+ lcl_putNestedAttribute(m_aStates.top().aSectionSprms,
+ NS_ooxml::LN_EG_SectPrContents_cols, NS_ooxml::LN_CT_Columns_space, pIntValue);
break;
case RTF_COLNO:
- lcl_putNestedSprm(m_aStates.top().aSectionSprms,
- NS_ooxml::LN_EG_SectPrContents_cols, NS_ooxml::LN_CT_Columns_col, pIntValue);
+ lcl_putNestedSprm(m_aStates.top().aSectionSprms,
+ NS_ooxml::LN_EG_SectPrContents_cols, NS_ooxml::LN_CT_Columns_col, pIntValue);
break;
case RTF_COLW:
case RTF_COLSR:
@@ -3273,10 +3352,12 @@
// Ignore this for now, later the RTF writer version could be used to add hacks for older buggy writers.
break;
case RTF_FTNSTART:
- lcl_putNestedSprm(m_aDefaultState.aParagraphSprms, NS_ooxml::LN_EG_SectPrContents_footnotePr, NS_ooxml::LN_EG_FtnEdnNumProps_numStart, pIntValue);
+ lcl_putNestedSprm(m_aDefaultState.aParagraphSprms,
+ NS_ooxml::LN_EG_SectPrContents_footnotePr, NS_ooxml::LN_EG_FtnEdnNumProps_numStart, pIntValue);
break;
case RTF_AFTNSTART:
- lcl_putNestedSprm(m_aDefaultState.aParagraphSprms, NS_ooxml::LN_EG_SectPrContents_endnotePr, NS_ooxml::LN_EG_FtnEdnNumProps_numStart, pIntValue);
+ lcl_putNestedSprm(m_aDefaultState.aParagraphSprms,
+ NS_ooxml::LN_EG_SectPrContents_endnotePr, NS_ooxml::LN_EG_FtnEdnNumProps_numStart, pIntValue);
break;
case RTF_DFRMTXTX:
m_aStates.top().aFrame.setSprm(NS_sprm::LN_PDxaFromText, nParam);
@@ -3285,8 +3366,10 @@
m_aStates.top().aFrame.setSprm(NS_sprm::LN_PDyaFromText, nParam);
break;
case RTF_DXFRTEXT:
- m_aStates.top().aFrame.setSprm(NS_sprm::LN_PDxaFromText, nParam);
- m_aStates.top().aFrame.setSprm(NS_sprm::LN_PDyaFromText, nParam);
+ {
+ m_aStates.top().aFrame.setSprm(NS_sprm::LN_PDxaFromText, nParam);
+ m_aStates.top().aFrame.setSprm(NS_sprm::LN_PDyaFromText, nParam);
+ }
break;
case RTF_FLYVERT:
{
@@ -3342,8 +3425,10 @@
m_aSettingsTableAttributes.set(NS_ooxml::LN_CT_Zoom_percent, pIntValue);
break;
case RTF_BIN:
- m_aStates.top().nInternalState = INTERNAL_BIN;
- m_aStates.top().nBinaryToRead = nParam;
+ {
+ m_aStates.top().nInternalState = INTERNAL_BIN;
+ m_aStates.top().nBinaryToRead = nParam;
+ }
break;
case RTF_DPLINECOR:
m_aStates.top().aDrawingObject.nLineColorR = nParam; m_aStates.top().aDrawingObject.bHasLineColor = true;
@@ -3364,11 +3449,13 @@
m_aStates.top().aDrawingObject.nFillColorB = nParam; m_aStates.top().aDrawingObject.bHasFillColor = true;
break;
case RTF_LI:
- m_aStates.top().aParagraphSprms.set(NS_sprm::LN_PDxaLeft, pIntValue);
- // It turns out \li should reset the \fi inherited from the stylesheet.
- // So set the direct formatting to zero, if we don't have such direct formatting yet.
- if (!m_aStates.top().aParagraphSprms.find(NS_sprm::LN_PDxaLeft1).get())
- m_aStates.top().aParagraphSprms.set(NS_sprm::LN_PDxaLeft1, RTFValue::Pointer_t(new RTFValue(0)));
+ {
+ m_aStates.top().aParagraphSprms.set(NS_sprm::LN_PDxaLeft, pIntValue);
+ // It turns out \li should reset the \fi inherited from the stylesheet.
+ // So set the direct formatting to zero, if we don't have such direct formatting yet.
+ if (!m_aStates.top().aParagraphSprms.find(NS_sprm::LN_PDxaLeft1).get())
+ m_aStates.top().aParagraphSprms.set(NS_sprm::LN_PDxaLeft1, RTFValue::Pointer_t(new RTFValue(0)));
+ }
break;
case RTF_CLSHDNG:
{
@@ -3401,7 +3488,8 @@
default: break;
}
if (nValue != -1)
- lcl_putNestedAttribute(m_aStates.top().aTableCellSprms, NS_ooxml::LN_CT_TcPrBase_shd, NS_ooxml::LN_CT_Shd_val, RTFValue::Pointer_t(new RTFValue(nValue)));
+ lcl_putNestedAttribute(m_aStates.top().aTableCellSprms,
+ NS_ooxml::LN_CT_TcPrBase_shd, NS_ooxml::LN_CT_Shd_val, RTFValue::Pointer_t(new RTFValue(nValue)));
}
break;
case RTF_DODHGT:
@@ -3417,8 +3505,10 @@
case RTF_DPPTX:
{
RTFDrawingObject& rDrawingObject = m_aStates.top().aDrawingObject;
+
if (!rDrawingObject.aPolyLinePoints.hasElements())
dispatchValue(RTF_DPPOLYCOUNT, 2);
+
rDrawingObject.aPolyLinePoints[rDrawingObject.aPolyLinePoints.getLength() - rDrawingObject.nPolyLineCount].X = TWIP_TO_MM100(nParam);
}
break;
@@ -3447,8 +3537,10 @@
}
break;
default:
- SAL_INFO("writerfilter", "TODO handle value '" << lcl_RtfToString(nKeyword) << "'");
- aSkip.setParsed(false);
+ {
+ SAL_INFO("writerfilter", "TODO handle value '" << lcl_RtfToString(nKeyword) << "'");
+ aSkip.setParsed(false);
+ }
break;
}
return 0;
@@ -3544,8 +3636,10 @@
}
break;
default:
- SAL_INFO("writerfilter", "TODO handle toggle '" << lcl_RtfToString(nKeyword) << "'");
- aSkip.setParsed(false);
+ {
+ SAL_INFO("writerfilter", "TODO handle toggle '" << lcl_RtfToString(nKeyword) << "'");
+ aSkip.setParsed(false);
+ }
break;
}
return 0;
@@ -3572,29 +3666,34 @@
switch (m_aStates.top().nDestinationState)
{
- case DESTINATION_FONTTABLE: m_aStates.top().nDestinationState = DESTINATION_FONTENTRY; break;
- case DESTINATION_STYLESHEET: m_aStates.top().nDestinationState = DESTINATION_STYLEENTRY; break;
- case DESTINATION_FIELDRESULT:
- case DESTINATION_SHAPETEXT:
- case DESTINATION_FORMFIELD:
- m_aStates.top().nDestinationState = DESTINATION_NORMAL;
- break;
- case DESTINATION_MNUM:
- case DESTINATION_MDEN:
- case DESTINATION_ME:
- case DESTINATION_MFNAME:
- case DESTINATION_MLIM:
- case DESTINATION_MSUB:
- case DESTINATION_MSUP:
- case DESTINATION_MDEG:
- m_aStates.top().nDestinationState = DESTINATION_MR;
- break;
- case DESTINATION_FIELDINSTRUCTION:
- m_aStates.top().nDestinationState = DESTINATION_NORMAL;
- break;
- case DESTINATION_REVISIONTABLE: m_aStates.top().nDestinationState = DESTINATION_REVISIONENTRY; break;
- case DESTINATION_MOMATH: m_aStates.top().nDestinationState = DESTINATION_MR; break;
- default: break;
+ case DESTINATION_FONTTABLE:
+ m_aStates.top().nDestinationState = DESTINATION_FONTENTRY;
+ break;
+ case DESTINATION_STYLESHEET:
+ m_aStates.top().nDestinationState = DESTINATION_STYLEENTRY;
+ break;
+ case DESTINATION_FIELDRESULT:
+ case DESTINATION_SHAPETEXT:
+ case DESTINATION_FORMFIELD:
+ case DESTINATION_FIELDINSTRUCTION:
+ m_aStates.top().nDestinationState = DESTINATION_NORMAL;
+ break;
+ case DESTINATION_MNUM:
+ case DESTINATION_MDEN:
+ case DESTINATION_ME:
+ case DESTINATION_MFNAME:
+ case DESTINATION_MLIM:
+ case DESTINATION_MSUB:
+ case DESTINATION_MSUP:
+ case DESTINATION_MDEG:
+ case DESTINATION_MOMATH:
+ m_aStates.top().nDestinationState = DESTINATION_MR;
+ break;
+ case DESTINATION_REVISIONTABLE:
+ m_aStates.top().nDestinationState = DESTINATION_REVISIONENTRY;
+ break;
+ default:
+ break;
}
return 0;
@@ -3652,462 +3751,596 @@
checkUnicode();
RTFParserState aState(m_aStates.top());
m_bWasInFrame = aState.aFrame.inFrame();
- sal_Int32 nMathToken = 0;
- switch (m_aStates.top().nDestinationState)
+ switch (aState.nDestinationState)
{
- case DESTINATION_FONTTABLE:
- {
- writerfilter::Reference<Table>::Pointer_t const pTable(new RTFReferenceTable(m_aFontTableEntries));
- Mapper().table(NS_rtf::LN_FONTTABLE, pTable);
- }
- break;
- case DESTINATION_STYLESHEET:
- {
- writerfilter::Reference<Table>::Pointer_t const pTable(new RTFReferenceTable(m_aStyleTableEntries));
- Mapper().table(NS_rtf::LN_STYLESHEET, pTable);
- }
- break;
- case DESTINATION_LISTOVERRIDETABLE:
- {
- RTFSprms aListTableAttributes;
- writerfilter::Reference<Properties>::Pointer_t const pProp(new RTFReferenceProperties(aListTableAttributes, m_aListTableSprms));
- RTFReferenceTable::Entries_t aListTableEntries;
- aListTableEntries.insert(make_pair(0, pProp));
- writerfilter::Reference<Table>::Pointer_t const pTable(new RTFReferenceTable(aListTableEntries));
- Mapper().table(NS_rtf::LN_LISTTABLE, pTable);
- }
- break;
- case DESTINATION_LISTENTRY:
- for (RTFSprms::Iterator_t i = aState.aListLevelEntries.begin(); i != aState.aListLevelEntries.end(); ++i)
- aState.aTableSprms.set(i->first, i->second, false);
- break;
- case DESTINATION_FIELDINSTRUCTION:
- {
- RTFValue::Pointer_t pValue(new RTFValue(m_aFormfieldAttributes, m_aFormfieldSprms));
- RTFSprms aFFAttributes;
- RTFSprms aFFSprms;
- aFFSprms.set(NS_ooxml::LN_ffdata, pValue);
- writerfilter::Reference<Properties>::Pointer_t const pProperties(new RTFReferenceProperties(aFFAttributes, aFFSprms));
- Mapper().props(pProperties);
- m_aFormfieldAttributes.clear();
- m_aFormfieldSprms.clear();
- }
- singleChar(0x14);
- break;
- case DESTINATION_FIELDRESULT:
- singleChar(0x15);
- break;
- case DESTINATION_LEVELTEXT:
- {
- OUString aStr = m_aStates.top().aDestinationText.makeStringAndClear();
-
- // The first character is the length of the string (the rest should be ignored).
- sal_Int32 nLength(aStr.toChar());
- OUString aValue;
- if (nLength <= aStr.getLength())
- aValue = aStr.copy(1, nLength);
- else
- aValue = aStr;
- RTFValue::Pointer_t pValue(new RTFValue(aValue, true));
- aState.aTableAttributes.set(NS_ooxml::LN_CT_LevelText_val, pValue);
- }
- break;
- case DESTINATION_LEVELNUMBERS:
- {
- RTFSprms& rAttributes = aState.aTableSprms.find(NS_ooxml::LN_CT_Lvl_lvlText)->getAttributes();
- RTFValue::Pointer_t pValue = rAttributes.find(NS_ooxml::LN_CT_LevelText_val);
- OUString aOrig = pValue->getString();
-
- OUStringBuffer aBuf;
- sal_Int32 nReplaces = 1;
- for (int i = 0; i < aOrig.getLength(); i++)
- {
- if (std::find(m_aStates.top().aLevelNumbers.begin(), m_aStates.top().aLevelNumbers.end(), i+1)
- != m_aStates.top().aLevelNumbers.end())
+ case DESTINATION_FONTTABLE:
{
- aBuf.append(sal_Unicode('%'));
- // '1.1.1' -> '%1.%2.%3', but '1.' (with '2.' prefix omitted) is %2.
- aBuf.append(sal_Int32(nReplaces++ + m_aStates.top().nListLevelNum + 1 - m_aStates.top().aLevelNumbers.size()));
+ writerfilter::Reference<Table>::Pointer_t const pTable(new RTFReferenceTable(m_aFontTableEntries));
+ Mapper().table(NS_rtf::LN_FONTTABLE, pTable);
}
- else
- aBuf.append(aOrig.copy(i, 1));
- }
- pValue->setString(aBuf.makeStringAndClear());
- }
- break;
- case DESTINATION_SHAPEPROPERTYNAME:
- case DESTINATION_SHAPEPROPERTYVALUE:
- case DESTINATION_SHAPEPROPERTY:
- {
- if (m_aStates.top().nDestinationState == DESTINATION_SHAPEPROPERTYNAME)
- aState.aShape.aProperties.push_back(make_pair(m_aStates.top().aDestinationText.makeStringAndClear(), OUString()));
- else if (m_aStates.top().nDestinationState == DESTINATION_SHAPEPROPERTYVALUE && aState.aShape.aProperties.size())
- aState.aShape.aProperties.back().second = m_aStates.top().aDestinationText.makeStringAndClear();
- }
- break;
- case DESTINATION_PICPROP:
- case DESTINATION_SHAPEINSTRUCTION:
- if (!m_bObject)
- m_pSdrImport->resolve(m_aStates.top().aShape);
- break;
- case DESTINATION_BOOKMARKSTART:
- {
- OUString aStr = m_aStates.top().aDestinationText.makeStringAndClear();
- int nPos = m_aBookmarks.size();
- m_aBookmarks[aStr] = nPos;
- Mapper().props(lcl_getBookmarkProperties(nPos, aStr));
- }
- break;
- case DESTINATION_BOOKMARKEND:
- Mapper().props(lcl_getBookmarkProperties(m_aBookmarks[m_aStates.top().aDestinationText.makeStringAndClear()]));
- break;
- case DESTINATION_PICT:
- resolvePict(true);
- break;
- case DESTINATION_FORMFIELDNAME:
- {
- RTFValue::Pointer_t pValue(new RTFValue(m_aStates.top().aDestinationText.makeStringAndClear()));
- m_aFormfieldSprms.set(NS_ooxml::LN_CT_FFData_name, pValue);
- }
- break;
- case DESTINATION_FORMFIELDLIST:
- {
- RTFValue::Pointer_t pValue(new RTFValue(m_aStates.top().aDestinationText.makeStringAndClear()));
- m_aFormfieldSprms.set(NS_ooxml::LN_CT_FFDDList_listEntry, pValue);
- }
- break;
- case DESTINATION_DATAFIELD:
- {
- OString aStr = OUStringToOString(m_aStates.top().aDestinationText.makeStringAndClear(), m_aStates.top().nCurrentEncoding);
- // decode hex dump
- OStringBuffer aBuf;
- const char *str = aStr.getStr();
- int b = 0, count = 2;
- for (int i = 0; i < aStr.getLength(); ++i)
- {
- char ch = str[i];
- if (ch != 0x0d && ch != 0x0a)
- {
- b = b << 4;
- sal_Int8 parsed = m_pTokenizer->asHex(ch);
- if (parsed == -1)
- return ERROR_HEX_INVALID;
- b += parsed;
- count--;
- if (!count)
- {
- aBuf.append((char)b);
- count = 2;
- b = 0;
- }
- }
- }
- aStr = aBuf.makeStringAndClear();
- // ignore the first bytes
- if (aStr.getLength() > 8)
- aStr = aStr.copy(8);
- // extract name
- int nLength = aStr.toChar();
- aStr = aStr.copy(1);
- OString aName = aStr.copy(0, nLength);
- aStr = aStr.copy(nLength+1); // zero-terminated string
- // extract default text
- nLength = aStr.toChar();
- aStr = aStr.copy(1);
- OString aDefaultText = aStr.copy(0, nLength);
- RTFValue::Pointer_t pNValue(new RTFValue(OStringToOUString(aName, m_aStates.top().nCurrentEncoding)));
- m_aFormfieldSprms.set(NS_ooxml::LN_CT_FFData_name, pNValue);
- RTFValue::Pointer_t pDValue(new RTFValue(OStringToOUString(aDefaultText, m_aStates.top().nCurrentEncoding)));
- m_aFormfieldSprms.set(NS_ooxml::LN_CT_FFTextInput_default, pDValue);
-
- m_bFormField = false;
- }
- break;
- case DESTINATION_CREATIONTIME:
- if (m_xDocumentProperties.is())
- m_xDocumentProperties->setCreationDate(lcl_getDateTime(m_aStates));
- break;
- case DESTINATION_REVISIONTIME:
- if (m_xDocumentProperties.is())
- m_xDocumentProperties->setModificationDate(lcl_getDateTime(m_aStates));
- break;
- case DESTINATION_PRINTTIME:
- if (m_xDocumentProperties.is())
- m_xDocumentProperties->setPrintDate(lcl_getDateTime(m_aStates));
- break;
- case DESTINATION_AUTHOR:
- if (m_xDocumentProperties.is())
- m_xDocumentProperties->setAuthor(m_aStates.top().aDestinationText.makeStringAndClear());
- break;
- case DESTINATION_KEYWORDS:
- if (m_xDocumentProperties.is())
- m_xDocumentProperties->setKeywords(comphelper::string::convertCommaSeparated(m_aStates.top().aDestinationText.makeStringAndClear()));
- break;
- case DESTINATION_COMMENT:
- if (m_xDocumentProperties.is())
- m_xDocumentProperties->setGenerator(m_aStates.top().aDestinationText.makeStringAndClear());
- break;
- case DESTINATION_SUBJECT:
- if (m_xDocumentProperties.is())
- m_xDocumentProperties->setSubject(m_aStates.top().aDestinationText.makeStringAndClear());
- break;
- case DESTINATION_DOCCOMM:
- if (m_xDocumentProperties.is())
- m_xDocumentProperties->setDescription(m_aStates.top().aDestinationText.makeStringAndClear());
- break;
- case DESTINATION_OPERATOR:
- case DESTINATION_COMPANY:
- {
- OUString aName = m_aStates.top().nDestinationState == DESTINATION_OPERATOR ? OUString("Operator") : OUString("Company");
- if (m_xDocumentProperties.is())
- {
- uno::Reference<beans::XPropertyContainer> xUserDefinedProperties = m_xDocumentProperties->getUserDefinedProperties();
- xUserDefinedProperties->addProperty(aName, beans::PropertyAttribute::REMOVABLE,
- uno::makeAny(m_aStates.top().aDestinationText.makeStringAndClear()));
- }
- }
- break;
- case DESTINATION_OBJDATA:
- {
- m_pObjectData.reset(new SvMemoryStream());
- int b = 0, count = 2;
-
- // Feed the destination text to a stream.
- OString aStr = OUStringToOString(m_aStates.top().aDestinationText.makeStringAndClear(), RTL_TEXTENCODING_ASCII_US);
- const char *str = aStr.getStr();
- for (int i = 0; i < aStr.getLength(); ++i)
- {
- char ch = str[i];
- if (ch != 0x0d && ch != 0x0a)
- {
- b = b << 4;
- sal_Int8 parsed = m_pTokenizer->asHex(ch);
- if (parsed == -1)
- return ERROR_HEX_INVALID;
- b += parsed;
- count--;
- if (!count)
- {
- *m_pObjectData << (char)b;
- count = 2;
- b = 0;
- }
- }
- }
-
- if (m_pObjectData->Tell())
- {
- m_pObjectData->Seek(0);
-
- // Skip ObjectHeader
- sal_uInt32 nData;
- *m_pObjectData >> nData; // OLEVersion
- *m_pObjectData >> nData; // FormatID
- *m_pObjectData >> nData; // ClassName
- m_pObjectData->SeekRel(nData);
- *m_pObjectData >> nData; // TopicName
- m_pObjectData->SeekRel(nData);
- *m_pObjectData >> nData; // ItemName
- m_pObjectData->SeekRel(nData);
- *m_pObjectData >> nData; // NativeDataSize
- }
-
- uno::Reference<io::XInputStream> xInputStream(new utl::OInputStreamWrapper(m_pObjectData.get()));
- RTFValue::Pointer_t pStreamValue(new RTFValue(xInputStream));
-
- RTFSprms aOLEAttributes;
- aOLEAttributes.set(NS_ooxml::LN_inputstream, pStreamValue);
- RTFValue::Pointer_t pValue(new RTFValue(aOLEAttributes));
- m_aObjectSprms.set(NS_ooxml::LN_OLEObject_OLEObject, pValue);
- }
- break;
- case DESTINATION_OBJECT:
- {
- if (!m_bObject)
- {
- // if the object is in a special container we will use the \result
- // element instead of the \objdata
- // (see RTF_OBJECT in RTFDocumentImpl::dispatchDestination)
break;
- }
+ case DESTINATION_STYLESHEET:
+ {
+ writerfilter::Reference<Table>::Pointer_t const pTable(new RTFReferenceTable(m_aStyleTableEntries));
+ Mapper().table(NS_rtf::LN_STYLESHEET, pTable);
+ }
+ break;
+ case DESTINATION_LISTOVERRIDETABLE:
+ {
+ RTFSprms aListTableAttributes;
+ writerfilter::Reference<Properties>::Pointer_t const pProp(new RTFReferenceProperties(aListTableAttributes, m_aListTableSprms));
+ RTFReferenceTable::Entries_t aListTableEntries;
+ aListTableEntries.insert(make_pair(0, pProp));
+ writerfilter::Reference<Table>::Pointer_t const pTable(new RTFReferenceTable(aListTableEntries));
+ Mapper().table(NS_rtf::LN_LISTTABLE, pTable);
+ }
+ break;
+ case DESTINATION_LISTENTRY:
+ for (RTFSprms::Iterator_t i = aState.aListLevelEntries.begin(); i != aState.aListLevelEntries.end(); ++i)
+ aState.aTableSprms.set(i->first, i->second, false);
+ break;
+ case DESTINATION_FIELDINSTRUCTION:
+ {
+ RTFValue::Pointer_t pValue(new RTFValue(m_aFormfieldAttributes, m_aFormfieldSprms));
+ RTFSprms aFFAttributes;
+ RTFSprms aFFSprms;
+ aFFSprms.set(NS_ooxml::LN_ffdata, pValue);
+ writerfilter::Reference<Properties>::Pointer_t const pProperties(new RTFReferenceProperties(aFFAttributes, aFFSprms));
+ Mapper().props(pProperties);
+ m_aFormfieldAttributes.clear();
+ m_aFormfieldSprms.clear();
+ singleChar(0x14);
+ }
+ break;
+ case DESTINATION_FIELDRESULT:
+ singleChar(0x15);
+ break;
+ case DESTINATION_LEVELTEXT:
+ {
+ OUString aStr = m_aStates.top().aDestinationText.makeStringAndClear();
- RTFSprms aObjAttributes;
- RTFSprms aObjSprms;
- RTFValue::Pointer_t pValue(new RTFValue(m_aObjectAttributes, m_aObjectSprms));
- aObjSprms.set(NS_ooxml::LN_object, pValue);
- writerfilter::Reference<Properties>::Pointer_t const pProperties(new RTFReferenceProperties(aObjAttributes, aObjSprms));
- uno::Reference<drawing::XShape> xShape;
- RTFValue::Pointer_t pShape = m_aObjectAttributes.find(NS_ooxml::LN_shape);
- OSL_ASSERT(pShape.get());
- if (pShape.get())
- pShape->getAny() >>= xShape;
- Mapper().startShape(xShape);
- Mapper().props(pProperties);
- Mapper().endShape();
- m_aObjectAttributes.clear();
- m_aObjectSprms.clear();
- m_bObject = false;
- }
- break;
- case DESTINATION_ANNOTATIONDATE:
- {
- OUString aStr(OStringToOUString(lcl_DTTM22OString(m_aStates.top().aDestinationText.makeStringAndClear().toInt32()),
- m_aStates.top().nCurrentEncoding));
- RTFValue::Pointer_t pValue(new RTFValue(aStr));
- RTFSprms aAnnAttributes;
- aAnnAttributes.set(NS_ooxml::LN_CT_TrackChange_date, pValue);
- writerfilter::Reference<Properties>::Pointer_t const pProperties(new RTFReferenceProperties(aAnnAttributes));
- Mapper().props(pProperties);
- }
- break;
- case DESTINATION_ANNOTATIONAUTHOR:
- m_aAuthor = m_aStates.top().aDestinationText.makeStringAndClear();
- break;
- case DESTINATION_ATNID:
- m_aAuthorInitials = m_aStates.top().aDestinationText.makeStringAndClear();
- break;
- case DESTINATION_FALT:
- {
- OUString aStr(m_aStates.top().aDestinationText.makeStringAndClear());
- RTFValue::Pointer_t pValue(new RTFValue(aStr));
- aState.aTableSprms.set(NS_ooxml::LN_CT_Font_altName, pValue);
- }
- break;
- case DESTINATION_DRAWINGOBJECT:
- if (m_aStates.top().aDrawingObject.xShape.is())
- {
- RTFDrawingObject& rDrawing = m_aStates.top().aDrawingObject;
- uno::Reference<drawing::XShape> xShape(rDrawing.xShape);
- uno::Reference<beans::XPropertySet> xPropertySet(rDrawing.xPropertySet);
+ // The first character is the length of the string (the rest should be ignored).
+ sal_Int32 nLength(aStr.toChar());
+ OUString aValue;
+ if (nLength <= aStr.getLength())
+ aValue = aStr.copy(1, nLength);
+ else
+ aValue = aStr;
+ RTFValue::Pointer_t pValue(new RTFValue(aValue, true));
+ aState.aTableAttributes.set(NS_ooxml::LN_CT_LevelText_val, pValue);
+ }
+ break;
+ case DESTINATION_LEVELNUMBERS:
+ {
+ RTFSprms& rAttributes = aState.aTableSprms.find(NS_ooxml::LN_CT_Lvl_lvlText)->getAttributes();
+ RTFValue::Pointer_t pValue = rAttributes.find(NS_ooxml::LN_CT_LevelText_val);
+ OUString aOrig = pValue->getString();
- uno::Reference<lang::XServiceInfo> xServiceInfo(xShape, uno::UNO_QUERY);
- bool bTextFrame = xServiceInfo->supportsService("com.sun.star.text.TextFrame");
+ OUStringBuffer aBuf;
+ sal_Int32 nReplaces = 1;
+ for (int i = 0; i < aOrig.getLength(); i++)
+ {
+ if (std::find(m_aStates.top().aLevelNumbers.begin(), m_aStates.top().aLevelNumbers.end(), i+1)
+ != m_aStates.top().aLevelNumbers.end())
+ {
+ aBuf.append(sal_Unicode('%'));
+ // '1.1.1' -> '%1.%2.%3', but '1.' (with '2.' prefix omitted) is %2.
+ aBuf.append(sal_Int32(nReplaces++ + m_aStates.top().nListLevelNum + 1 - m_aStates.top().aLevelNumbers.size()));
+ }
+ else
+ aBuf.append(aOrig.copy(i, 1));
+ }
- if (bTextFrame)
- {
- xPropertySet->setPropertyValue("HoriOrientPosition", uno::makeAny((sal_Int32)rDrawing.nLeft));
- xPropertySet->setPropertyValue("VertOrientPosition", uno::makeAny((sal_Int32)rDrawing.nTop));
- }
- else
- {
- xShape->setPosition(awt::Point(rDrawing.nLeft, rDrawing.nTop));
- }
- xShape->setSize(awt::Size(rDrawing.nRight, rDrawing.nBottom));
+ pValue->setString(aBuf.makeStringAndClear());
+ }
+ break;
+ case DESTINATION_SHAPEPROPERTYNAME:
+ case DESTINATION_SHAPEPROPERTYVALUE:
+ case DESTINATION_SHAPEPROPERTY:
+ {
+ if (m_aStates.top().nDestinationState == DESTINATION_SHAPEPROPERTYNAME)
+ aState.aShape.aProperties.push_back(make_pair(m_aStates.top().aDestinationText.makeStringAndClear(), OUString()));
+ else if (m_aStates.top().nDestinationState == DESTINATION_SHAPEPROPERTYVALUE && aState.aShape.aProperties.size())
+ aState.aShape.aProperties.back().second = m_aStates.top().aDestinationText.makeStringAndClear();
+ }
+ break;
+ case DESTINATION_PICPROP:
+ case DESTINATION_SHAPEINSTRUCTION:
+ if (!m_bObject)
+ m_pSdrImport->resolve(m_aStates.top().aShape);
+ break;
+ case DESTINATION_BOOKMARKSTART:
+ {
+ OUString aStr = m_aStates.top().aDestinationText.makeStringAndClear();
+ int nPos = m_aBookmarks.size();
+ m_aBookmarks[aStr] = nPos;
+ Mapper().props(lcl_getBookmarkProperties(nPos, aStr));
+ }
+ break;
+ case DESTINATION_BOOKMARKEND:
+ Mapper().props(lcl_getBookmarkProperties(m_aBookmarks[m_aStates.top().aDestinationText.makeStringAndClear()]));
+ break;
+ case DESTINATION_PICT:
+ resolvePict(true);
+ break;
+ case DESTINATION_FORMFIELDNAME:
+ {
+ RTFValue::Pointer_t pValue(new RTFValue(m_aStates.top().aDestinationText.makeStringAndClear()));
+ m_aFormfieldSprms.set(NS_ooxml::LN_CT_FFData_name, pValue);
+ }
+ break;
+ case DESTINATION_FORMFIELDLIST:
+ {
+ RTFValue::Pointer_t pValue(new RTFValue(m_aStates.top().aDestinationText.makeStringAndClear()));
+ m_aFormfieldSprms.set(NS_ooxml::LN_CT_FFDDList_listEntry, pValue);
+ }
+ break;
+ case DESTINATION_DATAFIELD:
+ {
+ OString aStr = OUStringToOString(m_aStates.top().aDestinationText.makeStringAndClear(), m_aStates.top().nCurrentEncoding);
+ // decode hex dump
+ OStringBuffer aBuf;
+ const char *str = aStr.getStr();
+ int b = 0, count = 2;
+ for (int i = 0; i < aStr.getLength(); ++i)
+ {
+ char ch = str[i];
+ if (ch != 0x0d && ch != 0x0a)
+ {
+ b = b << 4;
+ sal_Int8 parsed = m_pTokenizer->asHex(ch);
+ if (parsed == -1)
+ return ERROR_HEX_INVALID;
+ b += parsed;
+ count--;
+ if (!count)
+ {
+ aBuf.append((char)b);
+ count = 2;
+ b = 0;
+ }
+ }
+ }
+ aStr = aBuf.makeStringAndClear();
+ // ignore the first bytes
+ if (aStr.getLength() > 8)
+ aStr = aStr.copy(8);
+ // extract name
+ int nLength = aStr.toChar();
+ aStr = aStr.copy(1);
+ OString aName = aStr.copy(0, nLength);
+ aStr = aStr.copy(nLength+1); // zero-terminated string
+ // extract default text
+ nLength = aStr.toChar();
+ aStr = aStr.copy(1);
+ OString aDefaultText = aStr.copy(0, nLength);
+ RTFValue::Pointer_t pNValue(new RTFValue(OStringToOUString(aName, m_aStates.top().nCurrentEncoding)));
+ m_aFormfieldSprms.set(NS_ooxml::LN_CT_FFData_name, pNValue);
+ RTFValue::Pointer_t pDValue(new RTFValue(OStringToOUString(aDefaultText, m_aStates.top().nCurrentEncoding)));
+ m_aFormfieldSprms.set(NS_ooxml::LN_CT_FFTextInput_default, pDValue);
- if (rDrawing.bHasLineColor)
- xPropertySet->setPropertyValue("LineColor", uno::makeAny(sal_uInt32((rDrawing.nLineColorR<<16) + (rDrawing.nLineColorG<<8) + rDrawing.nLineColorB)));
- if (rDrawing.bHasFillColor)
- xPropertySet->setPropertyValue("FillColor", uno::makeAny(sal_uInt32((rDrawing.nFillColorR<<16) + (rDrawing.nFillColorG<<8) + rDrawing.nFillColorB)));
- else if (!bTextFrame)
- // If there is no fill, the Word default is 100% transparency.
- xPropertySet->setPropertyValue("FillTransparence", uno::makeAny(sal_Int32(100)));
+ m_bFormField = false;
+ }
+ break;
+ case DESTINATION_CREATIONTIME:
+ if (m_xDocumentProperties.is())
+ m_xDocumentProperties->setCreationDate(lcl_getDateTime(m_aStates));
+ break;
+ case DESTINATION_REVISIONTIME:
+ if (m_xDocumentProperties.is())
+ m_xDocumentProperties->setModificationDate(lcl_getDateTime(m_aStates));
+ break;
+ case DESTINATION_PRINTTIME:
+ if (m_xDocumentProperties.is())
+ m_xDocumentProperties->setPrintDate(lcl_getDateTime(m_aStates));
+ break;
+ case DESTINATION_AUTHOR:
+ if (m_xDocumentProperties.is())
+ m_xDocumentProperties->setAuthor(m_aStates.top().aDestinationText.makeStringAndClear());
+ break;
+ case DESTINATION_KEYWORDS:
+ if (m_xDocumentProperties.is())
+ m_xDocumentProperties->setKeywords(comphelper::string::convertCommaSeparated(m_aStates.top().aDestinationText.makeStringAndClear()));
+ break;
+ case DESTINATION_COMMENT:
+ if (m_xDocumentProperties.is())
+ m_xDocumentProperties->setGenerator(m_aStates.top().aDestinationText.makeStringAndClear());
+ break;
+ case DESTINATION_SUBJECT:
+ if (m_xDocumentProperties.is())
+ m_xDocumentProperties->setSubject(m_aStates.top().aDestinationText.makeStringAndClear());
+ break;
+ case DESTINATION_DOCCOMM:
+ if (m_xDocumentProperties.is())
+ m_xDocumentProperties->setDescription(m_aStates.top().aDestinationText.makeStringAndClear());
+ break;
+ case DESTINATION_OPERATOR:
+ case DESTINATION_COMPANY:
+ {
+ OUString aName = m_aStates.top().nDestinationState == DESTINATION_OPERATOR ? OUString("Operator") : OUString("Company");
+ if (m_xDocumentProperties.is())
+ {
+ uno::Reference<beans::XPropertyContainer> xUserDefinedProperties = m_xDocumentProperties->getUserDefinedProperties();
+ xUserDefinedProperties->addProperty(aName, beans::PropertyAttribute::REMOVABLE,
+ uno::makeAny(m_aStates.top().aDestinationText.makeStringAndClear()));
+ }
+ }
+ break;
+ case DESTINATION_OBJDATA:
+ {
+ m_pObjectData.reset(new SvMemoryStream());
+ int b = 0, count = 2;
- m_pSdrImport->resolveFLine(xPropertySet, rDrawing.nFLine);
+ // Feed the destination text to a stream.
+ OString aStr = OUStringToOString(m_aStates.top().aDestinationText.makeStringAndClear(), RTL_TEXTENCODING_ASCII_US);
+ const char *str = aStr.getStr();
+ for (int i = 0; i < aStr.getLength(); ++i)
+ {
+ char ch = str[i];
+ if (ch != 0x0d && ch != 0x0a)
+ {
+ b = b << 4;
+ sal_Int8 parsed = m_pTokenizer->asHex(ch);
+ if (parsed == -1)
+ return ERROR_HEX_INVALID;
+ b += parsed;
+ count--;
+ if (!count)
+ {
+ *m_pObjectData << (char)b;
+ count = 2;
+ b = 0;
+ }
+ }
+ }
- Mapper().startShape(xShape);
- replayShapetext();
- Mapper().endShape();
- }
- break;
- case DESTINATION_SHAPE:
- if (m_aStates.top().aFrame.inFrame())
- {
- m_aStates.top().resetFrame();
- parBreak();
- // Save this state for later use, so we only reset frame status only for the first shape inside a frame.
- aState = m_aStates.top();
- m_bNeedPap = true;
- }
- break;
- case DESTINATION_MOMATH:
- {
- m_aMathBuffer.appendClosingTag(M_TOKEN(oMath));
+ if (m_pObjectData->Tell())
+ {
+ m_pObjectData->Seek(0);
- SvGlobalName aGlobalName(SO3_SM_CLASSID);
- comphelper::EmbeddedObjectContainer aContainer;
- OUString aName;
- uno::Reference<embed::XEmbeddedObject> xObject = aContainer.CreateEmbeddedObject(aGlobalName.GetByteSequence(), aName);
- uno::Reference<util::XCloseable> xComponent(xObject->getComponent(), uno::UNO_QUERY);
-// gcc4.4 (and 4.3 and possibly older) have a problem with dynamic_cast directly to the target class,
-// so help it with an intermediate cast. I'm not sure what exactly the problem is, seems to be unrelated
-// to RTLD_GLOBAL, so most probably a gcc bug.
- oox::FormulaImportBase* pImport = dynamic_cast<oox::FormulaImportBase*>(dynamic_cast<SfxBaseModel*>(xComponent.get()));
- assert( pImport != NULL );
- pImport->readFormulaOoxml(m_aMathBuffer);
- RTFValue::Pointer_t pValue(new RTFValue(xObject));
- RTFSprms aMathAttributes;
- aMathAttributes.set(NS_ooxml::LN_starmath, pValue);
- writerfilter::Reference<Properties>::Pointer_t const pProperties(new RTFReferenceProperties(aMathAttributes));
- Mapper().props(pProperties);
- m_aMathBuffer = oox::formulaimport::XmlStreamBuilder();
- }
- break;
- case DESTINATION_MR: lcl_DestinationToMath(m_aStates.top().aDestinationText, m_aMathBuffer); break;
- case DESTINATION_MF: m_aMathBuffer.appendClosingTag(M_TOKEN(f)); break;
- case DESTINATION_MFPR: m_aMathBuffer.appendClosingTag(M_TOKEN(fPr)); break;
- case DESTINATION_MCTRLPR: m_aMathBuffer.appendClosingTag(M_TOKEN(ctrlPr)); break;
- case DESTINATION_MNUM: m_aMathBuffer.appendClosingTag(M_TOKEN(num)); break;
- case DESTINATION_MDEN: m_aMathBuffer.appendClosingTag(M_TOKEN(den)); break;
- case DESTINATION_MACC: m_aMathBuffer.appendClosingTag(M_TOKEN(acc)); break;
- case DESTINATION_MACCPR: m_aMathBuffer.appendClosingTag(M_TOKEN(accPr)); break;
- case DESTINATION_MCHR: if (!nMathToken) nMathToken = M_TOKEN(chr);
- case DESTINATION_MPOS: if (!nMathToken) nMathToken = M_TOKEN(pos);
- case DESTINATION_MVERTJC: if (!nMathToken) nMathToken = M_TOKEN(vertJc);
- case DESTINATION_MSTRIKEH: if (!nMathToken) nMathToken = M_TOKEN(strikeH);
- case DESTINATION_MDEGHIDE: if (!nMathToken) nMathToken = M_TOKEN(degHide);
- case DESTINATION_MBEGCHR: if (!nMathToken) nMathToken = M_TOKEN(begChr);
- case DESTINATION_MSEPCHR: if (!nMathToken) nMathToken = M_TOKEN(sepChr);
- case DESTINATION_MENDCHR: if (!nMathToken) nMathToken = M_TOKEN(endChr);
- case DESTINATION_MSUBHIDE: if (!nMathToken) nMathToken = M_TOKEN(subHide);
- case DESTINATION_MSUPHIDE: if (!nMathToken) nMathToken = M_TOKEN(supHide);
- case DESTINATION_MTYPE: if (!nMathToken) nMathToken = M_TOKEN(type);
- case DESTINATION_MGROW: if (!nMathToken) nMathToken = M_TOKEN(grow);
- {
- oox::formulaimport::XmlStream::AttributeList aAttribs;
- aAttribs[M_TOKEN(val)] = m_aStates.top().aDestinationText.makeStringAndClear();
- m_aMathBuffer.appendOpeningTag(nMathToken, aAttribs);
- m_aMathBuffer.appendClosingTag(nMathToken);
- }
- break;
- case DESTINATION_ME: m_aMathBuffer.appendClosingTag(M_TOKEN(e)); break;
- case DESTINATION_MBAR: m_aMathBuffer.appendClosingTag(M_TOKEN(bar)); break;
- case DESTINATION_MBARPR: m_aMathBuffer.appendClosingTag(M_TOKEN(barPr)); break;
- case DESTINATION_MD: m_aMathBuffer.appendClosingTag(M_TOKEN(d)); break;
- case DESTINATION_MDPR: m_aMathBuffer.appendClosingTag(M_TOKEN(dPr)); break;
- case DESTINATION_MFUNC: m_aMathBuffer.appendClosingTag(M_TOKEN(func)); break;
- case DESTINATION_MFUNCPR: m_aMathBuffer.appendClosingTag(M_TOKEN(funcPr)); break;
- case DESTINATION_MFNAME: m_aMathBuffer.appendClosingTag(M_TOKEN(fName)); break;
- case DESTINATION_MLIMLOW: m_aMathBuffer.appendClosingTag(M_TOKEN(limLow)); break;
- case DESTINATION_MLIMLOWPR: m_aMathBuffer.appendClosingTag(M_TOKEN(limLowPr)); break;
- case DESTINATION_MLIM: m_aMathBuffer.appendClosingTag(M_TOKEN(lim)); break;
- case DESTINATION_MM: m_aMathBuffer.appendClosingTag(M_TOKEN(m)); break;
- case DESTINATION_MMPR: m_aMathBuffer.appendClosingTag(M_TOKEN(mPr)); break;
- case DESTINATION_MMR: m_aMathBuffer.appendClosingTag(M_TOKEN(mr)); break;
- case DESTINATION_MNARY: m_aMathBuffer.appendClosingTag(M_TOKEN(nary)); break;
- case DESTINATION_MNARYPR: m_aMathBuffer.appendClosingTag(M_TOKEN(naryPr)); break;
- case DESTINATION_MSUB: m_aMathBuffer.appendClosingTag(M_TOKEN(sub)); break;
- case DESTINATION_MSUP: m_aMathBuffer.appendClosingTag(M_TOKEN(sup)); break;
- case DESTINATION_MLIMUPP: m_aMathBuffer.appendClosingTag(M_TOKEN(limUpp)); break;
- case DESTINATION_MLIMUPPPR: m_aMathBuffer.appendClosingTag(M_TOKEN(limUppPr)); break;
- case DESTINATION_MGROUPCHR: m_aMathBuffer.appendClosingTag(M_TOKEN(groupChr)); break;
- case DESTINATION_MGROUPCHRPR: m_aMathBuffer.appendClosingTag(M_TOKEN(groupChrPr)); break;
- case DESTINATION_MBORDERBOX: m_aMathBuffer.appendClosingTag(M_TOKEN(borderBox)); break;
- case DESTINATION_MBORDERBOXPR: m_aMathBuffer.appendClosingTag(M_TOKEN(borderBoxPr)); break;
- case DESTINATION_MRAD: m_aMathBuffer.appendClosingTag(M_TOKEN(rad)); break;
- case DESTINATION_MRADPR: m_aMathBuffer.appendClosingTag(M_TOKEN(radPr)); break;
- case DESTINATION_MDEG: m_aMathBuffer.appendClosingTag(M_TOKEN(deg)); break;
- case DESTINATION_MSSUB: m_aMathBuffer.appendClosingTag(M_TOKEN(sSub)); break;
- case DESTINATION_MSSUBPR: m_aMathBuffer.appendClosingTag(M_TOKEN(sSubPr)); break;
- case DESTINATION_MSSUP: m_aMathBuffer.appendClosingTag(M_TOKEN(sSup)); break;
- case DESTINATION_MSSUPPR: m_aMathBuffer.appendClosingTag(M_TOKEN(sSupPr)); break;
- case DESTINATION_MSSUBSUP: m_aMathBuffer.appendClosingTag(M_TOKEN(sSubSup)); break;
- case DESTINATION_MSSUBSUPPR: m_aMathBuffer.appendClosingTag(M_TOKEN(sSubSupPr)); break;
- case DESTINATION_MSPRE: m_aMathBuffer.appendClosingTag(M_TOKEN(sPre)); break;
- case DESTINATION_MSPREPR: m_aMathBuffer.appendClosingTag(M_TOKEN(sPrePr)); break;
- case DESTINATION_MBOX: m_aMathBuffer.appendClosingTag(M_TOKEN(box)); break;
- case DESTINATION_MEQARR: m_aMathBuffer.appendClosingTag(M_TOKEN(eqArr)); break;
- default: break;
+ // Skip ObjectHeader
+ sal_uInt32 nData;
+ *m_pObjectData >> nData; // OLEVersion
+ *m_pObjectData >> nData; // FormatID
+ *m_pObjectData >> nData; // ClassName
+ m_pObjectData->SeekRel(nData);
+ *m_pObjectData >> nData; // TopicName
+ m_pObjectData->SeekRel(nData);
+ *m_pObjectData >> nData; // ItemName
+ m_pObjectData->SeekRel(nData);
+ *m_pObjectData >> nData; // NativeDataSize
+ }
+
+ uno::Reference<io::XInputStream> xInputStream(new utl::OInputStreamWrapper(m_pObjectData.get()));
+ RTFValue::Pointer_t pStreamValue(new RTFValue(xInputStream));
+
+ RTFSprms aOLEAttributes;
+ aOLEAttributes.set(NS_ooxml::LN_inputstream, pStreamValue);
+ RTFValue::Pointer_t pValue(new RTFValue(aOLEAttributes));
+ m_aObjectSprms.set(NS_ooxml::LN_OLEObject_OLEObject, pValue);
+ }
+ break;
+ case DESTINATION_OBJECT:
+ {
+ if (!m_bObject)
+ {
+ // if the object is in a special container we will use the \result
+ // element instead of the \objdata
+ // (see RTF_OBJECT in RTFDocumentImpl::dispatchDestination)
+ break;
+ }
+
+ RTFSprms aObjAttributes;
+ RTFSprms aObjSprms;
+ RTFValue::Pointer_t pValue(new RTFValue(m_aObjectAttributes, m_aObjectSprms));
+ aObjSprms.set(NS_ooxml::LN_object, pValue);
+ writerfilter::Reference<Properties>::Pointer_t const pProperties(new RTFReferenceProperties(aObjAttributes, aObjSprms));
+ uno::Reference<drawing::XShape> xShape;
+ RTFValue::Pointer_t pShape = m_aObjectAttributes.find(NS_ooxml::LN_shape);
+ OSL_ASSERT(pShape.get());
+ if (pShape.get())
+ pShape->getAny() >>= xShape;
+ Mapper().startShape(xShape);
+ Mapper().props(pProperties);
+ Mapper().endShape();
+ m_aObjectAttributes.clear();
+ m_aObjectSprms.clear();
+ m_bObject = false;
+ }
+ break;
+ case DESTINATION_ANNOTATIONDATE:
+ {
+ OUString aStr(OStringToOUString(lcl_DTTM22OString(m_aStates.top().aDestinationText.makeStringAndClear().toInt32()),
+ m_aStates.top().nCurrentEncoding));
+ RTFValue::Pointer_t pValue(new RTFValue(aStr));
+ RTFSprms aAnnAttributes;
+ aAnnAttributes.set(NS_ooxml::LN_CT_TrackChange_date, pValue);
+ writerfilter::Reference<Properties>::Pointer_t const pProperties(new RTFReferenceProperties(aAnnAttributes));
+ Mapper().props(pProperties);
+ }
+ break;
+ case DESTINATION_ANNOTATIONAUTHOR:
+ m_aAuthor = m_aStates.top().aDestinationText.makeStringAndClear();
+ break;
+ case DESTINATION_ATNID:
+ m_aAuthorInitials = m_aStates.top().aDestinationText.makeStringAndClear();
+ break;
+ case DESTINATION_FALT:
+ {
+ OUString aStr(m_aStates.top().aDestinationText.makeStringAndClear());
+ RTFValue::Pointer_t pValue(new RTFValue(aStr));
+ aState.aTableSprms.set(NS_ooxml::LN_CT_Font_altName, pValue);
+ }
+ break;
+ case DESTINATION_DRAWINGOBJECT:
+ if (m_aStates.top().aDrawingObject.xShape.is())
+ {
+ RTFDrawingObject& rDrawing = m_aStates.top().aDrawingObject;
+ uno::Reference<drawing::XShape> xShape(rDrawing.xShape);
+ uno::Reference<beans::XPropertySet> xPropertySet(rDrawing.xPropertySet);
+
+ uno::Reference<lang::XServiceInfo> xServiceInfo(xShape, uno::UNO_QUERY);
+ bool bTextFrame = xServiceInfo->supportsService("com.sun.star.text.TextFrame");
+
+ if (bTextFrame)
+ {
+ xPropertySet->setPropertyValue("HoriOrientPosition", uno::makeAny((sal_Int32)rDrawing.nLeft));
+ xPropertySet->setPropertyValue("VertOrientPosition", uno::makeAny((sal_Int32)rDrawing.nTop));
+ }
+ else
+ {
+ xShape->setPosition(awt::Point(rDrawing.nLeft, rDrawing.nTop));
+ }
+ xShape->setSize(awt::Size(rDrawing.nRight, rDrawing.nBottom));
+
+ if (rDrawing.bHasLineColor)
+ xPropertySet->setPropertyValue("LineColor", uno::makeAny(sal_uInt32((rDrawing.nLineColorR<<16) + (rDrawing.nLineColorG<<8) + rDrawing.nLineColorB)));
+ if (rDrawing.bHasFillColor)
+ xPropertySet->setPropertyValue("FillColor", uno::makeAny(sal_uInt32((rDrawing.nFillColorR<<16) + (rDrawing.nFillColorG<<8) + rDrawing.nFillColorB)));
+ else if (!bTextFrame)
+ // If there is no fill, the Word default is 100% transparency.
+ xPropertySet->setPropertyValue("FillTransparence", uno::makeAny(sal_Int32(100)));
+
+ m_pSdrImport->resolveFLine(xPropertySet, rDrawing.nFLine);
+
+ Mapper().startShape(xShape);
+ replayShapetext();
+ Mapper().endShape();
+ }
+ break;
+ case DESTINATION_SHAPE:
+ if (m_aStates.top().aFrame.inFrame())
+ {
+ m_aStates.top().resetFrame();
+ parBreak();
+ // Save this state for later use, so we only reset frame status only for the first shape inside a frame.
+ aState = m_aStates.top();
+ m_bNeedPap = true;
+ }
+ break;
+ case DESTINATION_MOMATH:
+ {
+ m_aMathBuffer.appendClosingTag(M_TOKEN(oMath));
+
+ SvGlobalName aGlobalName(SO3_SM_CLASSID);
+ comphelper::EmbeddedObjectContainer aContainer;
+ OUString aName;
+ uno::Reference<embed::XEmbeddedObject> xObject = aContainer.CreateEmbeddedObject(aGlobalName.GetByteSequence(), aName);
+ uno::Reference<util::XCloseable> xComponent(xObject->getComponent(), uno::UNO_QUERY);
+ // gcc4.4 (and 4.3 and possibly older) have a problem with dynamic_cast directly to the target class,
+ // so help it with an intermediate cast. I'm not sure what exactly the problem is, seems to be unrelated
+ // to RTLD_GLOBAL, so most probably a gcc bug.
+ oox::FormulaImportBase* pImport = dynamic_cast<oox::FormulaImportBase*>(dynamic_cast<SfxBaseModel*>(xComponent.get()));
+ assert( pImport != NULL );
+ pImport->readFormulaOoxml(m_aMathBuffer);
+ RTFValue::Pointer_t pValue(new RTFValue(xObject));
+ RTFSprms aMathAttributes;
+ aMathAttributes.set(NS_ooxml::LN_starmath, pValue);
+ writerfilter::Reference<Properties>::Pointer_t const pProperties(new RTFReferenceProperties(aMathAttributes));
+ Mapper().props(pProperties);
+ m_aMathBuffer = oox::formulaimport::XmlStreamBuilder();
+ }
+ break;
+ case DESTINATION_MR:
+ lcl_DestinationToMath(m_aStates.top().aDestinationText, m_aMathBuffer);
+ break;
+ case DESTINATION_MF:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(f));
+ break;
+ case DESTINATION_MFPR:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(fPr));
+ break;
+ case DESTINATION_MCTRLPR:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(ctrlPr));
+ break;
+ case DESTINATION_MNUM:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(num));
+ break;
+ case DESTINATION_MDEN:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(den));
+ break;
+ case DESTINATION_MACC:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(acc));
+ break;
+ case DESTINATION_MACCPR:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(accPr));
+ break;
+ case DESTINATION_MCHR:
+ case DESTINATION_MPOS:
+ case DESTINATION_MVERTJC:
+ case DESTINATION_MSTRIKEH:
+ case DESTINATION_MDEGHIDE:
+ case DESTINATION_MBEGCHR:
+ case DESTINATION_MSEPCHR:
+ case DESTINATION_MENDCHR:
+ case DESTINATION_MSUBHIDE:
+ case DESTINATION_MSUPHIDE:
+ case DESTINATION_MTYPE:
+ case DESTINATION_MGROW:
+ {
+ sal_Int32 nMathToken = 0;
+ switch (aState.nDestinationState)
+ {
+ case DESTINATION_MCHR:
+ nMathToken = M_TOKEN(chr);
+ break;
+ case DESTINATION_MPOS:
+ nMathToken = M_TOKEN(pos);
+ break;
+ case DESTINATION_MVERTJC:
+ nMathToken = M_TOKEN(vertJc);
+ break;
+ case DESTINATION_MSTRIKEH:
+ nMathToken = M_TOKEN(strikeH);
+ break;
+ case DESTINATION_MDEGHIDE:
+ nMathToken = M_TOKEN(degHide);
+ break;
+ case DESTINATION_MBEGCHR:
+ nMathToken = M_TOKEN(begChr);
+ break;
+ case DESTINATION_MSEPCHR:
+ nMathToken = M_TOKEN(sepChr);
+ break;
+ case DESTINATION_MENDCHR:
+ nMathToken = M_TOKEN(endChr);
+ break;
+ case DESTINATION_MSUBHIDE:
+ nMathToken = M_TOKEN(subHide);
+ break;
+ case DESTINATION_MSUPHIDE:
+ nMathToken = M_TOKEN(supHide);
+ break;
+ case DESTINATION_MTYPE:
+ nMathToken = M_TOKEN(type);
+ break;
+ case DESTINATION_MGROW:
+ nMathToken = M_TOKEN(grow);
+ break;
+ default:
+ break;
+ }
+
+ oox::formulaimport::XmlStream::AttributeList aAttribs;
+ aAttribs[M_TOKEN(val)] = m_aStates.top().aDestinationText.makeStringAndClear();
+ m_aMathBuffer.appendOpeningTag(nMathToken, aAttribs);
+ m_aMathBuffer.appendClosingTag(nMathToken);
+ }
+ break;
+ case DESTINATION_ME:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(e));
+ break;
+ case DESTINATION_MBAR:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(bar));
+ break;
+ case DESTINATION_MBARPR:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(barPr));
+ break;
+ case DESTINATION_MD:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(d));
+ break;
+ case DESTINATION_MDPR:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(dPr));
+ break;
+ case DESTINATION_MFUNC:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(func));
+ break;
+ case DESTINATION_MFUNCPR:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(funcPr));
+ break;
+ case DESTINATION_MFNAME:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(fName));
+ break;
+ case DESTINATION_MLIMLOW:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(limLow));
+ break;
+ case DESTINATION_MLIMLOWPR:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(limLowPr));
+ break;
+ case DESTINATION_MLIM:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(lim));
+ break;
+ case DESTINATION_MM:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(m));
+ break;
+ case DESTINATION_MMPR:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(mPr));
+ break;
+ case DESTINATION_MMR:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(mr));
+ break;
+ case DESTINATION_MNARY:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(nary));
+ break;
+ case DESTINATION_MNARYPR:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(naryPr));
+ break;
+ case DESTINATION_MSUB:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(sub));
+ break;
+ case DESTINATION_MSUP:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(sup));
+ break;
+ case DESTINATION_MLIMUPP:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(limUpp));
+ break;
+ case DESTINATION_MLIMUPPPR:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(limUppPr));
+ break;
+ case DESTINATION_MGROUPCHR:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(groupChr));
+ break;
+ case DESTINATION_MGROUPCHRPR:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(groupChrPr));
+ break;
+ case DESTINATION_MBORDERBOX:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(borderBox));
+ break;
+ case DESTINATION_MBORDERBOXPR:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(borderBoxPr));
+ break;
+ case DESTINATION_MRAD:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(rad));
+ break;
+ case DESTINATION_MRADPR:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(radPr));
+ break;
+ case DESTINATION_MDEG:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(deg));
+ break;
+ case DESTINATION_MSSUB:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(sSub));
+ break;
+ case DESTINATION_MSSUBPR:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(sSubPr));
+ break;
+ case DESTINATION_MSSUP:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(sSup));
+ break;
+ case DESTINATION_MSSUPPR:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(sSupPr));
+ break;
+ case DESTINATION_MSSUBSUP:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(sSubSup));
+ break;
+ case DESTINATION_MSSUBSUPPR:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(sSubSupPr));
+ break;
+ case DESTINATION_MSPRE:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(sPre));
+ break;
+ case DESTINATION_MSPREPR:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(sPrePr));
+ break;
+ case DESTINATION_MBOX:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(box));
+ break;
+ case DESTINATION_MEQARR:
+ m_aMathBuffer.appendClosingTag(M_TOKEN(eqArr));
+ break;
+ default:
+ break;
}
// See if we need to end a track change
@@ -4134,160 +4367,182 @@
m_pTokenizer->popGroup();
// list table
- if (aState.nDestinationState == DESTINATION_LISTENTRY)
+ switch (aState.nDestinationState)
{
- RTFValue::Pointer_t pValue(new RTFValue(aState.aTableAttributes, aState.aTableSprms));
- m_aListTableSprms.set(NS_ooxml::LN_CT_Numbering_abstractNum, pValue, false);
- }
- else if (aState.nDestinationState == DESTINATION_PARAGRAPHNUMBERING)
- {
- RTFValue::Pointer_t pIdValue = aState.aTableAttributes.find(NS_rtf::LN_LSID);
- if (pIdValue.get())
- {
- // Abstract numbering
- RTFSprms aLeveltextAttributes;
- OUString aTextValue;
- RTFValue::Pointer_t pTextBefore = aState.aTableAttributes.find(NS_ooxml::LN_CT_LevelText_val);
- if (pTextBefore.get())
- aTextValue += pTextBefore->getString();
- aTextValue += "%1";
- RTFValue::Pointer_t pTextAfter = aState.aTableAttributes.find(NS_ooxml::LN_CT_LevelSuffix_val);
- if (pTextAfter.get())
- aTextValue += pTextAfter->getString();
- RTFValue::Pointer_t pTextValue(new RTFValue(aTextValue));
- aLeveltextAttributes.set(NS_ooxml::LN_CT_LevelText_val, pTextValue);
+ case DESTINATION_LISTENTRY:
+ {
+ RTFValue::Pointer_t pValue(new RTFValue(aState.aTableAttributes, aState.aTableSprms));
+ m_aListTableSprms.set(NS_ooxml::LN_CT_Numbering_abstractNum, pValue, false);
+ }
+ break;
+ case DESTINATION_PARAGRAPHNUMBERING:
+ {
+ RTFValue::Pointer_t pIdValue = aState.aTableAttributes.find(NS_rtf::LN_LSID);
+ if (pIdValue.get())
+ {
+ // Abstract numbering
+ RTFSprms aLeveltextAttributes;
+ OUString aTextValue;
+ RTFValue::Pointer_t pTextBefore = aState.aTableAttributes.find(NS_ooxml::LN_CT_LevelText_val);
+ if (pTextBefore.get())
+ aTextValue += pTextBefore->getString();
+ aTextValue += "%1";
+ RTFValue::Pointer_t pTextAfter = aState.aTableAttributes.find(NS_ooxml::LN_CT_LevelSuffix_val);
+ if (pTextAfter.get())
+ aTextValue += pTextAfter->getString();
+ RTFValue::Pointer_t pTextValue(new RTFValue(aTextValue));
+ aLeveltextAttributes.set(NS_ooxml::LN_CT_LevelText_val, pTextValue);
- RTFSprms aLevelAttributes;
- RTFSprms aLevelSprms;
- RTFValue::Pointer_t pIlvlValue(new RTFValue(0));
- aLevelAttributes.set(NS_ooxml::LN_CT_Lvl_ilvl, pIlvlValue);
+ RTFSprms aLevelAttributes;
+ RTFSprms aLevelSprms;
+ RTFValue::Pointer_t pIlvlValue(new RTFValue(0));
+ aLevelAttributes.set(NS_ooxml::LN_CT_Lvl_ilvl, pIlvlValue);
- RTFValue::Pointer_t pNfcValue = aState.aTableSprms.find(NS_rtf::LN_NFC);
- if (pNfcValue.get())
- aLevelSprms.set(NS_rtf::LN_NFC, pNfcValue);
+ RTFValue::Pointer_t pNfcValue = aState.aTableSprms.find(NS_rtf::LN_NFC);
+ if (pNfcValue.get())
+ aLevelSprms.set(NS_rtf::LN_NFC, pNfcValue);
- RTFValue::Pointer_t pStartatValue = aState.aTableSprms.find(NS_rtf::LN_ISTARTAT);
- if (pStartatValue.get())
- aLevelSprms.set(NS_rtf::LN_ISTARTAT, pStartatValue);
+ RTFValue::Pointer_t pStartatValue = aState.aTableSprms.find(NS_rtf::LN_ISTARTAT);
+ if (pStartatValue.get())
+ aLevelSprms.set(NS_rtf::LN_ISTARTAT, pStartatValue);
- RTFValue::Pointer_t pLeveltextValue(new RTFValue(aLeveltextAttributes));
- aLevelSprms.set(NS_ooxml::LN_CT_Lvl_lvlText, pLeveltextValue);
- RTFValue::Pointer_t pRunProps = aState.aTableSprms.find(NS_ooxml::LN_CT_Lvl_rPr);
- if (pRunProps.get())
- aLevelSprms.set(NS_ooxml::LN_CT_Lvl_rPr, pRunProps);
+ RTFValue::Pointer_t pLeveltextValue(new RTFValue(aLeveltextAttributes));
+ aLevelSprms.set(NS_ooxml::LN_CT_Lvl_lvlText, pLeveltextValue);
+ RTFValue::Pointer_t pRunProps = aState.aTableSprms.find(NS_ooxml::LN_CT_Lvl_rPr);
+ if (pRunProps.get())
+ aLevelSprms.set(NS_ooxml::LN_CT_Lvl_rPr, pRunProps);
- RTFSprms aAbstractAttributes;
- RTFSprms aAbstractSprms;
- aAbstractAttributes.set(NS_ooxml::LN_CT_AbstractNum_abstractNumId, pIdValue);
- RTFValue::Pointer_t pLevelValue(new RTFValue(aLevelAttributes, aLevelSprms));
- aAbstractSprms.set(NS_ooxml::LN_CT_AbstractNum_lvl, pLevelValue, false);
+ RTFSprms aAbstractAttributes;
+ RTFSprms aAbstractSprms;
+ aAbstractAttributes.set(NS_ooxml::LN_CT_AbstractNum_abstractNumId, pIdValue);
+ RTFValue::Pointer_t pLevelValue(new RTFValue(aLevelAttributes, aLevelSprms));
+ aAbstractSprms.set(NS_ooxml::LN_CT_AbstractNum_lvl, pLevelValue, false);
- RTFSprms aListTableSprms;
- RTFValue::Pointer_t pAbstractValue(new RTFValue(aAbstractAttributes, aAbstractSprms));
- // It's important that Numbering_abstractNum and Numbering_num never overwrites previous values.
- aListTableSprms.set(NS_ooxml::LN_CT_Numbering_abstractNum, pAbstractValue, false);
+ RTFSprms aListTableSprms;
+ RTFValue::Pointer_t pAbstractValue(new RTFValue(aAbstractAttributes, aAbstractSprms));
+ // It's important that Numbering_abstractNum and Numbering_num never overwrites previous values.
+ aListTableSprms.set(NS_ooxml::LN_CT_Numbering_abstractNum, pAbstractValue, false);
- // Numbering
- RTFSprms aNumberingAttributes;
- RTFSprms aNumberingSprms;
- aNumberingAttributes.set(NS_rtf::LN_LSID, pIdValue);
- aNumberingSprms.set(NS_ooxml::LN_CT_Num_abstractNumId, pIdValue);
- RTFValue::Pointer_t pNumberingValue(new RTFValue(aNumberingAttributes, aNumberingSprms));
- aListTableSprms.set(NS_ooxml::LN_CT_Numbering_num, pNumberingValue, false);
+ // Numbering
+ RTFSprms aNumberingAttributes;
+ RTFSprms aNumberingSprms;
+ aNumberingAttributes.set(NS_rtf::LN_LSID, pIdValue);
+ aNumberingSprms.set(NS_ooxml::LN_CT_Num_abstractNumId, pIdValue);
+ RTFValue::Pointer_t pNumberingValue(new RTFValue(aNumberingAttributes, aNumberingSprms));
+ aListTableSprms.set(NS_ooxml::LN_CT_Numbering_num, pNumberingValue, false);
- // Table
- RTFSprms aListTableAttributes;
- writerfilter::Reference<Properties>::Pointer_t const pProp(new RTFReferenceProperties(aListTableAttributes, aListTableSprms));
+ // Table
+ RTFSprms aListTableAttributes;
+ writerfilter::Reference<Properties>::Pointer_t const pProp(new RTFReferenceProperties(aListTableAttributes, aListTableSprms));
- RTFReferenceTable::Entries_t aListTableEntries;
- aListTableEntries.insert(make_pair(0, pProp));
- writerfilter::Reference<Table>::Pointer_t const pTable(new RTFReferenceTable(aListTableEntries));
- Mapper().table(NS_rtf::LN_LISTTABLE, pTable);
+ RTFReferenceTable::Entries_t aListTableEntries;
+ aListTableEntries.insert(make_pair(0, pProp));
+ writerfilter::Reference<Table>::Pointer_t const pTable(new RTFReferenceTable(aListTableEntries));
+ Mapper().table(NS_rtf::LN_LISTTABLE, pTable);
- // Use it
- lcl_putNestedSprm(m_aStates.top().aParagraphSprms, NS_ooxml::LN_CT_PPrBase_numPr, NS_sprm::LN_PIlvl, pIlvlValue);
- lcl_putNestedSprm(m_aStates.top().aParagraphSprms, NS_ooxml::LN_CT_PPrBase_tabs, NS_sprm::LN_PIlfo, pIdValue);
- }
- }
- else if (aState.nDestinationState == DESTINATION_PARAGRAPHNUMBERING_TEXTAFTER)
- {
- RTFValue::Pointer_t pValue(new RTFValue(aState.aDestinationText.makeStringAndClear(), true));
- m_aStates.top().aTableAttributes.set(NS_ooxml::LN_CT_LevelSuffix_val, pValue);
- }
- else if (aState.nDestinationState == DESTINATION_PARAGRAPHNUMBERING_TEXTBEFORE)
- {
- RTFValue::Pointer_t pValue(new RTFValue(aState.aDestinationText.makeStringAndClear(), true));
- m_aStates.top().aTableAttributes.set(NS_ooxml::LN_CT_LevelText_val, pValue);
- }
- else if (aState.nDestinationState == DESTINATION_LISTLEVEL)
- {
- RTFValue::Pointer_t pInnerValue(new RTFValue(m_aStates.top().nListLevelNum++));
- aState.aTableAttributes.set(NS_ooxml::LN_CT_Lvl_ilvl, pInnerValue);
+ // Use it
+ lcl_putNestedSprm(m_aStates.top().aParagraphSprms, NS_ooxml::LN_CT_PPrBase_numPr, NS_sprm::LN_PIlvl, pIlvlValue);
+ lcl_putNestedSprm(m_aStates.top().aParagraphSprms, NS_ooxml::LN_CT_PPrBase_tabs, NS_sprm::LN_PIlfo, pIdValue);
+ }
+ }
+ break;
+ case DESTINATION_PARAGRAPHNUMBERING_TEXTAFTER:
+ {
+ RTFValue::Pointer_t pValue(new RTFValue(aState.aDestinationText.makeStringAndClear(), true));
+ m_aStates.top().aTableAttributes.set(NS_ooxml::LN_CT_LevelSuffix_val, pValue);
+ }
+ break;
+ case DESTINATION_PARAGRAPHNUMBERING_TEXTBEFORE:
+ {
+ RTFValue::Pointer_t pValue(new RTFValue(aState.aDestinationText.makeStringAndClear(), true));
+ m_aStates.top().aTableAttributes.set(NS_ooxml::LN_CT_LevelText_val, pValue);
+ }
+ break;
+ case DESTINATION_LISTLEVEL:
+ {
+ RTFValue::Pointer_t pInnerValue(new RTFValue(m_aStates.top().nListLevelNum++));
+ aState.aTableAttributes.set(NS_ooxml::LN_CT_Lvl_ilvl, pInnerValue);
- RTFValue::Pointer_t pValue(new RTFValue(aState.aTableAttributes, aState.aTableSprms));
- if (m_aStates.top().nDestinationState != DESTINATION_LFOLEVEL)
- m_aStates.top().aListLevelEntries.set(NS_ooxml::LN_CT_AbstractNum_lvl, pValue, false);
- else
- m_aStates.top().aTableSprms.set(NS_ooxml::LN_CT_NumLvl_lvl, pValue);
- }
- else if (aState.nDestinationState == DESTINATION_LFOLEVEL)
- {
- RTFValue::Pointer_t pInnerValue(new RTFValue(m_aStates.top().nListLevelNum++));
- aState.aTableAttributes.set(NS_ooxml::LN_CT_NumLvl_ilvl, pInnerValue);
+ RTFValue::Pointer_t pValue(new RTFValue(aState.aTableAttributes, aState.aTableSprms));
+ if (m_aStates.top().nDestinationState != DESTINATION_LFOLEVEL)
+ m_aStates.top().aListLevelEntries.set(NS_ooxml::LN_CT_AbstractNum_lvl, pValue, false);
+ else
+ m_aStates.top().aTableSprms.set(NS_ooxml::LN_CT_NumLvl_lvl, pValue);
+ }
+ break;
+ case DESTINATION_LFOLEVEL:
+ {
+ RTFValue::Pointer_t pInnerValue(new RTFValue(m_aStates.top().nListLevelNum++));
+ aState.aTableAttributes.set(NS_ooxml::LN_CT_NumLvl_ilvl, pInnerValue);
- RTFValue::Pointer_t pValue(new RTFValue(aState.aTableAttributes, aState.aTableSprms));
- m_aStates.top().aTableSprms.set(NS_ooxml::LN_CT_Num_lvlOverride, pValue);
- }
- // list override table
- else if (aState.nDestinationState == DESTINATION_LISTOVERRIDEENTRY)
- {
- RTFValue::Pointer_t pValue(new RTFValue(aState.aTableAttributes, aState.aTableSprms));
- m_aListTableSprms.set(NS_ooxml::LN_CT_Numbering_num, pValue, false);
- }
- else if (aState.nDestinationState == DESTINATION_LEVELTEXT)
- {
- RTFValue::Pointer_t pValue(new RTFValue(aState.aTableAttributes));
- m_aStates.top().aTableSprms.set(NS_ooxml::LN_CT_Lvl_lvlText, pValue);
- }
- else if (aState.nDestinationState == DESTINATION_LEVELNUMBERS)
- m_aStates.top().aTableSprms = aState.aTableSprms;
- else if (aState.nDestinationState == DESTINATION_FIELDINSTRUCTION)
- m_aStates.top().nFieldStatus = FIELD_INSTRUCTION;
- else if (aState.nDestinationState == DESTINATION_FIELDRESULT)
- m_aStates.top().nFieldStatus = FIELD_RESULT;
- else if (aState.nDestinationState == DESTINATION_FIELD)
- {
- if (aState.nFieldStatus == FIELD_INSTRUCTION)
- singleChar(0x15);
- }
- else if (aState.nDestinationState == DESTINATION_SHAPEPROPERTYVALUEPICT)
- {
- m_aStates.top().aPicture = aState.aPicture;
- m_aStates.top().aDestinationText = aState.aDestinationText;
- }
- else if (aState.nDestinationState == DESTINATION_FALT)
- m_aStates.top().aTableSprms = aState.aTableSprms;
- else if (m_aStates.size() && m_aStates.top().nDestinationState == DESTINATION_PICT)
- m_aStates.top().aPicture = aState.aPicture;
- else if (aState.nDestinationState == DESTINATION_SHAPEPROPERTYNAME ||
- aState.nDestinationState == DESTINATION_SHAPEPROPERTYVALUE ||
- aState.nDestinationState == DESTINATION_SHAPEPROPERTY)
- {
- m_aStates.top().aShape = aState.aShape;
- m_aStates.top().aPicture = aState.aPicture;
- m_aStates.top().aCharacterAttributes = aState.aCharacterAttributes;
- }
- else if (aState.nDestinationState == DESTINATION_FLYMAINCONTENT ||
- aState.nDestinationState == DESTINATION_SHPPICT ||
- aState.nDestinationState == DESTINATION_SHAPE)
- m_aStates.top().aFrame = aState.aFrame;
- else if (aState.nDestinationState == DESTINATION_TITLE)
- {
- if (m_aStates.top().nDestinationState == DESTINATION_TITLE)
- // The parent is a title as well, just append what we have so far.
- m_aStates.top().aDestinationText.append(aState.aDestinationText.makeStringAndClear());
- else if (m_xDocumentProperties.is())
- m_xDocumentProperties->setTitle(aState.aDestinationText.makeStringAndClear());
+ RTFValue::Pointer_t pValue(new RTFValue(aState.aTableAttributes, aState.aTableSprms));
+ m_aStates.top().aTableSprms.set(NS_ooxml::LN_CT_Num_lvlOverride, pValue);
+ }
+ break;
+ // list override table
+ case DESTINATION_LISTOVERRIDEENTRY:
+ {
+ RTFValue::Pointer_t pValue(new RTFValue(aState.aTableAttributes, aState.aTableSprms));
+ m_aListTableSprms.set(NS_ooxml::LN_CT_Numbering_num, pValue, false);
+ }
+ break;
+ case DESTINATION_LEVELTEXT:
+ {
+ RTFValue::Pointer_t pValue(new RTFValue(aState.aTableAttributes));
+ m_aStates.top().aTableSprms.set(NS_ooxml::LN_CT_Lvl_lvlText, pValue);
+ }
+ break;
+ case DESTINATION_LEVELNUMBERS:
+ m_aStates.top().aTableSprms = aState.aTableSprms;
+ break;
+ case DESTINATION_FIELDINSTRUCTION:
+ m_aStates.top().nFieldStatus = FIELD_INSTRUCTION;
+ break;
+ case DESTINATION_FIELDRESULT:
+ m_aStates.top().nFieldStatus = FIELD_RESULT;
+ break;
+ case DESTINATION_FIELD:
+ if (aState.nFieldStatus == FIELD_INSTRUCTION)
+ singleChar(0x15);
+ break;
+ case DESTINATION_SHAPEPROPERTYVALUEPICT:
+ {
+ m_aStates.top().aPicture = aState.aPicture;
+ m_aStates.top().aDestinationText = aState.aDestinationText;
+ }
+ break;
+ case DESTINATION_FALT:
+ m_aStates.top().aTableSprms = aState.aTableSprms;
+ break;
+ case DESTINATION_SHAPEPROPERTYNAME:
+ case DESTINATION_SHAPEPROPERTYVALUE:
+ case DESTINATION_SHAPEPROPERTY:
+ {
+ m_aStates.top().aShape = aState.aShape;
+ m_aStates.top().aPicture = aState.aPicture;
+ m_aStates.top().aCharacterAttributes = aState.aCharacterAttributes;
+ }
+ break;
+ case DESTINATION_FLYMAINCONTENT:
+ case DESTINATION_SHPPICT:
+ case DESTINATION_SHAPE:
+ m_aStates.top().aFrame = aState.aFrame;
+ break;
+ case DESTINATION_TITLE:
+ {
+ if (m_aStates.top().nDestinationState == DESTINATION_TITLE)
+ // The parent is a title as well, just append what we have so far.
+ m_aStates.top().aDestinationText.append(aState.aDestinationText.makeStringAndClear());
+ else if (m_xDocumentProperties.is())
+ m_xDocumentProperties->setTitle(aState.aDestinationText.makeStringAndClear());
+ }
+ break;
+ default:
+ {
+ if (m_aStates.size() && m_aStates.top().nDestinationState == DESTINATION_PICT)
+ m_aStates.top().aPicture = aState.aPicture;
+ }
+ break;
}
if (aState.pCurrentBuffer == &m_aSuperBuffer)
@@ -4589,14 +4844,18 @@
pValue.reset(new RTFValue(nVertPadding));
break;
case NS_ooxml::LN_CT_FramePr_hAnchor:
- if ( nHoriAnchor == 0 )
- nHoriAnchor = NS_ooxml::LN_Value_wordprocessingml_ST_HAnchor_margin;
- pValue.reset(new RTFValue(nHoriAnchor));
+ {
+ if ( nHoriAnchor == 0 )
+ nHoriAnchor = NS_ooxml::LN_Value_wordprocessingml_ST_HAnchor_margin;
+ pValue.reset(new RTFValue(nHoriAnchor));
+ }
break;
case NS_ooxml::LN_CT_FramePr_vAnchor:
- if ( nVertAnchor == 0 )
- nVertAnchor = NS_ooxml::LN_Value_wordprocessingml_ST_VAnchor_margin;
- pValue.reset(new RTFValue(nVertAnchor));
+ {
+ if ( nVertAnchor == 0 )
+ nVertAnchor = NS_ooxml::LN_Value_wordprocessingml_ST_VAnchor_margin;
+ pValue.reset(new RTFValue(nVertAnchor));
+ }
break;
case NS_ooxml::LN_CT_FramePr_xAlign:
pValue.reset(new RTFValue(nHoriAlign));
@@ -4611,8 +4870,8 @@
else if ( nH > 0 )
nHRule = NS_ooxml::LN_Value_wordprocessingml_ST_HeightRule_atLeast;
pValue.reset(new RTFValue(nHRule));
- break;
}
+ break;
default:
break;
}
--
To view, visit https://gerrit.libreoffice.org/3084
To unsubscribe, visit https://gerrit.libreoffice.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: If79fc70f5fb8f8e48358048c03a8d39be6b197fb
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: master
Gerrit-Owner: Maxime de Roucy <mderoucy at linagora.com>
More information about the LibreOffice
mailing list