sw/qa/extras/layout/data/section-break-hidden-paragraphs.rtf | 2 sw/qa/extras/ooxmlexport/ooxmlexport12.cxx | 11 sw/qa/extras/rtfimport/data/165717.rtf | 178 +++++++++++ sw/qa/extras/rtfimport/rtfimport.cxx | 9 sw/source/writerfilter/dmapper/DomainMapper.cxx | 2 sw/source/writerfilter/dmapper/PropertyMap.cxx | 137 +++++--- sw/source/writerfilter/dmapper/PropertyMap.hxx | 3 sw/source/writerfilter/rtftok/rtfdispatchsymbol.cxx | 6 8 files changed, 294 insertions(+), 54 deletions(-)
New commits: commit a2a88f0073bdd5119745679daa61469e87002579 Author: Oliver Specht <oliver.spe...@cib.de> AuthorDate: Wed Mar 12 15:39:00 2025 +0100 Commit: Michael Stahl <michael.st...@allotropia.de> CommitDate: Tue Mar 18 11:46:42 2025 +0100 tdf#165717, tdf#165718 additional hack to apply continuous section breaks Keeps reference to range in front of the current range to apply page style to an already available page break in cases where the section starts with a table. Page number restart is also applied in the old and the new code. Remove of dummy section paragraphs introduced with b696600821d8aafb63b6a88016d299ef89478f56 is now only performed if it is no RTF import. This causes: Test name: testHiddenParaBreaks::TestBody equality assertion failed - Expected: 3 - Actual : 4 - In <>, XPath '/root/page[2]/body/txt' number of nodes is incorrect But the file is not imported correctly anyway and this is actually fixing a bug, so adapt the test file. rtfimport.cxx:910:Assertion Test name: (anonymous namespace)::testContSectionPageBreak::TestBody equality assertion failed - Expected: THIRD - Actual : The problem here is that the extra paragraph that is inserted for \sect if m_bIgnoreNextContSectBreak is now wrong as it was previously removed but no longer is, so don't insert the extra paragraph any more. But leave the extra paragraph in case it's a frame, otherwise we get: rtfexport8.cxx:91:(anonymous namespace)::testTdf158586_0::TestBody equality assertion failed - Expected: 1 - Actual : 2 testTd112202 fails, but Oliver says that extra page 6 is an improvement. Change-Id: Ie9a22f00e75c797762f52e6b865e32002051988c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/182830 Tested-by: Jenkins Reviewed-by: Michael Stahl <michael.st...@allotropia.de> diff --git a/sw/qa/extras/layout/data/section-break-hidden-paragraphs.rtf b/sw/qa/extras/layout/data/section-break-hidden-paragraphs.rtf index f8526dafe5ea..4dc442bea367 100644 --- a/sw/qa/extras/layout/data/section-break-hidden-paragraphs.rtf +++ b/sw/qa/extras/layout/data/section-break-hidden-paragraphs.rtf @@ -54,7 +54,7 @@ Normal Table;}{\* s15 srowd rbrdrtrdrsrdrw10 rbrdrlrdrsrdrw10 rbr s22\lang2057\langfe1028\lochf31506\hichf31506\dbchf31505 \linex0\headery708ootery708 \ltrchcs0 s22\lang2057\langfe1028\lochf31506\hichf31506\dbchf31505-\par \par }{ tlch cs1 f31507 \ltrchcs0 \lang1031\langfe1028\langnp1031 +\par }{ tlchcs1 f31507 \ltrchcs0 \lang1031\langfe1028\langnp1031 \par \ltrrow} rowd \irow0\irowband0\lastrow \ltrrow s15 rgaph108 rleft5 rbrdrtrdrsrdrw10 rbrdrlrdrsrdrw10 rbrdrbrdrsrdrw10 rbrdrrrdrsrdrw10 rbrdrhrdrsrdrw10 rbrdrvrdrsrdrw10 rftsWidth1 rftsWidthB3 rautofit1 rpaddl108 rpaddr108 rpaddfl3 rpaddft3 rpaddfb3 rpaddfr3 bllkhdrrows bllkhdrcols bllknocolband blind0 blindtype3 diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport12.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport12.cxx index e34b17467348..9a57a288cbbd 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport12.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport12.cxx @@ -713,14 +713,15 @@ CPPUNIT_TEST_FIXTURE(Test, testTd112202) "portion", u"Titel der studentischen Arbeit"); assertXPath(pXmlDoc, "/root/page[5]/header//anchored", 0); - // page 6: same as page 4 - assertXPath(pXmlDoc, "/root/page[6]/header/txt", 1); - assertXPath(pXmlDoc, "/root/page[6]/header/tab", 1); + // page 7: same as page 4 + // page 6 is automatically empty since page number is applied with tdf#165717 tdf#165718 + assertXPath(pXmlDoc, "/root/page[7]/header/txt", 1); + assertXPath(pXmlDoc, "/root/page[7]/header/tab", 1); assertXPath(pXmlDoc, - "/root/page[6]/header/tab/row[1]/cell[1]/txt[1]/SwParaPortion/SwLineLayout/" + "/root/page[7]/header/tab/row[1]/cell[1]/txt[1]/SwParaPortion/SwLineLayout/" "SwParaPortion", "portion", u"Titel der studentischen Arbeit"); - assertXPath(pXmlDoc, "/root/page[6]/header//anchored", 0); + assertXPath(pXmlDoc, "/root/page[7]/header//anchored", 0); }; createSwDoc("090716_Studentische_Arbeit_VWS.docx"); diff --git a/sw/qa/extras/rtfimport/data/165717.rtf b/sw/qa/extras/rtfimport/data/165717.rtf new file mode 100644 index 000000000000..b5531d92e8d2 --- /dev/null +++ b/sw/qa/extras/rtfimport/data/165717.rtf @@ -0,0 +1,178 @@ +{ tf1deflang1025nsinsicpg1252\uc1deff0\deff0\stshfdbch0\stshfloch31506\stshfhich31506\stshfbi31506\deflang1031\deflangfe1041 hemelang3079 hemelangfe0 hemelangcs0{onttbl{0bidi roman charset0prq2{\*\panose 02020603050405020304}Times New Roman{\*alt Arial};} +{1bidi swisscharset0prq2{\*\panose 020b0604020202020204}Arial{\*alt Arial};}{34bidi romancharset0prq2{\*\panose 02040503050406030204}Cambria Math;}{48bidi swisscharset0prq2{\*\panose 020b0502040204020203}Segoe UI;} +{49bidi swisscharset0prq2{\*\panose 020b0503020204020204}Corbel;}{ lomajor31500bidi romancharset0prq2{\*\panose 02020603050405020304}Times New Roman{\*alt Arial};} +{dbmajor31501bidi romancharset0prq2{\*\panose 02020603050405020304}Times New Roman{\*alt Arial};}{himajor31502bidi romancharset0prq2{\*\panose 02040503050406030204}Cambria;} +{bimajor31503bidi romancharset0prq2{\*\panose 02020603050405020304}Times New Roman{\*alt Arial};}{lominor31504bidi romancharset0prq2{\*\panose 02020603050405020304}Times New Roman{\*alt Arial};} +{dbminor31505bidi romancharset0prq2{\*\panose 02020603050405020304}Times New Roman{\*alt Arial};}{himinor31506bidi swisscharset0prq2{\*\panose 020f0502020204030204}Calibri;} +{biminor31507bidi romancharset0prq2{\*\panose 02020603050405020304}Times New Roman{\*alt Arial};}{51bidi romancharset238prq2 Times New Roman CE{\* alt Arial};} +{52bidi romancharset204prq2 Times New Roman Cyr{\*alt Arial};}{54bidi romancharset161prq2 Times New Roman Greek{\*alt Arial};}{55bidi roman charset162prq2 Times New Roman Tur{\*alt Arial};} +{56bidi romancharset177prq2 Times New Roman (Hebrew){\*alt Arial};}{57 bidi romancharset178prq2 Times New Roman (Arabic){\*alt Arial};}{58bidi romancharset186prq2 Times New Roman Baltic{\*alt Arial};} +{59bidi romancharset163prq2 Times New Roman (Vietnamese){\*alt Arial};}{ 61bidi swisscharset238prq2 Arial CE{\*alt Arial};}{62bidi swiss charset204prq2 Arial Cyr{\*alt Arial};} +{64bidi swisscharset161prq2 Arial Greek{\*alt Arial};}{65bidi swiss charset162prq2 Arial Tur{\*alt Arial};}{66bidi swisscharset177prq2 Arial (Hebrew){\*alt Arial};} +{67bidi swisscharset178prq2 Arial (Arabic){\*alt Arial};}{68bidi swisscharset186prq2 Arial Baltic{\*alt Arial};}{69bidi swisscharset163 prq2 Arial (Vietnamese){\*alt Arial};} +{391bidi romancharset238prq2 Cambria Math CE;}{392bidi roman charset204prq2 Cambria Math Cyr;}{394bidi romancharset161prq2 Cambria Math Greek;}{395bidi romancharset162prq2 Cambria Math Tur;} +{398bidi romancharset186prq2 Cambria Math Baltic;}{399bidi roman charset163prq2 Cambria Math (Vietnamese);}{531bidi swisscharset238prq2 Segoe UI CE;}{532bidi swisscharset204prq2 Segoe UI Cyr;} +{534bidi swisscharset161prq2 Segoe UI Greek;}{535bidi swisscharset162 prq2 Segoe UI Tur;}{536bidi swisscharset177prq2 Segoe UI (Hebrew);}{537 bidi swisscharset178prq2 Segoe UI (Arabic);} +{538bidi swisscharset186prq2 Segoe UI Baltic;}{539bidi swiss charset163prq2 Segoe UI (Vietnamese);}{541bidi swisscharset238prq2 Corbel CE;}{542bidi swisscharset204prq2 Corbel Cyr;} +{544bidi swisscharset161prq2 Corbel Greek;}{545bidi swisscharset162 prq2 Corbel Tur;}{548bidi swisscharset186prq2 Corbel Baltic;}{549bidi swisscharset163prq2 Corbel (Vietnamese);} +{lomajor31508bidi romancharset238prq2 Times New Roman CE{\*alt Arial};}{lomajor31509bidi romancharset204prq2 Times New Roman Cyr{\*alt Arial};} +{lomajor31511bidi romancharset161prq2 Times New Roman Greek{\*alt Arial};}{lomajor31512bidi romancharset162prq2 Times New Roman Tur{\*alt Arial};} +{lomajor31513bidi romancharset177prq2 Times New Roman (Hebrew){\*alt Arial};}{lomajor31514bidi romancharset178prq2 Times New Roman (Arabic){\* alt Arial};} +{lomajor31515bidi romancharset186prq2 Times New Roman Baltic{\*alt Arial};}{lomajor31516bidi romancharset163prq2 Times New Roman (Vietnamese){\*alt Arial};} +{dbmajor31518bidi romancharset238prq2 Times New Roman CE{\*alt Arial};}{dbmajor31519bidi romancharset204prq2 Times New Roman Cyr{\*alt Arial};} +{dbmajor31521bidi romancharset161prq2 Times New Roman Greek{\*alt Arial};}{dbmajor31522bidi romancharset162prq2 Times New Roman Tur{\*alt Arial};} +{dbmajor31523bidi romancharset177prq2 Times New Roman (Hebrew){\*alt Arial};}{dbmajor31524bidi romancharset178prq2 Times New Roman (Arabic){\* alt Arial};} +{dbmajor31525bidi romancharset186prq2 Times New Roman Baltic{\*alt Arial};}{dbmajor31526bidi romancharset163prq2 Times New Roman (Vietnamese){\*alt Arial};}{himajor31528bidi romancharset238prq2 Cambria CE;} +{himajor31529bidi romancharset204prq2 Cambria Cyr;}{himajor31531bidi romancharset161prq2 Cambria Greek;}{himajor31532bidi romancharset162 prq2 Cambria Tur;} +{himajor31535bidi romancharset186prq2 Cambria Baltic;}{himajor31536 bidi romancharset163prq2 Cambria (Vietnamese);}{bimajor31538bidi roman charset238prq2 Times New Roman CE{\*alt Arial};} +{bimajor31539bidi romancharset204prq2 Times New Roman Cyr{\*alt Arial};}{bimajor31541bidi romancharset161prq2 Times New Roman Greek{\* alt Arial};} +{bimajor31542bidi romancharset162prq2 Times New Roman Tur{\*alt Arial};}{bimajor31543bidi romancharset177prq2 Times New Roman (Hebrew){\* alt Arial};} +{bimajor31544bidi romancharset178prq2 Times New Roman (Arabic){\*alt Arial};}{bimajor31545bidi romancharset186prq2 Times New Roman Baltic{\* alt Arial};} +{bimajor31546bidi romancharset163prq2 Times New Roman (Vietnamese){\* alt Arial};}{lominor31548bidi romancharset238prq2 Times New Roman CE{\* alt Arial};} +{lominor31549bidi romancharset204prq2 Times New Roman Cyr{\*alt Arial};}{lominor31551bidi romancharset161prq2 Times New Roman Greek{\* alt Arial};} +{lominor31552bidi romancharset162prq2 Times New Roman Tur{\*alt Arial};}{lominor31553bidi romancharset177prq2 Times New Roman (Hebrew){\* alt Arial};} +{lominor31554bidi romancharset178prq2 Times New Roman (Arabic){\*alt Arial};}{lominor31555bidi romancharset186prq2 Times New Roman Baltic{\* alt Arial};} +{lominor31556bidi romancharset163prq2 Times New Roman (Vietnamese){\* alt Arial};}{dbminor31558bidi romancharset238prq2 Times New Roman CE{\* alt Arial};} +{dbminor31559bidi romancharset204prq2 Times New Roman Cyr{\*alt Arial};}{dbminor31561bidi romancharset161prq2 Times New Roman Greek{\* alt Arial};} +{dbminor31562bidi romancharset162prq2 Times New Roman Tur{\*alt Arial};}{dbminor31563bidi romancharset177prq2 Times New Roman (Hebrew){\* alt Arial};} +{dbminor31564bidi romancharset178prq2 Times New Roman (Arabic){\*alt Arial};}{dbminor31565bidi romancharset186prq2 Times New Roman Baltic{\* alt Arial};} +{dbminor31566bidi romancharset163prq2 Times New Roman (Vietnamese){\* alt Arial};}{himinor31568bidi swisscharset238prq2 Calibri CE;}{himinor 31569bidi swisscharset204prq2 Calibri Cyr;} +{himinor31571bidi swisscharset161prq2 Calibri Greek;}{himinor31572 bidi swisscharset162prq2 Calibri Tur;}{himinor31573bidi swisscharset177 prq2 Calibri (Hebrew);} +{himinor31574bidi swisscharset178prq2 Calibri (Arabic);}{himinor31575 bidi swisscharset186prq2 Calibri Baltic;}{himinor31576bidi swiss charset163prq2 Calibri (Vietnamese);} +{biminor31578bidi romancharset238prq2 Times New Roman CE{\*alt Arial};}{biminor31579bidi romancharset204prq2 Times New Roman Cyr{\*alt Arial};} +{biminor31581bidi romancharset161prq2 Times New Roman Greek{\*alt Arial};}{biminor31582bidi romancharset162prq2 Times New Roman Tur{\*alt Arial};} +{biminor31583bidi romancharset177prq2 Times New Roman (Hebrew){\*alt Arial};}{biminor31584bidi romancharset178prq2 Times New Roman (Arabic){\* alt Arial};} +{biminor31585bidi romancharset186prq2 Times New Roman Baltic{\*alt Arial};}{biminor31586bidi romancharset163prq2 Times New Roman (Vietnamese){\*alt Arial};}}{+ ed0\green255lue255; ed0\green255lue0; ed255\green0lue255; ed255\green0lue0; ed255\green255lue0; ed255\green255lue255; ed0\green0lue128; ed0\green128lue128; ed0\green128lue0; ed128\green0lue128; ed128\green0lue0; + ed128\green128lue0; ed128\green128lue128; ed192\green192lue192; ed0\green0lue0; ed0\green0lue0;}{\*\defchp 31506 s22\lang3079\langfe1033\langnp3079\langfenp1033 }{\*\defpap \ql \li0 i0\sa200\sl276\slmult1 +\widctlpar\wrapdefaultspalphaspnumaautodjustright in0\lin0\itap0 } oqfpromote {\stylesheet{\ql \li0 i0\sa200\sl276\slmult1\widctlpar\wrapdefaultspalphaspnumaautodjustright in0\lin0\itap0 tlchcs1 f0fs22lang1025 \ltrchcs0 +49s23\lang3079\langfe1033+ s11 srowd rftsWidthB3 rpaddl108 rpaddr108 rpaddfl3 rpaddft3 rpaddfb3 rpaddfr3 blind0 blindtype3 svertalt sbrdrt sbrdrl sbrdrb sbrdrr sbrdrdgl sbrdrdgr sbrdrh sbrdrv \ql \li0 i0\sa200\sl276\slmult1 +\widctlpar\wrapdefaultspalphaspnumaautodjustright in0\lin0\itap0 tlchcs1 f31506fs22lang1025 \ltrchcs0 31506s22\lang3079\langfe1033+\s15\ql \li0 i0\widctlpar qc x4536 qr x9072\wrapdefaultspalphaspnum aautodjustright in0\lin0\itap0 tlchcs1 f0fs22lang1025 \ltrchcs0 49 s23\lang3079\langfe1033+\sbasedon0 \snext15 \slink16 \sunhideused header;}{\*+ qc x4536 qr x9072\wrapdefaultspalphaspnumaautodjustright in0\lin0\itap0 tlchcs1 f0fs22lang1025 \ltrchcs0 49 s23\lang3079\langfe1033+\sbasedon0 \snext17 \slink18 \sunhideused \spriority57 footer;}{\*++ rftsWidthB3 rpaddl108 rpaddr108 rpaddfl3 rpaddft3 rpaddfb3 rpaddfr3 blind0 blindtype3 svertalt sbrdrt sbrdrl sbrdrb sbrdrr sbrdrdgl sbrdrdgr sbrdrh sbrdrv +\ql \li0 i0\widctlpar\wrapdefaultspalphaspnumaautodjustright in0\lin0\itap0 tlchcs1 f0fs22lang1025 \ltrchcs0 31506 s22\lang3079\langfe1033+\s21\ql \li720 i0\sa200\sl276\slmult1\widctlpar\wrapdefaultspalphaspnumaautodjustright in0\lin720\itap0+\sbasedon0 \snext21 \sqformat \spriority34 List Paragraph;}{\s22\ql \li0 i0\widctlparrdrtrdrsrdrw10rsp20 rdrlrdrsrdrw10rsp80 rdrbrdrsrdrw10rsp20 rdrrrdrsrdrw10rsp80 +\wrapdefaultspalphaspnumaauto\outlinelevel0djustright in0\lin0\itap0 tlch cs1 f0fs20lang1025 \ltrchcs0 s26+\s23\ql \li0 i0\widctlpar\wrapdefaultspalphaspnumaautodjustright in0\lin0\itap0 tlch cs1 f48fs18lang1025 \ltrchcs0 48s18\lang3079\langfe1033+\sbasedon0 \snext23 \slink24 \ssemihidden \sunhideused Balloon Text;}{\*+rdrsrdrw10 rbrdrlrdrsrdrw10 rbrdrbrdrsrdrw10 rbrdrrrdrsrdrw10 rbrdrhrdrsrdrw10 rbrdrvrdrsrdrw10 + rftsWidthB3 rpaddl108 rpaddr108 rpaddfl3 rpaddft3 rpaddfb3 rpaddfr3 blind0 blindtype3 svertalt sbrdrt sbrdrl sbrdrb sbrdrr sbrdrdgl sbrdrdgr sbrdrh sbrdrv +\ql \li0 i0\widctlpar\wrapdefaultspalphaspnumaautodjustright in0\lin0\itap0 tlchcs1 f0fs22lang1025 \ltrchcs0 31506 s22\lang1031\langfe1033+Tabellenraster1;}{\s26\ql \li0 i0\sa345\sl264\slmult1\widctlpar\wrapdefaultspalphaspnum aauto\outlinelevel0djustright in0\lin0\itap0+s28\lang1031\langfe1033\loch 31502\hichf31502\dbchf31505+s23\lang1031\langfe0\loch 31502\hichf31502\dbchf31505+\widctlpar\wrapdefaultspalphaspnum aautodjustright in0\lin0\itap0 tlchcs1 f0fs23lang1025 \ltrchcs0 s23\lang1031\langfe1033\loch31506\hichf31506\dbchf31505+\sbasedon0 \snext28 \slink29 \sqformat \spriority1 No Spacing;}{\*+Kein Leerraum Zchn;}}{\*\listtable}{\*\listoverridetable}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1 +\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{ itle incl_DBBezeichnung_klein}{uthor e107}{\operator Oliver Specht}{+{ ersion2}{dmins0}{ ofpages2}{ ofwords8}{ ofchars54}{\*+\paperw11906\paperh16838\margl1417\margr1417\margt1417\margb1134\gutter0\ltrsect +\deftab708\widowctrltnbjenddoc\pgnstart3\hyphhotz425 rackmoves0 rackformatting1\donotembedsysfont1 elyonvml0\donotembedlingdata0\grfdocevents0 alidatexml1\showplaceholdtext0\ignoremixedcontent0 +\saveinvalidxml0\showxmlerrors1 oxlattoyenxpshrtn oultrlspc\dntblnsbdb ospaceforul ormshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1417\dgvorigin1417\dghshow1\dgvshow1 +\jexpandiewkind1iewscale130\pgbrdrhead\pgbrdrfoot\splytwnine tnlytwnine\htmautsp olnhtadjtbl\useltbalnlntblind\lytcalctblwd\lyttblrtgr\lnbrkrule obrkwrptbl\snaptogridincellllowfieldendsel\wrppunct +sianbrkrule ewtblstyruls ogrowautofit\usenormstyforlist oindnmbrtselnbrelev ocxsptable\indrlsweleven oafcnsttblfelev\utinl\hwelev\spltpgpar otcvasp otbrkcnstfrctbl otvatxbx\krnprsnet+{\*\wgrffmtfilter 2450} ofeaturethrottle1\ilfomacatclnup0{\*tnsep \ltrpar \pard\plain \ltrpar\ql \li0 i0\widctlpar\wrapdefaultspalphaspnumaautodjustright in0\lin0\itap0 tlchcs1 f0fs22lang1025 \ltrchcs0 +49s23\lang3079\langfe1033+\par }}{\*tnsepc \ltrpar \pard\plain \ltrpar\ql \li0 i0\widctlpar\wrapdefaultspalphaspnumaautodjustright in0\lin0\itap0 tlchcs1 f0fs22lang1025 \ltrchcs0 49s23\lang3079\langfe1033+ tlchcs1 f0 \ltrchcs0 +\par }}{\*ftnsep \ltrpar \pard\plain \ltrpar\ql \li0 i0\widctlpar\wrapdefaultspalphaspnumaautodjustright in0\lin0\itap0 tlchcs1 f0fs22lang1025 \ltrchcs0 49s23\lang3079\langfe1033+ tlchcs1 f0 \ltrch cs0 +\par }}{\*ftnsepc \ltrpar \pard\plain \ltrpar\ql \li0 i0\widctlpar\wrapdefaultspalphaspnumaautodjustright in0\lin0\itap0 tlchcs1 f0fs22lang1025 \ltrchcs0 49s23\lang3079\langfe1033+ tlchcs1 f0 \ltrch cs0 +\par }}\ltrpar \sectd \ltrsect\pgnrestart\pgnstarts3\linex0\headery708 ootery708+ qc x4536 qr x9072\wrapdefaultspalphaspnum aautodjustright in0\lin0\itap0 tlchcs1 f0fs22lang1025 \ltrchcs0 49 s23\lang3079\langfe1033+\lang1031\langfe1033\langnp1031Header 1}{ tlchcs1 f0 \ltrchcs0 \lang1031\langfe1033\langn p1031 +\par }}{\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}} +{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8 +\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\ql \li0 i0\sa200\sl276\slmult1 +\widctlpar\wrapdefaultspalphaspnumaautodjustright in0\lin0\itap0 tlchcs1 f0fs22lang1025 \ltrchcs0 49s23\lang3079\langfe1033+ s24\lang1033\langfe1033\langnp1033 paragraph 1 +\par }\pard \ltrpar\ql \li0 i0\sa200\sl276\slmult1\widctlpar\wrapdefaultspalphaspnumaautodjustright in0\lin0\itap0 { tlchcs1 f0fs24 \ltrchcs0 s24\lang1033\langfe1033\langnp1033 +before page break\page }{ tlchcs1 f0fs24 \ltrchcs0 s24\lang1033\langfe1033\langnp1033 before section break\sect }\sectd \ltrsect +\marglsxn1077\margrsxn1077\margtsxn1440\margbsxn1440\sbknone\pgnrestart\linex0\headery709 ootery709+ qc x4536 qr x9072\wrapdefaultspalphaspnum aautodjustright in0\lin0\itap0 tlchcs1 f0fs22lang1025 \ltrchcs0 49 s23\lang3079\langfe1033+\lang1031\langfe1033\langnp1031 Header 2}{ tlchcs1 f0 \ltrchcs0 \lang1031\langfe1033\langnp1031 +\par }{ tlchcs1 f0 \ltrchcs0 \lang1031\langfe1033\langnp1031 +\par }}{ooterr \ltrpar \pard\plain \ltrpar\s17\ql \li0 i0\widctlpar qc x4536 qr x9072\wrapdefaultspalphaspnumaautodjustright in0\lin0\itap0 tlchcs1 f0fs22lang1025 \ltrchcs0 +49s23\lang3079\langfe1033+\par }}{\headerf \ltrpar \pard\plain \ltrpar\s15\ql \li0 i0\widctlpar qc x4536 qr x9072\wrapdefaultspalphaspnumaautodjustright in0\lin0\itap0 tlchcs1 f0fs22lang1025 \ltrchcs0 +49 s23\lang3079\langfe1033+{\shp{\*\shpinst\shpleft113\shptop5954\shpright680\shpbottom5954\shpfhdr0\shpbxpage\shpbxignore\shpbypage\shpbyignore\shpwr3\shpwrk0\shpfblwtxt0\shpz0\shplockanchor\shplid1025{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}} +{\sp{\sn fLockRotation}{\sv 0}}{\sp{\sn fLockAspectRatio}{\sv 0}}{\sp{\sn fLockPosition}{\sv 0}}{\sp{\sn fLockAgainstSelect}{\sv 0}}{\sp{\sn fLockVerticies}{\sv 0}}{\sp{\sn fLockAdjustHandles}{\sv 0}} +{\sp{\sn fLockAgainstGrouping}{\sv 0}}{\sp{\sn fFillOK}{\sv 0}}{\sp{\sn fFilled}{\sv 0}}{\sp{\sn lineColor}{\sv 12566463}{\*\hsv +{\sp{\sn fLockShapeType}{\sv 0}}{\sp{\sn wzName}{\sv Gerade Verbindung 2}}{\sp{\sn dyWrapDistTop}{\sv -1}}{\sp{\sn dyWrapDistBottom}{\sv -1}}{\sp{\sn posrelh}{\sv 1}}{\sp{\sn posrelv}{\sv 1}}{\sp{\sn metroBlob}{\sv {\*\svb +504b030414000600080000002100b6833892fe000000e1010000130000005b436f6e74656e745f54797065735d2e786d6c9491414ec3301045f748dcc1f216254ebb400825e982b44b40a81c60644f128b646c794c686f8f93b61b449158da33ffbf27bbdc1cc6414c18d83aaae42a2fa440d2ce58ea2af9bedf650f527004 +323038c24a1e91e5a6bebd29f7478f2c529ab8927d8cfe5129d63d8ec0b9f34869d2ba30424cc7d0290ffa033a54eba2b857da51448a599c3b645d36d8c2e710c5f690ae4f26010796e2e9b438b32a09de0f56434ca66a22f383929d09794a2e3bdc5bcf774943aa5f09f3e43ae09c7b494f13ac41f10a213ec398349409ac +70ed1aa7f3bf3b66c99133d7b65663de04de2ea98bd3b56ee3be28e0f4dff226c5de70bab4abe583ea6f000000ffff0300504b03041400060008000000210038fd21ffd6000000940100000b0000005f72656c732f2e72656c73a490c16ac3300c86ef83bd83d17d719ac318a34e2fa3d06be91ec0d88a631a5b4632d9faf6 +3383c1327adb51bfd0f7897f7ff84c8b5a91255236b0eb7a50981df9988381f7cbf1e90594549bbd5d28a3811b0a1cc6c787fd19175bdb91ccb1886a942c06e65acbabd6e2664c563a2a98db66224eb6b691832ed65d6d403df4fdb3e6df0c18374c75f206f8e40750975b69e63fec141d93d0543b4749d33445778faa3d7d +e433ae8d62396035e059be43c6b56bcf81beefddfdd31bd89639ba23db846fe4b67e1ca8653f7abde972fc020000ffff0300504b030414000600080000002100dc60c717f0010000410400000e0000006472732f65326f446f632e786d6cac534d8fd33010bd23f11f2cdf69d2c2161435ddc3ae762f0b54ecc2ddb5c7a985 +bf64bb4dfaef193b4d583e8404e262c533f3decc7b196fae07a3c9094254ceb674b9a82901cb9d50b66be9e7a7bb57ef28898959c1b4b3d0d233447abd7df962d3fb0656eee0b4804090c4c6a6f72d3da4e49baa8afc0086c585f36031295d302ce135749508ac4776a3ab555dafabde05e183e31023466fc724dd167e2981 +a78f52464844b714674be50ce5dce7b3da6e58d305e60f8a5fc660ff308561ca62d399ea9625468e41fd4265140f2e3a9916dc99ca49a938140da86659ffa4e6f1c03c142d684ef4b34df1ffd1f20fa75d204ab4744d8965067fd13d0426807c81b057561c6d4756d9a6dec706ab6fec2e64a17cb08ffec1f1af1173d50fc9 +7c897e2c1b6430b91c9592a1d87e9e6d8721118ec1d7ebba7e7345099f52156b269c0f31dd8333247fb4542b9b0d610d3b3dc4943bb3662ac9616df3199d56e24e695d2e7995e046077262b804fb6e5908f4d1bc77628cbdbdaaebb20ac856362f9717ee674c98cbec45eaa8aee84c670d63e74f20d148d433369889c61e8c +73b069999d2c4c589d6112a79c817599ec8fc04b7d864259efbf01cf88d2d9d934838db22efcae7b1aa691e5583f3930eace16ec9d38efc2b405b8a745e1e54de587f0fc5ee0df5ffef61b000000ffff0300504b030414000600080000002100b179e523dd000000090100000f0000006472732f646f776e7265762e786d6c +4c8fcd4ec3301084ef48bc83b548dca89342d312e254fc561c698ac4d58db74944bc36b1db069e9e454282e3cc7e9a9d2996a3edc50187d03952904e121048b5331d350a5e374f170b10216a32ba77840a3e31c0b23c3d29746edc91d678a86223388442ae15b431fa5cca50b7687598388fc4b79d1bac8e2c87469a411f39 +dcf6729a2499b4ba23fed06a8ff72dd6efd5de2ac8ded2afe7d5631637dd47f532bd7bf0e96eee953a3f1b6f6f40441ce31f0c3ff5b93a94dc69ebf66482e859a7974c2a985dcfae4030902d78dbf6d7906521ff2f28bf010000ffff0300504b01022d0014000600080000002100b6833892fe000000e10100001300000000 +000000000000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d001400060008000000210038fd21ffd6000000940100000b000000000000000000000000002f0100005f72656c732f2e72656c73504b01022d0014000600080000002100dc60c717f0010000410400000e000000000000000000 +000000002e0200006472732f65326f446f632e786d6c504b01022d0014000600080000002100b179e523dd000000090100000f000000000000000000000000004a0400006472732f646f776e7265762e786d6c504b05060000000004000400f3000000540500000000 +}}}{\sp{\sn dhgt}{\sv 251659264}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fAllowOverlap}{\sv 1}}{\sp{\sn fBehindDocument}{\sv 0}}{\sp{\sn fHidden}{\sv 0}}{\sp{\sn fPseudoInline}{\sv 0}} +{\sp{\sn sizerelh}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}}{\shprslt{\*\do\dobxpage\dobypage\dodhgt8192\dpline\dpptx0\dppty0\dpptx567\dppty0\dpx113\dpy5954\dpxsize567\dpysize0\dplinew15\dplinecor108\dplinecog9\dplinecob0}}} +{\shp{\*\shpinst\shpleft113\shptop8420\shpright680\shpbottom8420\shpfhdr0\shpbxpage\shpbxignore\shpbypage\shpbyignore\shpwr3\shpwrk0\shpfblwtxt0\shpz1\shplockanchor\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}} +{\sp{\sn fLockRotation}{\sv 0}}{\sp{\sn fLockAspectRatio}{\sv 0}}{\sp{\sn fLockPosition}{\sv 0}}{\sp{\sn fLockAgainstSelect}{\sv 0}}{\sp{\sn fLockVerticies}{\sv 0}}{\sp{\sn fLockAdjustHandles}{\sv 0}} +{\sp{\sn fLockAgainstGrouping}{\sv 0}}{\sp{\sn fFillOK}{\sv 0}}{\sp{\sn fFilled}{\sv 0}}{\sp{\sn lineColor}{\sv 12566463}{\*\hsv +{\sp{\sn fLockShapeType}{\sv 0}}{\sp{\sn wzName}{\sv Gerade Verbindung 4}}{\sp{\sn dyWrapDistTop}{\sv -1}}{\sp{\sn dyWrapDistBottom}{\sv -1}}{\sp{\sn posrelh}{\sv 1}}{\sp{\sn posrelv}{\sv 1}}{\sp{\sn metroBlob}{\sv {\*\svb +504b030414000600080000002100b6833892fe000000e1010000130000005b436f6e74656e745f54797065735d2e786d6c9491414ec3301045f748dcc1f216254ebb400825e982b44b40a81c60644f128b646c794c686f8f93b61b449158da33ffbf27bbdc1cc6414c18d83aaae42a2fa440d2ce58ea2af9bedf650f527004 +323038c24a1e91e5a6bebd29f7478f2c529ab8927d8cfe5129d63d8ec0b9f34869d2ba30424cc7d0290ffa033a54eba2b857da51448a599c3b645d36d8c2e710c5f690ae4f26010796e2e9b438b32a09de0f56434ca66a22f383929d09794a2e3bdc5bcf774943aa5f09f3e43ae09c7b494f13ac41f10a213ec398349409ac +70ed1aa7f3bf3b66c99133d7b65663de04de2ea98bd3b56ee3be28e0f4dff226c5de70bab4abe583ea6f000000ffff0300504b03041400060008000000210038fd21ffd6000000940100000b0000005f72656c732f2e72656c73a490c16ac3300c86ef83bd83d17d719ac318a34e2fa3d06be91ec0d88a631a5b4632d9faf6 +3383c1327adb51bfd0f7897f7ff84c8b5a91255236b0eb7a50981df9988381f7cbf1e90594549bbd5d28a3811b0a1cc6c787fd19175bdb91ccb1886a942c06e65acbabd6e2664c563a2a98db66224eb6b691832ed65d6d403df4fdb3e6df0c18374c75f206f8e40750975b69e63fec141d93d0543b4749d33445778faa3d7d +e433ae8d62396035e059be43c6b56bcf81beefddfdd31bd89639ba23db846fe4b67e1ca8653f7abde972fc020000ffff0300504b030414000600080000002100ae1178b8f0010000410400000e0000006472732f65326f446f632e786d6cac534d6fd43010bd23f11f2cdfd964cbb6a068b33db46a2f055614b87bed71d6c2 +5fb2bd9becbf67ec6c42691112888b15cfcc7b33ef65bcbe1e8c2647085139dbd2e5a2a6042c7742d9aea55fbfdcbd794f494ccc0aa69d85969e20d2ebcdeb57ebde3770e1f64e0b0804496c6c7adfd27d4abea9aac8f760585c380f1693d205c3125e435789c07a6437babaa8ebabaa7741f8e038c488d1db314937855f4a +e0e993941112d12dc5d95239433977f9ac366bd67481f9bde2e731d83f4c6198b2d874a6ba65899143502fa88ce2c14527d3823b5339291587a201d52ceb676a1ef7cc43d182e6443fdb14ff1f2dff78dc06a2444b57945866f017dd436002c837083b65c5c17664956dea7d6cb0fac66e4316ca07fbe81f1cff1e3157fd92 +cc97e8c7b2410693cb5129198aeda7d9761812e1187c7b55d7ab4b4af894aa5833e17c88e91e9c21f9a3a55ad96c086bd8f121a6dc993553490e6b9bcfe8b412774aeb72c9ab04373a9023c325d875cb42a00fe6831363ecdd655d975540b6b279b9bc703f61c25c662f52477545673a69183b7f068946a29eb1c14c34f660 +9c834dcbec6461c2ea0c9338e50caccb647f049eeb3314ca7aff0d784694cecea6196c9475e177ddd3308d2cc7fac9815177b660e7c4691ba62dc03d2d0acf6f2a3f84a7f702fff9f2373f000000ffff0300504b030414000600080000002100e332eeaadc000000090100000f0000006472732f646f776e7265762e786d6c +4c8fcd4ec3301084ef48bc83b548dca893804294c6a9f817474891b8baf136891aaf4decb681a7679190e0b49addd1ec37d56ab6a338e01406470ad2450202a97566a04ec1dbfaf1a20011a226a34747a8e01303acead3934a97c61de9150f4dec04875028b5823e465f4a19da1ead0e0be791f8b67593d591e5d44933e923 +87db516649924bab07e20fbdf678d763bb6bf65641fe9e7e3d3f3de4713d7c342fd9edbd4fb7d75ea9f3b3f9660922e21cffccf083cfe85033d3c6edc90431b24e2fd9a9a0b8cab8131bf282e7e67721eb4afe6f507f030000ffff0300504b01022d0014000600080000002100b6833892fe000000e1010000130000000000 +0000000000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d001400060008000000210038fd21ffd6000000940100000b000000000000000000000000002f0100005f72656c732f2e72656c73504b01022d0014000600080000002100ae1178b8f0010000410400000e00000000000000000000 +0000002e0200006472732f65326f446f632e786d6c504b01022d0014000600080000002100e332eeaadc000000090100000f000000000000000000000000004a0400006472732f646f776e7265762e786d6c504b05060000000004000400f3000000530500000000 +}}}{\sp{\sn dhgt}{\sv 251660288}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fAllowOverlap}{\sv 1}}{\sp{\sn fBehindDocument}{\sv 0}}{\sp{\sn fHidden}{\sv 0}}{\sp{\sn fPseudoInline}{\sv 0}} +{\sp{\sn sizerelh}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}}{\shprslt{\*\do\dobxpage\dobypage\dodhgt8193\dpline\dpptx0\dppty0\dpptx567\dppty0\dpx113\dpy8420\dpxsize567\dpysize0\dplinew15\dplinecor108\dplinecog9\dplinecob0}}} +{\shp{\*\shpinst\shpleft113\shptop11907\shpright680\shpbottom11907\shpfhdr0\shpbxpage\shpbxignore\shpbypage\shpbyignore\shpwr3\shpwrk0\shpfblwtxt0\shpz2\shplockanchor\shplid1027{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}} +{\sp{\sn fLockRotation}{\sv 0}}{\sp{\sn fLockAspectRatio}{\sv 0}}{\sp{\sn fLockPosition}{\sv 0}}{\sp{\sn fLockAgainstSelect}{\sv 0}}{\sp{\sn fLockVerticies}{\sv 0}}{\sp{\sn fLockAdjustHandles}{\sv 0}} +{\sp{\sn fLockAgainstGrouping}{\sv 0}}{\sp{\sn fFillOK}{\sv 0}}{\sp{\sn fFilled}{\sv 0}}{\sp{\sn lineColor}{\sv 12566463}{\*\hsv +{\sp{\sn fLockShapeType}{\sv 0}}{\sp{\sn wzName}{\sv Gerade Verbindung 5}}{\sp{\sn dyWrapDistTop}{\sv -1}}{\sp{\sn dyWrapDistBottom}{\sv -1}}{\sp{\sn posrelh}{\sv 1}}{\sp{\sn posrelv}{\sv 1}}{\sp{\sn metroBlob}{\sv {\*\svb +504b030414000600080000002100b6833892fe000000e1010000130000005b436f6e74656e745f54797065735d2e786d6c9491414ec3301045f748dcc1f216254ebb400825e982b44b40a81c60644f128b646c794c686f8f93b61b449158da33ffbf27bbdc1cc6414c18d83aaae42a2fa440d2ce58ea2af9bedf650f527004 +323038c24a1e91e5a6bebd29f7478f2c529ab8927d8cfe5129d63d8ec0b9f34869d2ba30424cc7d0290ffa033a54eba2b857da51448a599c3b645d36d8c2e710c5f690ae4f26010796e2e9b438b32a09de0f56434ca66a22f383929d09794a2e3bdc5bcf774943aa5f09f3e43ae09c7b494f13ac41f10a213ec398349409ac +70ed1aa7f3bf3b66c99133d7b65663de04de2ea98bd3b56ee3be28e0f4dff226c5de70bab4abe583ea6f000000ffff0300504b03041400060008000000210038fd21ffd6000000940100000b0000005f72656c732f2e72656c73a490c16ac3300c86ef83bd83d17d719ac318a34e2fa3d06be91ec0d88a631a5b4632d9faf6 +3383c1327adb51bfd0f7897f7ff84c8b5a91255236b0eb7a50981df9988381f7cbf1e90594549bbd5d28a3811b0a1cc6c787fd19175bdb91ccb1886a942c06e65acbabd6e2664c563a2a98db66224eb6b691832ed65d6d403df4fdb3e6df0c18374c75f206f8e40750975b69e63fec141d93d0543b4749d33445778faa3d7d +e433ae8d62396035e059be43c6b56bcf81beefddfdd31bd89639ba23db846fe4b67e1ca8653f7abde972fc020000ffff0300504b0304140006000800000021006924364eef010000410400000e0000006472732f65326f446f632e786d6cac53cb6edb3010bc17e83f10bcd792d33a2d04cb3924482e696b3469ee34b99488 +f20592b6e5bfef92b294f481022d7a21c4dd9dd99dd1727d35184d0e10a272b6a5cb454d0958ee84b25d4bbf3edebef940494ccc0aa69d85969e20d2abcdeb57eba36fe0c2f54e0b0804496c6c8ebea57d4abea9aac87b302c2e9c078b49e9826109afa1ab4460476437babaa8ebcbeae882f0c1718811a33763926e0abf94 +c0d367292324a25b8ab3a5728672eef2596dd6ace902f3bde2e731d83f4c6198b2d874a6ba6189917d50bf5019c5838b4ea60577a672522a0e4503aa59d63fa979e89987a205cd897eb629fe3f5afee9b00d448996ae28b1cce02fba83c0049027083b65c5de7664956d3afad860f5b5dd862c940ff6c1df3bfe2d62aefa21 +992fd18f65830c2697a3523214db4fb3ed3024c231f8f6b2aedf617b3ea52ad64c381f62ba036748fe68a956361bc21a76b88f297766cd5492c3dae6333aadc4add2ba5cf22ac1b50ee4c0700976ddb210e8bdf9e8c4187bbfaaebb20ac856362f9717ee174c98cbec45eaa8aee84c270d63e72f20d148d433369889c61e8c +73b069999d2c4c589d6112a79c817599ec8fc0737d864259efbf01cf88d2d9d934838db22efcae7b1aa691e5583f3930eace16ec9c386dc3b405b8a745e1f94de587f0f25ee0cf2f7ff31d0000ffff0300504b030414000600080000002100602897a1dd0000000b0100000f0000006472732f646f776e7265762e786d6c4c +8fcd4ec3301084ef487d076b91b85127454a4b8853955f71a429125737de2611f1dac46e1b787ab607444fabd91dcd7e532c47db8b030ea173a4209d2620906a673a6a14bc6f9eaf172042d46474ef08157c63806539b928746edc91d678a86223388442ae15b431fa5cca50b76875983a8fc4b79d1bac8e2c87469a411f39 +dcf672962499b4ba23fed06a8f0f2dd69fd5de2ac83ed29fd797a72c6ebaafea6d76ffe8d3dddc2b757539aeee40441ce3bf194ef88c0e25336ddd9e4c103debf4869da7799bcc41b0235b70b9eddf4696853cef50fe020000ffff0300504b01022d0014000600080000002100b6833892fe000000e1010000130000000000 +0000000000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d001400060008000000210038fd21ffd6000000940100000b000000000000000000000000002f0100005f72656c732f2e72656c73504b01022d00140006000800000021006924364eef010000410400000e00000000000000000000 +0000002e0200006472732f65326f446f632e786d6c504b01022d0014000600080000002100602897a1dd0000000b0100000f00000000000000000000000000490400006472732f646f776e7265762e786d6c504b05060000000004000400f3000000530500000000 +}}}{\sp{\sn dhgt}{\sv 251661312}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fAllowOverlap}{\sv 1}}{\sp{\sn fBehindDocument}{\sv 0}}{\sp{\sn fHidden}{\sv 0}}{\sp{\sn fPseudoInline}{\sv 0}} +{\sp{\sn sizerelh}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}}{\shprslt{\*\do\dobxpage\dobypage\dodhgt8194\dpline\dpptx0\dppty0\dpptx567\dppty0\dpx113\dpy11907\dpxsize567\dpysize0\dplinew15\dplinecor108\dplinecog9\dplinecob0}}}}{ tlchcs1 f0 \ltrchcs0 +\par }}\pard\plain \ltrpar\ql \li0 i0\widctlpar\wrapdefaultaautodjustright in0\lin0\itap0 tlchcs1 f0fs22lang1025 \ltrchcs0 49 s23\lang3079\langfe1033+\lang1033\langfe1033\langnp1033 +\par \ltrrow} rowd \irow0\irowband0\lastrow \ltrrow + s17 rgaph108 rrh1985 rleft0 rftsWidth3 rwWidth9781 rftsWidthB3 rpaddl108 rpaddt85 rpaddb85 rpaddr108 rpaddfl3 rpaddft3 rpaddfb3 rpaddfr3 bllkhdrrows bllkhdrcols bllknocolband blind0 blindtype3 +rdrtbl +rdrtbl + tlchcs1 f0fs22lang1025 \ltrchcs0 49s23\lang3079\langfe1033+ s21\lang1024\langfe1024 oproof\langfenp3079 e}{ tlchcs1 f1fs23 \ltrchcs0 \lang1031\langfe1033\langnp1031 +s17\lang1031\langfe1033\langnp1031 +49 s23\lang3079\langfe1033+ s17 rgaph108 rrh1985 rleft0 rftsWidth3 rwWidth9781 rftsWidthB3 rpaddl108 rpaddt85 rpaddb85 rpaddr108 rpaddfl3 rpaddft3 rpaddfb3 rpaddfr3 bllkhdrrows bllkhdrcols bllknocolband blind0 blindtype3 +rdrtbl +rdrtbl +f0 \ltrchcs0 s22\lang1031\langfe1033\langnp1031 +\par } +} diff --git a/sw/qa/extras/rtfimport/rtfimport.cxx b/sw/qa/extras/rtfimport/rtfimport.cxx index 76d0257a7187..080a8ccdf706 100644 --- a/sw/qa/extras/rtfimport/rtfimport.cxx +++ b/sw/qa/extras/rtfimport/rtfimport.cxx @@ -839,6 +839,15 @@ CPPUNIT_TEST_FIXTURE(Test, testTdf115153) getProperty<sal_Int32>(xShape, u"VertOrientPosition"_ustr)); } +CPPUNIT_TEST_FIXTURE(Test, test165717Tdf) +{ + createSwDoc("165717.rtf"); + + uno::Reference<beans::XPropertySet> const xPara3PS(getParagraphOrTable(3), uno::UNO_QUERY); + CPPUNIT_ASSERT_EQUAL(u"Converted1"_ustr, getProperty<OUString>(xPara3PS, u"PageDescName"_ustr)); + CPPUNIT_ASSERT_EQUAL(sal_Int32(1), getProperty<sal_Int32>(xPara3PS, u"PageNumberOffset"_ustr)); +} + CPPUNIT_TEST_FIXTURE(Test, testFdo68291) { createSwDoc("fdo68291.odt"); diff --git a/sw/source/writerfilter/dmapper/DomainMapper.cxx b/sw/source/writerfilter/dmapper/DomainMapper.cxx index 18774537f6b7..2695f871b2fb 100644 --- a/sw/source/writerfilter/dmapper/DomainMapper.cxx +++ b/sw/source/writerfilter/dmapper/DomainMapper.cxx @@ -4582,7 +4582,7 @@ void DomainMapper::lcl_utext(const sal_Unicode *const data_, size_t len) } bool bRemove = (!m_pImpl->GetParaChanged() && m_pImpl->GetRemoveThisPara()) || - (!m_pImpl->GetParaChanged() && m_pImpl->GetParaSectpr() + (!IsRTFImport() && !m_pImpl->GetParaChanged() && m_pImpl->GetParaSectpr() && !bSingleParagraphAfterRedline && !bIsColumnBreak && !m_pImpl->GetIsLastSectionGroup() // testContSectionPageBreak diff --git a/sw/source/writerfilter/dmapper/PropertyMap.cxx b/sw/source/writerfilter/dmapper/PropertyMap.cxx index efd038964444..f878912257bc 100644 --- a/sw/source/writerfilter/dmapper/PropertyMap.cxx +++ b/sw/source/writerfilter/dmapper/PropertyMap.cxx @@ -1659,60 +1659,93 @@ void SectionPropertyMap::CloseSectionGroup( DomainMapper_Impl& rDM_Impl ) // it to apply the page style; see "nightmare scenario" in // wwSectionManager::InsertSegments() auto xTextAppend = rDM_Impl.GetCurrentXText(); - uno::Reference<container::XEnumerationAccess> const xCursor( - xTextAppend->createTextCursorByRange( - uno::Reference<text::XTextContent>(static_cast<cppu::OWeakObject*>(xSection.get()), uno::UNO_QUERY_THROW)->getAnchor()), - uno::UNO_QUERY_THROW); - uno::Reference<container::XEnumeration> const xEnum( - xCursor->createEnumeration()); - bool isFound = false; - while (xEnum->hasMoreElements()) + // if no section could be created due to a table at the given position + if (!xSection.is() && m_xPreStartingRange.is()) { - uno::Reference<beans::XPropertySet> xElem; - xEnum->nextElement() >>= xElem; - if (xElem->getPropertySetInfo()->hasPropertyByName(u"BreakType"_ustr)) + //similar hack as below + uno::Reference<beans::XPropertySet> const xPSRange(m_xPreStartingRange, uno::UNO_QUERY_THROW); + style::BreakType eBreakType; + if ((xPSRange->getPropertyValue(u"BreakType"_ustr) >>= eBreakType) && eBreakType == style::BreakType_PAGE_BEFORE) { - style::BreakType eBreakType; - if ((xElem->getPropertyValue(u"BreakType"_ustr) >>= eBreakType) && eBreakType == style::BreakType_PAGE_BEFORE) + xPSRange->setPropertyValue(getPropertyName(PROP_PAGE_DESC_NAME), uno::Any(m_sPageStyleName)); + m_aPageStyle->setPropertyValue(getPropertyName(PROP_FIRST_IS_SHARED), uno::Any(true)); + if (0 <= m_nPageNumber) { - // tdf#112201: do *not* use m_sFirstPageStyleName here! - xElem->setPropertyValue(getPropertyName(PROP_PAGE_DESC_NAME), uno::Any(m_sPageStyleName)); - m_aPageStyle->setPropertyValue(getPropertyName(PROP_FIRST_IS_SHARED), uno::Any(true)); - isFound = true; - break; + sal_Int16 nPageNumber = static_cast< sal_Int16 >(m_nPageNumber); + xPSRange->setPropertyValue(getPropertyName(PROP_PAGE_NUMBER_OFFSET), + uno::Any(nPageNumber)); } } } - uno::Reference<text::XParagraphCursor> const xPCursor(xCursor, uno::UNO_QUERY_THROW); - float fCharHeight = 0; - if (!isFound) - { // HACK: try the last paragraph of the previous section - xPCursor->gotoPreviousParagraph(false); - uno::Reference<beans::XPropertySet> const xPSCursor(xCursor, uno::UNO_QUERY_THROW); - style::BreakType eBreakType; - if ((xPSCursor->getPropertyValue(u"BreakType"_ustr) >>= eBreakType) && eBreakType == style::BreakType_PAGE_BEFORE) + else + { + bool isFound = false; + uno::Reference<container::XEnumerationAccess> const xCursor( + xTextAppend->createTextCursorByRange( + uno::Reference<text::XTextContent>(static_cast<cppu::OWeakObject*>(xSection.get()), uno::UNO_QUERY_THROW)->getAnchor()), + uno::UNO_QUERY_THROW); + uno::Reference<container::XEnumeration> const xEnum( + xCursor->createEnumeration()); + while (xEnum->hasMoreElements()) { - xPSCursor->setPropertyValue(getPropertyName(PROP_PAGE_DESC_NAME), uno::Any(m_sPageStyleName)); - m_aPageStyle->setPropertyValue(getPropertyName(PROP_FIRST_IS_SHARED), uno::Any(true)); - isFound = true; + uno::Reference<beans::XPropertySet> xElem; + xEnum->nextElement() >>= xElem; + if (xElem->getPropertySetInfo()->hasPropertyByName(u"BreakType"_ustr)) + { + style::BreakType eBreakType; + if ((xElem->getPropertyValue(u"BreakType"_ustr) >>= eBreakType) && eBreakType == style::BreakType_PAGE_BEFORE) + { + // tdf#112201: do *not* use m_sFirstPageStyleName here! + xElem->setPropertyValue(getPropertyName(PROP_PAGE_DESC_NAME), uno::Any(m_sPageStyleName)); + m_aPageStyle->setPropertyValue(getPropertyName(PROP_FIRST_IS_SHARED), uno::Any(true)); + isFound = true; + if (0 <= m_nPageNumber) + { + sal_Int16 nPageNumber = static_cast< sal_Int16 >(m_nPageNumber); + xElem->setPropertyValue(getPropertyName(PROP_PAGE_NUMBER_OFFSET), + uno::Any(nPageNumber)); + } + break; + } + } } - else - { - xPSCursor->getPropertyValue(u"CharHeight"_ustr) >>= fCharHeight; + uno::Reference<text::XParagraphCursor> const xPCursor(xCursor, uno::UNO_QUERY_THROW); + float fCharHeight = 0; + if (!isFound) + { // HACK: try the last paragraph of the previous section + xPCursor->gotoPreviousParagraph(false); + uno::Reference<beans::XPropertySet> const xPSCursor(xCursor, uno::UNO_QUERY_THROW); + style::BreakType eBreakType; + if ((xPSCursor->getPropertyValue(u"BreakType"_ustr) >>= eBreakType) && eBreakType == style::BreakType_PAGE_BEFORE) + { + xPSCursor->setPropertyValue(getPropertyName(PROP_PAGE_DESC_NAME), uno::Any(m_sPageStyleName)); + m_aPageStyle->setPropertyValue(getPropertyName(PROP_FIRST_IS_SHARED), uno::Any(true)); + isFound = true; + if (0 <= m_nPageNumber) + { + sal_Int16 nPageNumber = static_cast< sal_Int16 >(m_nPageNumber); + xPSCursor->setPropertyValue(getPropertyName(PROP_PAGE_NUMBER_OFFSET), + uno::Any(nPageNumber)); + } + } + else + { + xPSCursor->getPropertyValue(u"CharHeight"_ustr) >>= fCharHeight; + } } - } - if (!isFound && fCharHeight <= 1.0) - { - // If still not found, see if the last paragraph is ~invisible, and work with - // the last-in-practice paragraph. - xPCursor->gotoPreviousParagraph(false); - uno::Reference<beans::XPropertySet> xPropertySet(xCursor, uno::UNO_QUERY_THROW); - OUString aPageDescName; - if ((xPropertySet->getPropertyValue(u"PageDescName"_ustr) >>= aPageDescName) && !aPageDescName.isEmpty()) + if (!isFound && fCharHeight <= 1.0) { - rtl::Reference<SwXBaseStyle> xPageStyle(rDM_Impl.GetPageStyles()->getStyleByName(aPageDescName)); - xPageStyle->setPropertyValue(u"FollowStyle"_ustr, uno::Any(m_sPageStyleName)); - m_aPageStyle->setPropertyValue(getPropertyName(PROP_FIRST_IS_SHARED), uno::Any(true)); + // If still not found, see if the last paragraph is ~invisible, and work with + // the last-in-practice paragraph. + xPCursor->gotoPreviousParagraph(false); + uno::Reference<beans::XPropertySet> xPropertySet(xCursor, uno::UNO_QUERY_THROW); + OUString aPageDescName; + if ((xPropertySet->getPropertyValue(u"PageDescName"_ustr) >>= aPageDescName) && !aPageDescName.isEmpty()) + { + rtl::Reference<SwXBaseStyle> xPageStyle(rDM_Impl.GetPageStyles()->getStyleByName(aPageDescName)); + xPageStyle->setPropertyValue(u"FollowStyle"_ustr, uno::Any(m_sPageStyleName)); + m_aPageStyle->setPropertyValue(getPropertyName(PROP_FIRST_IS_SHARED), uno::Any(true)); + } } } } @@ -2090,6 +2123,22 @@ sal_Int32 SectionPropertyMap::GetPageWidth() const return getProperty( PROP_WIDTH )->second.get<sal_Int32>(); } +//create a pre-starting-range +void SectionPropertyMap::SetStart( const uno::Reference< text::XTextRange >& xRange ) +{ + m_xStartingRange = xRange; + try + { + uno::Reference<text::XParagraphCursor> const xPCursor( + m_xStartingRange->getText()->createTextCursorByRange(m_xStartingRange), uno::UNO_QUERY_THROW); + xPCursor->gotoPreviousParagraph(false); + m_xPreStartingRange = xPCursor; + } + catch (const uno::Exception&) + { + } +} + StyleSheetPropertyMap::StyleSheetPropertyMap() : mnListLevel( -1 ) , mnOutlineLevel( -1 ) diff --git a/sw/source/writerfilter/dmapper/PropertyMap.hxx b/sw/source/writerfilter/dmapper/PropertyMap.hxx index 14e37c48b5cb..e9d3cc8d94de 100644 --- a/sw/source/writerfilter/dmapper/PropertyMap.hxx +++ b/sw/source/writerfilter/dmapper/PropertyMap.hxx @@ -256,6 +256,7 @@ private: bool m_bIsFirstSection; css::uno::Reference< css::text::XTextRange > m_xStartingRange; + css::uno::Reference< css::text::XTextRange > m_xPreStartingRange; OUString m_sPageStyleName; rtl::Reference<SwXPageStyle> m_aPageStyle; @@ -355,7 +356,7 @@ public: bool IsFirstSection() const { return m_bIsFirstSection; } - void SetStart( const css::uno::Reference< css::text::XTextRange >& xRange ) { m_xStartingRange = xRange; } + void SetStart( const css::uno::Reference< css::text::XTextRange >& xRange ); const css::uno::Reference< css::text::XTextRange >& GetStartingRange() const { return m_xStartingRange; } diff --git a/sw/source/writerfilter/rtftok/rtfdispatchsymbol.cxx b/sw/source/writerfilter/rtftok/rtfdispatchsymbol.cxx index 2df10c35482b..4b2e785b2e7a 100644 --- a/sw/source/writerfilter/rtftok/rtfdispatchsymbol.cxx +++ b/sw/source/writerfilter/rtftok/rtfdispatchsymbol.cxx @@ -135,8 +135,10 @@ RTFError RTFDocumentImpl::dispatchSymbol(RTFKeyword nKeyword) m_bHadSect = true; if (m_bIgnoreNextContSectBreak || m_aStates.top().getFrame().hasProperties()) { - // testContSectionPageBreak: need \par now - dispatchSymbol(RTFKeyword::PAR); + if (m_aStates.top().getFrame().hasProperties()) + { // testTdf158586_0: convert \sect to \par inside frame + dispatchSymbol(RTFKeyword::PAR); + } // testContSectionPageBreak: no \par when break ignored m_bIgnoreNextContSectBreak = false; } else