diff options
-rw-r--r-- | sw/qa/extras/rtfexport/data/tdf114333.rtf | 5 | ||||
-rw-r--r-- | sw/qa/extras/rtfexport/data/tdf97035.rtf | 2 | ||||
-rw-r--r-- | sw/qa/extras/rtfexport/rtfexport2.cxx | 4 | ||||
-rw-r--r-- | sw/qa/extras/rtfexport/rtfexport3.cxx | 12 | ||||
-rw-r--r-- | sw/qa/extras/rtfimport/rtfimport.cxx | 2 | ||||
-rw-r--r-- | sw/source/filter/ww8/rtfattributeoutput.cxx | 21 | ||||
-rw-r--r-- | writerfilter/source/rtftok/rtfdispatchsymbol.cxx | 5 | ||||
-rw-r--r-- | writerfilter/source/rtftok/rtfdispatchvalue.cxx | 8 | ||||
-rw-r--r-- | writerfilter/source/rtftok/rtfdocumentimpl.cxx | 8 | ||||
-rw-r--r-- | writerfilter/source/rtftok/rtfdocumentimpl.hxx | 4 |
10 files changed, 45 insertions, 26 deletions
diff --git a/sw/qa/extras/rtfexport/data/tdf114333.rtf b/sw/qa/extras/rtfexport/data/tdf114333.rtf new file mode 100644 index 000000000000..3c2097575aed --- /dev/null +++ b/sw/qa/extras/rtfexport/data/tdf114333.rtf @@ -0,0 +1,5 @@ +{\rtf1
+\trowd\trleft4820\cellx9638
+aaa\cell
+\row
+\par }
\ No newline at end of file diff --git a/sw/qa/extras/rtfexport/data/tdf97035.rtf b/sw/qa/extras/rtfexport/data/tdf97035.rtf index a8f1d8a43e81..da0112436112 100644 --- a/sw/qa/extras/rtfexport/data/tdf97035.rtf +++ b/sw/qa/extras/rtfexport/data/tdf97035.rtf @@ -125,7 +125,7 @@ } }\f3 \li0 \strike0 \ul0 \b0 \ql \fs16 \ri0 \cf1 \i0 \intbl \cell \row }}{ {\trowd \itap0 \trleft0 -\clpadt60 \clpadft3 \clpadr60 \clpadfr3 \clbrdrl \trql \clvertalc \cellx3571 +\clpadt60 \clpadft3 \clpadr60 \clpadfr3 \clbrdrl \trql \clvertalc \cellx3572 \clpadt60 \clpadft3 \clpadr60 \clpadfr3 \trql \clvertalc \cellx15418 \intbl {\li0 \f3 \b0 \ql \ri0 \fs20 \cf1 \i0 diff --git a/sw/qa/extras/rtfexport/rtfexport2.cxx b/sw/qa/extras/rtfexport/rtfexport2.cxx index 99a8ed9abd4a..60032e92a145 100644 --- a/sw/qa/extras/rtfexport/rtfexport2.cxx +++ b/sw/qa/extras/rtfexport/rtfexport2.cxx @@ -1838,9 +1838,9 @@ DECLARE_RTFEXPORT_TEST(testTdf97035, "tdf97035.rtf") uno::UNO_QUERY); uno::Reference<text::XTextTable> xTable(xTables->getByIndex(0), uno::UNO_QUERY); - // First cell width of the second row should be 2299 + // First cell width of the second row should be 2300 uno::Reference<table::XTableRows> xTableRows(xTable->getRows(), uno::UNO_QUERY); - CPPUNIT_ASSERT_EQUAL(sal_Int16(2299), getProperty<uno::Sequence<text::TableColumnSeparator>>( + CPPUNIT_ASSERT_EQUAL(sal_Int16(2300), getProperty<uno::Sequence<text::TableColumnSeparator>>( xTableRows->getByIndex(1), "TableColumnSeparators")[0] .Position); } diff --git a/sw/qa/extras/rtfexport/rtfexport3.cxx b/sw/qa/extras/rtfexport/rtfexport3.cxx index 0c63f23972e0..c8941ed26633 100644 --- a/sw/qa/extras/rtfexport/rtfexport3.cxx +++ b/sw/qa/extras/rtfexport/rtfexport3.cxx @@ -68,6 +68,18 @@ DECLARE_RTFEXPORT_TEST(testTdf104035, "tdf104035.rtf") CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(convertTwipToMm100(450)), aTabStops[0].Position); } +DECLARE_RTFEXPORT_TEST(testTdf114333, "tdf114333.rtf") +{ + uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY); + uno::Reference<container::XIndexAccess> xTables(xTextTablesSupplier->getTextTables(), + uno::UNO_QUERY); + uno::Reference<text::XTextTable> xTable(xTables->getByIndex(0), uno::UNO_QUERY); + // Check the distance from left + CPPUNIT_ASSERT_EQUAL(sal_Int32(8502), getProperty<sal_Int32>(xTable, "LeftMargin")); + // This was 17000 = 8502 + 8498 on import, 15240 on export and following import + CPPUNIT_ASSERT_EQUAL(sal_Int32(8498), getProperty<sal_Int32>(xTable, "Width")); +} + CPPUNIT_PLUGIN_IMPLEMENT(); /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/qa/extras/rtfimport/rtfimport.cxx b/sw/qa/extras/rtfimport/rtfimport.cxx index 2b1127a135d5..8f6d767f96a6 100644 --- a/sw/qa/extras/rtfimport/rtfimport.cxx +++ b/sw/qa/extras/rtfimport/rtfimport.cxx @@ -444,7 +444,7 @@ DECLARE_RTFIMPORT_TEST(testFdo55525, "fdo55525.rtf") CPPUNIT_ASSERT_EQUAL(sal_Int32(-1877), getProperty<sal_Int32>(xTable, "LeftMargin")); // Cell width of A1 was 3332 (e.g. not set, 30% percent of total width) uno::Reference<table::XTableRows> xTableRows(xTable->getRows(), uno::UNO_QUERY); - CPPUNIT_ASSERT_EQUAL(sal_Int16(896), getProperty<uno::Sequence<text::TableColumnSeparator>>( + CPPUNIT_ASSERT_EQUAL(sal_Int16(897), getProperty<uno::Sequence<text::TableColumnSeparator>>( xTableRows->getByIndex(0), "TableColumnSeparators")[0] .Position); } diff --git a/sw/source/filter/ww8/rtfattributeoutput.cxx b/sw/source/filter/ww8/rtfattributeoutput.cxx index ae9bc3f7efb3..59c64b82d9fc 100644 --- a/sw/source/filter/ww8/rtfattributeoutput.cxx +++ b/sw/source/filter/ww8/rtfattributeoutput.cxx @@ -724,23 +724,7 @@ void RtfAttributeOutput::TableDefinition( const SwWriteTableRows& aRows = m_pTableWrt->GetRows(); SwWriteTableRow* pRow = aRows[pTableTextNodeInfoInner->getRow()]; SwTwips nSz = 0; - Point aPt; - SwRect aRect(pFormat->FindLayoutRect(false, &aPt)); - SwTwips nPageSize = aRect.Width(); - // Handle the page size when not rendered - if (0 == nPageSize) - { - const SwNode* pNode = pTableTextNodeInfoInner->getNode(); - const SwFrameFormat* pFrameFormat - = GetExport().m_pParentFrame - ? &GetExport().m_pParentFrame->GetFrameFormat() - : GetExport().m_pDoc->GetPageDesc(0).GetPageFormatOfNode(*pNode, false); - - const SvxLRSpaceItem& rLR = pFrameFormat->GetLRSpace(); - nPageSize = pFrameFormat->GetFrameSize().GetWidth() - rLR.GetLeft() - rLR.GetRight(); - } - SwTwips nTableSz = pFormat->GetFrameSize().GetWidth(); // Not using m_nTableDepth, which is not yet incremented here. sal_uInt32 nCurrentDepth = pTableTextNodeInfoInner->getDepth(); m_aCells[nCurrentDepth] = pRow->GetCells().size(); @@ -756,10 +740,7 @@ void RtfAttributeOutput::TableDefinition( // value of nSz is needed. nSz += pCellFormat->GetFrameSize().GetWidth(); m_aRowDefs.append(OOO_STRING_SVTOOLS_RTF_CELLX); - SwTwips nCalc = nSz; - nCalc *= nPageSize; - nCalc /= nTableSz; - m_aRowDefs.append((sal_Int32)(pFormat->GetLRSpace().GetLeft() + nCalc)); + m_aRowDefs.append((sal_Int32)(pFormat->GetLRSpace().GetLeft() + nSz)); } } diff --git a/writerfilter/source/rtftok/rtfdispatchsymbol.cxx b/writerfilter/source/rtftok/rtfdispatchsymbol.cxx index 8e76355ce945..e5ae836bb206 100644 --- a/writerfilter/source/rtftok/rtfdispatchsymbol.cxx +++ b/writerfilter/source/rtftok/rtfdispatchsymbol.cxx @@ -199,7 +199,8 @@ RTFError RTFDocumentImpl::dispatchSymbol(RTFKeyword nKeyword) new TableRowBuffer(m_aTableBufferStack.back(), m_aNestedTableCellsSprms, m_aNestedTableCellsAttributes, m_nNestedCells)); prepareProperties(m_aStates.top(), pBuffer->pParaProperties, pBuffer->pFrameProperties, - pBuffer->pRowProperties, m_nNestedCells, m_nNestedCurrentCellX); + pBuffer->pRowProperties, m_nNestedCells, + m_nNestedCurrentCellX - m_nNestedTRLeft); if (m_aTableBufferStack.size() == 1 || !m_aStates.top().pCurrentBuffer) { @@ -309,7 +310,7 @@ RTFError RTFDocumentImpl::dispatchSymbol(RTFKeyword nKeyword) writerfilter::Reference<Properties>::Pointer_t frameProperties; writerfilter::Reference<Properties>::Pointer_t rowProperties; prepareProperties(m_aStates.top(), paraProperties, frameProperties, rowProperties, - m_nTopLevelCells, m_nTopLevelCurrentCellX); + m_nTopLevelCells, m_nTopLevelCurrentCellX - m_nTopLevelTRLeft); sendProperties(paraProperties, frameProperties, rowProperties); m_bNeedPap = true; diff --git a/writerfilter/source/rtftok/rtfdispatchvalue.cxx b/writerfilter/source/rtftok/rtfdispatchvalue.cxx index daaf9a44b969..a704bbdf2ffa 100644 --- a/writerfilter/source/rtftok/rtfdispatchvalue.cxx +++ b/writerfilter/source/rtftok/rtfdispatchvalue.cxx @@ -917,6 +917,14 @@ RTFError RTFDocumentImpl::dispatchValue(RTFKeyword nKeyword, int nParam) std::make_shared<RTFValue>(NS_ooxml::LN_Value_ST_TblWidth_dxa)); putNestedAttribute(m_aStates.top().aTableRowSprms, NS_ooxml::LN_CT_TblPrBase_tblInd, NS_ooxml::LN_CT_TblWidth_w, std::make_shared<RTFValue>(nParam)); + auto const aDestination = m_aStates.top().eDestination; + int& rCurrentTRLeft((Destination::NESTEDTABLEPROPERTIES == aDestination) + ? m_nNestedTRLeft + : m_nTopLevelTRLeft); + int& rCurrentCellX((Destination::NESTEDTABLEPROPERTIES == aDestination) + ? m_nNestedCurrentCellX + : m_nTopLevelCurrentCellX); + rCurrentTRLeft = rCurrentCellX = nParam; } break; case RTF_COLS: diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx index 9f53f85f0a07..3cd40f81d9c6 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx @@ -261,6 +261,8 @@ RTFDocumentImpl::RTFDocumentImpl(uno::Reference<uno::XComponentContext> const& x , m_nNestedCells(0) , m_nTopLevelCells(0) , m_nInheritingCells(0) + , m_nNestedTRLeft(0) + , m_nTopLevelTRLeft(0) , m_nNestedCurrentCellX(0) , m_nTopLevelCurrentCellX(0) , m_nBackupTopLevelCurrentCellX(0) @@ -1670,9 +1672,15 @@ void RTFDocumentImpl::resetTableRowProperties() std::make_shared<RTFValue>(-1), RTFOverwrite::NO_APPEND); m_aStates.top().aTableRowAttributes = m_aDefaultState.aTableRowAttributes; if (Destination::NESTEDTABLEPROPERTIES == m_aStates.top().eDestination) + { + m_nNestedTRLeft = 0; m_nNestedCurrentCellX = 0; + } else + { + m_nTopLevelTRLeft = 0; m_nTopLevelCurrentCellX = 0; + } } RTFError RTFDocumentImpl::dispatchToggle(RTFKeyword nKeyword, bool bParam, int nParam) diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.hxx b/writerfilter/source/rtftok/rtfdocumentimpl.hxx index 5988e03d6c63..e8d757c41959 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.hxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.hxx @@ -552,6 +552,10 @@ private: std::deque<RTFSprms> m_aTableInheritingCellsSprms; std::deque<RTFSprms> m_aTableInheritingCellsAttributes; + // Left row margin (for nested and top-level rows) + int m_nNestedTRLeft; + int m_nTopLevelTRLeft; + /// Current cellx value (nested table) int m_nNestedCurrentCellX; /// Current cellx value (top-level table) |