sw/qa/extras/rtfexport/data/Tpl-2min3_s1.rtf    |  321 ++++++++++++++++++++++++
 sw/qa/extras/rtfexport/rtfexport8.cxx           |   39 ++
 sw/source/writerfilter/dmapper/TableManager.cxx |   24 +
 3 files changed, 384 insertions(+)

New commits:
commit 23e308d5e02ee45ef589d3fddf53dabaa12aadfe
Author:     Michael Stahl <michael.st...@collabora.com>
AuthorDate: Mon Jul 21 17:34:30 2025 +0200
Commit:     Mike Kaganski <mike.kagan...@collabora.com>
CommitDate: Wed Jul 23 10:57:31 2025 +0200

    tdf#166953 writerfilter: add column width when adding extra cell
    
    It's not so obvious how the cell widths are set...
    
    1. The table gets USHRT_MAX as initial width
    2. All the cells in the table get USHRT_MAX/nCells as initial width
       (this is SwFrameSizeItem in box item set)
    3. Table property "Width" is set -> this scales all the box widths
    4. Row property "TableColumnSeparators" is set; this is *relative* widths
       to a hard-coded value of TableColumnRelativeSum=10000
    
    Evidently the result is bad if the number of separators is too low.
    
    (regression from commit 038473595ed266d15a788d8f97781cbaf066cfe7)
    
    Change-Id: Ie71889a074bff43d8f0c34ccefb4d30ed0a9f0c0
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/188153
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>

diff --git a/sw/qa/extras/rtfexport/data/Tpl-2min3_s1.rtf 
b/sw/qa/extras/rtfexport/data/Tpl-2min3_s1.rtf
new file mode 100644
index 000000000000..edc79c6d6d10
--- /dev/null
+++ b/sw/qa/extras/rtfexport/data/Tpl-2min3_s1.rtf
@@ -0,0 +1,321 @@
+{ tf1nsi\deff3deflang1025
+{onttbl{0romanprq2charset0 Times New Roman;}{1romanprq2charset2 
Symbol;}{2swissprq2charset0 Arial;}{3romanprq2charset0 Liberation 
Serif{\*alt Times New Roman};}{4romanprq2charset0 Arial;}{5romanprq2
charset0 Calibri Light;}{6romanprq2charset0 Times New Roman;}{7romanprq2
charset0 Liberation Sans{\*alt Arial};}{8romanprq2charset0 Courier New;}{
9romanprq2charset0 Tahoma;}{10romanprq2charset0 Calibri;}{11nilprq2
charset0 Times New Roman;}{12nilprq2charset0 Courier New;}{13nilprq2
charset0 DejaVu Sans;}{14nilprq2charset0 Arial;}{15nilprq2charset0 
FreeSans;}{16nilprq2charset0 Tahoma;}}
+{+{\stylesheet{\s0\snext0 tlchf11fs24lang1025 
\ltrch\lang2057\langfe1033\hichf4\loch\ql\widctlpar\hyphpar0
aauto\sb0\sa200\ltrpar+{\s1\sbasedon0\snext0 tlchf14fs22lang1025 
\ltrch\lang2057\langfe1040\hichf4\loch\qc\widctlparaautoi0\li0\lin0 i0 
in0\sb0\sa200+{\s2\sbasedon1\snext0 tlchf14fs22lang1025 
\ltrch\lang2057\langfe1040\hichf4\loch\ql\widctlparaautoi0\li0\lin0 i0 
in0\sb240\sa240+{\s3\sbasedon2\snext0\sautoupd tlchf14fs22lang1025 
\ltrch\lang2057\langfe1040\hichf4\loch\ql\widctlparaautoi0\li0\lin0 i0 
in0\sb0\sa200+{\s4\sbasedon3\snext0\sautoupd tlchf14fs22lang1025 
\ltrch\lang2057\langfe1040\hichf4\loch\ql\widctlparaautoi0\li0\lin0 i0 
in0\sb0\sa200+{\s9\sbasedon0\snext0 tlchf11fs21lang1025i 
\ltrch\lang2057\langfe1033\hichf5\loch\ql\keep\widctlparaautoi0\li0\lin0 i0 
in0\sb40\sa0\keepn+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\
 
*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\*+{\s172\sbasedon0\snext173
 tlchf15fs28 \ltrch\hichf7\loch\sb240\sa120\keepn7s28\dbchf13 Heading;}
+{\s173\sbasedon0\snext173\loch\sl276\slmult1\sb0\sa140 Body Text;}
+{\s174\sbasedon173\snext174 tlchf15 \ltrch\loch\sl240\slmult1\sb0\sa0 List;}
+{\s175\sbasedon0\snext175 tlchf15fs24i \ltrch\loch\sb120\sa120s24\i 
caption;}
+{\s176\sbasedon0\snext176 tlchf15 \ltrch\loch\sb0\sa0 Index;}
+{\s177\snext177 tlchf11fs20lang1025 
\ltrch\lang2057\langfe2057\hichf6\loch\ql\widctlpar\hyphpar0
aauto\ltrpar+{\s178\sbasedon0\snext178\loch\sb0\sa0 Header and Footer;}
+{\s179\sbasedon0\snext179 tlchf11fs24lang1025 
\ltrch\lang2057\langfe1033\hichf4\loch\ql\widctlpar  qc      x4677   qr      
x9355aautoi0\li0\lin0 i0 in0\sb0\sa200+{\s180\sbasedon177\snext180 
tlchf11fs20lang1025 \ltrch\lang2057\langfe2057\loch\ql\widctlparaauto
i0\li0\lin0 i0 in0rdrtrdrnonerdrlrdrnonerdrbrdrnonerdrrrdrnone
s20\lang2057\dbch\langfe2057 Table Grid;}
+{\s181\sbasedon0\snext181 tlchf11fs20lang1025 
\ltrch\lang2057\langfe1033\loch\ql\widctlparaautoi0\li0\lin0 i0 
in0\sb0\sa200+{\s182\snext182 tlchf11fs20lang1025 
\ltrch\lang2057\langfe1033\hichf8\loch\qj
owidctlpar      x-720\hyphpar0aauto\ltrpar+{\s183\sbasedon0\snext183 
tlchf11fs24lang1025 \ltrch\lang1033\langfe1033\loch\qj\widctlparaauto
i0\li-360\lin-360 i0 in0\sb0\sa200+{\s184\sbasedon0\snext184 
tlchf16fs20lang1025 \ltrch\lang2057\langfe1033\hichf9\loch\ql\widctlpar
aautoi0\li0\lin0 i0 in0\sb0\sa200+{\s185\sbasedon0\snext185 
tlchf11fs20lang1025 \ltrch\lang1033\langfe1036\hichf4\loch\qj
owidctlparaautoi0\li0\lin0 i85 in85\sb0\sa200+{\s186\sbasedon0\snext186 
tlchf11fs20lang1025 \ltrch\lang1033\langfe1036\hichf4\loch\qj
owidctlparaautoi0\li0\lin0 i85 in85\sb0\sa200+{\s187\sbasedon0\snext187 
tlchf11fs24lang1025 \ltrch\lang2057\langfe1033\hichf4\loch\ql\widctlpar   
qc      x4536   qr      x9072aautoi0\li0\lin0 i0 
in0\sb0\sa200+{\s188\sbasedon0\snext188 tlchf16fs16lang1025 
\ltrch\lang2057\langfe1033\hichf9\loch\ql\widctlparaautoi0\li0\lin0 i0 
in0\sb0\sa200+{\s189\sbasedon0\snext189 tlchf11fs20lang1025 
\ltrch\lang2057\langfe1033\hichf4\loch\ql\widctlparaautoi0\li0\lin0 i0 
in0\sb0\sa200+{\s190\sbasedon189\snext189 tlchf11fs20lang1025b 
\ltrch\lang2057\langfe1033\hichf4\loch\ql\widctlparaautoi0\li0\lin0 i0 
in0\sb0\sa200+{\s191\sbasedon0\snext191 tlchf11fs20lang1025 
\ltrch\lang2057\langfe1033\loch\qj\widctlpar   x283aautoi-283\li283\lin283 i0 
in0\sb0\sa240+{\s192\sbasedon0\snext192 tlchf14fs32lang1025b 
\ltrch\lang2057\langfe2057\hichf4\loch\ql\widctlparaautoi0\li0\lin0 i0 
in0\sbauto1\saauto1+{\s193\sbasedon0\snext193 tlchf14fs32lang1025b 
\ltrch\lang2057\langfe2057\hichf4\loch\ql\
 widctlparaautoi0\li0\lin0 i0 in0\sbauto1\saauto1+{\s194\sbasedon0\snext194 
tlchf14fs32lang1025b \ltrch\lang2057\langfe2057\hichf4\loch\qr\widctlpar
acenteri0\li0\lin0 i0 
in0\sbauto1\saauto1rdrtrdrsrdrw30rdrcf1rsp0rdrlrdrsrdrw30rdrcf1rsp0rdrbrdrsrdrw10rdrcf1rsp0rdrrrdrnone+{\s195\sbasedon0\snext195
 tlchf14fs32lang1025b \ltrch\lang2057\langfe2057\hichf4\loch\qr\widctlpar
acenteri0\li0\lin0 i0 
in0\sbauto1\saauto1rdrtrdrsrdrw10rdrcf1rsp0rdrlrdrsrdrw30rdrcf1rsp0rdrbrdrsrdrw30rdrcf1rsp0rdrrrdrnone+{\s196\sbasedon0\snext196
 tlchf14fs24lang1025b \ltrch\lang2057\langfe2057\hichf4\loch\qc\widctlpar
aautoi0\li0\lin0 i0 in0\sbauto1\saauto1+{\s197\sbasedon0\snext197 
tlchf14fs24lang1025b \ltrch\lang2057\langfe2057\hichf4\loch\ql\widctlpar
aautoi0\li0\lin0 i0 in0\sbauto1\saauto1+{\s198\sbasedon0\snext198 
tlchf14fs24lang1025 \ltrch\lang2057\langfe2057\hichf4\loch\ql\widctlpar
aautoi0\li0\lin0 i0 in0\sbauto1\saauto1+{\s199\sbasedon0\sn
 ext199 tlchf14fs24lang1025b 
\ltrch\lang2057\langfe2057\hichf4\loch\ql\widctlparaautoi0\li0\lin0 i0 
in0\sbauto1\saauto1rdrtrdrsrdrw20rdrcf1rsp0rdrlrdrsrdrw20rdrcf1rsp0rdrbrdrnonerdrrrdrnone+{\s200\sbasedon0\snext200
 tlchf14fs24lang1025b \ltrch\lang2057\langfe2057\hichf4\loch\ql\widctlpar
aautoi0\li0\lin0 i0 in0\sbauto1\saauto1+{\s201\sbasedon0\snext201 
tlchf14fs28lang1025b \ltrch\lang2057\langfe2057\hichf4\loch\qc\widctlpar
acenteri0\li0\lin0 i0 
in0\sbauto1\saauto1rdrtrdrsrdrw30rdrcf1rsp0rdrlrdrsrdrw30rdrcf1rsp0rdrbrdrsrdrw20rdrcf1rsp0rdrrrdrsrdrw20rdrcf1rsp0+{\s202\sbasedon0\snext202
 tlchf14fs24lang1025b \ltrch\lang2057\langfe2057\hichf4\loch\qc\widctlpar
aautoi0\li0\lin0 i0 
in0\sbauto1\saauto1rdrtrdrsrdrw30rdrcf1rsp0rdrlrdrsrdrw20rdrcf1rsp0rdrbrdrsrdrw20rdrcf1rsp0rdrrrdrsrdrw10rdrcf1rsp0+{\s203\sbasedon0\snext203
 tlchf14fs24lang1025b \ltrch\lang2057\langfe2057\hichf4\loch\qc\widctlpar
aautoi0\li0\l
 in0 i0 
in0\sbauto1\saauto1rdrtrdrsrdrw30rdrcf1rsp0rdrlrdrsrdrw10rdrcf1rsp0rdrbrdrsrdrw20rdrcf1rsp0rdrrrdrsrdrw10rdrcf1rsp0+{\s204\sbasedon0\snext204
 tlchf14fs24lang1025b \ltrch\lang2057\langfe2057\hichf4\loch\qc\widctlpar
aautoi0\li0\lin0 i0 
in0\sbauto1\saauto1rdrtrdrsrdrw30rdrcf1rsp0rdrlrdrsrdrw10rdrcf1rsp0rdrbrdrsrdrw20rdrcf1rsp0rdrrrdrnone+{\s205\sbasedon0\snext205
 tlchf14fs24lang1025b \ltrch\lang2057\langfe2057\hichf4\loch\qc\widctlpar
aautoi0\li0\lin0 i0 
in0\sbauto1\saauto1rdrtrdrsrdrw30rdrcf1rsp0rdrlrdrsrdrw10rdrcf1rsp0rdrbrdrsrdrw20rdrcf1rsp0rdrrrdrsrdrw30rdrcf1rsp0+{\s206\sbasedon0\snext206
 tlchf14fs28lang1025 \ltrch\lang2057\langfe2057\hichf4\loch\ql\widctlpar
acenteri0\li0\lin0 i0 
in0\sbauto1\saauto1rdrtrdrnonerdrlrdrsrdrw30rdrcf1rsp0rdrbrdrsrdrw10rdrcf1rsp0rdrrrdrsrdrw20rdrcf1rsp0+{\s207\sbasedon0\snext207
 tlchf14fs18lang1025b \ltrch\lang2057\langfe2057\hichf4\loch\qc\widctlpar
 aautoi0\li0\lin0 i0 
in0\sbauto1\saauto1rdrtrdrsrdrw20rdrcf1rsp0rdrlrdrsrdrw20rdrcf1rsp0rdrbrdrsrdrw10rdrcf1rsp0rdrrrdrsrdrw10rdrcf1rsp0+{\s208\sbasedon0\snext208
 tlchf14fs18lang1025b \ltrch\lang2057\langfe2057\hichf4\loch\qc\widctlpar
aautoi0\li0\lin0 i0 
in0\sbauto1\saauto1rdrtrdrsrdrw20rdrcf1rsp0rdrlrdrsrdrw10rdrcf1rsp0rdrbrdrsrdrw10rdrcf1rsp0rdrrrdrsrdrw10rdrcf1rsp0+{\s209\sbasedon0\snext209
 tlchf14fs18lang1025b \ltrch\lang2057\langfe2057\hichf4\loch\ql\widctlpar
aautoi0\li0\lin0 i0 
in0\sbauto1\saauto1rdrtrdrsrdrw20rdrcf1rsp0rdrlrdrsrdrw10rdrcf1rsp0rdrbrdrsrdrw10rdrcf1rsp0rdrrrdrsrdrw10rdrcf1rsp0+{\s210\sbasedon0\snext210
 tlchf14fs18lang1025b \ltrch\lang2057\langfe2057\hichf4\loch\ql\widctlpar
aautoi0\li0\lin0 i0 
in0\sbauto1\saauto1rdrtrdrsrdrw20rdrcf1rsp0rdrlrdrsrdrw10rdrcf1rsp0rdrbrdrsrdrw10rdrcf1rsp0rdrrrdrsrdrw30rdrcf1rsp0+{\s211\sbasedon0\snext211
 tlchf14fs18lang1025b \ltrc
 h\lang2057\langfe2057\hichf4\loch\qc\widctlparaautoi0\li0\lin0 i0 
in0\sbauto1\saauto1rdrtrdrsrdrw10rdrcf1rsp0rdrlrdrsrdrw20rdrcf1rsp0rdrbrdrsrdrw10rdrcf1rsp0rdrrrdrsrdrw10rdrcf1rsp0+{\s212\sbasedon0\snext212
 tlchf14fs18lang1025b \ltrch\lang2057\langfe2057\hichf4\loch\qc\widctlpar
aautoi0\li0\lin0 i0 
in0\sbauto1\saauto1oxrdrsrdrw10rdrcf1rsp0+{\s213\sbasedon0\snext213 
tlchf14fs18lang1025b \ltrch\lang2057\langfe2057\hichf4\loch\ql\widctlpar
aautoi0\li0\lin0 i0 
in0\sbauto1\saauto1oxrdrsrdrw10rdrcf1rsp0+{\s214\sbasedon0\snext214 
tlchf14fs18lang1025b \ltrch\lang2057\langfe2057\hichf4\loch\ql\widctlpar
aautoi0\li0\lin0 i0 
in0\sbauto1\saauto1rdrtrdrsrdrw10rdrcf1rsp0rdrlrdrsrdrw10rdrcf1rsp0rdrbrdrsrdrw10rdrcf1rsp0rdrrrdrsrdrw30rdrcf1rsp0+{\s215\sbasedon0\snext215
 tlchf14fs28lang1025 \ltrch\lang2057\langfe2057\hichf4\loch\ql\widctlpar
acenteri0\li0\lin0 i0 
in0\sbauto1\saauto1rdrtrdrnonerdrlrdrsrdrw30rdrcf1rsp0
 
rdrbrdrsrdrw30rdrcf1rsp0rdrrrdrsrdrw20rdrcf1rsp0+{\s216\sbasedon0\snext216
 tlchf14fs18lang1025b \ltrch\lang2057\langfe2057\hichf4\loch\qc\widctlpar
aautoi0\li0\lin0 i0 
in0\sbauto1\saauto1rdrtrdrsrdrw10rdrcf1rsp0rdrlrdrsrdrw20rdrcf1rsp0rdrbrdrsrdrw30rdrcf1rsp0rdrrrdrsrdrw10rdrcf1rsp0+{\s217\sbasedon0\snext217
 tlchf14fs18lang1025b \ltrch\lang2057\langfe2057\hichf4\loch\qc\widctlpar
aautoi0\li0\lin0 i0 
in0\sbauto1\saauto1rdrtrdrsrdrw10rdrcf1rsp0rdrlrdrsrdrw10rdrcf1rsp0rdrbrdrsrdrw30rdrcf1rsp0rdrrrdrsrdrw10rdrcf1rsp0+{\s218\sbasedon0\snext218
 tlchf14fs18lang1025b \ltrch\lang2057\langfe2057\hichf4\loch\ql\widctlpar
aautoi0\li0\lin0 i0 
in0\sbauto1\saauto1rdrtrdrsrdrw10rdrcf1rsp0rdrlrdrsrdrw10rdrcf1rsp0rdrbrdrsrdrw30rdrcf1rsp0rdrrrdrsrdrw10rdrcf1rsp0+{\s219\sbasedon0\snext219
 tlchf14fs18lang1025b \ltrch\lang2057\langfe2057\hichf4\loch\ql\widctlpar
aautoi0\li0\lin0 i0 in0\sbauto1\saauto1rdrtrdrsr
 
drw10rdrcf1rsp0rdrlrdrsrdrw10rdrcf1rsp0rdrbrdrsrdrw30rdrcf1rsp0rdrrrdrsrdrw30rdrcf1rsp0+{\s220\sbasedon0\snext220
 tlchf14fs48lang1025b \ltrch\lang2057\langfe2057\hichf4\loch\ql\widctlpar
aautoi0\li0\lin0 i0 in0\sbauto1\saauto1+{\s221\sbasedon0\snext221 
tlchf14fs32lang1025b \ltrch\lang2057\langfe2057\hichf4\loch\ql\widctlpar
aautoi0\li0\lin0 i0 in0\sbauto1\saauto1+{\s222\sbasedon0\snext222 
tlchf14fs24lang1025b \ltrch\lang2057\langfe2057\hichf4\loch\qc\widctlpar
aautoi0\li0\lin0 i0 
in0\sbauto1\saauto1rdrtrdrsrdrw20rdrcf1rsp0rdrlrdrsrdrw20rdrcf1rsp0rdrbrdrnonerdrrrdrnone+{\s223\sbasedon0\snext223
 tlchf14fs24lang1025b \ltrch\lang2057\langfe2057\hichf4\loch\qc\widctlpar
aautoi0\li0\lin0 i0 
in0\sbauto1\saauto1rdrtrdrsrdrw20rdrcf1rsp0rdrlrdrnonerdrbrdrnonerdrrrdrnone+{\s224\sbasedon0\snext224
 tlchf14fs24lang1025b \ltrch\lang2057\langfe2057\hichf4\loch\qc\widctlpar
aautoi0\li0\lin0 i0 in0\sbauto1\saauto1rdrtrdrsrdrw2
 
0rdrcf1rsp0rdrlrdrnonerdrbrdrnonerdrrrdrsrdrw20rdrcf1rsp0+{\s225\sbasedon0\snext225
 tlchf14fs32lang1025b \ltrch\lang2057\langfe2057\hichf4\loch\ql\widctlpar
acenteri0\li0\lin0 i0 
in0\sbauto1\saauto1rdrtrdrsrdrw30rdrcf1rsp0rdrlrdrsrdrw20rdrcf1rsp0rdrbrdrsrdrw10rdrcf1rsp0rdrrrdrsrdrw10rdrcf1rsp0+{\s226\sbasedon0\snext226
 tlchf14fs32lang1025b \ltrch\lang2057\langfe2057\hichf4\loch\ql\widctlpar
acenteri0\li0\lin0 i0 
in0\sbauto1\saauto1rdrtrdrsrdrw30rdrcf1rsp0rdrlrdrsrdrw10rdrcf1rsp0rdrbrdrsrdrw10rdrcf1rsp0rdrrrdrsrdrw10rdrcf1rsp0+{\s227\sbasedon0\snext227
 tlchf14fs32lang1025b \ltrch\lang2057\langfe2057\hichf4\loch\ql\widctlpar
acenteri0\li0\lin0 i0 
in0\sbauto1\saauto1rdrtrdrsrdrw30rdrcf1rsp0rdrlrdrsrdrw10rdrcf1rsp0rdrbrdrsrdrw10rdrcf1rsp0rdrrrdrsrdrw30rdrcf1rsp0+{\s228\sbasedon0\snext228
 tlchf14fs32lang1025b \ltrch\lang2057\langfe2057\hichf4\loch\ql\widctlpar
acenteri0\li0\lin0 i0 in0\sbauto1\
 
saauto1rdrtrdrsrdrw10rdrcf1rsp0rdrlrdrsrdrw20rdrcf1rsp0rdrbrdrsrdrw30rdrcf1rsp0rdrrrdrsrdrw10rdrcf1rsp0+{\s229\sbasedon0\snext229
 tlchf14fs32lang1025b \ltrch\lang2057\langfe2057\hichf4\loch\ql\widctlpar
acenteri0\li0\lin0 i0 
in0\sbauto1\saauto1rdrtrdrsrdrw10rdrcf1rsp0rdrlrdrsrdrw10rdrcf1rsp0rdrbrdrsrdrw30rdrcf1rsp0rdrrrdrsrdrw10rdrcf1rsp0+{\s230\sbasedon0\snext230
 tlchf14fs32lang1025b \ltrch\lang2057\langfe2057\hichf4\loch\ql\widctlpar
acenteri0\li0\lin0 i0 
in0\sbauto1\saauto1rdrtrdrsrdrw10rdrcf1rsp0rdrlrdrsrdrw10rdrcf1rsp0rdrbrdrsrdrw30rdrcf1rsp0rdrrrdrsrdrw30rdrcf1rsp0+{\s231\sbasedon0\snext231
 tlchf14fs32lang1025b \ltrch\lang2057\langfe2057\hichf4\loch\ql\widctlpar
acenteri0\li0\lin0 i0 
in0\sbauto1\saauto1rdrtrdrsrdrw20rdrcf1rsp0rdrlrdrsrdrw20rdrcf1rsp0rdrbrdrsrdrw20rdrcf1rsp0rdrrrdrnone+{\s232\sbasedon0\snext232
 tlchf14fs32lang1025b \ltrch\lang2057\langfe2057\hichf4\loch\ql\widctl
 paracenteri0\li0\lin0 i0 
in0\sbauto1\saauto1rdrtrdrsrdrw20rdrcf1rsp0rdrlrdrnonerdrbrdrsrdrw20rdrcf1rsp0rdrrrdrnone+{\s233\sbasedon0\snext233
 tlchf14fs32lang1025b \ltrch\lang2057\langfe2057\hichf4\loch\ql\widctlpar
acenteri0\li0\lin0 i0 
in0\sbauto1\saauto1rdrtrdrsrdrw20rdrcf1rsp0rdrlrdrnonerdrbrdrsrdrw20rdrcf1rsp0rdrrrdrsrdrw20rdrcf1rsp0+{\s234\sbasedon0\snext234
 tlchf14fs32lang1025 \ltrch\lang2057\langfe2057\hichf4\loch\qc\widctlpar
acenteri0\li0\lin0 i0 
in0\sbauto1\saauto1rdrtrdrsrdrw20rdrcf1rsp0rdrlrdrsrdrw20rdrcf1rsp0rdrbrdrsrdrw20rdrcf1rsp0rdrrrdrnone+{\s235\sbasedon0\snext235
 tlchf14fs32lang1025 \ltrch\lang2057\langfe2057\hichf4\loch\qc\widctlpar
acenteri0\li0\lin0 i0 
in0\sbauto1\saauto1rdrtrdrsrdrw20rdrcf1rsp0rdrlrdrnonerdrbrdrsrdrw20rdrcf1rsp0rdrrrdrnone+{\s236\sbasedon0\snext236
 tlchf14fs32lang1025 \ltrch\lang2057\langfe2057\hichf4\loch\qc\widctlpar
acenteri0\li0\lin0 i0 in0\sbauto1\saauto1
 
rdrtrdrsrdrw20rdrcf1rsp0rdrlrdrnonerdrbrdrsrdrw20rdrcf1rsp0rdrrrdrsrdrw20rdrcf1rsp0+{\s237\snext237
 tlchf11fs24lang1025 
\ltrch\lang2057\langfe1033\hichf4\loch\ql\widctlpar\hyphpar0
aauto\ltrpar+{\s238\snext238 tlchf11fs24lang1025 
\ltrch\lang2057\langfe2057\hichf6\loch\ql\widctlpar\hyphpar0
aauto\ltrpar+{\s239\sbasedon0\snext239 tlchf11fs20lang1025 
\ltrch\lang2057\langfe1033\loch\qj\widctlpar  x2160aautoi0\li1440\lin1440 i0 
in0\sb0\sa240+{\s240\sbasedon0\snext240 tlchf11fs23lang1025 
\ltrch\lang2057\langfe2052\loch\sl-274\slmult0\qj
owidctlparaautoi-380\li0\lin0 i0 in0\sb780\sa180+{\s241\sbasedon0\snext241 
tlchf11fs23lang1025b \ltrch\lang2057\langfe2052\loch\sl240\slmult0\ql
owidctlparaautoi0\li0\lin0 i0 in0\sb0\sa200+{\s242\sbasedon177\snext180 
tlchf11fs22lang1025 \ltrch\lang1033\langfe1033\hichf10\loch\ql
owidctlparaautoi0\li0\lin0 i0 
in0rdrtrdrnonerdrlrdrnonerdrbrdrnonerdrrrdrnone10
s22\lang1033\dbch\langfe1033 Table Grid1;}
+{\s243\sbasedon0\snext0\sautoupd tlchf11fs24lang1025 
\ltrch\lang1033\langfe1033\hichf4\loch\ql\widctlpar   ldot    qr      x8505
aautoi0\li0\lin0 i509 in509\sb60\sa60+{\s244\sbasedon0\snext0\sautoupd 
tlchf11fs24lang1025 \ltrch\lang2057\langfe1033\hichf4\loch\ql\widctlpar     
  ldot    qr      x8505aautoi0\li140\lin140 i0 
in0\sb60\sa60+{\s245\sbasedon0\snext0\sautoupd tlchf11fs24lang1025 
\ltrch\lang2057\langfe1033\hichf4\loch\ql\widctlpar       ldot    qr      
x8505aautoi0\li300\lin300 i0 in0\sb60\sa60+{\s246\sbasedon0\snext0\sautoupd 
tlchf11fs24lang1025 \ltrch\lang2057\langfe1033\hichf4\loch\ql\widctlpar     
  ldot    qr      x8505aautoi0\li600\lin600 i0 
in0\sb60\sa60+{\s247\sbasedon0\snext247 tlchf11fs20lang1025 
\ltrch\lang2057\langfe2057\loch\sl-240\slmult0\ql\widctlparaautoi0\li0\lin0 
i0 in0\sb0\sa160\supers20\lang2057\dbch\langfe2057 1;}
+{\s248\sbasedon0\snext248 tlchf14fs16lang1025 
\ltrch\lang2057\langfe1033\hichf4\loch\ql\widctlparaautoi0\li0\lin0 i0 
in0\sb0\sa200+{\s249\sbasedon0\snext249 tlchf14fs16lang1025 
\ltrch\lang1033\langfe1033\hichf4\loch\ql\widctlparaautoi0\li0\lin0 i0 
in0\sb120\sa120+{\s250\sbasedon0\snext250\loch\sb0\sa0 Frame Contents;}
+{\s251\sbasedon0\snext251\loch\sb0\sa0 Frame Contents (user);}
+}{\*\generator Collabora_OfficeDev/25.04.3.1$Linux_X86_64 
LibreOffice_project/22365598a3ebd4eef1c367fbff5b3cdf37980a2f}{\info{+\hyphauto1
iewscale80ormshade
obrkwrptbl\paperh11906\paperw16838\margl1276\margr1276\margt1300\margb1300\sectd\sbknone\sftnnar\saftnnrlc\sectunlocked1\pgwsxn16838\pghsxn11906\marglsxn1276\margrsxn1276\margtsxn1300\margbsxn1300
tnbjtnstart1tnrstconttnnaretftnrstcontftnstart1ftnnrlc
+{\*tnsep+xxxxxxxx}{\loch
+{\*kmkstart _Toc95073555}{\*kmkstart _Toc109213984}x{\*kmkend 
_Toc95073555}{\*kmkend _Toc109213984}}
+\par   rowd    rql     rleft186\ltrrow rrh276  rpaddft3        rpaddt0 
rpaddfl3        rpaddl0 rpaddfb3        rpaddb0 rpaddfr3        
rpaddr0+xxxxxxxxx (xxxxxxxx xx xxxx xxxx 2 xxxxx)}
+\par \pard\plain \s0 tlchf11fs24lang1025 
\ltrch\lang2057\langfe1033\hichf4\loch\ql\widctlpar\hyphpar0
aauto\sb0\sa200\ltrpar+xxxx xx xxxxx xx xxxxx xx xxxx xxx xxxxxxxx xx 
xxxxxxxxxx. xxxxxx xxxxx/xxxxxxx xx xxxxxxxxx.}+xxxxxxxx xxxx:}++xxxxxxxx}+xxxx 
1}+xxxx 2}+xxxx 3}+xxxx 4}+xxxx 5}+xxxx 6}+++x 1}+x 2}+x 3}+x 4}+x 1}+x 2}+ }{ 
tlchfs16b \ltrch\lochs16\loch
+x 3}+ }{ tlchfs16b \ltrch\lochs16\loch
+x 4}+x 1}+x 2}+x 3}+x 4}+x 1}+x 2}+x 3}+x 4}+x 1}+x 2}+x 3}+x 4}+x 1}+x 2}+x 
3}+x 4}++xxxx 1.1 - \u8230\'85 
}++++++++++++++++++++++++++#\u167\'a7xxx-xxx-xx\u167\'a7#                       
                                                                                
                                                }
+\par }
\ No newline at end of file
diff --git a/sw/qa/extras/rtfexport/rtfexport8.cxx 
b/sw/qa/extras/rtfexport/rtfexport8.cxx
index 5ee88d5e842a..6d6f261f5b36 100644
--- a/sw/qa/extras/rtfexport/rtfexport8.cxx
+++ b/sw/qa/extras/rtfexport/rtfexport8.cxx
@@ -175,6 +175,45 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf158586_lostFrame)
     verify();
 }
 
+CPPUNIT_TEST_FIXTURE(Test, testTdf166953)
+{
+    auto verify = [this]() {
+        xmlDocUniquePtr pLayout = parseLayoutDump();
+        assertXPath(pLayout, "/root/page[1]/body/tab/row[1]/infos/bounds", 
"width", u"14149");
+        // the problem was that this width was 544
+        assertXPath(pLayout, 
"/root/page[1]/body/tab/row[1]/cell[1]/infos/bounds", "width",
+                    u"14146");
+        // there is another cell in this row that was added by writerfilter
+        assertXPath(pLayout, "/root/page[1]/body/tab/row[2]/infos/bounds", 
"width", u"14149");
+        // the problem was that this width was 544
+        assertXPath(pLayout, 
"/root/page[1]/body/tab/row[2]/cell[1]/infos/bounds", "width",
+                    u"2408");
+        assertXPath(pLayout, 
"/root/page[1]/body/tab/row[2]/cell[2]/infos/bounds", "width",
+                    u"11738");
+        // there is another cell in this row that was added by writerfilter
+        assertXPath(pLayout, "/root/page[1]/body/tab/row[3]/infos/bounds", 
"width", u"14149");
+        assertXPath(pLayout, 
"/root/page[1]/body/tab/row[3]/cell[1]/infos/bounds", "width",
+                    u"3309");
+        assertXPath(pLayout, 
"/root/page[1]/body/tab/row[3]/cell[2]/infos/bounds", "width",
+                    u"1759");
+        assertXPath(pLayout, 
"/root/page[1]/body/tab/row[3]/cell[3]/infos/bounds", "width",
+                    u"1729");
+        assertXPath(pLayout, 
"/root/page[1]/body/tab/row[3]/cell[4]/infos/bounds", "width",
+                    u"1831");
+        assertXPath(pLayout, 
"/root/page[1]/body/tab/row[3]/cell[5]/infos/bounds", "width",
+                    u"1863");
+        assertXPath(pLayout, 
"/root/page[1]/body/tab/row[3]/cell[6]/infos/bounds", "width",
+                    u"1865");
+        assertXPath(pLayout, 
"/root/page[1]/body/tab/row[3]/cell[7]/infos/bounds", "width",
+                    u"1791");
+        // there is another cell in this row that was already in the RTF
+    };
+    createSwDoc("Tpl-2min3_s1.rtf");
+    verify();
+    saveAndReload(mpFilter);
+    verify();
+}
+
 CPPUNIT_TEST_FIXTURE(Test, testEndnotesAtSectEndRTF)
 {
     // Given a document, endnotes at collected at section end:
diff --git a/sw/source/writerfilter/dmapper/TableManager.cxx 
b/sw/source/writerfilter/dmapper/TableManager.cxx
index 2baace56973b..54aa10765f59 100644
--- a/sw/source/writerfilter/dmapper/TableManager.cxx
+++ b/sw/source/writerfilter/dmapper/TableManager.cxx
@@ -25,6 +25,7 @@
 #include "util.hxx"
 #include <comphelper/sequence.hxx>
 #include <comphelper/diagnose_ex.hxx>
+#include <com/sun/star/text/TableColumnSeparator.hpp>
 
 using namespace com::sun::star;
 
@@ -428,6 +429,29 @@ void TableManager::HandleSmallerRows()
                 pRowData->addCell(xNewCellTextCursor, pCellPropMap);
                 pRowData->endCell(xNewCellTextCursor);
                 
pRowData->getProperties()->setValue(TablePropertyMap::TABLE_WIDTH, 
nMaxRowWidth);
+                // tdf#166953 the TableColumnSeparators property needs another
+                // separator for the extra cell added to it
+                auto const oSep{ pRowData->getProperties()->getProperty(
+                    PROP_TABLE_COLUMN_SEPARATORS) };
+                if (oSep)
+                {
+                    auto const oldSeps{
+                        
oSep->second.get<uno::Sequence<text::TableColumnSeparator>>()
+                    };
+                    ::std::remove_const_t<decltype(oldSeps)> newSeps{ 
oldSeps.getLength() + 1 };
+                    auto const it{ ::std::transform(
+                        oldSeps.begin(), oldSeps.end(), newSeps.getArray(), 
[&](auto const sep) {
+                            double const pos{ sep.Position * double(nRowWidth) 
/ nMaxRowWidth };
+                            return text::TableColumnSeparator{
+                                
static_cast<sal_Int16>(::rtl::math::round(pos)), sep.IsVisible
+                            };
+                        }) };
+                    // TODO replace magic number
+                    it->Position = ::rtl::math::round(10000 * 
double(nRowWidth) / nMaxRowWidth);
+                    it->IsVisible = true;
+                    
pRowData->getProperties()->Insert(PROP_TABLE_COLUMN_SEPARATORS,
+                                                      uno::Any(newSeps));
+                }
             }
         }
     }

Reply via email to