summaryrefslogtreecommitdiffstats
path: root/sw/qa/core
diff options
context:
space:
mode:
Diffstat (limited to 'sw/qa/core')
-rw-r--r--sw/qa/core/Test-BigPtrArray.cxx636
-rw-r--r--sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx390
-rw-r--r--sw/qa/core/accessibilitycheck/data/AccessibilityTests1.odtbin0 -> 25882 bytes
-rw-r--r--sw/qa/core/accessibilitycheck/data/AccessibilityTests_NumberingCheck.odtbin0 -> 14373 bytes
-rw-r--r--sw/qa/core/accessibilitycheck/data/BackgroundImageTest.odtbin0 -> 8263 bytes
-rw-r--r--sw/qa/core/accessibilitycheck/data/DocumentTest.odtbin0 -> 9338 bytes
-rw-r--r--sw/qa/core/accessibilitycheck/data/FakeCaptionTest.odtbin0 -> 12314 bytes
-rw-r--r--sw/qa/core/accessibilitycheck/data/FakeFootnoteTest.odtbin0 -> 8875 bytes
-rw-r--r--sw/qa/core/accessibilitycheck/data/HighlightTest.odtbin0 -> 8551 bytes
-rw-r--r--sw/qa/core/accessibilitycheck/data/HyperlinkTest.odtbin0 -> 8663 bytes
-rw-r--r--sw/qa/core/accessibilitycheck/data/LinkedImageTest.fodt18
-rw-r--r--sw/qa/core/accessibilitycheck/data/NewlineTest.odtbin0 -> 8609 bytes
-rw-r--r--sw/qa/core/accessibilitycheck/data/OnlineCheck.odtbin0 -> 11226 bytes
-rw-r--r--sw/qa/core/accessibilitycheck/data/ParagraphTest.odtbin0 -> 8330 bytes
-rw-r--r--sw/qa/core/accessibilitycheck/data/SpaceTest.odtbin0 -> 8565 bytes
-rw-r--r--sw/qa/core/accessibilitycheck/data/TOCHyperlinkTest.odtbin0 -> 26107 bytes
-rw-r--r--sw/qa/core/accessibilitycheck/data/TableFormattingTest.odtbin0 -> 9111 bytes
-rw-r--r--sw/qa/core/accessibilitycheck/data/TabsTest.odtbin0 -> 9333 bytes
-rw-r--r--sw/qa/core/attr/attr.cxx101
-rw-r--r--sw/qa/core/attr/data/attr-set.docxbin0 -> 11582 bytes
-rw-r--r--sw/qa/core/crsr/crsr.cxx237
-rw-r--r--sw/qa/core/crsr/data/sel-all-starts-with-table.odtbin0 -> 8720 bytes
-rw-r--r--sw/qa/core/data/602/fail/.gitignore0
-rw-r--r--sw/qa/core/data/602/indeterminate/.gitignore0
-rw-r--r--sw/qa/core/data/602/pass/.gitignore0
-rw-r--r--sw/qa/core/data/602/pass/Sample file zak.602641
-rw-r--r--sw/qa/core/data/602/pass/cti_t602.602146
-rw-r--r--sw/qa/core/data/602/pass/zak.602641
-rw-r--r--sw/qa/core/data/README23
-rw-r--r--sw/qa/core/data/docm/testDocumentRange.docmbin0 -> 24459 bytes
-rw-r--r--sw/qa/core/data/docm/testFind.docmbin0 -> 25510 bytes
-rw-r--r--sw/qa/core/data/docm/testFontColor.docmbin0 -> 22421 bytes
-rw-r--r--sw/qa/core/data/docm/testModernVBA.docmbin0 -> 32970 bytes
-rw-r--r--sw/qa/core/data/docm/testModernVBADelete.docmbin0 -> 45616 bytes
-rw-r--r--sw/qa/core/data/docm/testParagraphFormat.docmbin0 -> 36983 bytes
-rw-r--r--sw/qa/core/data/docm/testSentences.docmbin0 -> 20775 bytes
-rw-r--r--sw/qa/core/data/docm/testTables.docmbin0 -> 28077 bytes
-rw-r--r--sw/qa/core/data/docm/testVBA.docmbin0 -> 32005 bytes
-rw-r--r--sw/qa/core/data/docm/testWords.docmbin0 -> 19930 bytes
-rw-r--r--sw/qa/core/data/html/fail/.gitignore0
-rw-r--r--sw/qa/core/data/html/fail/ofz5909-1.html1
-rw-r--r--sw/qa/core/data/html/fail/ofz6891-1.html1
-rw-r--r--sw/qa/core/data/html/indeterminate/.gitignore0
-rw-r--r--sw/qa/core/data/html/pass/CVE-2005-4720-1.html2
-rw-r--r--sw/qa/core/data/html/pass/EDB-14503-1.htmlbin0 -> 1384 bytes
-rw-r--r--sw/qa/core/data/html/pass/EDB-35279-1.htmlbin0 -> 10921 bytes
-rw-r--r--sw/qa/core/data/html/pass/fdo65932.html45
-rw-r--r--sw/qa/core/data/html/pass/fdo87601-1.html100
-rw-r--r--sw/qa/core/data/html/pass/kde141510-1.html744
-rw-r--r--sw/qa/core/data/html/pass/ofz-msan-1.htmlbin0 -> 14354 bytes
-rw-r--r--sw/qa/core/data/html/pass/ofz20455.htmlbin0 -> 5639 bytes
-rw-r--r--sw/qa/core/data/html/pass/ofz39850-1.htmlbin0 -> 27040 bytes
-rw-r--r--sw/qa/core/data/html/pass/ofz40593-1.htmlbin0 -> 5192 bytes
-rw-r--r--sw/qa/core/data/html/pass/ofz40766-1.htmlbin0 -> 6376 bytes
-rw-r--r--sw/qa/core/data/html/pass/ofz43310-1.htmlbin0 -> 58285 bytes
-rw-r--r--sw/qa/core/data/html/pass/ofz5007-1.html1
-rw-r--r--sw/qa/core/data/html/pass/ofz5353-1.html1
-rw-r--r--sw/qa/core/data/html/pass/ofz53680-1.htmlbin0 -> 9727 bytes
-rw-r--r--sw/qa/core/data/html/pass/ofz5535-1.html1
-rw-r--r--sw/qa/core/data/html/pass/ofz5855-1.html1
-rw-r--r--sw/qa/core/data/html/pass/ofz8255-1.html1
-rw-r--r--sw/qa/core/data/html/pass/ofz9733-1.html1
-rw-r--r--sw/qa/core/data/html/pass/tdf93971-1.html78
-rw-r--r--sw/qa/core/data/odt/fail/.gitignore0
-rw-r--r--sw/qa/core/data/odt/fail/82fff64a-0a21-4b09-bbdc-2914a5a150f0.odtbin0 -> 2202 bytes
-rw-r--r--sw/qa/core/data/odt/fail/c2dfc5bd-8366-40e7-b862-55e13fdc52dc.odtbin0 -> 2544 bytes
-rw-r--r--sw/qa/core/data/odt/fail/forcepoint-dtor-1.odtbin0 -> 220389 bytes
-rw-r--r--sw/qa/core/data/odt/fail/forcepoint-xstor-1.odtbin0 -> 144064 bytes
-rw-r--r--sw/qa/core/data/odt/fail/tdf102018.odtbin0 -> 2851 bytes
-rw-r--r--sw/qa/core/data/odt/fdo68983.odtbin0 -> 10510 bytes
-rw-r--r--sw/qa/core/data/odt/indeterminate/.gitignore0
-rw-r--r--sw/qa/core/data/odt/pass/.gitignore0
-rw-r--r--sw/qa/core/data/odt/pass/CVE-2012-4233-1.odtbin0 -> 9021 bytes
-rw-r--r--sw/qa/core/data/odt/pass/fdo84692.odtbin0 -> 9408 bytes
-rw-r--r--sw/qa/core/data/odt/pass/ooo95711-1.odtbin0 -> 23500 bytes
-rw-r--r--sw/qa/core/data/odt/pass/tdf112017.odtbin0 -> 1988 bytes
-rw-r--r--sw/qa/core/data/odt/pass/tdf112101.odtbin0 -> 1935 bytes
-rw-r--r--sw/qa/core/data/odt/pass/tdf112122.odtbin0 -> 1825 bytes
-rw-r--r--sw/qa/core/data/odt/pass/tdf112123.odtbin0 -> 1673 bytes
-rw-r--r--sw/qa/core/data/odt/pass/tdf122599-1.odtbin0 -> 14158 bytes
-rw-r--r--sw/qa/core/data/odt/pass/tdf97879.odtbin0 -> 20275 bytes
-rw-r--r--sw/qa/core/data/odt/tdf151846.odtbin0 -> 10824 bytes
-rw-r--r--sw/qa/core/data/odt/test.odtbin0 -> 8486 bytes
-rw-r--r--sw/qa/core/data/odt/testControlShapeGrouping.odtbin0 -> 10750 bytes
-rw-r--r--sw/qa/core/data/ooxml/fail/.gitignore0
-rw-r--r--sw/qa/core/data/ooxml/fail/EDB-36788-1.docxbin0 -> 31584 bytes
-rw-r--r--sw/qa/core/data/ooxml/fail/LIBREOFFICE-DBDAZAEC.docxbin0 -> 89419 bytes
-rw-r--r--sw/qa/core/data/ooxml/fail/ofz14422-1.docxbin0 -> 21221 bytes
-rw-r--r--sw/qa/core/data/ooxml/fail/ofz37458-1.docxbin0 -> 7745 bytes
-rw-r--r--sw/qa/core/data/ooxml/fail/ofz4825-1.docxbin0 -> 5017 bytes
-rw-r--r--sw/qa/core/data/ooxml/fail/ofz9934-1.docxbin0 -> 6722 bytes
-rw-r--r--sw/qa/core/data/ooxml/indeterminate/.gitignore0
-rw-r--r--sw/qa/core/data/ooxml/pass/fdo63164-1.docxbin0 -> 48419 bytes
-rw-r--r--sw/qa/core/data/ooxml/pass/fdo64256.docxbin0 -> 5602 bytes
-rw-r--r--sw/qa/core/data/ooxml/pass/fdo73608-1.docxbin0 -> 11066 bytes
-rw-r--r--sw/qa/core/data/ooxml/pass/fdo73608-2.docxbin0 -> 11064 bytes
-rw-r--r--sw/qa/core/data/ooxml/pass/fdo78885.docxbin0 -> 49510 bytes
-rw-r--r--sw/qa/core/data/ooxml/pass/fdo78904_fileHang.docxbin0 -> 74704 bytes
-rw-r--r--sw/qa/core/data/ooxml/pass/fdo78906.docxbin0 -> 15880 bytes
-rw-r--r--sw/qa/core/data/ooxml/pass/fdo79129.docxbin0 -> 47317 bytes
-rw-r--r--sw/qa/core/data/ooxml/pass/fdo79131.docxbin0 -> 10426 bytes
-rw-r--r--sw/qa/core/data/ooxml/pass/fdo79838.docxbin0 -> 32166 bytes
-rw-r--r--sw/qa/core/data/ooxml/pass/fdo79940.docxbin0 -> 32998 bytes
-rw-r--r--sw/qa/core/data/ooxml/pass/fdo79973.docxbin0 -> 23715 bytes
-rw-r--r--sw/qa/core/data/ooxml/pass/fdo80514.docxbin0 -> 37872 bytes
-rw-r--r--sw/qa/core/data/ooxml/pass/fdo80580.docxbin0 -> 24921 bytes
-rw-r--r--sw/qa/core/data/ooxml/pass/fdo81380.docxbin0 -> 40040 bytes
-rw-r--r--sw/qa/core/data/ooxml/pass/fdo81491.docxbin0 -> 13756 bytes
-rw-r--r--sw/qa/core/data/ooxml/pass/fill.docxbin0 -> 12619 bytes
-rw-r--r--sw/qa/core/data/ooxml/pass/liststyle-gridbefore.docxbin0 -> 11441 bytes
-rw-r--r--sw/qa/core/data/ooxml/pass/ofz20801-1.docxbin0 -> 16286 bytes
-rw-r--r--sw/qa/core/data/ooxml/pass/tdf108272.docxbin0 -> 51244 bytes
-rw-r--r--sw/qa/core/data/ooxml/pass/tdf119136.docxbin0 -> 11364 bytes
-rw-r--r--sw/qa/core/data/ooxml/pass/tdf123001.docxbin0 -> 31943 bytes
-rw-r--r--sw/qa/core/data/ooxml/pass/tdf89088.docxbin0 -> 28335 bytes
-rw-r--r--sw/qa/core/data/ooxml/pass/tdf92157-1-minimized.docxbin0 -> 14648 bytes
-rw-r--r--sw/qa/core/data/ooxml/pass/tdf93284.docxbin0 -> 100647 bytes
-rw-r--r--sw/qa/core/data/ooxml/pass/tdf96749.docxbin0 -> 6563 bytes
-rw-r--r--sw/qa/core/data/ooxml/pass/vml-path.docxbin0 -> 25257 bytes
-rw-r--r--sw/qa/core/data/rtf/README3
-rw-r--r--sw/qa/core/data/rtf/fail/.gitignore0
-rw-r--r--sw/qa/core/data/rtf/fail/UnoCursor-1.rtfbin0 -> 711 bytes
-rw-r--r--sw/qa/core/data/rtf/fail/forcepoint-4.rtf1779
-rw-r--r--sw/qa/core/data/rtf/fail/forcepoint-5.rtf1592
-rw-r--r--sw/qa/core/data/rtf/fail/forcepoint-7.rtf517
-rw-r--r--sw/qa/core/data/rtf/fail/forcepoint-82.rtf28
-rw-r--r--sw/qa/core/data/rtf/fail/table-1.rtfbin0 -> 849 bytes
-rw-r--r--sw/qa/core/data/rtf/fail/table-2.rtfbin0 -> 1618 bytes
-rw-r--r--sw/qa/core/data/rtf/fail/table-3.rtfbin0 -> 3355 bytes
-rw-r--r--sw/qa/core/data/rtf/indeterminate/.gitignore0
-rw-r--r--sw/qa/core/data/rtf/pass/CVE-2014-6357.rtfbin0 -> 402901 bytes
-rw-r--r--sw/qa/core/data/rtf/pass/CVE-2015-0086.rtf1
-rw-r--r--sw/qa/core/data/rtf/pass/CVE-2015-1651.rtfbin0 -> 113 bytes
-rw-r--r--sw/qa/core/data/rtf/pass/CVE-2017-0199.rtfbin0 -> 5725 bytes
-rw-r--r--sw/qa/core/data/rtf/pass/EDB-38031-1.rtfbin0 -> 26088 bytes
-rw-r--r--sw/qa/core/data/rtf/pass/abi2128.rtf17
-rw-r--r--sw/qa/core/data/rtf/pass/abi2720.rtf259
-rw-r--r--sw/qa/core/data/rtf/pass/abi3241.rtf9
-rw-r--r--sw/qa/core/data/rtf/pass/fdo54641.rtf39
-rw-r--r--sw/qa/core/data/rtf/pass/fdo61638.rtf31
-rw-r--r--sw/qa/core/data/rtf/pass/fdo72204.rtf48
-rw-r--r--sw/qa/core/data/rtf/pass/fdo78900.rtf11
-rw-r--r--sw/qa/core/data/rtf/pass/fdo79384.rtf6
-rw-r--r--sw/qa/core/data/rtf/pass/fdo80924.rtf43
-rw-r--r--sw/qa/core/data/rtf/pass/fdo82859.rtf25
-rw-r--r--sw/qa/core/data/rtf/pass/fdo84536.rtf16
-rw-r--r--sw/qa/core/data/rtf/pass/forcepoint-1.rtf193
-rw-r--r--sw/qa/core/data/rtf/pass/forcepoint-105.rtf178
-rw-r--r--sw/qa/core/data/rtf/pass/forcepoint-2.rtfbin0 -> 5380 bytes
-rw-r--r--sw/qa/core/data/rtf/pass/forcepoint-3.rtf1
-rw-r--r--sw/qa/core/data/rtf/pass/forcepoint-96.rtf8
-rw-r--r--sw/qa/core/data/rtf/pass/forcepoint104.rtf571
-rw-r--r--sw/qa/core/data/rtf/pass/forcepoint110.rtfbin0 -> 7776 bytes
-rw-r--r--sw/qa/core/data/rtf/pass/kde52609.rtf8
-rw-r--r--sw/qa/core/data/rtf/pass/ooo121333-1.rtf43
-rw-r--r--sw/qa/core/data/rtf/pass/tabbox-1.rtfbin0 -> 893 bytes
-rw-r--r--sw/qa/core/data/rtf/pass/tdf116851.rtf217
-rw-r--r--sw/qa/core/data/rtf/pass/tdf94049.rtf12
-rw-r--r--sw/qa/core/data/txt/fail/.gitignore0
-rw-r--r--sw/qa/core/data/txt/indeterminate/.gitignore0
-rw-r--r--sw/qa/core/data/txt/pass/.gitignore0
-rw-r--r--sw/qa/core/data/txt/pass/CVE-2009-2473-1.txt1
-rw-r--r--sw/qa/core/data/txt/pass/CVE-2009-2473-2.txt1
-rw-r--r--sw/qa/core/data/txt/pass/UTF-8-test.txtbin0 -> 20334 bytes
-rw-r--r--sw/qa/core/data/ww5/fail/.gitignore0
-rw-r--r--sw/qa/core/data/ww5/indeterminate/.gitignore0
-rw-r--r--sw/qa/core/data/ww5/pass/.gitignore0
-rw-r--r--sw/qa/core/data/ww5/pass/crash-1.docbin0 -> 3714 bytes
-rw-r--r--sw/qa/core/data/ww5/pass/crash-2.docbin0 -> 4203 bytes
-rw-r--r--sw/qa/core/data/ww5/pass/crash-3.docbin0 -> 3938 bytes
-rw-r--r--sw/qa/core/data/ww5/pass/hang-1.docbin0 -> 4290 bytes
-rw-r--r--sw/qa/core/data/ww5/pass/hang-2.docbin0 -> 4353 bytes
-rw-r--r--sw/qa/core/data/ww5/pass/hang-3.docbin0 -> 35938 bytes
-rw-r--r--sw/qa/core/data/ww5/pass/ofz18526-1.docbin0 -> 781 bytes
-rw-r--r--sw/qa/core/data/ww5/pass/ooo2535-1-WW2.docbin0 -> 55056 bytes
-rw-r--r--sw/qa/core/data/ww5/pass/ooo37322-1-WW2.docbin0 -> 5559 bytes
-rw-r--r--sw/qa/core/data/ww5/pass/ooo40683-1-WW1.docbin0 -> 3698 bytes
-rw-r--r--sw/qa/core/data/ww6/fail/.gitignore0
-rw-r--r--sw/qa/core/data/ww6/fail/ofz45140-1.docbin0 -> 4009 bytes
-rw-r--r--sw/qa/core/data/ww6/indeterminate/.gitignore0
-rw-r--r--sw/qa/core/data/ww6/pass/.gitignore0
-rw-r--r--sw/qa/core/data/ww6/pass/crash-1.docbin0 -> 6653 bytes
-rw-r--r--sw/qa/core/data/ww6/pass/crash-2.docbin0 -> 6680 bytes
-rw-r--r--sw/qa/core/data/ww6/pass/crash-3.docbin0 -> 6633 bytes
-rw-r--r--sw/qa/core/data/ww6/pass/crash-4.docbin0 -> 6611 bytes
-rw-r--r--sw/qa/core/data/ww6/pass/crash-5.docbin0 -> 6647 bytes
-rw-r--r--sw/qa/core/data/ww6/pass/crash-6.docbin0 -> 6672 bytes
-rw-r--r--sw/qa/core/data/ww6/pass/crash-7.docbin0 -> 6500 bytes
-rw-r--r--sw/qa/core/data/ww6/pass/hang-1.docbin0 -> 6630 bytes
-rw-r--r--sw/qa/core/data/ww6/pass/ofz-redlining-1.docbin0 -> 35101 bytes
-rw-r--r--sw/qa/core/data/ww6/pass/ofz-trailingpara.docbin0 -> 35109 bytes
-rw-r--r--sw/qa/core/data/ww6/pass/ofz21168-1.docbin0 -> 35098 bytes
-rw-r--r--sw/qa/core/data/ww6/pass/ofz21385-1.docbin0 -> 481786 bytes
-rw-r--r--sw/qa/core/data/ww6/pass/ofz34898-1.docbin0 -> 4085 bytes
-rw-r--r--sw/qa/core/data/ww6/pass/ofz41398-1.docbin0 -> 3291 bytes
-rw-r--r--sw/qa/core/data/ww6/pass/ofz42330-1.docbin0 -> 3275 bytes
-rw-r--r--sw/qa/core/data/ww6/pass/ooo17498-1.docbin0 -> 5632 bytes
-rw-r--r--sw/qa/core/data/ww6/pass/ooo17498-2.docbin0 -> 5632 bytes
-rw-r--r--sw/qa/core/data/ww6/pass/ooo17498-3.docbin0 -> 5632 bytes
-rw-r--r--sw/qa/core/data/ww6/pass/ooo17498-4.docbin0 -> 5120 bytes
-rw-r--r--sw/qa/core/data/ww6/pass/ooo8726-1.docbin0 -> 5120 bytes
-rw-r--r--sw/qa/core/data/ww8/fail/.gitignore0
-rw-r--r--sw/qa/core/data/ww8/fail/CVE-2005-0941-1.docbin0 -> 32256 bytes
-rw-r--r--sw/qa/core/data/ww8/fail/CVE-2006-2389-1.docbin0 -> 98816 bytes
-rw-r--r--sw/qa/core/data/ww8/fail/CVE-2008-0320-1.docbin0 -> 116224 bytes
-rw-r--r--sw/qa/core/data/ww8/fail/forcepoint-44.docbin0 -> 119808 bytes
-rw-r--r--sw/qa/core/data/ww8/fail/hang-2.docbin0 -> 10240 bytes
-rw-r--r--sw/qa/core/data/ww8/fail/redline-1.docbin0 -> 8319 bytes
-rw-r--r--sw/qa/core/data/ww8/indeterminate/.gitignore0
-rw-r--r--sw/qa/core/data/ww8/pass/.gitignore0
-rw-r--r--sw/qa/core/data/ww8/pass/CVE-2003-0820-1.docbin0 -> 28160 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/CVE-2006-3493-1.docbin0 -> 48128 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/CVE-2006-6561-1.docbin0 -> 26624 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/CVE-2006-6628-1.docbin0 -> 26624 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/CVE-2007-1347-1.docbin0 -> 24064 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/CVE-2008-2752-1.docbin0 -> 25088 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/CVE-2008-2752-2.docbin0 -> 24576 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/CVE-2008-2752-3.docbin0 -> 22528 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/CVE-2008-2752-4.docbin0 -> 23040 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/CVE-2008-4841-1.docbin0 -> 101888 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/CVE-2009-0200-1.docbin0 -> 8192 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/CVE-2009-0201-1.docbin0 -> 8192 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/CVE-2009-0259-1.docbin0 -> 101888 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/CVE-2009-3301-1.docbin0 -> 27648 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/CVE-2009-3302-1.docbin0 -> 27648 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/CVE-2009-3302-2.docbin0 -> 27648 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/CVE-2010-3200-1.docbin0 -> 48128 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/CVE-2010-3453-1.docbin0 -> 126464 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/CVE-2010-3454-1.docbin0 -> 126464 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/CVE-2012-4886-1.docbin0 -> 184896 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/CVE-2014-6356-1.docbin0 -> 39424 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/CVE-2014-6364.docbin0 -> 203264 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/CVE-2015-0064-1.docbin0 -> 58880 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/CVE-2015-0065-1.docbin0 -> 104960 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/CVE-2015-0097-1.docbin0 -> 15872 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/CVE-2015-2380-1.docbin0 -> 203264 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/CVE-2015-2431-1.docbin0 -> 1084416 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/CVE-2015-2467-1.docbin0 -> 207872 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/CVE-2016-3133-1.docbin0 -> 747008 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/EDB-14092-1.docbin0 -> 101888 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/EDB-18952-1.docbin0 -> 9216 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/EDB-22215-1.docbin0 -> 374784 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/EDB-37909-1.docbin0 -> 833024 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/EDB-37910-1.docbin0 -> 87552 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/EDB-37924-1.docbin0 -> 89088 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/EDB-39396-1.docbin0 -> 128000 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/crash-1.docbin0 -> 10240 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/crash-2.docbin0 -> 10240 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/crash-3.docbin0 -> 10240 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/crash-4.docbin0 -> 34304 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/fdo40686-1.docbin0 -> 12288 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/fdo66692-2.docbin0 -> 91136 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/forcepoint-layout-1.docbin0 -> 580608 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/forcepoint50-grfanchor-1.docbin0 -> 91648 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/forcepoint50-rows-1.docbin0 -> 363520 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/hang-1.docbin0 -> 10240 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/hang-2.docbin0 -> 10240 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/hang-3.docbin0 -> 10240 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/hang-4.docbin0 -> 10240 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/hang-5.docbin0 -> 47616 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/hang-6.docbin0 -> 28160 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/hang-7.docbin0 -> 28160 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/hang-8.docbin0 -> 68096 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/hang-9.docbin0 -> 18944 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/ofz18414-1.docbin0 -> 59801 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/ofz18534-1.docbin0 -> 49380 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/ofz18554-1.docbin0 -> 23041 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/ofz19065.docbin0 -> 36393 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/ofz34749-1.docbin0 -> 49370 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/ofz38011-1.docbin0 -> 63022 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/ofz46457-1.docbin0 -> 17450 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/ofz47205-1.docbin0 -> 28038 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/ofz53457-1.docbin0 -> 17454 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/ofz57592-1.docbin0 -> 42913 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/ofz7322-1.docbin0 -> 49544 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/tdf117129_dxagoal0.docbin0 -> 53248 bytes
-rw-r--r--sw/qa/core/data/ww8/pass/tdf57532-1.docbin0 -> 25088 bytes
-rw-r--r--sw/qa/core/data/xml/fail/.gitignore0
-rw-r--r--sw/qa/core/data/xml/fail/CVE-2006-3117-1.sxwbin0 -> 441416 bytes
-rw-r--r--sw/qa/core/data/xml/fail/ooo71273-1.sxwbin0 -> 104936 bytes
-rw-r--r--sw/qa/core/data/xml/indeterminate/.gitignore0
-rw-r--r--sw/qa/core/data/xml/pass/.gitignore0
-rw-r--r--sw/qa/core/data/xml/pass/ooo32780-1.sxwbin0 -> 6349 bytes
-rw-r--r--sw/qa/core/doc/data/bookmark-delete-redline.docbin0 -> 66048 bytes
-rw-r--r--sw/qa/core/doc/data/copy-bookmarks.docxbin0 -> 24556 bytes
-rw-r--r--sw/qa/core/doc/data/floating-table-dummy-text.docxbin0 -> 28067 bytes
-rw-r--r--sw/qa/core/doc/data/header-footer-delete.docxbin0 -> 27286 bytes
-rw-r--r--sw/qa/core/doc/data/locale-independent-template.odtbin0 -> 642 bytes
-rw-r--r--sw/qa/core/doc/data/num-down-indent.docxbin0 -> 13303 bytes
-rw-r--r--sw/qa/core/doc/data/textbox-makeflyframe.docxbin0 -> 25642 bytes
-rw-r--r--sw/qa/core/doc/data/textbox-textrotateangle.odtbin0 -> 9496 bytes
-rw-r--r--sw/qa/core/doc/data/textbox-zorder.docxbin0 -> 5407 bytes
-rw-r--r--sw/qa/core/doc/doc.cxx614
-rw-r--r--sw/qa/core/docnode/data/redline-ends-before-toc.docxbin0 -> 12285 bytes
-rw-r--r--sw/qa/core/docnode/data/tdf150086.docxbin0 -> 16321 bytes
-rw-r--r--sw/qa/core/docnode/data/tdf156267.docxbin0 -> 103390 bytes
-rw-r--r--sw/qa/core/docnode/docnode.cxx71
-rw-r--r--sw/qa/core/draw/data/as-char-textbox.docxbin0 -> 6908 bytes
-rw-r--r--sw/qa/core/draw/data/sdt-textbox-header.docxbin0 -> 30694 bytes
-rw-r--r--sw/qa/core/draw/data/tdf107727_FrameBorder.odtbin0 -> 11265 bytes
-rw-r--r--sw/qa/core/draw/data/textbox-undo-ordnum.docxbin0 -> 21223 bytes
-rw-r--r--sw/qa/core/draw/draw.cxx151
-rw-r--r--sw/qa/core/edit/data/redline-hidden.fodt32
-rw-r--r--sw/qa/core/edit/edit.cxx61
-rw-r--r--sw/qa/core/exportdata/html/fail/.gitignore0
-rw-r--r--sw/qa/core/exportdata/html/indeterminate/.gitignore0
-rw-r--r--sw/qa/core/exportdata/html/pass/cp1000068.odtbin0 -> 52287 bytes
-rw-r--r--sw/qa/core/exportdata/ooxml/fail/.gitignore0
-rw-r--r--sw/qa/core/exportdata/ooxml/indeterminate/.gitignore0
-rw-r--r--sw/qa/core/exportdata/ooxml/pass/abi9930.odtbin0 -> 8839 bytes
-rw-r--r--sw/qa/core/exportdata/ooxml/pass/sdt-around-float-table.docxbin0 -> 12845 bytes
-rw-r--r--sw/qa/core/exportdata/ooxml/pass/sdt-before-table.docxbin0 -> 15567 bytes
-rw-r--r--sw/qa/core/exportdata/ooxml/pass/sdt-in-shape-with-textbox.docxbin0 -> 17960 bytes
-rw-r--r--sw/qa/core/exportdata/ooxml/pass/sdt-sectpr.docxbin0 -> 20485 bytes
-rw-r--r--sw/qa/core/exportdata/ooxml/pass/tdf135711.odtbin0 -> 54558 bytes
-rw-r--r--sw/qa/core/exportdata/ooxml/pass/tdf89191-1.odtbin0 -> 89157 bytes
-rw-r--r--sw/qa/core/exportdata/ooxml/pass/textframe-in-shape.docxbin0 -> 32829 bytes
-rw-r--r--sw/qa/core/exportdata/rtf/fail/.gitignore0
-rw-r--r--sw/qa/core/exportdata/rtf/indeterminate/.gitignore0
-rw-r--r--sw/qa/core/exportdata/rtf/pass/abi10201.rtf3
-rw-r--r--sw/qa/core/exportdata/rtf/pass/abi7407.odtbin0 -> 10617 bytes
-rw-r--r--sw/qa/core/exportdata/rtf/pass/fdo67386.docbin0 -> 204288 bytes
-rw-r--r--sw/qa/core/exportdata/rtf/pass/fdo70624.odtbin0 -> 33100 bytes
-rw-r--r--sw/qa/core/exportdata/rtf/pass/i23357.odtbin0 -> 25252 bytes
-rw-r--r--sw/qa/core/fields/data/chapter_field_followedby.odtbin0 -> 11183 bytes
-rw-r--r--sw/qa/core/fields/data/styleref-flags.docxbin0 -> 23218 bytes
-rw-r--r--sw/qa/core/fields/data/styleref.odtbin0 -> 40280 bytes
-rw-r--r--sw/qa/core/fields/data/suppress-non-numerical.docxbin0 -> 17046 bytes
-rw-r--r--sw/qa/core/fields/data/tdf143424.odtbin0 -> 10600 bytes
-rw-r--r--sw/qa/core/fields/data/tdf86790.docxbin0 -> 15679 bytes
-rw-r--r--sw/qa/core/fields/fields.cxx484
-rw-r--r--sw/qa/core/filters-test.cxx229
-rw-r--r--sw/qa/core/frmedt/data/floating-table-caption.docxbin0 -> 22947 bytes
-rw-r--r--sw/qa/core/frmedt/data/paste-fly-in-textbox.docxbin0 -> 6092 bytes
-rw-r--r--sw/qa/core/frmedt/data/textbox-reanchor.odtbin0 -> 9364 bytes
-rw-r--r--sw/qa/core/frmedt/frmedt.cxx255
-rw-r--r--sw/qa/core/header_footer/HeaderFooterTest.cxx1336
-rw-r--r--sw/qa/core/header_footer/data/DoubleFirstLeftRight.docxbin0 -> 11824 bytes
-rw-r--r--sw/qa/core/header_footer/data/DoubleFirstLeftRight.odtbin0 -> 12626 bytes
-rw-r--r--sw/qa/core/header_footer/data/FirstPageHeaderShape.docxbin0 -> 6189 bytes
-rw-r--r--sw/qa/core/header_footer/data/FirstPageHeaderShape.odtbin0 -> 9647 bytes
-rw-r--r--sw/qa/core/header_footer/data/SimpleFirst.docxbin0 -> 5543 bytes
-rw-r--r--sw/qa/core/header_footer/data/SimpleFirst.odtbin0 -> 9468 bytes
-rw-r--r--sw/qa/core/header_footer/data/SimpleFirstLeftRight.docxbin0 -> 8450 bytes
-rw-r--r--sw/qa/core/header_footer/data/SimpleFirstLeftRight.odtbin0 -> 10754 bytes
-rw-r--r--sw/qa/core/header_footer/data/SimpleLeftRight.docxbin0 -> 5531 bytes
-rw-r--r--sw/qa/core/header_footer/data/SimpleLeftRight.odtbin0 -> 9601 bytes
-rw-r--r--sw/qa/core/header_footer/data/TestFirstFooterDisabled.docxbin0 -> 85485 bytes
-rw-r--r--sw/qa/core/header_footer/data/TestPageStyleOnlyLeft.docxbin0 -> 10191 bytes
-rw-r--r--sw/qa/core/header_footer/data/bnc519228_odd-breaksB.docxbin0 -> 13674 bytes
-rw-r--r--sw/qa/core/header_footer/data/bnc875718.docxbin0 -> 7369 bytes
-rw-r--r--sw/qa/core/header_footer/data/bnc884615-mso-position.docxbin0 -> 7751 bytes
-rw-r--r--sw/qa/core/header_footer/data/cont-sect-break-header-footer.docxbin0 -> 18294 bytes
-rw-r--r--sw/qa/core/header_footer/data/fdo64238_a.docxbin0 -> 16401 bytes
-rw-r--r--sw/qa/core/header_footer/data/fdo64238_b.docxbin0 -> 14359 bytes
-rw-r--r--sw/qa/core/header_footer/data/fdo65655.docxbin0 -> 13760 bytes
-rw-r--r--sw/qa/core/header_footer/data/fdo66145.docxbin0 -> 16245 bytes
-rw-r--r--sw/qa/core/header_footer/data/first-header-footer.docbin0 -> 23552 bytes
-rw-r--r--sw/qa/core/header_footer/data/first-header-footer.docxbin0 -> 21998 bytes
-rw-r--r--sw/qa/core/header_footer/data/first-header-footer.odtbin0 -> 9644 bytes
-rw-r--r--sw/qa/core/header_footer/data/first-header-footerB.odtbin0 -> 11341 bytes
-rw-r--r--sw/qa/core/header_footer/data/headerfooter-link-to-prev.docxbin0 -> 18770 bytes
-rw-r--r--sw/qa/core/header_footer/data/n750935.docxbin0 -> 57750 bytes
-rw-r--r--sw/qa/core/header_footer/data/tdf112694.docxbin0 -> 14741 bytes
-rw-r--r--sw/qa/core/header_footer/data/tdf113849_evenAndOddHeaders.odtbin0 -> 24355 bytes
-rw-r--r--sw/qa/core/header_footer/data/tdf118393.odtbin0 -> 14208 bytes
-rw-r--r--sw/qa/core/header_footer/data/tdf127778.docxbin0 -> 23220 bytes
-rw-r--r--sw/qa/core/header_footer/data/tdf129582.docxbin0 -> 129975 bytes
-rw-r--r--sw/qa/core/header_footer/data/tdf135216_evenOddFooter.docxbin0 -> 10784 bytes
-rw-r--r--sw/qa/core/header_footer/data/tdf135216_evenOddFooter.odtbin0 -> 12457 bytes
-rw-r--r--sw/qa/core/header_footer/data/tdf145998_firstHeader.odtbin0 -> 9691 bytes
-rw-r--r--sw/qa/core/header_footer/data/tdf57155.docxbin0 -> 27287 bytes
-rw-r--r--sw/qa/core/header_footer/data/tdf69635.docxbin0 -> 6042 bytes
-rw-r--r--sw/qa/core/header_footer/data/tdf79639.docxbin0 -> 18409 bytes
-rw-r--r--sw/qa/core/layout/data/birt_min.odtbin0 -> 20194 bytes
-rw-r--r--sw/qa/core/layout/data/border-collapse-compat.docxbin0 -> 12669 bytes
-rw-r--r--sw/qa/core/layout/data/btlr-nested-cell.odtbin0 -> 9936 bytes
-rw-r--r--sw/qa/core/layout/data/btlr-table-row-span.odtbin0 -> 11958 bytes
-rw-r--r--sw/qa/core/layout/data/bullet.pngbin0 -> 351 bytes
-rw-r--r--sw/qa/core/layout/data/continuous-endnotes-move-backwards.docbin0 -> 24576 bytes
-rw-r--r--sw/qa/core/layout/data/double-border-horizontal.docxbin0 -> 12250 bytes
-rw-r--r--sw/qa/core/layout/data/double-border-vertical.docxbin0 -> 12253 bytes
-rw-r--r--sw/qa/core/layout/data/double-page-border.docxbin0 -> 12053 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-2cols.docxbin0 -> 31941 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-3pages.docxbin0 -> 13014 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-anchor-keep-with-next.docxbin0 -> 12225 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-compat14-body.docxbin0 -> 27894 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-compat14-nosplit.docxbin0 -> 26165 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-compat14.docxbin0 -> 28497 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-del-empty.docxbin0 -> 36317 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-deleted-anchor.docxbin0 -> 41531 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-footer-2rows.docxbin0 -> 31993 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-footer.docxbin0 -> 31661 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-from-bottom.docxbin0 -> 59718 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-hori-pos.docxbin0 -> 12432 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-in-inlinetable.docxbin0 -> 18597 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-in-inltbl-in-sect.docxbin0 -> 18625 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-in-section.docxbin0 -> 14024 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-in-text-section.docxbin0 -> 12452 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-model-position-for-view-point-correction.docxbin0 -> 12696 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-move-master.docxbin0 -> 13635 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-multi-col.docxbin0 -> 12525 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-negative-height.docxbin0 -> 39432 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-nested-overlap.odtbin0 -> 11681 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-nested-rowspan.docxbin0 -> 25940 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-nested.odtbin0 -> 11635 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-next-leaf-in-section.docxbin0 -> 24632 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-next-row-invalidate-pos.docxbin0 -> 9281 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-no-footer-overlap.docbin0 -> 48640 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-nomargins.docxbin0 -> 12737 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-object-formatter.docxbin0 -> 21480 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-rowsplit.docxbin0 -> 13220 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-tab-join-legacy.docxbin0 -> 21410 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-tab-join.docxbin0 -> 21571 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-table-join.docxbin0 -> 16869 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-table-row-keep.docxbin0 -> 41801 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-then-table.docbin0 -> 50688 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-then-table.docxbin0 -> 28857 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-vertoffset.docxbin0 -> 12960 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-widow.docxbin0 -> 31279 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-wrap-on-all-pages.docxbin0 -> 13099 bytes
-rw-r--r--sw/qa/core/layout/data/floattable-wrapped-by-table.docxbin0 -> 12728 bytes
-rw-r--r--sw/qa/core/layout/data/floattable.docxbin0 -> 12966 bytes
-rw-r--r--sw/qa/core/layout/data/header-textbox.docxbin0 -> 5778 bytes
-rw-r--r--sw/qa/core/layout/data/inner-border.docxbin0 -> 12391 bytes
-rw-r--r--sw/qa/core/layout/data/keepwithnext-fullheight.fodt42
-rw-r--r--sw/qa/core/layout/data/linked-bullet.odtbin0 -> 8779 bytes
-rw-r--r--sw/qa/core/layout/data/page-remove-fly-no-table.fodt460
-rw-r--r--sw/qa/core/layout/data/page-remove-fly-table.odtbin0 -> 13943 bytes
-rw-r--r--sw/qa/core/layout/data/para-border-in-cell-clip.docxbin0 -> 12524 bytes
-rw-r--r--sw/qa/core/layout/data/rtl-table.docxbin0 -> 5487 bytes
-rw-r--r--sw/qa/core/layout/data/shape-textbox.odtbin0 -> 15441 bytes
-rw-r--r--sw/qa/core/layout/data/sorted-objs-insert.docxbin0 -> 27084 bytes
-rw-r--r--sw/qa/core/layout/data/split-table-border.odtbin0 -> 13057 bytes
-rw-r--r--sw/qa/core/layout/data/split-table-merged-border.odtbin0 -> 12318 bytes
-rw-r--r--sw/qa/core/layout/data/table-fly-overlap-spacing.docxbin0 -> 24594 bytes
-rw-r--r--sw/qa/core/layout/data/table-fly-overlap.docxbin0 -> 17718 bytes
-rw-r--r--sw/qa/core/layout/data/table-in-footnote.docxbin0 -> 15684 bytes
-rw-r--r--sw/qa/core/layout/data/table-missing-join.docxbin0 -> 18441 bytes
-rw-r--r--sw/qa/core/layout/data/table-print-area-left.docxbin0 -> 11807 bytes
-rw-r--r--sw/qa/core/layout/data/tables-move-backwards.odtbin0 -> 9578 bytes
-rw-r--r--sw/qa/core/layout/data/tdf122894-4.docbin0 -> 214528 bytes
-rw-r--r--sw/qa/core/layout/data/tdf128195.docxbin0 -> 14883 bytes
-rw-r--r--sw/qa/core/layout/data/tdf134783_testAnchorPositionBasedOnParagraph.fodt284
-rw-r--r--sw/qa/core/layout/data/tdf157096.docxbin0 -> 18904 bytes
-rw-r--r--sw/qa/core/layout/data/tdf45908_invoice.odtbin0 -> 4780 bytes
-rw-r--r--sw/qa/core/layout/data/textbox-autogrow-vertical.docxbin0 -> 13722 bytes
-rw-r--r--sw/qa/core/layout/data/textbox-modification.docxbin0 -> 12284 bytes
-rw-r--r--sw/qa/core/layout/data/textbox-phantom-change.docxbin0 -> 5092 bytes
-rw-r--r--sw/qa/core/layout/data/vmerge-cell-border.docxbin0 -> 13610 bytes
-rw-r--r--sw/qa/core/layout/fly.cxx91
-rw-r--r--sw/qa/core/layout/flycnt.cxx1275
-rw-r--r--sw/qa/core/layout/frmtool.cxx40
-rw-r--r--sw/qa/core/layout/ftnfrm.cxx66
-rw-r--r--sw/qa/core/layout/layact.cxx91
-rw-r--r--sw/qa/core/layout/layout.cxx1052
-rw-r--r--sw/qa/core/layout/paintfrm.cxx163
-rw-r--r--sw/qa/core/layout/sortedobjs.cxx35
-rw-r--r--sw/qa/core/layout/tabfrm.cxx204
-rw-r--r--sw/qa/core/layout/trvlfrm.cxx56
-rw-r--r--sw/qa/core/macros-test.cxx542
-rw-r--r--sw/qa/core/objectpositioning/data/bottom-margin-with-footer.docxbin0 -> 17919 bytes
-rw-r--r--sw/qa/core/objectpositioning/data/floattable-follow-on-wrong-page.odtbin0 -> 38658 bytes
-rw-r--r--sw/qa/core/objectpositioning/data/floattable-overlap-cell.docxbin0 -> 26200 bytes
-rw-r--r--sw/qa/core/objectpositioning/data/floattable-tbl-overlap.docxbin0 -> 12734 bytes
-rw-r--r--sw/qa/core/objectpositioning/data/floattable-vert-orient-top.odtbin0 -> 14133 bytes
-rw-r--r--sw/qa/core/objectpositioning/data/inside-outside-vert-align.docxbin0 -> 17252 bytes
-rw-r--r--sw/qa/core/objectpositioning/data/overlap-crash.odtbin0 -> 22502 bytes
-rw-r--r--sw/qa/core/objectpositioning/data/vml-vertical-alignment.docxbin0 -> 15152 bytes
-rw-r--r--sw/qa/core/objectpositioning/objectpositioning.cxx411
-rw-r--r--sw/qa/core/performance-jobfile9
-rw-r--r--sw/qa/core/test_ToxLinkProcessor.cxx148
-rw-r--r--sw/qa/core/test_ToxMiscTest.cxx71
-rw-r--r--sw/qa/core/test_ToxTextGenerator.cxx200
-rw-r--r--sw/qa/core/test_ToxWhitespaceStripper.cxx134
-rw-r--r--sw/qa/core/test_rect.cxx107
-rw-r--r--sw/qa/core/test_region.cxx108
-rw-r--r--sw/qa/core/text/data/clearing-break-header.fodt31
-rw-r--r--sw/qa/core/text/data/clearing-break-start.fodt28
-rw-r--r--sw/qa/core/text/data/clearing-break.fodt28
-rw-r--r--sw/qa/core/text/data/content-control-header.docxbin0 -> 36986 bytes
-rw-r--r--sw/qa/core/text/data/empty-numbering-page-split.fodt62
-rw-r--r--sw/qa/core/text/data/empty-superscript.docxbin0 -> 12239 bytes
-rw-r--r--sw/qa/core/text/data/firstLineIndent-withFlag.fodt31
-rw-r--r--sw/qa/core/text/data/floattable-anchor-height.docxbin0 -> 19441 bytes
-rw-r--r--sw/qa/core/text/data/floattable-anchor-left-margin.docxbin0 -> 16806 bytes
-rw-r--r--sw/qa/core/text/data/floattable-anchor-next-page.docxbin0 -> 9409 bytes
-rw-r--r--sw/qa/core/text/data/floattable-avoid-last-manip-ofst.docxbin0 -> 36224 bytes
-rw-r--r--sw/qa/core/text/data/floattable-avoid-manip-ofst.docxbin0 -> 21749 bytes
-rw-r--r--sw/qa/core/text/data/floattable-bad-fly-pos.docxbin0 -> 18586 bytes
-rw-r--r--sw/qa/core/text/data/floattable-leftover-para-portion.docxbin0 -> 15305 bytes
-rw-r--r--sw/qa/core/text/data/floattable-negative-vert-offset-empty.docxbin0 -> 9379 bytes
-rw-r--r--sw/qa/core/text/data/floattable-negative-vert-offset.docxbin0 -> 9243 bytes
-rw-r--r--sw/qa/core/text/data/floattable-overlap.docxbin0 -> 11939 bytes
-rw-r--r--sw/qa/core/text/data/floattable-wrap-empty-para-legacy.docxbin0 -> 15211 bytes
-rw-r--r--sw/qa/core/text/data/floattable-wrap-empty-para.docxbin0 -> 16195 bytes
-rw-r--r--sw/qa/core/text/data/fly-minimal-wrap.docxbin0 -> 24388 bytes
-rw-r--r--sw/qa/core/text/data/footnote-connect.fodt132
-rw-r--r--sw/qa/core/text/data/image.pngbin0 -> 3148 bytes
-rw-r--r--sw/qa/core/text/data/line-height.fodt32
-rw-r--r--sw/qa/core/text/data/line-width.fodt32
-rw-r--r--sw/qa/core/text/data/number-portion-format.odtbin0 -> 8984 bytes
-rw-r--r--sw/qa/core/text/data/number-portion-noformat.docxbin0 -> 13230 bytes
-rw-r--r--sw/qa/core/text/data/para-upper-margin-fly-intersect.docxbin0 -> 14872 bytes
-rw-r--r--sw/qa/core/text/data/placeholder.fodt9
-rw-r--r--sw/qa/core/text/data/ruby.fodt25
-rw-r--r--sw/qa/core/text/data/scriptinfo-surrogate-pairs.fodt293
-rw-r--r--sw/qa/core/text/data/tabovermargin-section.fodt50
-rw-r--r--sw/qa/core/text/data/tdf112594.fodt301
-rw-r--r--sw/qa/core/text/data/tdf129810.odtbin0 -> 24475 bytes
-rw-r--r--sw/qa/core/text/data/tdf139863.fodt302
-rw-r--r--sw/qa/core/text/data/tdf153040.docxbin0 -> 16322 bytes
-rw-r--r--sw/qa/core/text/data/tdf158505.odtbin0 -> 21879 bytes
-rw-r--r--sw/qa/core/text/data/tdf41652_legacy.fodt300
-rw-r--r--sw/qa/core/text/data/tdf41652_variableNBSPdisabled.fodt301
-rw-r--r--sw/qa/core/text/data/tdf41652_variableNBSPenabled.fodt301
-rw-r--r--sw/qa/core/text/data/tdf43100_tdf120715_cursorOnSpacesOverMargin.docxbin0 -> 9606 bytes
-rw-r--r--sw/qa/core/text/data/tdf89288.fodt307
-rw-r--r--sw/qa/core/text/frmform.cxx154
-rw-r--r--sw/qa/core/text/itratr.cxx58
-rw-r--r--sw/qa/core/text/itrform2.cxx171
-rw-r--r--sw/qa/core/text/porlay.cxx60
-rw-r--r--sw/qa/core/text/porrst.cxx94
-rw-r--r--sw/qa/core/text/text.cxx1568
-rw-r--r--sw/qa/core/theme/ThemeTest.cxx486
-rw-r--r--sw/qa/core/theme/data/ThemeColorInHeading.docxbin0 -> 12352 bytes
-rw-r--r--sw/qa/core/theme/data/ThemeColorInHeading.fodt391
-rw-r--r--sw/qa/core/tox/tox.cxx258
-rw-r--r--sw/qa/core/txtnode/data/btlr-cell-chinese.docbin0 -> 38912 bytes
-rw-r--r--sw/qa/core/txtnode/data/floattable-anchor-split.docxbin0 -> 13035 bytes
-rw-r--r--sw/qa/core/txtnode/data/fly-anchor-undo.odtbin0 -> 10299 bytes
-rw-r--r--sw/qa/core/txtnode/data/special-insert-after-merged-cells.fodt25
-rw-r--r--sw/qa/core/txtnode/data/tdf157287.odtbin0 -> 11460 bytes
-rw-r--r--sw/qa/core/txtnode/data/textbox-copy-anchor.docxbin0 -> 224854 bytes
-rw-r--r--sw/qa/core/txtnode/data/textbox-node-split.docxbin0 -> 20929 bytes
-rw-r--r--sw/qa/core/txtnode/data/title-field-invalidate.fodt25
-rw-r--r--sw/qa/core/txtnode/justify.cxx185
-rw-r--r--sw/qa/core/txtnode/txtnode.cxx544
-rw-r--r--sw/qa/core/undo/data/anchor-type-change-position.docxbin0 -> 49986 bytes
-rw-r--r--sw/qa/core/undo/data/image-as-character.odtbin0 -> 9907 bytes
-rw-r--r--sw/qa/core/undo/data/table-copy-redline.odtbin0 -> 32554 bytes
-rw-r--r--sw/qa/core/undo/data/textbox-cut-save.docxbin0 -> 7272 bytes
-rw-r--r--sw/qa/core/undo/data/textbox-cut-undo.docxbin0 -> 13196 bytes
-rw-r--r--sw/qa/core/undo/undo.cxx181
-rw-r--r--sw/qa/core/unocore/data/broken-embedded-object.odtbin0 -> 14360 bytes
-rw-r--r--sw/qa/core/unocore/data/floattable-outer-nonsplit-inner.docxbin0 -> 16566 bytes
-rw-r--r--sw/qa/core/unocore/data/floattable-split.docxbin0 -> 18840 bytes
-rw-r--r--sw/qa/core/unocore/data/graphic.pngbin0 -> 766 bytes
-rw-r--r--sw/qa/core/unocore/data/paragraph-marker-formatted-run.docxbin0 -> 13294 bytes
-rw-r--r--sw/qa/core/unocore/data/paragraph-marker.docxbin0 -> 13282 bytes
-rw-r--r--sw/qa/core/unocore/data/tdf108272-1-minimal.docxbin0 -> 20886 bytes
-rw-r--r--sw/qa/core/unocore/data/tdf119081.odtbin0 -> 9000 bytes
-rw-r--r--sw/qa/core/unocore/data/tdf149555.docxbin0 -> 20132 bytes
-rw-r--r--sw/qa/core/unocore/unocore.cxx1063
-rw-r--r--sw/qa/core/uwriter.cxx1933
-rw-r--r--sw/qa/core/view/data/update-ole-object-previews.odtbin0 -> 10726 bytes
-rw-r--r--sw/qa/core/view/view.cxx72
557 files changed, 28125 insertions, 0 deletions
diff --git a/sw/qa/core/Test-BigPtrArray.cxx b/sw/qa/core/Test-BigPtrArray.cxx
new file mode 100644
index 0000000000..6754cda040
--- /dev/null
+++ b/sw/qa/core/Test-BigPtrArray.cxx
@@ -0,0 +1,636 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+//#define TIMELOG for measuring performance
+
+#include <bparr.hxx>
+
+namespace /* private */
+{
+ const sal_Int32 NUM_ENTRIES = 10;
+
+ class BigPtrEntryMock : public BigPtrEntry
+ {
+ public:
+ explicit BigPtrEntryMock(sal_Int32 count) : count_(count)
+ {
+ }
+
+ sal_Int32 getCount() const
+ {
+ return count_;
+ }
+
+ sal_Int32 Position() const
+ {
+ return GetPos();
+ }
+
+ private:
+ sal_Int32 count_;
+ };
+
+ void fillBigPtrArray(BigPtrArray& bparr, sal_Int32 numEntries)
+ {
+ for (sal_Int32 i = 0; i < numEntries; i++)
+ bparr.Insert(new BigPtrEntryMock(i), bparr.Count());
+ }
+
+ bool checkElementPositions(const BigPtrArray& bparr)
+ {
+ for (sal_Int32 i = 0; i < bparr.Count(); i++)
+ {
+ if (static_cast<BigPtrEntryMock*>(bparr[i])->Position() != i)
+ return false;
+ }
+ return true;
+ }
+
+ void releaseBigPtrArrayContent(BigPtrArray const & bparr)
+ {
+ for (sal_Int32 i = 0; i < bparr.Count(); i++)
+ delete bparr[i];
+ }
+}
+
+class BigPtrArrayUnittest : public CppUnit::TestFixture
+{
+public:
+
+ BigPtrArrayUnittest()
+ {
+ }
+
+ /** Test constructor/destructor
+ The size of the BigPtrArray
+ aka the 'Count' should be 0
+ initially.
+ */
+ void test_ctor()
+ {
+ BigPtrArray bparr;
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "BigPtrArray ctor failed",
+ static_cast<sal_Int32>(0), bparr.Count()
+ );
+ }
+
+ void test_insert_entries_at_front()
+ {
+ BigPtrArray bparr;
+
+ for (sal_Int32 i = 0; i < NUM_ENTRIES; i++)
+ {
+ sal_Int32 oldCount = bparr.Count();
+ bparr.Insert(new BigPtrEntryMock(i), 0);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "test_insert_entries_at_front failed",
+ oldCount + 1, bparr.Count()
+ );
+ }
+
+ for (sal_Int32 i = 0, j = NUM_ENTRIES - 1; i < NUM_ENTRIES; i++, j--)
+ {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "test_insert_entries_at_front failed",
+ j, static_cast<BigPtrEntryMock*>(bparr[i])->getCount()
+ );
+ }
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "test_insert_entries_at_front failed",
+ checkElementPositions(bparr)
+ );
+
+ releaseBigPtrArrayContent(bparr);
+ }
+
+ void test_insert_entries_in_the_middle()
+ {
+ BigPtrArray bparr;
+
+ fillBigPtrArray(bparr, NUM_ENTRIES);
+
+ sal_Int32 oldCount = bparr.Count();
+
+ bparr.Insert(new BigPtrEntryMock(NUM_ENTRIES), bparr.Count() / 2);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "test_insert_entries_in_the_middle failed",
+ oldCount + 1, bparr.Count()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "test_insert_entries_in_the_middle failed",
+ NUM_ENTRIES, static_cast<BigPtrEntryMock*>(bparr[bparr.Count() / 2])->getCount()
+ );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "test_insert_entries_in_the_middle failed",
+ checkElementPositions(bparr)
+ );
+
+ releaseBigPtrArrayContent(bparr);
+ }
+
+ void test_insert_at_already_used_index()
+ {
+ BigPtrArray bparr;
+
+ fillBigPtrArray(bparr, NUM_ENTRIES);
+
+ const sal_Int32 oldCount = bparr.Count();
+
+ // insert 5 elements
+ for (sal_Int32 i = 0, j = 30; i < 5; i++, j++)
+ bparr.Insert(new BigPtrEntryMock(j), i);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "test_insert_at_already_used_index failed",
+ oldCount + 5, bparr.Count()
+ );
+
+ // now, first 5 elements have counts: 30,31,..34
+ // next 10 elements have counts: 0,1,..9
+ for (sal_Int32 i = 0, j = 30; i < bparr.Count(); i++, j++)
+ {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "test_insert_at_already_used_index failed",
+ (i < 5 ? j : i - 5), static_cast<BigPtrEntryMock*>(bparr[i])->getCount()
+ );
+ }
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "test_insert_at_already_used_index failed",
+ checkElementPositions(bparr)
+ );
+
+ releaseBigPtrArrayContent(bparr);
+ }
+
+ void test_insert_at_end()
+ {
+ BigPtrArray bparr;
+
+ fillBigPtrArray(bparr, NUM_ENTRIES);
+
+ sal_Int32 oldCount = bparr.Count();
+ bparr.Insert(new BigPtrEntryMock(NUM_ENTRIES), bparr.Count());
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "test_insert_at_end failed",
+ oldCount + 1, bparr.Count()
+ );
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "test_insert_at_end failed",
+ NUM_ENTRIES, static_cast<BigPtrEntryMock*>(bparr[bparr.Count()-1])->getCount()
+ );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "test_insert_at_end failed",
+ checkElementPositions(bparr)
+ );
+
+ releaseBigPtrArrayContent(bparr);
+ }
+
+ void test_remove_at_front()
+ {
+ BigPtrArray bparr;
+
+ fillBigPtrArray(bparr, NUM_ENTRIES);
+
+ for (sal_Int32 i = 0; i < NUM_ENTRIES; i++)
+ {
+ sal_Int32 oldCount = bparr.Count();
+
+ delete bparr[0]; // release content
+ bparr.Remove(0); // remove item from container
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "test_remove_at_front failed (wrong count)",
+ oldCount - 1, bparr.Count()
+ );
+
+ for (sal_Int32 j = 0, k = i + 1; j < bparr.Count(); j++, k++)
+ {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "test_remove_at_front failed",
+ k, static_cast<BigPtrEntryMock*>(bparr[j])->getCount()
+ );
+ }
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "test_remove_at_front failed",
+ checkElementPositions(bparr)
+ );
+ }
+ }
+
+ void test_remove_at_back()
+ {
+ BigPtrArray bparr;
+
+ fillBigPtrArray(bparr, NUM_ENTRIES);
+
+ for (int i = NUM_ENTRIES - 1; i >= 0; i--)
+ {
+ sal_Int32 oldCount = bparr.Count();
+ delete bparr[i];
+ bparr.Remove(i);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "test_remove_at_back failed (wrong count)",
+ (oldCount - 1), bparr.Count()
+ );
+
+ for (sal_Int32 j = 0; j < bparr.Count(); j++)
+ {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "test_remove_at_back failed",
+ j, static_cast<BigPtrEntryMock*>(bparr[j])->getCount()
+ );
+ }
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "test_remove_at_back failed",
+ checkElementPositions(bparr)
+ );
+ }
+ }
+
+ void test_remove_in_the_middle()
+ {
+ BigPtrArray bparr;
+
+ fillBigPtrArray(bparr, NUM_ENTRIES);
+
+ while (bparr.Count())
+ {
+ sal_Int32 oldCount = bparr.Count();
+ sal_Int32 oldElement = static_cast<BigPtrEntryMock*>(bparr[bparr.Count() / 2])->getCount();
+
+ delete bparr[bparr.Count() / 2];
+ bparr.Remove(bparr.Count() / 2);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "test_remove_in_the_middle failed (wrong count)",
+ oldCount - 1, bparr.Count()
+ );
+
+ for (sal_Int32 i = 0; i < bparr.Count(); i++)
+ {
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "test_remove_in_the_middle failed",
+ static_cast<BigPtrEntryMock*>(bparr[i])->getCount() != oldElement
+ );
+ }
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "test_remove_in_the_middle failed",
+ checkElementPositions(bparr)
+ );
+ }
+ }
+
+ void test_remove_multiple_elements_at_once()
+ {
+ BigPtrArray bparr;
+
+ fillBigPtrArray(bparr, NUM_ENTRIES);
+
+ while(bparr.Count())
+ {
+ sal_Int32 nRemove = std::min<sal_Int32>(bparr.Count(), 3);
+ sal_Int32 oldCount = bparr.Count();
+
+ for (sal_Int32 i = 0; i < nRemove; i++)
+ delete bparr[i];
+
+ bparr.Remove(0, nRemove);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "test_remove_multiple_elements_at_once failed",
+ oldCount - nRemove, bparr.Count()
+ );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "test_remove_multiple_elements_at_once failed",
+ checkElementPositions(bparr)
+ );
+ }
+ }
+
+ void test_remove_all_elements_at_once()
+ {
+ BigPtrArray bparr;
+
+ fillBigPtrArray(bparr, NUM_ENTRIES);
+
+ releaseBigPtrArrayContent(bparr);
+ bparr.Remove(0, bparr.Count());
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "test_remove_all_elements_at_once failed",
+ static_cast<sal_Int32>(0), bparr.Count()
+ );
+ }
+
+ void test_move_elements_from_lower_to_higher_pos()
+ {
+ BigPtrArray bparr;
+
+ fillBigPtrArray(bparr, NUM_ENTRIES);
+
+ for (sal_Int32 i = 0; i < NUM_ENTRIES - 1; i++)
+ {
+ bparr.Move(i, i + 2);
+ }
+
+ for (sal_Int32 i = 0; i < (NUM_ENTRIES - 1); i++)
+ {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "test_move_elements_from_lower_to_higher_pos failed",
+ (i + 1), static_cast<BigPtrEntryMock*>(bparr[i])->getCount()
+ );
+ }
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "test_move_elements_from_lower_to_higher_pos failed",
+ static_cast<sal_Int32>(0), static_cast<BigPtrEntryMock*>(bparr[NUM_ENTRIES -1])->getCount()
+ );
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "test_move_elements_from_lower_to_higher_pos failed",
+ checkElementPositions(bparr)
+ );
+
+ releaseBigPtrArrayContent(bparr);
+ }
+
+ void test_move_elements_from_higher_to_lower_pos()
+ {
+ BigPtrArray bparr;
+
+ fillBigPtrArray(bparr, NUM_ENTRIES);
+
+ for (int i = NUM_ENTRIES - 1; i >= 1; i--)
+ {
+ bparr.Move(i, i - 1);
+ }
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "test_move_elements_from_higher_to_lower_pos failed",
+ (NUM_ENTRIES - 1), static_cast<BigPtrEntryMock*>(bparr[0])->getCount()
+ );
+
+ for (sal_Int32 i = 1; i < NUM_ENTRIES; i++)
+ {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "test_move_elements_from_higher_to_lower_pos failed",
+ (i - 1), static_cast<BigPtrEntryMock*>(bparr[i])->getCount()
+ );
+ }
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "test_move_elements_from_higher_to_lower_pos failed",
+ checkElementPositions(bparr)
+ );
+
+ releaseBigPtrArrayContent(bparr);
+ }
+
+ void test_move_to_same_position()
+ {
+ BigPtrArray bparr;
+
+ fillBigPtrArray(bparr, NUM_ENTRIES);
+
+ for (sal_Int32 i = 0; i < NUM_ENTRIES; i++)
+ {
+ bparr.Move(i, i);
+ }
+
+ for (sal_Int32 i = 0; i < NUM_ENTRIES; i++)
+ {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "test_move_to_same_position failed",
+ i, static_cast<BigPtrEntryMock*>(bparr[i])->getCount()
+ );
+ }
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "test_move_to_same_position failed",
+ checkElementPositions(bparr)
+ );
+
+ releaseBigPtrArrayContent(bparr);
+ }
+
+ void test_replace_elements()
+ {
+ BigPtrArray bparr;
+
+ fillBigPtrArray(bparr, NUM_ENTRIES);
+
+ for (sal_Int32 i = 0, j = NUM_ENTRIES - 1; i < NUM_ENTRIES; i++, j--)
+ {
+ delete bparr[i];
+ bparr.Replace(i, new BigPtrEntryMock(j));
+ }
+
+ for (sal_Int32 i = 0; i < NUM_ENTRIES; i++)
+ {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE
+ (
+ "test_replace_elements failed",
+ (NUM_ENTRIES - i - 1), static_cast<BigPtrEntryMock*>(bparr[i])->getCount()
+ );
+ }
+
+ CPPUNIT_ASSERT_MESSAGE
+ (
+ "test_replace_elements failed",
+ checkElementPositions(bparr)
+ );
+
+ releaseBigPtrArrayContent(bparr);
+ }
+
+ CPPUNIT_TEST_SUITE(BigPtrArrayUnittest);
+ CPPUNIT_TEST(test_ctor);
+ CPPUNIT_TEST(test_insert_entries_at_front);
+ CPPUNIT_TEST(test_insert_entries_in_the_middle);
+ CPPUNIT_TEST(test_insert_at_already_used_index);
+ CPPUNIT_TEST(test_insert_at_end);
+ CPPUNIT_TEST(test_remove_at_front);
+ CPPUNIT_TEST(test_remove_at_back);
+ CPPUNIT_TEST(test_remove_in_the_middle);
+ CPPUNIT_TEST(test_remove_multiple_elements_at_once);
+ CPPUNIT_TEST(test_remove_all_elements_at_once);
+ CPPUNIT_TEST(test_move_elements_from_lower_to_higher_pos);
+ CPPUNIT_TEST(test_move_elements_from_higher_to_lower_pos);
+ CPPUNIT_TEST(test_move_to_same_position);
+ CPPUNIT_TEST(test_replace_elements);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+#if defined TIMELOG
+
+const char* const START = "START: ";
+const char* const END = "END: ";
+
+class PerformanceTracer
+{
+public:
+
+public:
+ explicit PerformanceTracer(const string& methodName) :
+ startString_(START),
+ endString_(END)
+ {
+ startString_ += methodName;
+ endString_ += methodName;
+ }
+
+ ~PerformanceTracer()
+ {
+ }
+
+private:
+ string startString_;
+ string endString_;
+};
+
+class BigPtrArrayPerformanceTest : public CppUnit::TestFixture
+{
+public:
+ BigPtrArrayPerformanceTest()
+ {
+ }
+
+ void test_insert_at_end_1000()
+ { test_insert_at_end("1000"); }
+
+ void test_insert_at_end_10000()
+ { test_insert_at_end("10000"); }
+
+ void test_insert_at_end_100000()
+ { test_insert_at_end("100000"); }
+
+ void test_insert_at_end_1000000()
+ { test_insert_at_end("1000000"); }
+
+ void test_insert_at_front_1000()
+ { test_insert_at_front("1000"); }
+
+ void test_insert_at_front_10000()
+ { test_insert_at_front("10000"); }
+
+ void test_insert_at_front_100000()
+ { test_insert_at_front("100000"); }
+
+ void test_insert_at_front_1000000()
+ { test_insert_at_front("1000000"); }
+
+ CPPUNIT_TEST_SUITE(BigPtrArrayPerformanceTest);
+ CPPUNIT_TEST(test_insert_at_end_1000);
+ CPPUNIT_TEST(test_insert_at_end_10000);
+ CPPUNIT_TEST(test_insert_at_end_100000);
+ CPPUNIT_TEST(test_insert_at_end_1000000);
+ CPPUNIT_TEST(test_insert_at_front_1000);
+ CPPUNIT_TEST(test_insert_at_front_10000);
+ CPPUNIT_TEST(test_insert_at_front_100000);
+ CPPUNIT_TEST(test_insert_at_front_1000000);
+ CPPUNIT_TEST_SUITE_END();
+
+private:
+ void test_insert_at_end(const char* numElements)
+ {
+ OStringBuffer buff("test_insert_at_end ");
+ buff.append(numElements);
+ int n = atoi(numElements);
+ PerformanceTracer tracer(buff.getStr());
+ BigPtrArray bparr;
+ for (int i = 0; i < n; i++)
+ bparr.Insert(new BigPtrEntryMock(i), bparr.Count());
+
+ releaseBigPtrArrayContent(bparr);
+ }
+
+ void test_insert_at_front(const char* numElements)
+ {
+ OStringBuffer buff("test_insert_at_front ");
+ buff.append(numElements);
+ int n = atoi(numElements);
+ PerformanceTracer tracer(buff.getStr());
+ BigPtrArray bparr;
+ for (int i = 0; i < n; i++)
+ bparr.Insert(new BigPtrEntryMock(i), 0);
+
+ releaseBigPtrArrayContent(bparr);
+ }
+};
+
+#endif
+
+// register test suites
+CPPUNIT_TEST_SUITE_REGISTRATION(BigPtrArrayUnittest);
+#ifdef TIMELOG
+CPPUNIT_TEST_SUITE_REGISTRATION(BigPtrArrayPerformanceTest);
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx b/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx
new file mode 100644
index 0000000000..117b48d016
--- /dev/null
+++ b/sw/qa/core/accessibilitycheck/AccessibilityCheckTest.cxx
@@ -0,0 +1,390 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <swmodeltestbase.hxx>
+#include <AccessibilityCheck.hxx>
+#include <AccessibilityIssue.hxx>
+#include <OnlineAccessibilityCheck.hxx>
+#include <wrtsh.hxx>
+#include <vcl/scheduler.hxx>
+#include <comphelper/propertysequence.hxx>
+
+#include <comphelper/scopeguard.hxx>
+#include <officecfg/Office/Common.hxx>
+
+class AccessibilityCheckTest : public SwModelTestBase
+{
+public:
+ AccessibilityCheckTest()
+ : SwModelTestBase("/sw/qa/core/accessibilitycheck/data/")
+ {
+ }
+};
+
+CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckDocumentIssues)
+{
+ createSwDoc("DocumentTest.odt");
+ SwDoc* pDoc = getSwDoc();
+ CPPUNIT_ASSERT(pDoc);
+ sw::AccessibilityCheck aCheck(pDoc);
+ aCheck.check();
+ auto& aIssues = aCheck.getIssueCollection().getIssues();
+ CPPUNIT_ASSERT_EQUAL(size_t(2), aIssues.size());
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::DOCUMENT_LANGUAGE, aIssues[0]->m_eIssueID);
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::DOCUMENT_TITLE, aIssues[1]->m_eIssueID);
+}
+
+CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testTableSplitMergeAndAltText)
+{
+ createSwDoc("AccessibilityTests1.odt");
+ SwDoc* pDoc = getSwDoc();
+ CPPUNIT_ASSERT(pDoc);
+ sw::AccessibilityCheck aCheck(pDoc);
+ aCheck.check();
+ auto& aIssues = aCheck.getIssueCollection().getIssues();
+ CPPUNIT_ASSERT_EQUAL(size_t(6), aIssues.size());
+
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::NO_ALT_GRAPHIC, aIssues[0]->m_eIssueID);
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TABLE_MERGE_SPLIT, aIssues[1]->m_eIssueID);
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TABLE_MERGE_SPLIT, aIssues[2]->m_eIssueID);
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TABLE_MERGE_SPLIT, aIssues[3]->m_eIssueID);
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TABLE_MERGE_SPLIT, aIssues[4]->m_eIssueID);
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::NO_ALT_SHAPE, aIssues[5]->m_eIssueID);
+}
+
+CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckParagraphIssues)
+{
+ // Tests whether formatting issues are detected when the whole paragraph has them instead of
+ // some text inside the paragraph
+ createSwDoc("ParagraphTest.odt");
+ SwDoc* pDoc = getSwDoc();
+ CPPUNIT_ASSERT(pDoc);
+ sw::AccessibilityCheck aCheck(pDoc);
+ aCheck.check();
+ auto& aIssues = aCheck.getIssueCollection().getIssues();
+ CPPUNIT_ASSERT_EQUAL(size_t(1), aIssues.size());
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, aIssues[0]->m_eIssueID);
+}
+
+CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckBackgroundImage)
+{
+ createSwDoc("BackgroundImageTest.odt");
+ SwDoc* pDoc = getSwDoc();
+ CPPUNIT_ASSERT(pDoc);
+ sw::AccessibilityCheck aCheck(pDoc);
+ aCheck.check();
+ auto& aIssues = aCheck.getIssueCollection().getIssues();
+ CPPUNIT_ASSERT_EQUAL(size_t(1), aIssues.size());
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::DOCUMENT_BACKGROUND, aIssues[0]->m_eIssueID);
+}
+
+CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckLinkedImage)
+{
+ createSwDoc("LinkedImageTest.fodt");
+ SwDoc* pDoc = getSwDoc();
+ CPPUNIT_ASSERT(pDoc);
+ sw::AccessibilityCheck aCheck(pDoc);
+ aCheck.check();
+ auto& aIssues = aCheck.getIssueCollection().getIssues();
+ CPPUNIT_ASSERT_EQUAL(size_t(4), aIssues.size());
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::LINKED_GRAPHIC, aIssues[1]->m_eIssueID);
+}
+
+CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckNewlineSpace)
+{
+ createSwDoc("NewlineTest.odt");
+ SwDoc* pDoc = getSwDoc();
+ CPPUNIT_ASSERT(pDoc);
+ sw::AccessibilityCheck aCheck(pDoc);
+ aCheck.check();
+ auto& aIssues = aCheck.getIssueCollection().getIssues();
+ CPPUNIT_ASSERT_EQUAL(size_t(2), aIssues.size());
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, aIssues[0]->m_eIssueID);
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, aIssues[1]->m_eIssueID);
+}
+
+CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckSpacebarSpace)
+{
+ createSwDoc("SpaceTest.odt");
+ SwDoc* pDoc = getSwDoc();
+ CPPUNIT_ASSERT(pDoc);
+ sw::AccessibilityCheck aCheck(pDoc);
+ aCheck.check();
+ auto& aIssues = aCheck.getIssueCollection().getIssues();
+ CPPUNIT_ASSERT_EQUAL(size_t(1), aIssues.size());
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, aIssues[0]->m_eIssueID);
+}
+
+CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testHyperlinks)
+{
+ createSwDoc("HyperlinkTest.odt");
+ SwDoc* pDoc = getSwDoc();
+ CPPUNIT_ASSERT(pDoc);
+ sw::AccessibilityCheck aCheck(pDoc);
+ aCheck.check();
+ auto& aIssues = aCheck.getIssueCollection().getIssues();
+ CPPUNIT_ASSERT_EQUAL(size_t(2), aIssues.size());
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::HYPERLINK_SHORT, aIssues[0]->m_eIssueID);
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::HYPERLINK_IS_TEXT, aIssues[1]->m_eIssueID);
+}
+
+CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckHighlightedText)
+{
+ createSwDoc("HighlightTest.odt");
+ SwDoc* pDoc = getSwDoc();
+ CPPUNIT_ASSERT(pDoc);
+ sw::AccessibilityCheck aCheck(pDoc);
+ aCheck.check();
+ auto& aIssues = aCheck.getIssueCollection().getIssues();
+ CPPUNIT_ASSERT_EQUAL(size_t(1), aIssues.size());
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, aIssues[0]->m_eIssueID);
+}
+
+CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testNumberingCheck)
+{
+ createSwDoc("AccessibilityTests_NumberingCheck.odt");
+ SwDoc* pDoc = getSwDoc();
+ CPPUNIT_ASSERT(pDoc);
+ sw::AccessibilityCheck aCheck(pDoc);
+ aCheck.check();
+ auto& aIssues = aCheck.getIssueCollection().getIssues();
+ CPPUNIT_ASSERT_EQUAL(size_t(5), aIssues.size());
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::MANUAL_NUMBERING, aIssues[0]->m_eIssueID);
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::MANUAL_NUMBERING, aIssues[1]->m_eIssueID);
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::MANUAL_NUMBERING, aIssues[2]->m_eIssueID);
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::MANUAL_NUMBERING, aIssues[3]->m_eIssueID);
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::MANUAL_NUMBERING, aIssues[4]->m_eIssueID);
+}
+
+CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckFakeFootnote)
+{
+ createSwDoc("FakeFootnoteTest.odt");
+ SwDoc* pDoc = getSwDoc();
+ CPPUNIT_ASSERT(pDoc);
+ sw::AccessibilityCheck aCheck(pDoc);
+ aCheck.check();
+ auto& aIssues = aCheck.getIssueCollection().getIssues();
+ CPPUNIT_ASSERT_EQUAL(size_t(2), aIssues.size());
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::FAKE_FOOTNOTE, aIssues[0]->m_eIssueID);
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::FAKE_FOOTNOTE, aIssues[1]->m_eIssueID);
+}
+
+CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckFakeCaption)
+{
+ createSwDoc("FakeCaptionTest.odt");
+ SwDoc* pDoc = getSwDoc();
+ CPPUNIT_ASSERT(pDoc);
+ sw::AccessibilityCheck aCheck(pDoc);
+ aCheck.check();
+ auto& aIssues = aCheck.getIssueCollection().getIssues();
+ CPPUNIT_ASSERT_EQUAL(size_t(1), aIssues.size());
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::FAKE_CAPTION, aIssues[0]->m_eIssueID);
+}
+
+CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckTableFormatting)
+{
+ createSwDoc("TableFormattingTest.odt");
+ SwDoc* pDoc = getSwDoc();
+ CPPUNIT_ASSERT(pDoc);
+ sw::AccessibilityCheck aCheck(pDoc);
+ aCheck.check();
+ auto& aIssues = aCheck.getIssueCollection().getIssues();
+ CPPUNIT_ASSERT_EQUAL(size_t(1), aIssues.size());
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TABLE_FORMATTING, aIssues[0]->m_eIssueID);
+}
+
+CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckTabsFormatting)
+{
+ createSwDoc("TabsTest.odt");
+ SwDoc* pDoc = getSwDoc();
+ CPPUNIT_ASSERT(pDoc);
+ sw::AccessibilityCheck aCheck(pDoc);
+ aCheck.check();
+ auto& aIssues = aCheck.getIssueCollection().getIssues();
+ CPPUNIT_ASSERT_EQUAL(size_t(4), aIssues.size());
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, aIssues[0]->m_eIssueID);
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, aIssues[1]->m_eIssueID);
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, aIssues[2]->m_eIssueID);
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, aIssues[3]->m_eIssueID);
+}
+
+//tdf#156550 - Accessibility sidebar complains about TOC hyperlinks
+CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testCheckTOCHyperlink)
+{
+ createSwDoc("TOCHyperlinkTest.odt");
+ SwDoc* pDoc = getSwDoc();
+ CPPUNIT_ASSERT(pDoc);
+ sw::AccessibilityCheck aCheck(pDoc);
+ aCheck.check();
+ auto& aIssues = aCheck.getIssueCollection().getIssues();
+ // Without the fix in place, this test would have failed with
+ // - Expected: 0 (No Detected HYPERLINK_IS_TEXT Issues)
+ // - Actual : 4 (Number of TOC Hyperlinks)
+ CPPUNIT_ASSERT_EQUAL(size_t(0), aIssues.size());
+}
+
+namespace
+{
+std::vector<std::shared_ptr<sfx::AccessibilityIssue>>
+scanAccessibilityIssuesOnNodes(SwDoc* pDocument)
+{
+ std::vector<std::shared_ptr<sfx::AccessibilityIssue>> aIssues;
+ auto const& pNodes = pDocument->GetNodes();
+ for (SwNodeOffset n(0); n < pNodes.Count(); ++n)
+ {
+ SwNode* pNode = pNodes[n];
+ auto& pCollection = pNode->getAccessibilityCheckStatus().pCollection;
+ if (pCollection)
+ {
+ for (auto& pIssue : pCollection->getIssues())
+ {
+ aIssues.push_back(pIssue);
+ }
+ }
+ }
+ return aIssues;
+}
+
+void checkIssuePosition(std::shared_ptr<sfx::AccessibilityIssue> const& pIssue, int nLine,
+ sal_Int32 nStart, sal_Int32 nEnd, SwNodeOffset nIndex)
+{
+ auto* pSwIssue = static_cast<sw::AccessibilityIssue*>(pIssue.get());
+
+ OString sFailMessage = OString::Concat("Start doesn't match at line: ")
+ + OString::Concat(OString::number(nLine));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailMessage.getStr(), nStart, pSwIssue->getStart());
+
+ sFailMessage
+ = OString::Concat("End doesn't match at line: ") + OString::Concat(OString::number(nLine));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailMessage.getStr(), nEnd, pSwIssue->getEnd());
+
+ sFailMessage = OString::Concat("Offset doesn't match at line: ")
+ + OString::Concat(OString::number(nLine));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(sFailMessage.getStr(), nIndex, pSwIssue->getNode()->GetIndex());
+}
+
+} // end anonymous ns
+
+CPPUNIT_TEST_FIXTURE(AccessibilityCheckTest, testOnlineNodeSplitAppend)
+{
+ // Checks the a11y checker is setting the a11y issues to the nodes
+ // correctly when splitting and appending nodes (through undo), which
+ // happen on editing all the time.
+ // When a node is split, it can happen that both nodes get a11y issues
+ // if the node splits the area of direct formatting.
+
+ createSwDoc("OnlineCheck.odt");
+ SwDoc* pDoc = getSwDoc();
+ CPPUNIT_ASSERT(pDoc);
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ CPPUNIT_ASSERT(pWrtShell);
+
+ // Enable online a11y checker
+ {
+ auto pBatch(comphelper::ConfigurationChanges::create());
+ officecfg::Office::Common::Accessibility::OnlineAccessibilityCheck::set(true, pBatch);
+ pBatch->commit();
+ }
+ comphelper::ScopeGuard g([] {
+ auto pBatch(comphelper::ConfigurationChanges::create());
+ officecfg::Office::Common::Accessibility::OnlineAccessibilityCheck::set(false, pBatch);
+ pBatch->commit();
+ });
+
+ Scheduler::ProcessEventsToIdle();
+
+ // Check we have 2 a11y issue
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2),
+ pDoc->getOnlineAccessibilityCheck()->getNumberOfAccessibilityIssues());
+ auto aIssues = scanAccessibilityIssuesOnNodes(pDoc);
+ CPPUNIT_ASSERT_EQUAL(size_t(2), aIssues.size());
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, aIssues[0]->m_eIssueID);
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, aIssues[1]->m_eIssueID);
+ checkIssuePosition(aIssues[0], __LINE__, 0, 32, SwNodeOffset(9));
+ checkIssuePosition(aIssues[1], __LINE__, 33, 136, SwNodeOffset(9));
+
+ // Position the cursor and hit "enter" (trigger split-node action)
+ pWrtShell->Right(SwCursorSkipMode::Chars, /*bSelect=*/false, 33, /*bBasicCall=*/false);
+ pWrtShell->SplitNode();
+
+ // Check the result
+ CPPUNIT_ASSERT_EQUAL(OUString("He heard quiet steps behind him. "),
+ getParagraph(1)->getString());
+ CPPUNIT_ASSERT_EQUAL(OUString("That didn't bode well. Who could be following him this late at "
+ "night and in this deadbeat part of town?"),
+ getParagraph(2)->getString());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2),
+ pDoc->getOnlineAccessibilityCheck()->getNumberOfAccessibilityIssues());
+
+ aIssues = scanAccessibilityIssuesOnNodes(pDoc);
+ CPPUNIT_ASSERT_EQUAL(size_t(2), aIssues.size());
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, aIssues[0]->m_eIssueID);
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, aIssues[1]->m_eIssueID);
+ checkIssuePosition(aIssues[0], __LINE__, 0, 32, SwNodeOffset(9));
+ checkIssuePosition(aIssues[1], __LINE__, 0, 103, SwNodeOffset(10));
+
+ // Position cursor and split again
+ pWrtShell->Down(/*bSelect*/ false, /*nCount*/ 0);
+ pWrtShell->Right(SwCursorSkipMode::Chars, /*bSelect=*/false, 23, /*bBasicCall=*/false);
+ pWrtShell->SplitNode();
+
+ // Check the result
+ CPPUNIT_ASSERT_EQUAL(OUString("He heard quiet steps behind him. "),
+ getParagraph(1)->getString());
+ CPPUNIT_ASSERT_EQUAL(OUString("That didn't bode well. "), getParagraph(2)->getString());
+ CPPUNIT_ASSERT_EQUAL(
+ OUString(
+ "Who could be following him this late at night and in this deadbeat part of town?"),
+ getParagraph(3)->getString());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(3),
+ pDoc->getOnlineAccessibilityCheck()->getNumberOfAccessibilityIssues());
+ aIssues = scanAccessibilityIssuesOnNodes(pDoc);
+ CPPUNIT_ASSERT_EQUAL(size_t(3), aIssues.size());
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, aIssues[0]->m_eIssueID);
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, aIssues[1]->m_eIssueID);
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, aIssues[2]->m_eIssueID);
+ checkIssuePosition(aIssues[0], __LINE__, 0, 32, SwNodeOffset(9));
+ checkIssuePosition(aIssues[1], __LINE__, 0, 23, SwNodeOffset(10));
+ checkIssuePosition(aIssues[2], __LINE__, 0, 80, SwNodeOffset(11));
+
+ // Undo second change
+ dispatchCommand(mxComponent, ".uno:Undo", {});
+ CPPUNIT_ASSERT_EQUAL(OUString("He heard quiet steps behind him. "),
+ getParagraph(1)->getString());
+ CPPUNIT_ASSERT_EQUAL(OUString("That didn't bode well. Who could be following him this late at "
+ "night and in this deadbeat part of town?"),
+ getParagraph(2)->getString());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2),
+ pDoc->getOnlineAccessibilityCheck()->getNumberOfAccessibilityIssues());
+ aIssues = scanAccessibilityIssuesOnNodes(pDoc);
+ CPPUNIT_ASSERT_EQUAL(size_t(2), aIssues.size());
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, aIssues[0]->m_eIssueID);
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, aIssues[1]->m_eIssueID);
+ checkIssuePosition(aIssues[0], __LINE__, 0, 32, SwNodeOffset(9));
+ checkIssuePosition(aIssues[1], __LINE__, 0, 103, SwNodeOffset(10));
+
+ // Undo first change
+ dispatchCommand(mxComponent, ".uno:Undo", {});
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2),
+ pDoc->getOnlineAccessibilityCheck()->getNumberOfAccessibilityIssues());
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("He heard quiet steps behind him. That didn't bode well. Who could be following "
+ "him this late at night and in this deadbeat part of town?"),
+ getParagraph(1)->getString());
+ aIssues = scanAccessibilityIssuesOnNodes(pDoc);
+ CPPUNIT_ASSERT_EQUAL(size_t(2), aIssues.size());
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, aIssues[0]->m_eIssueID);
+ CPPUNIT_ASSERT_EQUAL(sfx::AccessibilityIssueID::TEXT_FORMATTING, aIssues[1]->m_eIssueID);
+ checkIssuePosition(aIssues[0], __LINE__, 0, 32, SwNodeOffset(9));
+ checkIssuePosition(aIssues[1], __LINE__, 33, 136, SwNodeOffset(9));
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/accessibilitycheck/data/AccessibilityTests1.odt b/sw/qa/core/accessibilitycheck/data/AccessibilityTests1.odt
new file mode 100644
index 0000000000..405fd6647a
--- /dev/null
+++ b/sw/qa/core/accessibilitycheck/data/AccessibilityTests1.odt
Binary files differ
diff --git a/sw/qa/core/accessibilitycheck/data/AccessibilityTests_NumberingCheck.odt b/sw/qa/core/accessibilitycheck/data/AccessibilityTests_NumberingCheck.odt
new file mode 100644
index 0000000000..190ee91a8f
--- /dev/null
+++ b/sw/qa/core/accessibilitycheck/data/AccessibilityTests_NumberingCheck.odt
Binary files differ
diff --git a/sw/qa/core/accessibilitycheck/data/BackgroundImageTest.odt b/sw/qa/core/accessibilitycheck/data/BackgroundImageTest.odt
new file mode 100644
index 0000000000..eff6f17839
--- /dev/null
+++ b/sw/qa/core/accessibilitycheck/data/BackgroundImageTest.odt
Binary files differ
diff --git a/sw/qa/core/accessibilitycheck/data/DocumentTest.odt b/sw/qa/core/accessibilitycheck/data/DocumentTest.odt
new file mode 100644
index 0000000000..65b9a7c2fd
--- /dev/null
+++ b/sw/qa/core/accessibilitycheck/data/DocumentTest.odt
Binary files differ
diff --git a/sw/qa/core/accessibilitycheck/data/FakeCaptionTest.odt b/sw/qa/core/accessibilitycheck/data/FakeCaptionTest.odt
new file mode 100644
index 0000000000..9630bfcf73
--- /dev/null
+++ b/sw/qa/core/accessibilitycheck/data/FakeCaptionTest.odt
Binary files differ
diff --git a/sw/qa/core/accessibilitycheck/data/FakeFootnoteTest.odt b/sw/qa/core/accessibilitycheck/data/FakeFootnoteTest.odt
new file mode 100644
index 0000000000..fdacf6cb35
--- /dev/null
+++ b/sw/qa/core/accessibilitycheck/data/FakeFootnoteTest.odt
Binary files differ
diff --git a/sw/qa/core/accessibilitycheck/data/HighlightTest.odt b/sw/qa/core/accessibilitycheck/data/HighlightTest.odt
new file mode 100644
index 0000000000..a8f13e142c
--- /dev/null
+++ b/sw/qa/core/accessibilitycheck/data/HighlightTest.odt
Binary files differ
diff --git a/sw/qa/core/accessibilitycheck/data/HyperlinkTest.odt b/sw/qa/core/accessibilitycheck/data/HyperlinkTest.odt
new file mode 100644
index 0000000000..1eba1932ce
--- /dev/null
+++ b/sw/qa/core/accessibilitycheck/data/HyperlinkTest.odt
Binary files differ
diff --git a/sw/qa/core/accessibilitycheck/data/LinkedImageTest.fodt b/sw/qa/core/accessibilitycheck/data/LinkedImageTest.fodt
new file mode 100644
index 0000000000..c73162b183
--- /dev/null
+++ b/sw/qa/core/accessibilitycheck/data/LinkedImageTest.fodt
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rpt="http://openoffice.org/2005/report" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:css3t="http://www.w3.org/TR/css3-text/" office:version="1.2" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:body>
+ <office:text>
+ <text:h text:style-name="P3" text:outline-level="1">Linked graphic</text:h>
+ <text:p text:style-name="P1"><draw:frame draw:style-name="fr1" draw:name="Image2" text:anchor-type="as-char" svg:width="92.3pt" svg:height="92.3pt" draw:z-index="0"><draw:image xlink:href="x2.jpg" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/>
+ </draw:frame></text:p>
+ <text:h text:style-name="P3" text:outline-level="1">Embedded graphic</text:h>
+ <text:p text:style-name="P2"><draw:frame draw:style-name="fr1" draw:name="Image1" text:anchor-type="as-char" svg:width="89.89pt" svg:height="89.89pt" draw:z-index="0"><draw:image draw:mime-type="image/gif">
+ <office:binary-data>R0lGODlhAgACAPABAAAAAP///yH5BAAAAAAAIf4tIFRoaXMgaXMgYW4gZXhhbXBsZSBiaXRt
+ YXAgb2YgdGhlIGxldHRlciAiSiIKACH/C0ltYWdlTWFnaWNrDmdhbW1hPTAuNDU0NTQ1ACwA
+ AAAAAgACAAACA0QCBQA7
+ </office:binary-data>
+ </draw:image>
+ </draw:frame></text:p>
+ </office:text>
+ </office:body>
+</office:document>
diff --git a/sw/qa/core/accessibilitycheck/data/NewlineTest.odt b/sw/qa/core/accessibilitycheck/data/NewlineTest.odt
new file mode 100644
index 0000000000..9ff715916f
--- /dev/null
+++ b/sw/qa/core/accessibilitycheck/data/NewlineTest.odt
Binary files differ
diff --git a/sw/qa/core/accessibilitycheck/data/OnlineCheck.odt b/sw/qa/core/accessibilitycheck/data/OnlineCheck.odt
new file mode 100644
index 0000000000..d24fb4ff1a
--- /dev/null
+++ b/sw/qa/core/accessibilitycheck/data/OnlineCheck.odt
Binary files differ
diff --git a/sw/qa/core/accessibilitycheck/data/ParagraphTest.odt b/sw/qa/core/accessibilitycheck/data/ParagraphTest.odt
new file mode 100644
index 0000000000..766ecd0b4e
--- /dev/null
+++ b/sw/qa/core/accessibilitycheck/data/ParagraphTest.odt
Binary files differ
diff --git a/sw/qa/core/accessibilitycheck/data/SpaceTest.odt b/sw/qa/core/accessibilitycheck/data/SpaceTest.odt
new file mode 100644
index 0000000000..0f00f78f96
--- /dev/null
+++ b/sw/qa/core/accessibilitycheck/data/SpaceTest.odt
Binary files differ
diff --git a/sw/qa/core/accessibilitycheck/data/TOCHyperlinkTest.odt b/sw/qa/core/accessibilitycheck/data/TOCHyperlinkTest.odt
new file mode 100644
index 0000000000..506fc935ac
--- /dev/null
+++ b/sw/qa/core/accessibilitycheck/data/TOCHyperlinkTest.odt
Binary files differ
diff --git a/sw/qa/core/accessibilitycheck/data/TableFormattingTest.odt b/sw/qa/core/accessibilitycheck/data/TableFormattingTest.odt
new file mode 100644
index 0000000000..adc63daaf7
--- /dev/null
+++ b/sw/qa/core/accessibilitycheck/data/TableFormattingTest.odt
Binary files differ
diff --git a/sw/qa/core/accessibilitycheck/data/TabsTest.odt b/sw/qa/core/accessibilitycheck/data/TabsTest.odt
new file mode 100644
index 0000000000..29b415df87
--- /dev/null
+++ b/sw/qa/core/accessibilitycheck/data/TabsTest.odt
Binary files differ
diff --git a/sw/qa/core/attr/attr.cxx b/sw/qa/core/attr/attr.cxx
new file mode 100644
index 0000000000..a83a3228dd
--- /dev/null
+++ b/sw/qa/core/attr/attr.cxx
@@ -0,0 +1,101 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <swmodeltestbase.hxx>
+
+#include <docsh.hxx>
+#include <swdtflvr.hxx>
+#include <swmodule.hxx>
+#include <frmmgr.hxx>
+#include <frameformats.hxx>
+#include <formatflysplit.hxx>
+#include <formatwraptextatflystart.hxx>
+
+namespace
+{
+/// Covers sw/source/core/attr/ fixes.
+class Test : public SwModelTestBase
+{
+public:
+ Test()
+ : SwModelTestBase("/sw/qa/core/attr/data/")
+ {
+ }
+};
+
+CPPUNIT_TEST_FIXTURE(Test, testSwAttrSet)
+{
+ // Given a document with track changes and the whole document is selected:
+ createSwDoc("attr-set.docx");
+ SwDoc* pDoc = getSwDoc();
+ SwDocShell* pDocShell = pDoc->GetDocShell();
+ SwWrtShell* pWrtShell = pDocShell->GetWrtShell();
+ dispatchCommand(mxComponent, ".uno:SelectAll", {});
+ dispatchCommand(mxComponent, ".uno:Cut", {});
+ dispatchCommand(mxComponent, ".uno:SelectAll", {});
+ rtl::Reference<SwTransferable> xTransferable(new SwTransferable(*pWrtShell));
+ SwModule* pMod = SW_MOD();
+ SwTransferable* pOldTransferable = pMod->m_pXSelection;
+ pMod->m_pXSelection = xTransferable.get();
+
+ // When getting the plain text version of the selection:
+ datatransfer::DataFlavor aFlavor;
+ aFlavor.MimeType = "text/plain;charset=utf-16";
+ aFlavor.DataType = cppu::UnoType<OUString>::get();
+ uno::Any aData = xTransferable->getTransferData(aFlavor);
+
+ // Then make sure we get data without crashing:
+ CPPUNIT_ASSERT(aData.hasValue());
+ pMod->m_pXSelection = pOldTransferable;
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testFormatFlySplit)
+{
+ createSwDoc();
+ SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
+ SwFlyFrameAttrMgr aMgr(true, pWrtShell, Frmmgr_Type::TEXT, nullptr);
+ RndStdIds eAnchor = RndStdIds::FLY_AT_PARA;
+ aMgr.InsertFlyFrame(eAnchor, aMgr.GetPos(), aMgr.GetSize());
+ SwDoc* pDoc = getSwDoc();
+ sw::SpzFrameFormats& rFlys = *pDoc->GetSpzFrameFormats();
+ sw::SpzFrameFormat* pFly = rFlys[0];
+ CPPUNIT_ASSERT(!pFly->GetAttrSet().GetFlySplit().GetValue());
+
+ SfxItemSet aSet(pFly->GetAttrSet());
+ SwFormatFlySplit aItem(true);
+ aSet.Put(aItem);
+ pDoc->SetFlyFrameAttr(*pFly, aSet);
+
+ CPPUNIT_ASSERT(pFly->GetAttrSet().GetFlySplit().GetValue());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testFormatWrapTextAtFlyStart)
+{
+ createSwDoc();
+ SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
+ SwFlyFrameAttrMgr aMgr(true, pWrtShell, Frmmgr_Type::TEXT, nullptr);
+ RndStdIds eAnchor = RndStdIds::FLY_AT_PARA;
+ aMgr.InsertFlyFrame(eAnchor, aMgr.GetPos(), aMgr.GetSize());
+ SwDoc* pDoc = getSwDoc();
+ sw::SpzFrameFormats& rFlys = *pDoc->GetSpzFrameFormats();
+ sw::SpzFrameFormat* pFly = rFlys[0];
+ CPPUNIT_ASSERT(!pFly->GetAttrSet().GetWrapTextAtFlyStart().GetValue());
+
+ SfxItemSet aSet(pFly->GetAttrSet());
+ SwFormatWrapTextAtFlyStart aItem(true);
+ aSet.Put(aItem);
+ pDoc->SetFlyFrameAttr(*pFly, aSet);
+
+ CPPUNIT_ASSERT(pFly->GetAttrSet().GetWrapTextAtFlyStart().GetValue());
+}
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/attr/data/attr-set.docx b/sw/qa/core/attr/data/attr-set.docx
new file mode 100644
index 0000000000..0cb8508aa2
--- /dev/null
+++ b/sw/qa/core/attr/data/attr-set.docx
Binary files differ
diff --git a/sw/qa/core/crsr/crsr.cxx b/sw/qa/core/crsr/crsr.cxx
new file mode 100644
index 0000000000..72d271638d
--- /dev/null
+++ b/sw/qa/core/crsr/crsr.cxx
@@ -0,0 +1,237 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <swmodeltestbase.hxx>
+
+#include <com/sun/star/awt/FontWeight.hpp>
+#include <com/sun/star/text/ControlCharacter.hpp>
+#include <com/sun/star/view/XLineCursor.hpp>
+#include <com/sun/star/text/XTextDocument.hpp>
+#include <com/sun/star/text/XTextViewCursorSupplier.hpp>
+#include <com/sun/star/text/XTextViewCursor.hpp>
+
+#include <comphelper/propertysequence.hxx>
+#include <svl/srchitem.hxx>
+#include <vcl/scheduler.hxx>
+
+#include <docsh.hxx>
+#include <unotxdoc.hxx>
+#include <wrtsh.hxx>
+#include <ndtxt.hxx>
+#include <formatcontentcontrol.hxx>
+
+/// Covers sw/source/core/crsr/ fixes.
+class SwCoreCrsrTest : public SwModelTestBase
+{
+public:
+ SwCoreCrsrTest()
+ : SwModelTestBase("/sw/qa/core/crsr/data/")
+ {
+ }
+};
+
+CPPUNIT_TEST_FIXTURE(SwCoreCrsrTest, testFindReplace)
+{
+ createSwDoc();
+
+ // Given: a document with two "foo" in it, the second followed by a formatted soft hyphen.
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xTextDocument->getText();
+ // Create a document which has 2 lines: first line has foo in it, second line has the same, but
+ // followed by a formatted soft hyphen.
+ xText->insertString(xText->getEnd(), "foo xxx", /*bAbsorb=*/false);
+ xText->insertControlCharacter(xText->getEnd(), text::ControlCharacter::PARAGRAPH_BREAK,
+ /*bAbsorb=*/false);
+ xText->insertString(xText->getEnd(), u"foo xxx \xad after"_ustr, /*bAbsorb=*/false);
+ uno::Reference<frame::XModel> xModel(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextViewCursorSupplier> xTextViewCursorSupplier(
+ xModel->getCurrentController(), uno::UNO_QUERY);
+ uno::Reference<text::XTextViewCursor> xViewCursor = xTextViewCursorSupplier->getViewCursor();
+ xViewCursor->gotoEnd(/*bExpand=*/false);
+ xViewCursor->goLeft(/*nCount=*/6, /*bExpand=*/false);
+ xViewCursor->goLeft(/*nCount=*/1, /*bExpand=*/true);
+ uno::Reference<beans::XPropertySet> xViewCursorProps(xViewCursor, uno::UNO_QUERY);
+ xViewCursorProps->setPropertyValue("CharWeight", uno::Any(awt::FontWeight::BOLD));
+ xViewCursor->gotoStart(/*bExpand=*/false);
+
+ // When: doing search & replace 3 times.
+ uno::Sequence<beans::PropertyValue> aArgs(comphelper::InitPropertySequence({
+ { "SearchItem.SearchString", uno::Any(OUString("foo")) },
+ { "SearchItem.ReplaceString", uno::Any(OUString("bar")) },
+ { "SearchItem.Command", uno::Any(static_cast<sal_Int16>(SvxSearchCmd::REPLACE)) },
+ }));
+ // Find the first foo.
+ dispatchCommand(mxComponent, ".uno:ExecuteSearch", aArgs);
+ // Replace the first foo.
+ dispatchCommand(mxComponent, ".uno:ExecuteSearch", aArgs);
+ // Replace the second foo.
+ dispatchCommand(mxComponent, ".uno:ExecuteSearch", aArgs);
+
+ // Then: the second "foo" should be replaced as well.
+ xViewCursor->gotoEnd(/*bExpand=*/false);
+ uno::Reference<view::XLineCursor> xLineCursor(xViewCursor, uno::UNO_QUERY);
+ xLineCursor->gotoStartOfLine(/*bExpand=*/true);
+ OUString aActual = xViewCursor->getString();
+ CPPUNIT_ASSERT_GREATEREQUAL(static_cast<sal_Int32>(3), aActual.getLength());
+ OUString aActualStart = aActual.copy(0, 3);
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: bar
+ // - Actual : foo
+ // i.e. the foo on the second line was not replaced.
+ CPPUNIT_ASSERT_EQUAL(OUString("bar"), aActualStart);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreCrsrTest, testSelAllStartsWithTable)
+{
+ createSwDoc("sel-all-starts-with-table.odt");
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ SwDocShell* pDocShell = pTextDoc->GetDocShell();
+ SwDoc* pDoc = pDocShell->GetDoc();
+ SwWrtShell* pWrtShell = pDocShell->GetWrtShell();
+
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), pDoc->GetTableFrameFormatCount(/*bUsed=*/true));
+
+ pWrtShell->SelAll();
+ pWrtShell->SelAll();
+ Scheduler::ProcessEventsToIdle();
+ pWrtShell->DelLeft();
+
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 0
+ // - Actual : 1
+ // i.e. the table selection was lost and the table was not deleted.
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(0), pDoc->GetTableFrameFormatCount(/*bUsed=*/true));
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreCrsrTest, testContentControlLineBreak)
+{
+ // Given a document with a (rich text) content control:
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ uno::Reference<lang::XMultiServiceFactory> xMSF(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xTextDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ xText->insertString(xCursor, "test", /*bAbsorb=*/false);
+ xCursor->gotoStart(/*bExpand=*/false);
+ xCursor->gotoEnd(/*bExpand=*/true);
+ uno::Reference<text::XTextContent> xContentControl(
+ xMSF->createInstance("com.sun.star.text.ContentControl"), uno::UNO_QUERY);
+ xText->insertTextContent(xCursor, xContentControl, /*bAbsorb=*/true);
+
+ // When pressing "enter" in the middle of that content control:
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ pWrtShell->SttEndDoc(/*bStt=*/true);
+ // Go after "t".
+ pWrtShell->Right(SwCursorSkipMode::Chars, /*bSelect=*/false, 2, /*bBasicCall=*/false);
+ dispatchCommand(mxComponent, ".uno:InsertPara", {});
+
+ // Then make sure that we only insert a line break, not a new paragraph:
+ SwTextNode* pTextNode = pWrtShell->GetCursor()->GetMark()->GetNode().GetTextNode();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: t\nest
+ // - Actual : est
+ // i.e. a new paragraph was inserted, which is not allowed for inline content controls.
+ CPPUNIT_ASSERT_EQUAL(OUString("t\nest"), pTextNode->GetExpandText(pWrtShell->GetLayout()));
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreCrsrTest, testContentControlReadOnly)
+{
+ // Given a document with a checkbox content control:
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ uno::Reference<lang::XMultiServiceFactory> xMSF(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xTextDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ xText->insertString(xCursor, u"â˜"_ustr, /*bAbsorb=*/false);
+ xCursor->gotoStart(/*bExpand=*/false);
+ xCursor->gotoEnd(/*bExpand=*/true);
+ uno::Reference<text::XTextContent> xContentControl(
+ xMSF->createInstance("com.sun.star.text.ContentControl"), uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xContentControlProps(xContentControl, uno::UNO_QUERY);
+ xContentControlProps->setPropertyValue("Checkbox", uno::Any(true));
+ xText->insertTextContent(xCursor, xContentControl, /*bAbsorb=*/true);
+
+ // When entering the content control:
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ pWrtShell->SttEndDoc(/*bStt=*/true);
+ pWrtShell->Right(SwCursorSkipMode::Chars, /*bSelect=*/false, 1, /*bBasicCall=*/false);
+
+ // Then make sure that the cursor is read-only:
+ // Without the accompanying fix in place, this test would have failed, it was possible to type
+ // into the checkbox content control, just to loose the typed content on the next click.
+ CPPUNIT_ASSERT(pWrtShell->HasReadonlySel());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreCrsrTest, testTdf135451)
+{
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+
+ // Insert narrow no-break space and move the cursor right before it
+ pWrtShell->Insert(u"a" + OUStringChar(CHAR_NNBSP) + "b");
+ pWrtShell->EndPara(/*bSelect=*/false);
+ pWrtShell->Left(SwCursorSkipMode::Chars, /*bSelect=*/false, 1, /*bBasicCall=*/false);
+ pWrtShell->GoPrevWord();
+ pWrtShell->Right(SwCursorSkipMode::Chars, /*bSelect=*/true, 1, /*bBasicCall=*/false);
+
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: a
+ // - Actual : CHAR_NNBSP
+ // i.e., the cursor did not move over the narrow no-break space (CHAR_NNBSP)
+ CPPUNIT_ASSERT_EQUAL(OUString("a"), pWrtShell->GetSelText());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreCrsrTest, testDropdownContentControl)
+{
+ // Given a document with a dropdown content control:
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ pWrtShell->InsertContentControl(SwContentControlType::DROP_DOWN_LIST);
+
+ // When entering the content control:
+ pWrtShell->SttEndDoc(/*bStt=*/true);
+ pWrtShell->Right(SwCursorSkipMode::Chars, /*bSelect=*/false, 1, /*bBasicCall=*/false);
+
+ // Then make sure that the cursor is read-only:
+ // Without the accompanying fix in place, this test would have failed, it was possible to type
+ // into the drop-down content control, providing content that is not one of the list items.
+ CPPUNIT_ASSERT(pWrtShell->HasReadonlySel());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreCrsrTest, testContentControlProtectedSection)
+{
+ // Given a document with a date content control in a protected section:
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ pWrtShell->InsertContentControl(SwContentControlType::DATE);
+ pWrtShell->SelAll();
+ OUString aSectionName = pWrtShell->GetUniqueSectionName();
+ SwSectionData aSection(SectionType::Content, aSectionName);
+ aSection.SetProtectFlag(true);
+ pWrtShell->InsertSection(aSection);
+
+ // When entering the content control:
+ pWrtShell->SttEndDoc(/*bStt=*/true);
+ pWrtShell->Right(SwCursorSkipMode::Chars, /*bSelect=*/false, 1, /*bBasicCall=*/false);
+
+ // Then make sure that the cursor is read-only:
+ // Without the accompanying fix in place, this test would have failed, it was not possible to
+ // pick a date in a protected section (the new value was inserted, but the placeholder was not
+ // removed).
+ CPPUNIT_ASSERT(!pWrtShell->HasReadonlySel());
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/crsr/data/sel-all-starts-with-table.odt b/sw/qa/core/crsr/data/sel-all-starts-with-table.odt
new file mode 100644
index 0000000000..a368095a55
--- /dev/null
+++ b/sw/qa/core/crsr/data/sel-all-starts-with-table.odt
Binary files differ
diff --git a/sw/qa/core/data/602/fail/.gitignore b/sw/qa/core/data/602/fail/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sw/qa/core/data/602/fail/.gitignore
diff --git a/sw/qa/core/data/602/indeterminate/.gitignore b/sw/qa/core/data/602/indeterminate/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sw/qa/core/data/602/indeterminate/.gitignore
diff --git a/sw/qa/core/data/602/pass/.gitignore b/sw/qa/core/data/602/pass/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sw/qa/core/data/602/pass/.gitignore
diff --git a/sw/qa/core/data/602/pass/Sample file zak.602 b/sw/qa/core/data/602/pass/Sample file zak.602
new file mode 100644
index 0000000000..aaaed61a43
--- /dev/null
+++ b/sw/qa/core/data/602/pass/Sample file zak.602
@@ -0,0 +1,641 @@
+ 119
+
+ ZKON
+
+ ze dne 4. b©ezna 1992
+
+ o cestovn¡ch n hrad ch
+
+ ve znˆn¡ Opat©en¡ MPSV €R ze dne 9.prosince 1992, Opat©en¡ MPSV €R
+ ze dne 22.ledna 1993, Opat©en¡ MPSV ze dne 2.b©ezna 1993, Opat©en¡
+ MPSV ze dne 19.b©ezna 1993, Opat©en¡ MPSV ze dne 29.srpna 1993,
+ Opat©en¡ MPSV ze dne 19.listopadu 1993, Opat©en¡ MPSV ze dne 15.
+ prosince 1993,
+
+ a ve znˆn¡ z kona ‡. 44/1994 Sb.
+
+ Feder ln¡ shrom ‘dˆn¡ €esk‚ a Slovensk‚ Federativn¡ republiky
+ se usneslo na tomto z konˆ:
+
+
+ € S T P R V N ‹
+
+ Z kladn¡ ustanoven¡
+
+ ­ 1
+
+ —‡el z kona
+
+ (1) Tento z kon upravuje poskytov n¡ n hrad v˜daj– p©i
+ pracovn¡ch cest ch, p©i jin˜ch zmˆn ch m¡sta v˜konu pr ce, p©i
+ p©ijet¡ do zamˆstn n¡ a p©i p©idˆlen¡ k v˜konu pr ce v zahrani‡¡
+ (d le jen "n hrady")
+ a) pracovn¡k–m v pracovn¡m pomˆru,
+ b) ‡len–m dru‘stev, u nich‘ sou‡ st¡ ‡lenstv¡ je t‚‘ pracovn¡ vztah,
+ c) ob‡an–m ‡inn˜m na z kladˆ dohod o prac¡ch konan˜ch mimo pracovn¡
+ pomˆr, je-li to dohodnuto,
+ d) osob m, o nich‘ to stanov¡ tento z kon nebo jin˜ obecnˆ z vazn˜
+ pr vn¡ p©edpis,
+ (d le jen "zamˆstnanec").
+ (2) Tento z kon neupravuje poskytov n¡ n hrad ‡len–m pos dek
+ n mo©n¡ch lod¡ po dobu nalodˆn¡ {1}.
+
+
+
+ ­ 2
+
+ Vymezen¡ pojm–
+
+ (1) Pracovn¡ cestou se pro £‡ely tohoto z kona rozum¡ doba od
+ n stupu zamˆstnance na cestu k v˜konu pr ce do jin‚ho m¡sta, ne‘ je
+ jeho pravideln‚ pracovi¨tˆ, v‡etnˆ v˜konu pr ce v tomto m¡stˆ, do
+ n vratu zamˆstnance z t‚to cesty.
+ (2) Zahrani‡n¡ pracovn¡ cestou se pro £‡ely tohoto z kona
+ rozum¡ doba pracovn¡ cesty (odstavec 1) z €esk‚ a Slovensk‚
+ Federativn¡ Republiky do zahrani‡¡, ze zahrani‡¡ do €esk‚
+ a Slovensk‚ Federativn¡ Republiky a doba pracovn¡ cesty
+ v zahrani‡¡.
+ (3) Pravideln˜m pracovi¨tˆm se pro £‡ely tohoto z kona rozum¡
+ m¡sto dohodnut‚ se zamˆstnancem; nen¡-li takov‚ m¡sto dohodnuto, je
+ pravideln˜m pracovi¨tˆm m¡sto v˜konu pr ce sjednan‚ v pracovn¡
+ smlouvˆ. U zamˆstnanc–, u nich‘ ‡ast  zmˆna pracovi¨tˆ vypl˜v  ze
+ zvl ¨tn¡ povahy povol n¡, je mo‘no jako pravideln‚ pracovi¨tˆ
+ dohodnout i m¡sto bydli¨tˆ.
+ (4) Za rodinu zamˆstnance se pro £‡ely tohoto z kona
+ pova‘uj¡, pokud maj¡ trval˜ pobyt na £zem¡ €esk‚ a Slovensk‚
+ Federativn¡ Republiky, jeho man‘el nebo druh, vlastn¡ dˆti,
+ osvojenci, dˆti svˆ©en‚ zamˆstnanci do pˆstounsk‚ p‚‡e nebo do
+ v˜chovy, vlastn¡ rodi‡e, osvojitel‚, opatrovn¡ci, pˆstouni,
+ pop©¡padˆ dal¨¡ osoby, ‘ij¡c¡ v dom cnosti {2} se zamˆstnancem.
+
+
+
+ € S T D R U H
+
+ Poskytov n¡ n hrad
+
+ N hrady p©i pracovn¡ cestˆ
+
+ ­ 3
+
+ Zamˆstnavatel vys¡laj¡c¡ zamˆstnance na pracovn¡ cestu ur‡¡
+ m¡sto jej¡ho n stupu, m¡sto v˜konu pr ce, dobu trv n¡, zp–sob
+ dopravy a ukon‡en¡ pracovn¡ cesty; m–‘e ur‡it t‚‘ dal¨¡ podm¡nky
+ pracovn¡ cesty. Zamˆstnavatel je p©itom povinen p©ihl¡‘et
+ k opr vnˆn˜m z jm–m zamˆstnance.
+
+
+ ­ 4
+
+ Zamˆstnanci vyslan‚mu na pracovn¡ cestu p©¡slu¨¡
+
+ a) n hrada prok zan˜ch j¡zdn¡ch v˜daj–,
+ b) n hrada prok zan˜ch v˜daj– za ubytov n¡,
+ c) stravn‚,
+ d) n hrada prok zan˜ch nutn˜ch vedlej¨¡ch v˜daj–,
+ e) n hrada prok zan˜ch j¡zdn¡ch v˜daj– za cesty k n v¨tˆvˆ rodiny
+ do m¡sta trval‚ho nebo mezi zamˆstnavatelem a zamˆstnancem
+ p©edem dohodnut‚ho pobytu rodiny, trv -li pracovn¡ cesta v¡ce
+ ne‘ sedm po sobˆ n sleduj¡c¡ch kalend ©n¡ch dn–, a to ka‘d˜
+ t˜den, nen¡-li v kolektivn¡ smlouvˆ, pop©¡padˆ v pracovn¡
+ smlouvˆ nebo jin‚ p¡semn‚ dohodˆ se zamˆstnancem dohodnuta tato
+ n hrada za del¨¡ dobu, nejd‚le v¨ak za jeden mˆs¡c.
+
+
+ ­ 5
+
+ Stravn‚
+
+ (1) Za ka‘d˜ kalend ©n¡ den pracovn¡ cesty p©¡slu¨¡
+ zamˆstnanci stravn‚ v tomto dni ve v˜¨i
+ a) 34 K‡s, trv -li pracovn¡ cesta 5 a‘ 12 hodin,
+ b) 53 K‡s, trv -li pracovn¡ cesta d‚le ne‘ 12 hodin, nejv˜¨e v¨ak
+ 18 hodin,
+ c) 85 K‡s, trv -li pracovn¡ cesta d‚le ne‘ 18 hodin.
+ (2) Znemo‘n¡-li zamˆstnavatel vysl n¡m na pracovn¡ cestu,
+ kter  trv  m‚nˆ ne‘ 5 hodin, zamˆstnanci stravovat se obvykl˜m
+ zp–sobem, m–‘e mu poskytnout stravn‚ a‘ do v˜¨e 34 K‡s.
+ (3) Pro zamˆstnance, u nich‘ ‡ast  zmˆna pracovi¨tˆ vypl˜v 
+ ze zvl ¨tn¡ povahy povol n¡, lze sjednat v kolektivn¡ smlouvˆ
+ odchylnˆ od tohoto z kona podm¡nky pro poskytov n¡ stravn‚ho,
+ pop©¡padˆ ni‘¨¡ denn¡ sazby stravn‚ho p©i pracovn¡ cestˆ.
+ (4) Zabezpe‡¡-li zamˆstnavatel zamˆstnanci na pracovn¡ cestˆ
+ plnˆ bezplatn‚ stravov n¡, stravn‚ neposkytuje; zabezpe‡¡-li
+ bezplatn‚ stravov n¡ ‡ ste‡nˆ, stravn‚ £mˆrnˆ kr t¡.
+
+
+ ­ 6
+
+ N hrady p©i p©elo‘en¡ a p©i p©ijet¡
+
+ (1) Zamˆstnanci p©¡slu¨¡ p©i p©elo‘en¡ z d–vod– nezbytn‚
+ provozn¡ pot©eby zamˆstnavatele n hrady jako p©i pracovn¡ cestˆ
+ nejd‚le po dobu t©¡ mˆs¡c–, pokud nen¡ dohodnuta doba del¨¡.
+ (2) Zamˆstnavatel m–‘e p©i p©ijet¡ zamˆstnance do zamˆstn n¡,
+ p©elo‘en¡ na ‘ dost zamˆstnance a do‡asn‚m p©idˆlen¡ zamˆstnance
+ k v˜konu pr ce u jin‚ho zamˆstnavatele {3} poskytovat zamˆstnanci
+ n hrady jako p©i pracovn¡ cestˆ a‘ v rozsahu a do v˜¨e stanoven‚
+ v ­ 4 a 5.
+ (3) Zamˆstnanci, kter˜ pob¡r  stravn‚ podle p©edchoz¡ch
+ odstavc– a je v t‚to dobˆ vysl n na pracovn¡ cestu, poskytuje
+ zamˆstnavatel n hradu, kter  je pro zamˆstnance v˜hodnˆj¨¡.
+ (4) V p©¡padech uveden˜ch v odstavc¡ch 1 a 2 m–‘e
+ zamˆstnavatel poskytnout zamˆstnanci t‚‘ n hradu prok zan˜ch
+ stˆhovac¡ch v˜daj–.
+
+
+ ­ 7
+
+ N hrady za pou‘¡v n¡ silni‡n¡ch motorov˜ch vozidel
+ p©i pracovn¡ch cest ch
+
+ (1) Dohodne-li se zamˆstnanec se zamˆstnavatelem, ‘e p©i
+ pracovn¡ cestˆ pou‘ije silni‡n¡ motorov‚ vozidlo, s v˜jimkou
+ vozidla zamˆstnavatele, p©¡slu¨¡ mu za ka‘d˜ 1 km j¡zdy sazba
+ z kladn¡ n hrady a n hrada za spot©ebovan‚ pohonn‚ hmoty.
+ (2) Sazba z kladn¡ n hrady za 1 km j¡zdy ‡in¡
+ a) u jednostop˜ch vozidel a t©¡kolek 0,75 K‡s,
+ b) u osobn¡ch silni‡n¡ch motorov˜ch vozidel 2,60 K‡s;
+ p©i pou‘it¡ p©¡vˆsu k silni‡n¡mu motorov‚mu vozidlu se sazba
+ z kladn¡ n hrady za 1 km j¡zdy zv˜¨¡ a‘ o 10%.
+ (3) Sazba z kladn¡ n hrady u n kladn¡ch automobil– a autobus–
+ se dohodne mezi zamˆstnancem a zamˆstnavatelem.
+ (4) N hrada v˜daj– za pohonn‚ hmoty p©¡slu¨¡ zamˆstnanci
+ podle cen pohonn˜ch hmot platn˜ch v dobˆ pou‘it¡ vozidla
+ a p©epo‡ten˜ch podle spot©eby vypo‡ten‚ aritmetick˜m pr–mˆrem
+ z £daj– uveden˜ch v technick‚m pr–kazu vozidla.
+ (5) Zamˆstnavatel m–‘e se zamˆstnancem sjednat t‚‘
+ poskytov n¡ n hrady za pou‘it¡ silni‡n¡ho motorov‚ho vozidla ve
+ v˜¨i odpov¡daj¡c¡ cenˆ j¡zdenky hromadn‚ho dopravn¡ho prost©edku
+ d lkov‚ p©epravy.
+
+
+ ­ 8
+
+ P©izp–sobov n¡ sazeb n hrad
+
+ (1) V˜¨e sazeb n hrad stravn‚ho uveden  v ­ 5 odst. 1 a 2
+ a v˜¨e sazeb z kladn¡ch n hrad za pou‘¡v n¡ silni‡n¡ch motorov˜ch
+ vozidel uveden  v ­ 7 odst. 2 se upravuje podle statistick˜ch £daj–
+ o cen ch j¡del a nealkoholick˜ch n poj– ve ve©ejn‚m stravov n¡
+ a o cen ch a amortizaci vozidel. —prava sazeb se poprv‚ provede,
+ jestli‘e rozd¡l indexu cen podle vˆty prvn¡ vyhl ¨en‚ho
+ v p©¡slu¨n‚m kalend ©n¡m mˆs¡ci a indexu vyhl ¨en‚ho ke dni
+ £‡innosti tohoto z kona, ‡in¡ hodnotu alespo¤ 10 bod–; dal¨¡ £prava
+ se provede, jestli‘e rozd¡l indexu v p©¡slu¨n‚m kalend ©n¡m mˆs¡ci
+ a indexu v kalend ©n¡m mˆs¡ci, podle nˆho‘ byla naposled upravena
+ v˜¨e sazeb, ‡in¡ opˆt hodnotu alespo¤ 10 bod–. Upraven‚ sazby
+ n hrad podle vˆty prvn¡ p©¡slu¨¡ zamˆstnanc–m od prvn¡ho dne
+ kalend ©n¡ho mˆs¡ce n sleduj¡c¡ho po kalend ©n¡m mˆs¡ci, v nˆm‘
+ byly zve©ejnˆny.
+ (2) V˜¨i sazeb n hrad podle odstavce 1 stanov¡ a vyhl s¡
+ uve©ejnˆn¡m pln‚ho znˆn¡ ve Sb¡rce z kon– {4} feder ln¡
+ ministerstvo pr ce a soci ln¡ch vˆc¡ na z kladˆ £daj– Feder ln¡ho
+ statistick‚ho £©adu.
+ (3) Sazby stravn‚ho se zaokrouhluj¡ na cel‚ koruny do v˜¨e
+ 50 hal‚©– smˆrem dol– a od 50 hal‚©– v‡etnˆ smˆrem nahoru. Sazby
+ z kladn¡ch n hrad za pou‘¡v n¡ silni‡n¡ch motorov˜ch vozidel se
+ zaokrouhluj¡ na pˆtihal‚©e.
+
+
+
+ ­ 9
+
+ Jin‚ a vy¨¨¡ n hrady
+
+ Zamˆstnavatel, kter˜ nen¡ rozpo‡tovou nebo p©¡spˆvkovou
+ organizac¡ {5}, m–‘e poskytovat zamˆstnanc–m i jin‚ n hrady
+ souvisej¡c¡ s pracovn¡ cestou, s jin˜mi zmˆnami m¡sta v˜konu pr ce
+ a p©ijet¡m do zamˆstn n¡ nebo vy¨¨¡ n hrady, ne‘ stanov¡ tento
+ z kon; poskytov n¡ tˆchto n hrad lze sjednat v kolektivn¡ smlouvˆ
+ nebo v pracovn¡ch smlouv ch.
+
+
+
+ € S T T ž E T ‹
+
+ N hrady p©i zahrani‡n¡ch pracovn¡ch cest ch
+
+ ­ 10
+
+ Na poskytov n¡ n hrad p©i zahrani‡n¡ch pracovn¡ch cest ch,
+ v‡etnˆ jin˜ch a vy¨¨¡ch n hrad, se vztahuje £prava stanoven 
+ v ­ 2 a‘ 9, pokud nen¡ d le stanoveno jinak.
+
+
+ ­ 11
+
+ N hrada za cesty k n v¨tˆvˆ rodiny
+
+ P©i zahrani‡n¡ pracovn¡ cestˆ zamˆstnavatel dohodne se
+ zamˆstnancem poskytov n¡ n hrad za cesty k n v¨tˆvˆ rodiny do m¡sta
+ trval‚ho pobytu rodiny; ustanoven¡ ­ 4 p¡sm. e) se nevztahuje na
+ cesty k n v¨tˆvˆ rodiny zamˆstnance vyslan‚ho na zahrani‡n¡
+ pracovn¡ cestu.
+
+
+ ­ 12
+
+ Stravn‚
+
+ (1) Za ka‘d˜ kalend ©n¡ den zahrani‡n¡ pracovn¡ cesty a za
+ ka‘d˜ kalend ©n¡ den, v nˆm‘ zahrani‡n¡ pracovn¡ cesta trv  d‚le
+ ne‘ 12 hodin, p©¡slu¨¡ zamˆstnanci stravn‚ v ciz¡ mˆnˆ. V˜¨i denn¡
+ sazby stravn‚ho v ciz¡ mˆnˆ stanov¡ a vyhl s¡ uve©ejnˆn¡m pln‚ho
+ znˆn¡ ve Sb¡rce z kon– 4) feder ln¡ ministerstvo financ¡.
+ (2) Trv -li zahrani‡n¡ pracovn¡ cesta v kalend ©n¡m dni m‚nˆ
+ ne‘ 12 hodin nebo trv -li celkovˆ m‚nˆ ne‘ 12 hodin, zamˆstnavatel
+ poskytuje stravn‚ v ciz¡ mˆnˆ nejv˜¨e do poloviny denn¡ sazby
+ ur‡en‚ podle p©edchoz¡ho odstavce.
+
+
+ ­ 13
+
+ Kapesn‚
+
+ Zamˆstnavatel m–‘e zamˆstnanc–m p©i zahrani‡n¡ pracovn¡ cestˆ
+ poskytovat vedle stravn‚ho kapesn‚ v ciz¡ mˆnˆ do v˜¨e 40%
+ stravn‚ho ur‡en‚ho podle ­ 12.
+
+
+ ­ 14
+
+ N hrada v˜daj– za pohonn‚ hmoty
+
+ P©i poskytov n¡ n hrad za pou‘¡v n¡ silni‡n¡ch motorov˜ch
+ vozidel podle ­ 7 p©¡slu¨¡ zamˆstnanci p©i zahrani‡n¡ pracovn¡
+ cestˆ n hrada za pohonn‚ hmoty v ciz¡ mˆnˆ za kilometry ujet‚
+ v zahrani‡¡ nad 350 km.
+
+
+ ­ 15
+
+ Vylou‡en¡ soubˆhu n hrad poskytovan˜ch v ‡eskoslovensk‚
+ a ciz¡ mˆnˆ
+
+ (1) P©i zahrani‡n¡ pracovn¡ cestˆ p©¡slu¨¡ zamˆstnanci za
+ dobu pracovn¡ cesty na £zem¡ €esk‚ a Slovensk‚ Federativn¡
+ Republiky stravn‚ v ‡eskoslovensk‚ mˆnˆ v rozsahu a za podm¡nek
+ stanoven˜ch v ­ 5 odst. 1.
+ (2) P©i zahrani‡n¡ pracovn¡ cestˆ je rozhodnou dobou pro
+ vznik n roku na n hrady poskytovan‚ v ciz¡ mˆnˆ p©echod
+ ‡eskoslovensk‚ st tn¡ hranice a p©i leteck‚ p©epravˆ odlet a p©¡let
+ letadla podle letov‚ho © du.
+
+
+ ­ 16
+
+ Zahrani‡n¡ pracovn¡ cesty konan‚ na z kladˆ dohod
+ o vz jemn‚ v˜mˆnˆ zamˆstnanc–
+
+ (1) V dohodˆ o vz jemn‚ v˜mˆnˆ zamˆstnanc– m–‘e zamˆstnavatel
+ se zamˆstnavatelem, ke kter‚mu je zamˆstnanec vys¡l n, sjednat
+ poskytov n¡ bezplatn‚ho ubytov n¡, stravn‚ho, kapesn‚ho a n hradu
+ j¡zdn¡ch v˜daj– za cesty souvisej¡c¡ s v˜konem pr ce.
+ (2) J¡zdn¡ v˜daje za cesty ze s¡dla zamˆstnavatele, kter˜
+ zamˆstnance vys¡l  na pracovn¡ cestu, do s¡dla zamˆstnavatele
+ v zahrani‡¡ a zpˆt hrad¡ vys¡laj¡c¡ zamˆstnavatel.
+ (3) Zamˆstnavatel‚ mohou dohodnout v˜¨i stravn‚ho
+ poskytovan‚ho ‡eskoslovensk‚mu zamˆstnanci v zahrani‡¡ maxim lnˆ do
+ v˜¨e stanoven‚ t¡mto z konem.
+ (4) Zahrani‡n¡mu zamˆstnanci vyslan‚mu do €esk‚ a Slovensk‚
+ Federativn¡ Republiky se poskytuje stravn‚ a‘ do v˜¨e 200 K‡s na
+ den a kapesn‚ do v˜¨e 40% stravn‚ho.
+ (5) Zamˆstnavatel‚, kte©¡ nejsou rozpo‡tov˜mi nebo
+ p©¡spˆvkov˜mi organizacemi, mohou poskytovat vy¨¨¡ stravn‚ hrazen‚
+ z pou‘iteln‚ho zisku.
+
+
+ ­ 17
+
+ N hrady p©i p©idˆlen¡ k v˜konu pr ce v zahrani‡¡
+
+ Zamˆstnanci p©idˆlen‚mu k v˜konu pr ce v zahrani‡¡, kter˜ je
+ odmˆ¤ov n podle zvl ¨tn¡ch p©edpis– {6}, p©¡slu¨¡ za dny cesty do
+ m¡sta p©idˆlen¡ a zpˆt a p©i pracovn¡ch cest ch v zahrani‡¡,
+ n hrady jako p©i zahrani‡n¡ pracovn¡ cestˆ. Pokud se zamˆstnancem
+ cestuje jeho rodinn˜ p©¡slu¨n¡k (­ 2 odst.4), lze zamˆstnanci
+ poskytnout t‚‘ n hrady v˜daj–, kter‚ vznikly tomuto rodinn‚mu
+ p©¡slu¨n¡ku.
+
+
+
+ € S T € T V R T
+
+ Spole‡n , p©echodn  a z vˆre‡n  ustanoven¡
+
+ ­ 18
+
+ (1) N hrady, na nˆ‘ vznik  zamˆstnanc–m n rok, n hrady podle
+ ­ 5 odst. 3, kapesn‚ do v˜¨e 40% stanoven‚ho stravn‚ho podle ­ 13
+ a n hrady p©i p©ijet¡ zamˆstnance, kter˜ je uchaze‡em o zamˆstn n¡
+ {7}, se s v˜jimkou zamˆstnavatele, kter˜ je rozpo‡tovou nebo
+ p©¡spˆvkovou organizac¡, zahrnuj¡ do n klad– (v˜daj–). Ostatn¡
+ n hrady se hrad¡ z pou‘iteln‚ho zisku.
+ (2) N hrady poskytovan‚ zamˆstnanc–m vys¡lan˜m do zahrani‡¡
+ na mont ‘n¡ a obdobn‚ pr ce ke splnˆn¡ z vazk– ze smlouvy, kterou
+ zamˆstnavatel uzav©el se zahrani‡n¡m £‡astn¡kem p©i prov dˆn¡
+ zahrani‡n¡ hospod ©sk‚ ‡innosti, se zahrnuj¡ do zahrani‡n¡ch
+ p©¡m˜ch obchodn¡ch n klad–.
+
+
+ ­ 19
+
+ N hrady podle tohoto z kona lze pau¨alizovat. P©i v˜po‡tu
+ pau¨ ln¡ ‡ stky vych z¡ zamˆstnavatel z pr–mˆrn˜ch podm¡nek
+ rozhodn˜ch pro poskytov n¡ n hrad zamˆstnanci nebo skupinˆ
+ zamˆstnanc–. Pokud se zmˆn¡ podm¡nky, za nich‘ byla pau¨ ln¡ ‡ stka
+ stanovena, je zamˆstnavatel povinen tuto ‡ stku p©ezkoumat
+ a upravit.
+
+
+ ­ 20
+
+ Kde tento z kon po‘aduje prok z n¡ v˜daj– a zamˆstnanec je
+ neprok ‘e, m–‘e mu zamˆstnavatel poskytnout n hrady v j¡m uznan‚
+ v˜¨i s p©ihl‚dnut¡m k ur‡en˜m podm¡nk m pracovn¡ cesty (­ 3).
+ Obdobnˆ lze postupovat i p©i poskytov n¡ n hrad j¡zdn¡ch v˜daj– za
+ mˆstskou hromadnou dopravu p©i pracovn¡ cestˆ na £zem¡ €esk‚
+ a Slovensk‚ Federativn¡ Republiky.
+
+
+ ­ 21
+
+ (1) Po‘ d -li zamˆstnanec o poskytnut¡ z lohy na n hrady
+ podle tohoto z kona, je zamˆstnavatel povinen mu tuto z lohu do
+ v˜¨e p©edpokl dan‚ n hrady poskytnout.
+ (2) Zamˆstnavatel je povinen poskytnout zamˆstnanci p©i
+ zahrani‡n¡ pracovn¡ cestˆ z lohu v ciz¡ mˆnˆ v rozsahu a ve v˜¨i
+ podle p©edpokl dan‚ doby trv n¡ a podm¡nek zahrani‡n¡ pracovn¡
+ cesty.
+ (3) Zamˆstnanec je povinen do deseti pracovn¡ch dn– po dni
+ ukon‡en¡ pracovn¡ cesty p©edlo‘it zamˆstnavateli p¡semn‚ doklady
+ pot©ebn‚ k vy£‡tov n¡ pracovn¡ cesty a t‚‘ vr tit nevy£‡tovanou
+ z lohu.
+ (4) Zamˆstnavatel je povinen do deseti pracovn¡ch dn– ode dne
+ p©edlo‘en¡ p¡semn˜ch doklad– prov‚st vy£‡tov n¡ pracovn¡ cesty
+ zamˆstnance a uspokojit jeho n roky.
+
+
+ ­ 22
+
+ Pokud ‡as str ven˜ na pracovn¡ cestˆ jinak ne‘ plnˆn¡m
+ pracovn¡ch £kol– spad  do pracovn¡ doby zamˆstnance, pova‘uje se za
+ dobu zame¨kanou pro p©ek ‘ky v pr ci na stranˆ zamˆstnavatele. Za
+ tuto dobu n le‘¡ zamˆstnanci n hrada mzdy ve v˜¨i pr–mˆrn‚ho
+ v˜dˆlku {8}.
+
+
+
+ ­ 23
+
+ Pracovnˆpr vn¡ vztahy podle tohoto z kona se ©¡d¡ z kon¡kem
+ pr ce, pokud v tomto z konˆ nen¡ stanoveno jinak.
+
+
+ ­ 24
+
+ Vl da €esk‚ a Slovensk‚ Federativn¡ Republiky, vl da €esk‚
+ republiky a vl da Slovensk‚ republiky mohou v rozsahu sv‚
+ p–sobnosti stanovit na©¡zen¡m pro zamˆstnance zamˆstnavatel–, kte©¡
+ jsou rozpo‡tov˜mi nebo p©¡spˆvkov˜mi organizacemi, i jin‚ n hrady
+ souvisej¡c¡ s pracovn¡ cestou, jin˜mi zmˆnami m¡sta v˜konu pr ce,
+ p©ijet¡m do zamˆstn n¡ a p©i p©idˆlen¡ k v˜konu pr ce v zahrani‡¡.
+
+
+ ­ 25
+
+ (1) Zru¨uj¡ se:
+
+ 1. Vyhl ¨ka ministerstva financ¡ ‡. 18/1960 Sb., o n hrad ch
+ v˜daj– p©i zahrani‡n¡ch pracovn¡ch cest ch.
+
+ 2. Vyhl ¨ka feder ln¡ho ministerstva pr ce a soci ln¡ch vˆc¡ ‡.
+ 57/ 1979 Sb., o n hrad ch za pou‘¡v n¡ silni‡n¡ch motorov˜ch
+ vozidel p©i pracovn¡ch cest ch, ve znˆn¡ vyhl ¨ky ‡. 2/1984
+ Sb., vyhl ¨ky ‡. 251/1990 Sb., vyhl ¨ky ‡. 338/1990 Sb.,
+ vyhl ¨ky ‡. 430/1990 Sb. a vyhl ¨ky ‡. 480/1990 Sb.
+
+ 3. Vyhl ¨ka feder ln¡ho ministerstva pr ce a soci ln¡ch vˆc¡ ‡.
+ 33/1984 Sb., o cestovn¡ch n hrad ch, ve znˆn¡ vyhl ¨ky ‡.
+ 81/1988 Sb., vyhl ¨ky ‡. 241/1988 Sb. a vyhl ¨ky ‡. 251/1990
+ Sb.
+
+ 4. Vyhl ¨ka ministerstva pr ce a soci ln¡ch vˆc¡ €esk‚ republiky
+ ‡. 120/1991 Sb., kterou se dopl¤uj¡ nˆkter‚ pr vn¡ p©edpisy
+ o cestovn¡ch n hrad ch.
+
+ 5. Vyhl ¨ka ministerstva pr ce a soci ln¡ch vˆc¡ Slovensk‚
+ republiky ‡. 148/1991 Sb., kterou se dopl¤uje vyhl ¨ka
+ feder ln¡ho ministerstva pr ce a soci ln¡ch vˆc¡ ‡. 33/1984
+ Sb., o cestovn¡ch n hrad ch, ve znˆn¡ pozdˆj¨¡ch p©edpis–,
+ a v˜nos feder ln¡ho ministerstva pr ce a soci ln¡ch vˆc¡ z 31.
+ srpna 1982 ‡.j. 315-5796-3161, o zvl ¨tn¡ £pravˆ n hrad
+ cestovn¡ch v˜daj– pracovn¡k– p©ijat˜ch ze Slovensk‚
+ socialistick‚ republiky do apar tu feder ln¡ch instituc¡, ve
+ znˆn¡ v˜nosu feder ln¡ho ministerstva pr ce a soci ln¡ch vˆc¡
+ z 18. ‡ervna 1990 ‡.j. 225-18991-5157.
+
+ 6. Pokyny —st©edn¡ho svazu spot©ebn¡ch dru‘stev ze dne 7.dubna
+ 1965 ‡. 26/1965 Vˆst. —SSD pro poskytov n¡ n hrad pracovn¡k–m,
+ kte©¡ pravidelnˆ ve vˆt¨¡m rozsahu pou‘¡vaj¡ slu‘ebn¡ho
+ motocyklu, vlastn¡ho j¡zdn¡ho (motorov‚ho) kola nebo konaj¡
+ cesty pˆ¨ky (reg. ‡ stka 40/1965 Sb.).
+
+ 7. V˜nos ministerstva stavebnictv¡ ze dne 9.ledna 1968 ‡. 3/1968
+ Zpravodaje ministerstva stavebnictv¡ o ur‡en¡ pracovi¨Ÿ, na
+ kter  se v podnic¡ch pr–myslov‚ v˜roby vztahuje zvl ¨tn¡ £prava
+ nocle‘n‚ho (reg. ‡ stka 10/1968 Sb.).
+
+ 8. V˜nos ministerstva zemˆdˆlstv¡ a v˜‘ivy ze dne 3.11. 1967
+ ‡j.VII/3-1747/1967, kter˜m se prov dˆj¡ nˆkter  ustanoven¡
+ vyhl ¨ky ‡. 96/1967 Sb. (reg. ‡ stka 11/1968 SB.), ve znˆn¡
+ smˆrnice feder ln¡ho ministerstva pr ce a soci ln¡ch vˆc¡ ze
+ 14. 1. 1972 ‡j. II/1-126/72-7501, v˜nosu feder ln¡ho
+ ministerstva zemˆdˆlstv¡ a v˜‘ivy, ministerstva zemˆdˆlstv¡
+ a v˜‘ivy €esk‚ socialistick‚ republiky a ministerstva
+ zemˆdˆlstv¡ a v˜‘ivy Slovensk‚ socialistick‚ republiky z 30.
+ 8. 1982 ‡j. FM 01-1263/82 a z 30. 5. 1984 ‡j. FM 04-244/84.
+
+ 9. V˜nos ‡. 2 ministerstva hornictv¡ ‡j. 42.3/657/68, kter˜m se
+ mˆn¡ ustanoven¡ ‡l. III a ‡l. V v˜nosu ‡. 9 ministerstva
+ hornictv¡ ‡j. 42.3/776/67 k proveden¡ z kon¡ku pr ce (reg.
+ ‡ stka 25/1968 Sb.), ve znˆn¡ v˜nosu Feder ln¡ho v˜boru pro
+ pr–mysl ‡. 1/1970 (reg. ‡ stka 13/1970 Sb.)
+
+ 10. V˜nos —st©edn¡ spr vy geod‚zie a kartografie ‡j. 6 158/1968-2,
+ kter˜m se stanov¡ z sady pro pau¨alizaci n hrad cestovn¡ch
+ v˜daj– (reg. ‡ stka 48/1968 Sb.).
+
+ 11. Smˆrnice feder ln¡ho ministerstva financ¡ ‡j. VII/4-8921/72,
+ o n hrad ch v˜daj– p©i zahrani‡n¡ch pracovn¡ch cest ch (reg.
+ ‡ stka 18/1971 Sb.), ve znˆn¡ v˜nosu feder ln¡ho ministerstva
+ financ¡ ‡j. VI/2-8900/88 (reg. ‡ stka 23/1988 Sb.).
+
+ 12. Z sady feder ln¡ho ministerstva dopravy ‡j. 20 808/75-09 pro
+ poskytov n¡ pau¨ ln¡ch n hrad cestovn¡ch v˜daj– (reg. ‡ stka
+ 3/l976 Sb.).
+
+ 13. V˜nos feder ln¡ho ministerstva financ¡ ze dne 20. b©ezna 1978
+ ‡j. II/6000/78, o odmˆ¤ov n¡ a hmotn‚ zabezpe‡en¡ nˆkter˜ch
+ pracovn¡k– po dobu jejich pobytu v zahrani‡¡ (reg. ‡ stka
+ 11/1978 Sb.).
+
+ 14. Smˆrnice feder ln¡ho ministerstva pr ce a soci ln¡ch vˆc¡ ze
+ dne 10. srpna 1979 ‡j. 316-1238/79-7305, o odmˆ¤ov n¡
+ pracovn¡k–, kte©¡ v souvislosti s v˜konem povol n¡ ©¡d¡
+ slu‘ebn¡ silni‡n¡ motorov  vozidla (reg. ‡ stka 25/1979 Sb.),
+ ve znˆn¡ vyhl ¨ka ‡. 251/1990 Sb.
+
+ 15. ­ 4 a 5 v˜nosu feder ln¡ho ministerstva pr ce a soci ln¡ch vˆc¡
+ ‡j. 316-1099/81-7300, o odmˆ¤ov n¡ a poskytov n¡ cestovn¡ch
+ n hrad vietnamsk˜m ob‡an–m do‡asnˆ zamˆstnan˜m v €eskoslovensk‚
+ socialistick‚ republice (reg. ‡ stka 34/1981 Sb.), ve znˆn¡
+ v˜nosu ze dne 31. 7. 1989 ‡j. 221-8747-5123, 060589 (reg.
+ ‡ stka 26/1989 Sb.).
+
+ 16. V˜nos feder ln¡ho ministerstva paliva a energetiky ‡.3
+ z 23.3.1982, kter˜m se stanov¡ stavby, na nich‘ se poskytuje
+ preferen‡n¡ odlu‡n‚ pracovn¡k–m stavebn¡ a stavebnˆ mont ‘n¡
+ ‡innosti (reg. ‡ stka 14/1982 Sb.), ve znˆn¡ v˜nosu feder ln¡ho
+ ministerstva paliv a energetiky ‡. 10 z 29. 10. 1982 (reg.
+ ‡ stka 3/1983 Sb.).
+
+ 17. V˜nos feder ln¡ho ministerstva pr ce a soci ln¡ch vˆc¡ ‡j.
+ 315-5796-3161, o zvl ¨tn¡ £pravˆ n hrad cestovn¡ch v˜daj–
+ pracovn¡k– p©ijat˜ch ze Slovensk‚ socialistick‚ republiky do
+ apar tu feder ln¡ch instituc¡ (reg. ‡ stka 34/1982 Sb.), ve
+ znˆn¡ v˜nosu ‡j. 225/1899-5157 (reg. ‡ stka 45/1990 Sb.).
+
+ 18. Smˆrnice €esk‚ho svazu v˜robn¡ch dru‘stev ‡. 59/1982 Vˆstn¡ku
+ €esk‚ho svazu v˜robn¡ch dru‘stev, o n hrad ch cestovn¡ch
+ a jin˜ch v˜daj– komin¡k– (reg. ‡ stka 10/1983 Sb.).
+
+ 19. V˜nos feder ln¡ho ministerstva dopravy ze dne 12. ledna 1983
+ ‡j. 25 080/82-03, o poskytov n¡ leteck‚ stravn¡ normy ‡len–m
+ pos dek civiln¡ch letadel v organizac¡ch v p–sobnosti
+ feder ln¡ho ministerstva dopravy (reg. ‡ stka 9/1983 Sb.), ve
+ znˆn¡ v˜nosu ze dne 10. z ©¡ 1990 ‡j. 19 439/1990-320 (reg.
+ ‡ stka 75/1990 Sb.).
+
+ 20. V˜nos feder ln¡ho ministerstva n rodn¡ obrany ‡j.
+ 7440-FS/5-182, kter˜m se pro pracovn¡ky trustu podniku Vojensk‚
+ lesy a statky upravuj¡ nˆkter‚ n hrady podle vyhl ¨ky ‡.
+ 96/1967 Sb., o n hrad ch cestovn¡ch, stˆhovac¡ch a jin˜ch
+ v˜daj– (reg. ‡ stka 14/1983 Sb.), ve znˆn¡ vyhl ¨ky ‡. 91/1982
+ Sb.
+
+ 21. V˜nos feder ln¡ho ministerstva dopravy ze dne 27.©¡jna 1983 ‡j.
+ 20 324/1983-03, o poskytov n¡ leteck‚ stravn¡ normy ‡len–m
+ pos dek civiln¡ch letadel trvale vykon vaj¡c¡m ©¡d¡c¡ ‡innost
+ technickohospod ©sk‚ho charakteru v organizac¡ch v p–sobnosti
+ feder ln¡ho ministerstva dopravy (reg. ‡ stka 4/1984 Sb.), ve
+ znˆn¡ v˜nosu ze dne 10. z ©¡ 1990 ‡j. 19 439/1990-320 (reg.
+ ‡ stka 75/1990 Sb.).
+
+ 22. V˜nos feder ln¡ho ministerstva financ¡ ‡j. FMF VI/3-11 811/84
+ a feder ln¡ho ministerstva zahrani‡n¡ho obchodu ‡j. FMZO
+ 598/14/84, o n hrad ch v˜daj– p©i zahrani‡n¡ch pracovn¡ch
+ cest ch ‡len– pos dek dopravn¡ch prost©edk– (reg. ‡ stka
+ 22/1984 Sb.), ve znˆn¡ v˜nosu feder ln¡ho ministerstva financ¡
+ ‡j. VI/3-1840/87 a feder ln¡ho ministerstva zahrani‡n¡ho
+ obchodu ‡j. 86/14/87 (reg. ‡ stka 11/1987 Sb.).
+
+ 23. V˜nos ministerstva vnitra €esk‚ socialistick‚ republiky ‡j.
+ MH/13-6699/1939/85, o zvl ¨tn¡ch pau¨ ln¡ch n hrad ch
+ cestovn‚ho pro komin¡ky a v˜kup‡¡ druhotn˜ch surovin
+ v organizac¡ch m¡stn¡ho hospod ©stv¡ (reg. ‡ stka 20/1985 Sb.),
+ ve znˆn¡ v˜nosu ze dne 18. 9. 1990 ‡j. MH/1-13980/720/1990
+ (reg. ‡ stka 67/1990 Sb.).
+
+ 24. V˜nos feder ln¡ho ministerstva financ¡ ‡j. VIII/4/16 986/85,
+ o stanoven¡ jednotn‚ zahrani‡n¡ diety pro ‡eskoslovensk‚
+ pracovn¡ky na integra‡n¡ch akc¡ch ve Svazu sovˆtsk˜ch
+ socialistick˜ch republika (reg. ‡ stka 30/1985 Sb.).
+
+ 25. Smˆrnice €esk‚ho svazu v˜robn¡ch dru‘stev ‡. 29/1985,
+ o zvl ¨tn¡ch pau¨ ln¡ch n hrad ch cestovn‚ho pro komin¡ky (reg.
+ ‡ stka 4(1986 Sb.).
+
+ 26. V˜nos feder ln¡ho ministerstva dopravy ‡j. 6006/1986-03,
+ o zvl ¨tn¡ch pau¨ ln¡ch n hrad ch cestovn¡ch v˜daj– pro nˆkter‚
+ pracovn¡ky dopravy, u nich‘ ‡ast  zmˆna m¡sta v˜konu pr ce
+ vypl˜v  ze zvl ¨tn¡ povahy povol n¡ (reg. ‡ stka 18/1986 Sb.),
+ ve znˆn¡ v˜nosu ze dne 10. 9. 1990 ‡j. 19 438/1990-32O (reg.
+ ‡ stka 70/1990 Sb.).
+
+ 27. V˜nos ministerstva vnitra €esk‚ socialistick‚ republiky ‡j.
+ SD/33-2728/1987, o zvl ¨tn¡ch pau¨ ln¡ch n hrad ch cestovn¡ch
+ v˜daj– j¡zdn¡ch pracovn¡k– silni‡n¡ a mˆstsk‚ dopravy (reg.
+ ‡ stka 17/1987 Sb.), ve znˆn¡ v˜nosu ze dne 24. 7. 1990 ‡j.
+ SD/1-R-11 O21/90 (reg. ‡ stka 54/1990 Sb.).
+
+ 28. V˜nos feder ln¡ho ministerstva vnitra Slovensk‚ socialistick‚
+ republiky ‡. MH-41/203/1987, o zvl ¨tn¡ch pau¨ ln¡ch cestovn¡ch
+ n hrad ch pro komin¡ky a v˜kup‡¡ druhotn˜ch surovin
+ v organizac¡ch m¡stn¡ho hospod ©stv¡ (reg. ‡ stka 17/1987 Sb.),
+ ve znˆn¡ v˜nosu ministerstva vnitra Slovensk‚ republiky z 8.
+ ledna 1991 ‡. MH-5/1991-OE (reg. ‡ stka 1O/1991 Sb.).
+
+ 29. V˜nos feder ln¡ho ministerstva financ¡ ze dne 22. ‡ervna 1987
+ ‡j. III/11 000/87, o cestovn¡ch n hrad ch p©i zahrani‡n¡ch
+ bezdevizov˜ch pracovn¡ch cest ch (reg. ‡ stka 17/1987 Sb.).
+
+ 30. V˜nos ministerstva vnitra Slovensk‚ socialistick‚ republiky ze
+ dne 11. z ©¡ 1987 ‡. SD3138/1987-4, o zvl ¨tn¡ch pau¨ ln¡ch
+ cestovn¡ch n hrad ch pracovn¡k– silni‡n¡ a mˆstsk‚ dopravy,
+ silni‡n¡ho hospod ©stv¡ a automobilov‚ho oprav renstv¡ (reg.
+ ‡ stka 18/1987 Sb.), ve znˆn¡ v˜nosu z 3. ledna 1991 ‡.
+ SD-3-3003/1991.
+
+ 31. ­ 5 v˜nosu feder ln¡ho ministerstva pr ce a soci ln¡ch vˆc¡ ‡j.
+ 515-31053-5123, o odmˆ¤ov n¡ a poskytov n¡ cestovn¡ch n hrad
+ angolsk˜m ob‡an–m do‡asnˆ zamˆstnan˜m v ‡eskoslovensk˜ch
+ organizac¡ch (reg. ‡ stka 25/1987 Sb.).
+
+ 32. ­ 4 v˜nosu feder ln¡ho ministerstva pr ce a soci ln¡ch vˆc¡ ‡j.
+ 515-37137-5123, o odmˆ¤ov n¡ a poskytov n¡ cestovn¡ch n hrad
+ vedouc¡m skupin korejsk˜ch ob‡an– a korejsk˜m tlumo‡n¡k–m
+ zamˆstnan˜m v €eskoslovensk‚ socialistick‚ republice (reg.
+ ‡ stka 26/1987 Sb.).
+
+ 33. V˜nos feder ln¡ho ministerstva pr ce a soci ln¡ch vˆc¡ ‡.
+ 404/1991 Sb., o poskytov n¡ p©¡platku k £hradˆ cestovn¡ch
+ v˜daj– pracovn¡k–m p©ijat˜m z €esk‚ republiky do feder ln¡ch
+ org n– na £zem¡ Slovensk‚ republiky (reg. ‡ stka 76/1991 Sb.).
+
+ (2) Platnosti pozb˜vaj¡ v˜jimky, odchylky a dal¨¡ opat©en¡
+ stanoven‚ podle dosavadn¡ch pr vn¡ch p©edpis– o cestovn¡ch
+ n hrad ch.
+
+
+ ­ 26
+
+ Tento z kon nab˜v  £‡innosti dnem 1. kvˆtna 1992.
+
+
+
+ *1* Z kon ‡. 61/1952 Sb., o n mo©n¡ plavbˆ.
+ *2* ­ 115 ob‡ansk‚ho z kon¡ku.
+ *3* ­ 38 odst. 5 z kon¡ku pr ce.
+ ­ 5 na©¡zen¡ vl dy €eskoslovensk‚ socialistick‚ republiky
+ ‡. 223/1988 Sb., kter˜m se prov d¡ z kon¡k pr ce.
+ *4* ­ 8 z kona ‡. 131/1989 Sb., o Sb¡rce z kon–.
+ *5* ­ 24 z kona ‡. 563/1990 Sb., o rozpo‡tov˜ch pravidlech federace.
+ ­ 31 z kona €esk‚ n rodn¡ rady ‡. 576/1990 Sb., o pravidlech
+ hospoda©en¡ s rozpo‡tov˜mi prost©edky €esk‚ republiky a obc¡
+ v €esk‚ republice (rozpo‡tov  pravidla republiky).
+ ­ 28 z kona Slovensk‚ n rodn¡ rady ‡. 592/1990 Sb.,
+ o rozpo‡tov˜ch pravidlech Slovensk‚ republiky.
+ *6* Nap©¡klad
+ v˜nos ministra zahrani‡n¡ho obchodu ‡. 24/1962 ze dne
+ 23.‡ervna 1962 o £pravˆ platov˜ch pomˆr– zamˆstnanc–
+ ministerstva zahrani‡n¡ho obchodu p©idˆlen˜ch k v˜konu funkc¡
+ u obchodn¡ch oddˆlen¡ zastupitelsk˜ch £©ad– v zahrani‡¡, ve
+ znˆn¡ pozdˆj¨¡ch p©edpis–,
+ v˜nos ministra zahrani‡n¡ch vˆc¡ ‡. 013.147/62, z sady platov‚
+ £pravy pro zamˆstnance zahrani‡n¡ slu‘by.
+ *7* Z kon ‡. 1/1991 Sb., o zamˆstnanosti, ve znˆn¡ pozdˆj¨¡ch
+ p©edpis–.
+ *8* ­ 17 z kona ‡. 1/1992 Sb., o mzdˆ, odmˆnˆ za pracovn¡
+ pohotovost a o pr–mˆrn‚m v˜dˆlku.
diff --git a/sw/qa/core/data/602/pass/cti_t602.602 b/sw/qa/core/data/602/pass/cti_t602.602
new file mode 100644
index 0000000000..d22a2a23a7
--- /dev/null
+++ b/sw/qa/core/data/602/pass/cti_t602.602
@@ -0,0 +1,146 @@
+@CT 1
+@LM 5
+@RM 75
+@PL 60
+@TB -----T-----T-----T-----T-----T-----T-----T-----T-----T-----T-----T-----T-----T-----T-----T-----T-----T-----T-----T-----T-----T-----T
+@MT 0
+@MB 2
+@PO 1
+@PN 1
+@LH 6
+
+
+ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
+ ³ Textovì editor Text602 ³
+ ³ ³
+ ³ verze: 3.00 ³
+ ³ ³
+ ³ Software602, spol. s r.o. ³
+ ³ ³
+ ³ Pod pramenem 3, ³
+ ³ Praha 4, Nusle ³
+ ³ ³
+ ³ Objedn vky ................. P.O.Box 1, 140 00 Praha 4 ³
+ ³ Prodejny : ³
+ ³ Praha 1, Sp len  19 (Po-P  9,00-17,00) ³
+ ³ Praha 1, Biskupskì Dv…r (Po-P  10,00-18,00) ³
+ ³ ³
+ ³ éstýedna : (02)423817 nebo (02)421368 ³
+ ³ ³
+ ³ Hotline a z znam hovor… v mimopracovn¡ dobØ ³
+ ³ ³
+ ³ (02)422506 nebo (02)420905 ³
+ ³ ³
+ ³ Fax : (02)421105 Mail602 : (02)420448 ³
+ ³ ³
+ ³ Expedice : (02)421517 ³
+ ³ ³
+ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
+
+
+ Textovì editor Text602 verze 3.00 je souŸ st¡ dvou obchodn¡ch produkt…:
+
+ - Text602 verze 3.00
+ - Text602 KOMPLET
+
+ Doplåuj¡c¡ komponenty KOMPLETU jsou pops ny v kapitol ch informaŸn¡ho
+ souboru CTI_KOMP.602. SouŸ st¡ standardn¡ dod vky jsou v§dy tyto soubo­
+ ry:
+
+ o T602.EXE, T602.KLV
+ ExekuŸn¡ soubor editoru Text602 a pýipraven‚ kl vesnice KL8 a KL9 pro
+ pý¡padnou redefinici.
+
+ o T602.HLP
+ Soubor s n povØdou pro Text602.
+
+ o *.FNT
+ Soubory font… pro standardn¡ grafick‚ drivery dev¡ti a Ÿtyýiadvaceti­
+ jehliŸkovìch maticovìch tisk ren v kvalitØ: DRAFT, NLQ, LQ a pro trys­
+ kov‚ a laserov‚ tisk rny.
+
+ o *.DST
+ DefiniŸn¡ soubory pro tisk rny. Podrobnì pýehled a popis vlastnost¡ DST
+ soubor… najdete v informaŸn¡m souboru CTI_MATD.602.
+
+ o PREVIEW.DST
+ DefiniŸn¡ soubor pro tisk zrcadlov‚ho obrazu tiskov‚ str nky (A4) na
+ obrazovku.
+
+ o FAX.DST
+ DefiniŸn¡ soubor pro vìstup do faxov‚ho souboru.
+
+ o SLOV.MNU
+ Soubor pro slovensk  menu (aktivuje se pý¡kazem T602 /SLOV.MNU).
+
+ o HC602.COM, PCXTF602.EXE, LOGO602.TIF
+ Program na sn¡m n¡ obsahu obrazovky a ukl d n¡ do soubor… ve form tu
+ TIFF. Pýevodn¡ program pro obr zky ulo§en‚ ve form tu PCX (napý.
+ z programu PaintBrush (Windows)) do form tu TIFF. Jako vzor je pýilo§en
+ soubor LOGO602.TIF, kterì obsahuje znak naç¡ firmy
+
+ Vçechny soubory jsou dod v ny v komprimovan‚ podobØ a je nutn‚ je in­
+ stalovat pomoc¡ programu INST602 (viz soubor CTI_1111.602).
+@LH 3
+
+@LH 6
+ZmØny a doplåky k manu lu
+
+ - spouçtØc¡ pý¡kaz rezidentnØ instalovan‚ho programu HC602 byl zmØnØn
+ z povelu <Ctrl O><L> na <Ctrl Alt><O>.
+
+ - pýi tisku v¡ce kopi¡ je mo§nost zvolit re§im "SpojitØ" nebo "Po
+ str nk ch". Bli§ç¡ informace najdete v n povØdØ k pý¡kazu poŸet
+ Kopi¡.
+
+ - Ka§d  kl vesnice si "pamatuje" polohu pýep¡naŸe Z > Y. Pýep¡naŸ se
+ nastav¡ podle polohy, kterou mØl naposledy pýi pou§it¡ t‚ kter‚ kl ­
+ vesnice. N povØda k rozlo§en¡ kl ves je zobrazena v§dy pro standardn¡
+ tvar; t.j. bez prohozen¡ "Z" a "Y".
+
+ - Vedle programu HC602 (Orion) je zaýazena dalç¡ grafick  utilita:
+ program PCXTF602. Program je urŸen ke konverzi soubor… obsahuj¡c¡ch
+ obrazov‚ informace ve form tu PCX do form tu TIFF. Program se spouçt¡
+ z pý¡kazov‚ ý dky operaŸn¡ho syst‚mu:
+
+ PCXTF602 PCX_SOUBOR TIFF_SOUBOR [/B|/C]
+
+ parametr /B znamen  b¡l‚ pozad¡ (default), /C znamen  Ÿern‚ pozad¡.
+
+ - Editor umo§åuje naŸ¡st soubory oznaŸen‚ atributem Read Only. Tyto
+ soubory jsou indikov ny hvØzdiŸkou, zobrazenou pýed n zvem souboru.
+ Soubor m…§ete pouze prohl¡§et, nem…§ete jej vçak ulo§it ! Pokud jste
+ vçak ji§ v souboru provedli "nenahraditeln‚" £pravy a t‚ hvØzdiŸky
+ jste si vçimli a§ pozdØ, porad¡me v m malì trik: oznaŸte text jako
+ blok a ulo§te jej do nov‚ho souboru.
+
+ - Pokud spust¡te Preview kl vesovìm povelem <Ctrl PrtScr>, ukazuje
+ aktu ln¡ str nku textu. Spust¡te-li jej pý¡kazem Preview z menu Tisk,
+ ukazuje str nky zvolen‚ pý¡kazy Od str nky a Do str nky.
+
+ - Budete-li cht¡t V ç Text602 trvale pou§¡vat ve slovensk‚m re§imu,
+ zadejte pý¡kaz:
+
+ COPY /B T602.EXE + SLOV.MNU T602.EXE
+
+@LH 3
+
+@LH 6
+Reklamace
+
+ Opr vnØn‚ reklamace budou vyý¡zeny vìmØnnìm zp…sobem. VymØåuje se z ­
+ sadnØ celì komplet dod vky (bez manu lu). Pýi telefonickìch dotazech
+ z sadnØ uv dØjte verzi editoru (3.00), sv‚ s‚riov‚ Ÿ¡slo (uveden‚ na
+ obalu diskety), pý¡padnØ verzi instalaŸn¡ho programu. Pýev §n  vØtçina
+ reklamac¡ je zp…sobena nekompatibilitou disketovìch mechanik. Pýi prv­
+ n¡m ne£spØchu proto nejprve zkuste instalovat z jin‚ disketov‚ mechani­
+ ky nebo na jin‚m zaý¡zen¡. Pýed prvn¡m spuçtØn¡m instalaŸn¡ch disket je
+ zajistØte proti pýepisu a tedy i zavirov n¡ (zalepte nebo u 3.5" pýe­
+ suåte çoup tko do "otevýen‚" polohy).
+
+ Pýi probl‚mech s instalac¡ (je hl çena hardwarov  chyba apod.) je (pod­
+ le naçich zkuçenost¡) mo§n‚ usuzovat na n kazu poŸ¡taŸe virem. Nepokra­
+ Ÿujte v dalç¡ pr ci bez d…kladn‚ho otestov n¡ vçech diskovìch m‚di¡
+ a pamØti poŸ¡taŸe !!!!!
+.ENDTEXT
+.STOP \ No newline at end of file
diff --git a/sw/qa/core/data/602/pass/zak.602 b/sw/qa/core/data/602/pass/zak.602
new file mode 100644
index 0000000000..aaaed61a43
--- /dev/null
+++ b/sw/qa/core/data/602/pass/zak.602
@@ -0,0 +1,641 @@
+ 119
+
+ ZKON
+
+ ze dne 4. b©ezna 1992
+
+ o cestovn¡ch n hrad ch
+
+ ve znˆn¡ Opat©en¡ MPSV €R ze dne 9.prosince 1992, Opat©en¡ MPSV €R
+ ze dne 22.ledna 1993, Opat©en¡ MPSV ze dne 2.b©ezna 1993, Opat©en¡
+ MPSV ze dne 19.b©ezna 1993, Opat©en¡ MPSV ze dne 29.srpna 1993,
+ Opat©en¡ MPSV ze dne 19.listopadu 1993, Opat©en¡ MPSV ze dne 15.
+ prosince 1993,
+
+ a ve znˆn¡ z kona ‡. 44/1994 Sb.
+
+ Feder ln¡ shrom ‘dˆn¡ €esk‚ a Slovensk‚ Federativn¡ republiky
+ se usneslo na tomto z konˆ:
+
+
+ € S T P R V N ‹
+
+ Z kladn¡ ustanoven¡
+
+ ­ 1
+
+ —‡el z kona
+
+ (1) Tento z kon upravuje poskytov n¡ n hrad v˜daj– p©i
+ pracovn¡ch cest ch, p©i jin˜ch zmˆn ch m¡sta v˜konu pr ce, p©i
+ p©ijet¡ do zamˆstn n¡ a p©i p©idˆlen¡ k v˜konu pr ce v zahrani‡¡
+ (d le jen "n hrady")
+ a) pracovn¡k–m v pracovn¡m pomˆru,
+ b) ‡len–m dru‘stev, u nich‘ sou‡ st¡ ‡lenstv¡ je t‚‘ pracovn¡ vztah,
+ c) ob‡an–m ‡inn˜m na z kladˆ dohod o prac¡ch konan˜ch mimo pracovn¡
+ pomˆr, je-li to dohodnuto,
+ d) osob m, o nich‘ to stanov¡ tento z kon nebo jin˜ obecnˆ z vazn˜
+ pr vn¡ p©edpis,
+ (d le jen "zamˆstnanec").
+ (2) Tento z kon neupravuje poskytov n¡ n hrad ‡len–m pos dek
+ n mo©n¡ch lod¡ po dobu nalodˆn¡ {1}.
+
+
+
+ ­ 2
+
+ Vymezen¡ pojm–
+
+ (1) Pracovn¡ cestou se pro £‡ely tohoto z kona rozum¡ doba od
+ n stupu zamˆstnance na cestu k v˜konu pr ce do jin‚ho m¡sta, ne‘ je
+ jeho pravideln‚ pracovi¨tˆ, v‡etnˆ v˜konu pr ce v tomto m¡stˆ, do
+ n vratu zamˆstnance z t‚to cesty.
+ (2) Zahrani‡n¡ pracovn¡ cestou se pro £‡ely tohoto z kona
+ rozum¡ doba pracovn¡ cesty (odstavec 1) z €esk‚ a Slovensk‚
+ Federativn¡ Republiky do zahrani‡¡, ze zahrani‡¡ do €esk‚
+ a Slovensk‚ Federativn¡ Republiky a doba pracovn¡ cesty
+ v zahrani‡¡.
+ (3) Pravideln˜m pracovi¨tˆm se pro £‡ely tohoto z kona rozum¡
+ m¡sto dohodnut‚ se zamˆstnancem; nen¡-li takov‚ m¡sto dohodnuto, je
+ pravideln˜m pracovi¨tˆm m¡sto v˜konu pr ce sjednan‚ v pracovn¡
+ smlouvˆ. U zamˆstnanc–, u nich‘ ‡ast  zmˆna pracovi¨tˆ vypl˜v  ze
+ zvl ¨tn¡ povahy povol n¡, je mo‘no jako pravideln‚ pracovi¨tˆ
+ dohodnout i m¡sto bydli¨tˆ.
+ (4) Za rodinu zamˆstnance se pro £‡ely tohoto z kona
+ pova‘uj¡, pokud maj¡ trval˜ pobyt na £zem¡ €esk‚ a Slovensk‚
+ Federativn¡ Republiky, jeho man‘el nebo druh, vlastn¡ dˆti,
+ osvojenci, dˆti svˆ©en‚ zamˆstnanci do pˆstounsk‚ p‚‡e nebo do
+ v˜chovy, vlastn¡ rodi‡e, osvojitel‚, opatrovn¡ci, pˆstouni,
+ pop©¡padˆ dal¨¡ osoby, ‘ij¡c¡ v dom cnosti {2} se zamˆstnancem.
+
+
+
+ € S T D R U H
+
+ Poskytov n¡ n hrad
+
+ N hrady p©i pracovn¡ cestˆ
+
+ ­ 3
+
+ Zamˆstnavatel vys¡laj¡c¡ zamˆstnance na pracovn¡ cestu ur‡¡
+ m¡sto jej¡ho n stupu, m¡sto v˜konu pr ce, dobu trv n¡, zp–sob
+ dopravy a ukon‡en¡ pracovn¡ cesty; m–‘e ur‡it t‚‘ dal¨¡ podm¡nky
+ pracovn¡ cesty. Zamˆstnavatel je p©itom povinen p©ihl¡‘et
+ k opr vnˆn˜m z jm–m zamˆstnance.
+
+
+ ­ 4
+
+ Zamˆstnanci vyslan‚mu na pracovn¡ cestu p©¡slu¨¡
+
+ a) n hrada prok zan˜ch j¡zdn¡ch v˜daj–,
+ b) n hrada prok zan˜ch v˜daj– za ubytov n¡,
+ c) stravn‚,
+ d) n hrada prok zan˜ch nutn˜ch vedlej¨¡ch v˜daj–,
+ e) n hrada prok zan˜ch j¡zdn¡ch v˜daj– za cesty k n v¨tˆvˆ rodiny
+ do m¡sta trval‚ho nebo mezi zamˆstnavatelem a zamˆstnancem
+ p©edem dohodnut‚ho pobytu rodiny, trv -li pracovn¡ cesta v¡ce
+ ne‘ sedm po sobˆ n sleduj¡c¡ch kalend ©n¡ch dn–, a to ka‘d˜
+ t˜den, nen¡-li v kolektivn¡ smlouvˆ, pop©¡padˆ v pracovn¡
+ smlouvˆ nebo jin‚ p¡semn‚ dohodˆ se zamˆstnancem dohodnuta tato
+ n hrada za del¨¡ dobu, nejd‚le v¨ak za jeden mˆs¡c.
+
+
+ ­ 5
+
+ Stravn‚
+
+ (1) Za ka‘d˜ kalend ©n¡ den pracovn¡ cesty p©¡slu¨¡
+ zamˆstnanci stravn‚ v tomto dni ve v˜¨i
+ a) 34 K‡s, trv -li pracovn¡ cesta 5 a‘ 12 hodin,
+ b) 53 K‡s, trv -li pracovn¡ cesta d‚le ne‘ 12 hodin, nejv˜¨e v¨ak
+ 18 hodin,
+ c) 85 K‡s, trv -li pracovn¡ cesta d‚le ne‘ 18 hodin.
+ (2) Znemo‘n¡-li zamˆstnavatel vysl n¡m na pracovn¡ cestu,
+ kter  trv  m‚nˆ ne‘ 5 hodin, zamˆstnanci stravovat se obvykl˜m
+ zp–sobem, m–‘e mu poskytnout stravn‚ a‘ do v˜¨e 34 K‡s.
+ (3) Pro zamˆstnance, u nich‘ ‡ast  zmˆna pracovi¨tˆ vypl˜v 
+ ze zvl ¨tn¡ povahy povol n¡, lze sjednat v kolektivn¡ smlouvˆ
+ odchylnˆ od tohoto z kona podm¡nky pro poskytov n¡ stravn‚ho,
+ pop©¡padˆ ni‘¨¡ denn¡ sazby stravn‚ho p©i pracovn¡ cestˆ.
+ (4) Zabezpe‡¡-li zamˆstnavatel zamˆstnanci na pracovn¡ cestˆ
+ plnˆ bezplatn‚ stravov n¡, stravn‚ neposkytuje; zabezpe‡¡-li
+ bezplatn‚ stravov n¡ ‡ ste‡nˆ, stravn‚ £mˆrnˆ kr t¡.
+
+
+ ­ 6
+
+ N hrady p©i p©elo‘en¡ a p©i p©ijet¡
+
+ (1) Zamˆstnanci p©¡slu¨¡ p©i p©elo‘en¡ z d–vod– nezbytn‚
+ provozn¡ pot©eby zamˆstnavatele n hrady jako p©i pracovn¡ cestˆ
+ nejd‚le po dobu t©¡ mˆs¡c–, pokud nen¡ dohodnuta doba del¨¡.
+ (2) Zamˆstnavatel m–‘e p©i p©ijet¡ zamˆstnance do zamˆstn n¡,
+ p©elo‘en¡ na ‘ dost zamˆstnance a do‡asn‚m p©idˆlen¡ zamˆstnance
+ k v˜konu pr ce u jin‚ho zamˆstnavatele {3} poskytovat zamˆstnanci
+ n hrady jako p©i pracovn¡ cestˆ a‘ v rozsahu a do v˜¨e stanoven‚
+ v ­ 4 a 5.
+ (3) Zamˆstnanci, kter˜ pob¡r  stravn‚ podle p©edchoz¡ch
+ odstavc– a je v t‚to dobˆ vysl n na pracovn¡ cestu, poskytuje
+ zamˆstnavatel n hradu, kter  je pro zamˆstnance v˜hodnˆj¨¡.
+ (4) V p©¡padech uveden˜ch v odstavc¡ch 1 a 2 m–‘e
+ zamˆstnavatel poskytnout zamˆstnanci t‚‘ n hradu prok zan˜ch
+ stˆhovac¡ch v˜daj–.
+
+
+ ­ 7
+
+ N hrady za pou‘¡v n¡ silni‡n¡ch motorov˜ch vozidel
+ p©i pracovn¡ch cest ch
+
+ (1) Dohodne-li se zamˆstnanec se zamˆstnavatelem, ‘e p©i
+ pracovn¡ cestˆ pou‘ije silni‡n¡ motorov‚ vozidlo, s v˜jimkou
+ vozidla zamˆstnavatele, p©¡slu¨¡ mu za ka‘d˜ 1 km j¡zdy sazba
+ z kladn¡ n hrady a n hrada za spot©ebovan‚ pohonn‚ hmoty.
+ (2) Sazba z kladn¡ n hrady za 1 km j¡zdy ‡in¡
+ a) u jednostop˜ch vozidel a t©¡kolek 0,75 K‡s,
+ b) u osobn¡ch silni‡n¡ch motorov˜ch vozidel 2,60 K‡s;
+ p©i pou‘it¡ p©¡vˆsu k silni‡n¡mu motorov‚mu vozidlu se sazba
+ z kladn¡ n hrady za 1 km j¡zdy zv˜¨¡ a‘ o 10%.
+ (3) Sazba z kladn¡ n hrady u n kladn¡ch automobil– a autobus–
+ se dohodne mezi zamˆstnancem a zamˆstnavatelem.
+ (4) N hrada v˜daj– za pohonn‚ hmoty p©¡slu¨¡ zamˆstnanci
+ podle cen pohonn˜ch hmot platn˜ch v dobˆ pou‘it¡ vozidla
+ a p©epo‡ten˜ch podle spot©eby vypo‡ten‚ aritmetick˜m pr–mˆrem
+ z £daj– uveden˜ch v technick‚m pr–kazu vozidla.
+ (5) Zamˆstnavatel m–‘e se zamˆstnancem sjednat t‚‘
+ poskytov n¡ n hrady za pou‘it¡ silni‡n¡ho motorov‚ho vozidla ve
+ v˜¨i odpov¡daj¡c¡ cenˆ j¡zdenky hromadn‚ho dopravn¡ho prost©edku
+ d lkov‚ p©epravy.
+
+
+ ­ 8
+
+ P©izp–sobov n¡ sazeb n hrad
+
+ (1) V˜¨e sazeb n hrad stravn‚ho uveden  v ­ 5 odst. 1 a 2
+ a v˜¨e sazeb z kladn¡ch n hrad za pou‘¡v n¡ silni‡n¡ch motorov˜ch
+ vozidel uveden  v ­ 7 odst. 2 se upravuje podle statistick˜ch £daj–
+ o cen ch j¡del a nealkoholick˜ch n poj– ve ve©ejn‚m stravov n¡
+ a o cen ch a amortizaci vozidel. —prava sazeb se poprv‚ provede,
+ jestli‘e rozd¡l indexu cen podle vˆty prvn¡ vyhl ¨en‚ho
+ v p©¡slu¨n‚m kalend ©n¡m mˆs¡ci a indexu vyhl ¨en‚ho ke dni
+ £‡innosti tohoto z kona, ‡in¡ hodnotu alespo¤ 10 bod–; dal¨¡ £prava
+ se provede, jestli‘e rozd¡l indexu v p©¡slu¨n‚m kalend ©n¡m mˆs¡ci
+ a indexu v kalend ©n¡m mˆs¡ci, podle nˆho‘ byla naposled upravena
+ v˜¨e sazeb, ‡in¡ opˆt hodnotu alespo¤ 10 bod–. Upraven‚ sazby
+ n hrad podle vˆty prvn¡ p©¡slu¨¡ zamˆstnanc–m od prvn¡ho dne
+ kalend ©n¡ho mˆs¡ce n sleduj¡c¡ho po kalend ©n¡m mˆs¡ci, v nˆm‘
+ byly zve©ejnˆny.
+ (2) V˜¨i sazeb n hrad podle odstavce 1 stanov¡ a vyhl s¡
+ uve©ejnˆn¡m pln‚ho znˆn¡ ve Sb¡rce z kon– {4} feder ln¡
+ ministerstvo pr ce a soci ln¡ch vˆc¡ na z kladˆ £daj– Feder ln¡ho
+ statistick‚ho £©adu.
+ (3) Sazby stravn‚ho se zaokrouhluj¡ na cel‚ koruny do v˜¨e
+ 50 hal‚©– smˆrem dol– a od 50 hal‚©– v‡etnˆ smˆrem nahoru. Sazby
+ z kladn¡ch n hrad za pou‘¡v n¡ silni‡n¡ch motorov˜ch vozidel se
+ zaokrouhluj¡ na pˆtihal‚©e.
+
+
+
+ ­ 9
+
+ Jin‚ a vy¨¨¡ n hrady
+
+ Zamˆstnavatel, kter˜ nen¡ rozpo‡tovou nebo p©¡spˆvkovou
+ organizac¡ {5}, m–‘e poskytovat zamˆstnanc–m i jin‚ n hrady
+ souvisej¡c¡ s pracovn¡ cestou, s jin˜mi zmˆnami m¡sta v˜konu pr ce
+ a p©ijet¡m do zamˆstn n¡ nebo vy¨¨¡ n hrady, ne‘ stanov¡ tento
+ z kon; poskytov n¡ tˆchto n hrad lze sjednat v kolektivn¡ smlouvˆ
+ nebo v pracovn¡ch smlouv ch.
+
+
+
+ € S T T ž E T ‹
+
+ N hrady p©i zahrani‡n¡ch pracovn¡ch cest ch
+
+ ­ 10
+
+ Na poskytov n¡ n hrad p©i zahrani‡n¡ch pracovn¡ch cest ch,
+ v‡etnˆ jin˜ch a vy¨¨¡ch n hrad, se vztahuje £prava stanoven 
+ v ­ 2 a‘ 9, pokud nen¡ d le stanoveno jinak.
+
+
+ ­ 11
+
+ N hrada za cesty k n v¨tˆvˆ rodiny
+
+ P©i zahrani‡n¡ pracovn¡ cestˆ zamˆstnavatel dohodne se
+ zamˆstnancem poskytov n¡ n hrad za cesty k n v¨tˆvˆ rodiny do m¡sta
+ trval‚ho pobytu rodiny; ustanoven¡ ­ 4 p¡sm. e) se nevztahuje na
+ cesty k n v¨tˆvˆ rodiny zamˆstnance vyslan‚ho na zahrani‡n¡
+ pracovn¡ cestu.
+
+
+ ­ 12
+
+ Stravn‚
+
+ (1) Za ka‘d˜ kalend ©n¡ den zahrani‡n¡ pracovn¡ cesty a za
+ ka‘d˜ kalend ©n¡ den, v nˆm‘ zahrani‡n¡ pracovn¡ cesta trv  d‚le
+ ne‘ 12 hodin, p©¡slu¨¡ zamˆstnanci stravn‚ v ciz¡ mˆnˆ. V˜¨i denn¡
+ sazby stravn‚ho v ciz¡ mˆnˆ stanov¡ a vyhl s¡ uve©ejnˆn¡m pln‚ho
+ znˆn¡ ve Sb¡rce z kon– 4) feder ln¡ ministerstvo financ¡.
+ (2) Trv -li zahrani‡n¡ pracovn¡ cesta v kalend ©n¡m dni m‚nˆ
+ ne‘ 12 hodin nebo trv -li celkovˆ m‚nˆ ne‘ 12 hodin, zamˆstnavatel
+ poskytuje stravn‚ v ciz¡ mˆnˆ nejv˜¨e do poloviny denn¡ sazby
+ ur‡en‚ podle p©edchoz¡ho odstavce.
+
+
+ ­ 13
+
+ Kapesn‚
+
+ Zamˆstnavatel m–‘e zamˆstnanc–m p©i zahrani‡n¡ pracovn¡ cestˆ
+ poskytovat vedle stravn‚ho kapesn‚ v ciz¡ mˆnˆ do v˜¨e 40%
+ stravn‚ho ur‡en‚ho podle ­ 12.
+
+
+ ­ 14
+
+ N hrada v˜daj– za pohonn‚ hmoty
+
+ P©i poskytov n¡ n hrad za pou‘¡v n¡ silni‡n¡ch motorov˜ch
+ vozidel podle ­ 7 p©¡slu¨¡ zamˆstnanci p©i zahrani‡n¡ pracovn¡
+ cestˆ n hrada za pohonn‚ hmoty v ciz¡ mˆnˆ za kilometry ujet‚
+ v zahrani‡¡ nad 350 km.
+
+
+ ­ 15
+
+ Vylou‡en¡ soubˆhu n hrad poskytovan˜ch v ‡eskoslovensk‚
+ a ciz¡ mˆnˆ
+
+ (1) P©i zahrani‡n¡ pracovn¡ cestˆ p©¡slu¨¡ zamˆstnanci za
+ dobu pracovn¡ cesty na £zem¡ €esk‚ a Slovensk‚ Federativn¡
+ Republiky stravn‚ v ‡eskoslovensk‚ mˆnˆ v rozsahu a za podm¡nek
+ stanoven˜ch v ­ 5 odst. 1.
+ (2) P©i zahrani‡n¡ pracovn¡ cestˆ je rozhodnou dobou pro
+ vznik n roku na n hrady poskytovan‚ v ciz¡ mˆnˆ p©echod
+ ‡eskoslovensk‚ st tn¡ hranice a p©i leteck‚ p©epravˆ odlet a p©¡let
+ letadla podle letov‚ho © du.
+
+
+ ­ 16
+
+ Zahrani‡n¡ pracovn¡ cesty konan‚ na z kladˆ dohod
+ o vz jemn‚ v˜mˆnˆ zamˆstnanc–
+
+ (1) V dohodˆ o vz jemn‚ v˜mˆnˆ zamˆstnanc– m–‘e zamˆstnavatel
+ se zamˆstnavatelem, ke kter‚mu je zamˆstnanec vys¡l n, sjednat
+ poskytov n¡ bezplatn‚ho ubytov n¡, stravn‚ho, kapesn‚ho a n hradu
+ j¡zdn¡ch v˜daj– za cesty souvisej¡c¡ s v˜konem pr ce.
+ (2) J¡zdn¡ v˜daje za cesty ze s¡dla zamˆstnavatele, kter˜
+ zamˆstnance vys¡l  na pracovn¡ cestu, do s¡dla zamˆstnavatele
+ v zahrani‡¡ a zpˆt hrad¡ vys¡laj¡c¡ zamˆstnavatel.
+ (3) Zamˆstnavatel‚ mohou dohodnout v˜¨i stravn‚ho
+ poskytovan‚ho ‡eskoslovensk‚mu zamˆstnanci v zahrani‡¡ maxim lnˆ do
+ v˜¨e stanoven‚ t¡mto z konem.
+ (4) Zahrani‡n¡mu zamˆstnanci vyslan‚mu do €esk‚ a Slovensk‚
+ Federativn¡ Republiky se poskytuje stravn‚ a‘ do v˜¨e 200 K‡s na
+ den a kapesn‚ do v˜¨e 40% stravn‚ho.
+ (5) Zamˆstnavatel‚, kte©¡ nejsou rozpo‡tov˜mi nebo
+ p©¡spˆvkov˜mi organizacemi, mohou poskytovat vy¨¨¡ stravn‚ hrazen‚
+ z pou‘iteln‚ho zisku.
+
+
+ ­ 17
+
+ N hrady p©i p©idˆlen¡ k v˜konu pr ce v zahrani‡¡
+
+ Zamˆstnanci p©idˆlen‚mu k v˜konu pr ce v zahrani‡¡, kter˜ je
+ odmˆ¤ov n podle zvl ¨tn¡ch p©edpis– {6}, p©¡slu¨¡ za dny cesty do
+ m¡sta p©idˆlen¡ a zpˆt a p©i pracovn¡ch cest ch v zahrani‡¡,
+ n hrady jako p©i zahrani‡n¡ pracovn¡ cestˆ. Pokud se zamˆstnancem
+ cestuje jeho rodinn˜ p©¡slu¨n¡k (­ 2 odst.4), lze zamˆstnanci
+ poskytnout t‚‘ n hrady v˜daj–, kter‚ vznikly tomuto rodinn‚mu
+ p©¡slu¨n¡ku.
+
+
+
+ € S T € T V R T
+
+ Spole‡n , p©echodn  a z vˆre‡n  ustanoven¡
+
+ ­ 18
+
+ (1) N hrady, na nˆ‘ vznik  zamˆstnanc–m n rok, n hrady podle
+ ­ 5 odst. 3, kapesn‚ do v˜¨e 40% stanoven‚ho stravn‚ho podle ­ 13
+ a n hrady p©i p©ijet¡ zamˆstnance, kter˜ je uchaze‡em o zamˆstn n¡
+ {7}, se s v˜jimkou zamˆstnavatele, kter˜ je rozpo‡tovou nebo
+ p©¡spˆvkovou organizac¡, zahrnuj¡ do n klad– (v˜daj–). Ostatn¡
+ n hrady se hrad¡ z pou‘iteln‚ho zisku.
+ (2) N hrady poskytovan‚ zamˆstnanc–m vys¡lan˜m do zahrani‡¡
+ na mont ‘n¡ a obdobn‚ pr ce ke splnˆn¡ z vazk– ze smlouvy, kterou
+ zamˆstnavatel uzav©el se zahrani‡n¡m £‡astn¡kem p©i prov dˆn¡
+ zahrani‡n¡ hospod ©sk‚ ‡innosti, se zahrnuj¡ do zahrani‡n¡ch
+ p©¡m˜ch obchodn¡ch n klad–.
+
+
+ ­ 19
+
+ N hrady podle tohoto z kona lze pau¨alizovat. P©i v˜po‡tu
+ pau¨ ln¡ ‡ stky vych z¡ zamˆstnavatel z pr–mˆrn˜ch podm¡nek
+ rozhodn˜ch pro poskytov n¡ n hrad zamˆstnanci nebo skupinˆ
+ zamˆstnanc–. Pokud se zmˆn¡ podm¡nky, za nich‘ byla pau¨ ln¡ ‡ stka
+ stanovena, je zamˆstnavatel povinen tuto ‡ stku p©ezkoumat
+ a upravit.
+
+
+ ­ 20
+
+ Kde tento z kon po‘aduje prok z n¡ v˜daj– a zamˆstnanec je
+ neprok ‘e, m–‘e mu zamˆstnavatel poskytnout n hrady v j¡m uznan‚
+ v˜¨i s p©ihl‚dnut¡m k ur‡en˜m podm¡nk m pracovn¡ cesty (­ 3).
+ Obdobnˆ lze postupovat i p©i poskytov n¡ n hrad j¡zdn¡ch v˜daj– za
+ mˆstskou hromadnou dopravu p©i pracovn¡ cestˆ na £zem¡ €esk‚
+ a Slovensk‚ Federativn¡ Republiky.
+
+
+ ­ 21
+
+ (1) Po‘ d -li zamˆstnanec o poskytnut¡ z lohy na n hrady
+ podle tohoto z kona, je zamˆstnavatel povinen mu tuto z lohu do
+ v˜¨e p©edpokl dan‚ n hrady poskytnout.
+ (2) Zamˆstnavatel je povinen poskytnout zamˆstnanci p©i
+ zahrani‡n¡ pracovn¡ cestˆ z lohu v ciz¡ mˆnˆ v rozsahu a ve v˜¨i
+ podle p©edpokl dan‚ doby trv n¡ a podm¡nek zahrani‡n¡ pracovn¡
+ cesty.
+ (3) Zamˆstnanec je povinen do deseti pracovn¡ch dn– po dni
+ ukon‡en¡ pracovn¡ cesty p©edlo‘it zamˆstnavateli p¡semn‚ doklady
+ pot©ebn‚ k vy£‡tov n¡ pracovn¡ cesty a t‚‘ vr tit nevy£‡tovanou
+ z lohu.
+ (4) Zamˆstnavatel je povinen do deseti pracovn¡ch dn– ode dne
+ p©edlo‘en¡ p¡semn˜ch doklad– prov‚st vy£‡tov n¡ pracovn¡ cesty
+ zamˆstnance a uspokojit jeho n roky.
+
+
+ ­ 22
+
+ Pokud ‡as str ven˜ na pracovn¡ cestˆ jinak ne‘ plnˆn¡m
+ pracovn¡ch £kol– spad  do pracovn¡ doby zamˆstnance, pova‘uje se za
+ dobu zame¨kanou pro p©ek ‘ky v pr ci na stranˆ zamˆstnavatele. Za
+ tuto dobu n le‘¡ zamˆstnanci n hrada mzdy ve v˜¨i pr–mˆrn‚ho
+ v˜dˆlku {8}.
+
+
+
+ ­ 23
+
+ Pracovnˆpr vn¡ vztahy podle tohoto z kona se ©¡d¡ z kon¡kem
+ pr ce, pokud v tomto z konˆ nen¡ stanoveno jinak.
+
+
+ ­ 24
+
+ Vl da €esk‚ a Slovensk‚ Federativn¡ Republiky, vl da €esk‚
+ republiky a vl da Slovensk‚ republiky mohou v rozsahu sv‚
+ p–sobnosti stanovit na©¡zen¡m pro zamˆstnance zamˆstnavatel–, kte©¡
+ jsou rozpo‡tov˜mi nebo p©¡spˆvkov˜mi organizacemi, i jin‚ n hrady
+ souvisej¡c¡ s pracovn¡ cestou, jin˜mi zmˆnami m¡sta v˜konu pr ce,
+ p©ijet¡m do zamˆstn n¡ a p©i p©idˆlen¡ k v˜konu pr ce v zahrani‡¡.
+
+
+ ­ 25
+
+ (1) Zru¨uj¡ se:
+
+ 1. Vyhl ¨ka ministerstva financ¡ ‡. 18/1960 Sb., o n hrad ch
+ v˜daj– p©i zahrani‡n¡ch pracovn¡ch cest ch.
+
+ 2. Vyhl ¨ka feder ln¡ho ministerstva pr ce a soci ln¡ch vˆc¡ ‡.
+ 57/ 1979 Sb., o n hrad ch za pou‘¡v n¡ silni‡n¡ch motorov˜ch
+ vozidel p©i pracovn¡ch cest ch, ve znˆn¡ vyhl ¨ky ‡. 2/1984
+ Sb., vyhl ¨ky ‡. 251/1990 Sb., vyhl ¨ky ‡. 338/1990 Sb.,
+ vyhl ¨ky ‡. 430/1990 Sb. a vyhl ¨ky ‡. 480/1990 Sb.
+
+ 3. Vyhl ¨ka feder ln¡ho ministerstva pr ce a soci ln¡ch vˆc¡ ‡.
+ 33/1984 Sb., o cestovn¡ch n hrad ch, ve znˆn¡ vyhl ¨ky ‡.
+ 81/1988 Sb., vyhl ¨ky ‡. 241/1988 Sb. a vyhl ¨ky ‡. 251/1990
+ Sb.
+
+ 4. Vyhl ¨ka ministerstva pr ce a soci ln¡ch vˆc¡ €esk‚ republiky
+ ‡. 120/1991 Sb., kterou se dopl¤uj¡ nˆkter‚ pr vn¡ p©edpisy
+ o cestovn¡ch n hrad ch.
+
+ 5. Vyhl ¨ka ministerstva pr ce a soci ln¡ch vˆc¡ Slovensk‚
+ republiky ‡. 148/1991 Sb., kterou se dopl¤uje vyhl ¨ka
+ feder ln¡ho ministerstva pr ce a soci ln¡ch vˆc¡ ‡. 33/1984
+ Sb., o cestovn¡ch n hrad ch, ve znˆn¡ pozdˆj¨¡ch p©edpis–,
+ a v˜nos feder ln¡ho ministerstva pr ce a soci ln¡ch vˆc¡ z 31.
+ srpna 1982 ‡.j. 315-5796-3161, o zvl ¨tn¡ £pravˆ n hrad
+ cestovn¡ch v˜daj– pracovn¡k– p©ijat˜ch ze Slovensk‚
+ socialistick‚ republiky do apar tu feder ln¡ch instituc¡, ve
+ znˆn¡ v˜nosu feder ln¡ho ministerstva pr ce a soci ln¡ch vˆc¡
+ z 18. ‡ervna 1990 ‡.j. 225-18991-5157.
+
+ 6. Pokyny —st©edn¡ho svazu spot©ebn¡ch dru‘stev ze dne 7.dubna
+ 1965 ‡. 26/1965 Vˆst. —SSD pro poskytov n¡ n hrad pracovn¡k–m,
+ kte©¡ pravidelnˆ ve vˆt¨¡m rozsahu pou‘¡vaj¡ slu‘ebn¡ho
+ motocyklu, vlastn¡ho j¡zdn¡ho (motorov‚ho) kola nebo konaj¡
+ cesty pˆ¨ky (reg. ‡ stka 40/1965 Sb.).
+
+ 7. V˜nos ministerstva stavebnictv¡ ze dne 9.ledna 1968 ‡. 3/1968
+ Zpravodaje ministerstva stavebnictv¡ o ur‡en¡ pracovi¨Ÿ, na
+ kter  se v podnic¡ch pr–myslov‚ v˜roby vztahuje zvl ¨tn¡ £prava
+ nocle‘n‚ho (reg. ‡ stka 10/1968 Sb.).
+
+ 8. V˜nos ministerstva zemˆdˆlstv¡ a v˜‘ivy ze dne 3.11. 1967
+ ‡j.VII/3-1747/1967, kter˜m se prov dˆj¡ nˆkter  ustanoven¡
+ vyhl ¨ky ‡. 96/1967 Sb. (reg. ‡ stka 11/1968 SB.), ve znˆn¡
+ smˆrnice feder ln¡ho ministerstva pr ce a soci ln¡ch vˆc¡ ze
+ 14. 1. 1972 ‡j. II/1-126/72-7501, v˜nosu feder ln¡ho
+ ministerstva zemˆdˆlstv¡ a v˜‘ivy, ministerstva zemˆdˆlstv¡
+ a v˜‘ivy €esk‚ socialistick‚ republiky a ministerstva
+ zemˆdˆlstv¡ a v˜‘ivy Slovensk‚ socialistick‚ republiky z 30.
+ 8. 1982 ‡j. FM 01-1263/82 a z 30. 5. 1984 ‡j. FM 04-244/84.
+
+ 9. V˜nos ‡. 2 ministerstva hornictv¡ ‡j. 42.3/657/68, kter˜m se
+ mˆn¡ ustanoven¡ ‡l. III a ‡l. V v˜nosu ‡. 9 ministerstva
+ hornictv¡ ‡j. 42.3/776/67 k proveden¡ z kon¡ku pr ce (reg.
+ ‡ stka 25/1968 Sb.), ve znˆn¡ v˜nosu Feder ln¡ho v˜boru pro
+ pr–mysl ‡. 1/1970 (reg. ‡ stka 13/1970 Sb.)
+
+ 10. V˜nos —st©edn¡ spr vy geod‚zie a kartografie ‡j. 6 158/1968-2,
+ kter˜m se stanov¡ z sady pro pau¨alizaci n hrad cestovn¡ch
+ v˜daj– (reg. ‡ stka 48/1968 Sb.).
+
+ 11. Smˆrnice feder ln¡ho ministerstva financ¡ ‡j. VII/4-8921/72,
+ o n hrad ch v˜daj– p©i zahrani‡n¡ch pracovn¡ch cest ch (reg.
+ ‡ stka 18/1971 Sb.), ve znˆn¡ v˜nosu feder ln¡ho ministerstva
+ financ¡ ‡j. VI/2-8900/88 (reg. ‡ stka 23/1988 Sb.).
+
+ 12. Z sady feder ln¡ho ministerstva dopravy ‡j. 20 808/75-09 pro
+ poskytov n¡ pau¨ ln¡ch n hrad cestovn¡ch v˜daj– (reg. ‡ stka
+ 3/l976 Sb.).
+
+ 13. V˜nos feder ln¡ho ministerstva financ¡ ze dne 20. b©ezna 1978
+ ‡j. II/6000/78, o odmˆ¤ov n¡ a hmotn‚ zabezpe‡en¡ nˆkter˜ch
+ pracovn¡k– po dobu jejich pobytu v zahrani‡¡ (reg. ‡ stka
+ 11/1978 Sb.).
+
+ 14. Smˆrnice feder ln¡ho ministerstva pr ce a soci ln¡ch vˆc¡ ze
+ dne 10. srpna 1979 ‡j. 316-1238/79-7305, o odmˆ¤ov n¡
+ pracovn¡k–, kte©¡ v souvislosti s v˜konem povol n¡ ©¡d¡
+ slu‘ebn¡ silni‡n¡ motorov  vozidla (reg. ‡ stka 25/1979 Sb.),
+ ve znˆn¡ vyhl ¨ka ‡. 251/1990 Sb.
+
+ 15. ­ 4 a 5 v˜nosu feder ln¡ho ministerstva pr ce a soci ln¡ch vˆc¡
+ ‡j. 316-1099/81-7300, o odmˆ¤ov n¡ a poskytov n¡ cestovn¡ch
+ n hrad vietnamsk˜m ob‡an–m do‡asnˆ zamˆstnan˜m v €eskoslovensk‚
+ socialistick‚ republice (reg. ‡ stka 34/1981 Sb.), ve znˆn¡
+ v˜nosu ze dne 31. 7. 1989 ‡j. 221-8747-5123, 060589 (reg.
+ ‡ stka 26/1989 Sb.).
+
+ 16. V˜nos feder ln¡ho ministerstva paliva a energetiky ‡.3
+ z 23.3.1982, kter˜m se stanov¡ stavby, na nich‘ se poskytuje
+ preferen‡n¡ odlu‡n‚ pracovn¡k–m stavebn¡ a stavebnˆ mont ‘n¡
+ ‡innosti (reg. ‡ stka 14/1982 Sb.), ve znˆn¡ v˜nosu feder ln¡ho
+ ministerstva paliv a energetiky ‡. 10 z 29. 10. 1982 (reg.
+ ‡ stka 3/1983 Sb.).
+
+ 17. V˜nos feder ln¡ho ministerstva pr ce a soci ln¡ch vˆc¡ ‡j.
+ 315-5796-3161, o zvl ¨tn¡ £pravˆ n hrad cestovn¡ch v˜daj–
+ pracovn¡k– p©ijat˜ch ze Slovensk‚ socialistick‚ republiky do
+ apar tu feder ln¡ch instituc¡ (reg. ‡ stka 34/1982 Sb.), ve
+ znˆn¡ v˜nosu ‡j. 225/1899-5157 (reg. ‡ stka 45/1990 Sb.).
+
+ 18. Smˆrnice €esk‚ho svazu v˜robn¡ch dru‘stev ‡. 59/1982 Vˆstn¡ku
+ €esk‚ho svazu v˜robn¡ch dru‘stev, o n hrad ch cestovn¡ch
+ a jin˜ch v˜daj– komin¡k– (reg. ‡ stka 10/1983 Sb.).
+
+ 19. V˜nos feder ln¡ho ministerstva dopravy ze dne 12. ledna 1983
+ ‡j. 25 080/82-03, o poskytov n¡ leteck‚ stravn¡ normy ‡len–m
+ pos dek civiln¡ch letadel v organizac¡ch v p–sobnosti
+ feder ln¡ho ministerstva dopravy (reg. ‡ stka 9/1983 Sb.), ve
+ znˆn¡ v˜nosu ze dne 10. z ©¡ 1990 ‡j. 19 439/1990-320 (reg.
+ ‡ stka 75/1990 Sb.).
+
+ 20. V˜nos feder ln¡ho ministerstva n rodn¡ obrany ‡j.
+ 7440-FS/5-182, kter˜m se pro pracovn¡ky trustu podniku Vojensk‚
+ lesy a statky upravuj¡ nˆkter‚ n hrady podle vyhl ¨ky ‡.
+ 96/1967 Sb., o n hrad ch cestovn¡ch, stˆhovac¡ch a jin˜ch
+ v˜daj– (reg. ‡ stka 14/1983 Sb.), ve znˆn¡ vyhl ¨ky ‡. 91/1982
+ Sb.
+
+ 21. V˜nos feder ln¡ho ministerstva dopravy ze dne 27.©¡jna 1983 ‡j.
+ 20 324/1983-03, o poskytov n¡ leteck‚ stravn¡ normy ‡len–m
+ pos dek civiln¡ch letadel trvale vykon vaj¡c¡m ©¡d¡c¡ ‡innost
+ technickohospod ©sk‚ho charakteru v organizac¡ch v p–sobnosti
+ feder ln¡ho ministerstva dopravy (reg. ‡ stka 4/1984 Sb.), ve
+ znˆn¡ v˜nosu ze dne 10. z ©¡ 1990 ‡j. 19 439/1990-320 (reg.
+ ‡ stka 75/1990 Sb.).
+
+ 22. V˜nos feder ln¡ho ministerstva financ¡ ‡j. FMF VI/3-11 811/84
+ a feder ln¡ho ministerstva zahrani‡n¡ho obchodu ‡j. FMZO
+ 598/14/84, o n hrad ch v˜daj– p©i zahrani‡n¡ch pracovn¡ch
+ cest ch ‡len– pos dek dopravn¡ch prost©edk– (reg. ‡ stka
+ 22/1984 Sb.), ve znˆn¡ v˜nosu feder ln¡ho ministerstva financ¡
+ ‡j. VI/3-1840/87 a feder ln¡ho ministerstva zahrani‡n¡ho
+ obchodu ‡j. 86/14/87 (reg. ‡ stka 11/1987 Sb.).
+
+ 23. V˜nos ministerstva vnitra €esk‚ socialistick‚ republiky ‡j.
+ MH/13-6699/1939/85, o zvl ¨tn¡ch pau¨ ln¡ch n hrad ch
+ cestovn‚ho pro komin¡ky a v˜kup‡¡ druhotn˜ch surovin
+ v organizac¡ch m¡stn¡ho hospod ©stv¡ (reg. ‡ stka 20/1985 Sb.),
+ ve znˆn¡ v˜nosu ze dne 18. 9. 1990 ‡j. MH/1-13980/720/1990
+ (reg. ‡ stka 67/1990 Sb.).
+
+ 24. V˜nos feder ln¡ho ministerstva financ¡ ‡j. VIII/4/16 986/85,
+ o stanoven¡ jednotn‚ zahrani‡n¡ diety pro ‡eskoslovensk‚
+ pracovn¡ky na integra‡n¡ch akc¡ch ve Svazu sovˆtsk˜ch
+ socialistick˜ch republika (reg. ‡ stka 30/1985 Sb.).
+
+ 25. Smˆrnice €esk‚ho svazu v˜robn¡ch dru‘stev ‡. 29/1985,
+ o zvl ¨tn¡ch pau¨ ln¡ch n hrad ch cestovn‚ho pro komin¡ky (reg.
+ ‡ stka 4(1986 Sb.).
+
+ 26. V˜nos feder ln¡ho ministerstva dopravy ‡j. 6006/1986-03,
+ o zvl ¨tn¡ch pau¨ ln¡ch n hrad ch cestovn¡ch v˜daj– pro nˆkter‚
+ pracovn¡ky dopravy, u nich‘ ‡ast  zmˆna m¡sta v˜konu pr ce
+ vypl˜v  ze zvl ¨tn¡ povahy povol n¡ (reg. ‡ stka 18/1986 Sb.),
+ ve znˆn¡ v˜nosu ze dne 10. 9. 1990 ‡j. 19 438/1990-32O (reg.
+ ‡ stka 70/1990 Sb.).
+
+ 27. V˜nos ministerstva vnitra €esk‚ socialistick‚ republiky ‡j.
+ SD/33-2728/1987, o zvl ¨tn¡ch pau¨ ln¡ch n hrad ch cestovn¡ch
+ v˜daj– j¡zdn¡ch pracovn¡k– silni‡n¡ a mˆstsk‚ dopravy (reg.
+ ‡ stka 17/1987 Sb.), ve znˆn¡ v˜nosu ze dne 24. 7. 1990 ‡j.
+ SD/1-R-11 O21/90 (reg. ‡ stka 54/1990 Sb.).
+
+ 28. V˜nos feder ln¡ho ministerstva vnitra Slovensk‚ socialistick‚
+ republiky ‡. MH-41/203/1987, o zvl ¨tn¡ch pau¨ ln¡ch cestovn¡ch
+ n hrad ch pro komin¡ky a v˜kup‡¡ druhotn˜ch surovin
+ v organizac¡ch m¡stn¡ho hospod ©stv¡ (reg. ‡ stka 17/1987 Sb.),
+ ve znˆn¡ v˜nosu ministerstva vnitra Slovensk‚ republiky z 8.
+ ledna 1991 ‡. MH-5/1991-OE (reg. ‡ stka 1O/1991 Sb.).
+
+ 29. V˜nos feder ln¡ho ministerstva financ¡ ze dne 22. ‡ervna 1987
+ ‡j. III/11 000/87, o cestovn¡ch n hrad ch p©i zahrani‡n¡ch
+ bezdevizov˜ch pracovn¡ch cest ch (reg. ‡ stka 17/1987 Sb.).
+
+ 30. V˜nos ministerstva vnitra Slovensk‚ socialistick‚ republiky ze
+ dne 11. z ©¡ 1987 ‡. SD3138/1987-4, o zvl ¨tn¡ch pau¨ ln¡ch
+ cestovn¡ch n hrad ch pracovn¡k– silni‡n¡ a mˆstsk‚ dopravy,
+ silni‡n¡ho hospod ©stv¡ a automobilov‚ho oprav renstv¡ (reg.
+ ‡ stka 18/1987 Sb.), ve znˆn¡ v˜nosu z 3. ledna 1991 ‡.
+ SD-3-3003/1991.
+
+ 31. ­ 5 v˜nosu feder ln¡ho ministerstva pr ce a soci ln¡ch vˆc¡ ‡j.
+ 515-31053-5123, o odmˆ¤ov n¡ a poskytov n¡ cestovn¡ch n hrad
+ angolsk˜m ob‡an–m do‡asnˆ zamˆstnan˜m v ‡eskoslovensk˜ch
+ organizac¡ch (reg. ‡ stka 25/1987 Sb.).
+
+ 32. ­ 4 v˜nosu feder ln¡ho ministerstva pr ce a soci ln¡ch vˆc¡ ‡j.
+ 515-37137-5123, o odmˆ¤ov n¡ a poskytov n¡ cestovn¡ch n hrad
+ vedouc¡m skupin korejsk˜ch ob‡an– a korejsk˜m tlumo‡n¡k–m
+ zamˆstnan˜m v €eskoslovensk‚ socialistick‚ republice (reg.
+ ‡ stka 26/1987 Sb.).
+
+ 33. V˜nos feder ln¡ho ministerstva pr ce a soci ln¡ch vˆc¡ ‡.
+ 404/1991 Sb., o poskytov n¡ p©¡platku k £hradˆ cestovn¡ch
+ v˜daj– pracovn¡k–m p©ijat˜m z €esk‚ republiky do feder ln¡ch
+ org n– na £zem¡ Slovensk‚ republiky (reg. ‡ stka 76/1991 Sb.).
+
+ (2) Platnosti pozb˜vaj¡ v˜jimky, odchylky a dal¨¡ opat©en¡
+ stanoven‚ podle dosavadn¡ch pr vn¡ch p©edpis– o cestovn¡ch
+ n hrad ch.
+
+
+ ­ 26
+
+ Tento z kon nab˜v  £‡innosti dnem 1. kvˆtna 1992.
+
+
+
+ *1* Z kon ‡. 61/1952 Sb., o n mo©n¡ plavbˆ.
+ *2* ­ 115 ob‡ansk‚ho z kon¡ku.
+ *3* ­ 38 odst. 5 z kon¡ku pr ce.
+ ­ 5 na©¡zen¡ vl dy €eskoslovensk‚ socialistick‚ republiky
+ ‡. 223/1988 Sb., kter˜m se prov d¡ z kon¡k pr ce.
+ *4* ­ 8 z kona ‡. 131/1989 Sb., o Sb¡rce z kon–.
+ *5* ­ 24 z kona ‡. 563/1990 Sb., o rozpo‡tov˜ch pravidlech federace.
+ ­ 31 z kona €esk‚ n rodn¡ rady ‡. 576/1990 Sb., o pravidlech
+ hospoda©en¡ s rozpo‡tov˜mi prost©edky €esk‚ republiky a obc¡
+ v €esk‚ republice (rozpo‡tov  pravidla republiky).
+ ­ 28 z kona Slovensk‚ n rodn¡ rady ‡. 592/1990 Sb.,
+ o rozpo‡tov˜ch pravidlech Slovensk‚ republiky.
+ *6* Nap©¡klad
+ v˜nos ministra zahrani‡n¡ho obchodu ‡. 24/1962 ze dne
+ 23.‡ervna 1962 o £pravˆ platov˜ch pomˆr– zamˆstnanc–
+ ministerstva zahrani‡n¡ho obchodu p©idˆlen˜ch k v˜konu funkc¡
+ u obchodn¡ch oddˆlen¡ zastupitelsk˜ch £©ad– v zahrani‡¡, ve
+ znˆn¡ pozdˆj¨¡ch p©edpis–,
+ v˜nos ministra zahrani‡n¡ch vˆc¡ ‡. 013.147/62, z sady platov‚
+ £pravy pro zamˆstnance zahrani‡n¡ slu‘by.
+ *7* Z kon ‡. 1/1991 Sb., o zamˆstnanosti, ve znˆn¡ pozdˆj¨¡ch
+ p©edpis–.
+ *8* ­ 17 z kona ‡. 1/1992 Sb., o mzdˆ, odmˆnˆ za pracovn¡
+ pohotovost a o pr–mˆrn‚m v˜dˆlku.
diff --git a/sw/qa/core/data/README b/sw/qa/core/data/README
new file mode 100644
index 0000000000..a147d4be4c
--- /dev/null
+++ b/sw/qa/core/data/README
@@ -0,0 +1,23 @@
+Files with the string 'CVE' in their name are encrypted to avoid
+problems with virus checkers on source code download.; use:
+
+mdecrypt --bare -a arcfour -o hex -k 435645 -s 3 foo.doc # to unencrypt
+mcrypt --bare -a arcfour -o hex -k 435645 -s 3 foo.doc # to create new tests
+
+to get access to the plain files for manual testing.
+
+
+The files in these subdirectories are tested to
+ensure that they import without crashing or hanging.
+Files that crash during export should go into exportdata.
+
+Both data and exportdata are tested with
+make CppunitTest_sw_filters_test or
+make CppunitTest_sw_filters_test2 for ww6.
+
+Files that hang interactively, but pass filters_test
+might be failing because of layout issues. See core/layout.
+
+pass: these files now load - without the fix they crashed or hung.
+fail: these files still fail to load, but not because of crashing or hanging.
+indeterminate: untested temporary holding area - to be sorted as pass/fail.
diff --git a/sw/qa/core/data/docm/testDocumentRange.docm b/sw/qa/core/data/docm/testDocumentRange.docm
new file mode 100644
index 0000000000..f1d5b328c3
--- /dev/null
+++ b/sw/qa/core/data/docm/testDocumentRange.docm
Binary files differ
diff --git a/sw/qa/core/data/docm/testFind.docm b/sw/qa/core/data/docm/testFind.docm
new file mode 100644
index 0000000000..afcba6f0e5
--- /dev/null
+++ b/sw/qa/core/data/docm/testFind.docm
Binary files differ
diff --git a/sw/qa/core/data/docm/testFontColor.docm b/sw/qa/core/data/docm/testFontColor.docm
new file mode 100644
index 0000000000..8e43601cf6
--- /dev/null
+++ b/sw/qa/core/data/docm/testFontColor.docm
Binary files differ
diff --git a/sw/qa/core/data/docm/testModernVBA.docm b/sw/qa/core/data/docm/testModernVBA.docm
new file mode 100644
index 0000000000..c08d738c8a
--- /dev/null
+++ b/sw/qa/core/data/docm/testModernVBA.docm
Binary files differ
diff --git a/sw/qa/core/data/docm/testModernVBADelete.docm b/sw/qa/core/data/docm/testModernVBADelete.docm
new file mode 100644
index 0000000000..e3a70719de
--- /dev/null
+++ b/sw/qa/core/data/docm/testModernVBADelete.docm
Binary files differ
diff --git a/sw/qa/core/data/docm/testParagraphFormat.docm b/sw/qa/core/data/docm/testParagraphFormat.docm
new file mode 100644
index 0000000000..ce638946e2
--- /dev/null
+++ b/sw/qa/core/data/docm/testParagraphFormat.docm
Binary files differ
diff --git a/sw/qa/core/data/docm/testSentences.docm b/sw/qa/core/data/docm/testSentences.docm
new file mode 100644
index 0000000000..5275307ddb
--- /dev/null
+++ b/sw/qa/core/data/docm/testSentences.docm
Binary files differ
diff --git a/sw/qa/core/data/docm/testTables.docm b/sw/qa/core/data/docm/testTables.docm
new file mode 100644
index 0000000000..5d4502ade0
--- /dev/null
+++ b/sw/qa/core/data/docm/testTables.docm
Binary files differ
diff --git a/sw/qa/core/data/docm/testVBA.docm b/sw/qa/core/data/docm/testVBA.docm
new file mode 100644
index 0000000000..7b8495c056
--- /dev/null
+++ b/sw/qa/core/data/docm/testVBA.docm
Binary files differ
diff --git a/sw/qa/core/data/docm/testWords.docm b/sw/qa/core/data/docm/testWords.docm
new file mode 100644
index 0000000000..b88416bb77
--- /dev/null
+++ b/sw/qa/core/data/docm/testWords.docm
Binary files differ
diff --git a/sw/qa/core/data/html/fail/.gitignore b/sw/qa/core/data/html/fail/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sw/qa/core/data/html/fail/.gitignore
diff --git a/sw/qa/core/data/html/fail/ofz5909-1.html b/sw/qa/core/data/html/fail/ofz5909-1.html
new file mode 100644
index 0000000000..9511b2bc1e
--- /dev/null
+++ b/sw/qa/core/data/html/fail/ofz5909-1.html
@@ -0,0 +1 @@
+<table><td><a class="sdfootnoteanc"href=" sdfootnote1 "></a><div id="sdfootnote1"><table><td> \ No newline at end of file
diff --git a/sw/qa/core/data/html/fail/ofz6891-1.html b/sw/qa/core/data/html/fail/ofz6891-1.html
new file mode 100644
index 0000000000..7d767d72a1
--- /dev/null
+++ b/sw/qa/core/data/html/fail/ofz6891-1.html
@@ -0,0 +1 @@
+<table align=left><td><table><S STYLE="position:absolute;width: 6"> \ No newline at end of file
diff --git a/sw/qa/core/data/html/indeterminate/.gitignore b/sw/qa/core/data/html/indeterminate/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sw/qa/core/data/html/indeterminate/.gitignore
diff --git a/sw/qa/core/data/html/pass/CVE-2005-4720-1.html b/sw/qa/core/data/html/pass/CVE-2005-4720-1.html
new file mode 100644
index 0000000000..4d2275dc25
--- /dev/null
+++ b/sw/qa/core/data/html/pass/CVE-2005-4720-1.html
@@ -0,0 +1,2 @@
+u”þo
+=‰JÃ9ŒÕhVØý£*MxÓ \ No newline at end of file
diff --git a/sw/qa/core/data/html/pass/EDB-14503-1.html b/sw/qa/core/data/html/pass/EDB-14503-1.html
new file mode 100644
index 0000000000..e4de15a9aa
--- /dev/null
+++ b/sw/qa/core/data/html/pass/EDB-14503-1.html
Binary files differ
diff --git a/sw/qa/core/data/html/pass/EDB-35279-1.html b/sw/qa/core/data/html/pass/EDB-35279-1.html
new file mode 100644
index 0000000000..77e476a858
--- /dev/null
+++ b/sw/qa/core/data/html/pass/EDB-35279-1.html
Binary files differ
diff --git a/sw/qa/core/data/html/pass/fdo65932.html b/sw/qa/core/data/html/pass/fdo65932.html
new file mode 100644
index 0000000000..d17936dd12
--- /dev/null
+++ b/sw/qa/core/data/html/pass/fdo65932.html
@@ -0,0 +1,45 @@
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
+ <body class="en file-preview-body shmodel-body deferred-resources pdf-preview-pdf-embedded">
+ <div id="outer-frame">
+ <div id="page-content">
+ <div class="nav-header">
+
+
+ <div class="buttons">
+ <a id="create-an-account-button" href="/register?signup_tag=shmodel" target="_blank" class="freshbutton-lightblue">Sign up for Dropbox</a>
+ </div>
+ </div>
+ <div style="display: none;" id="c2d-modal">
+ <div id="create-account-content">
+ <div>
+ <form novalidate="novalidate" id="c2d-register-form" method="post">
+ <input type="hidden" name="signup_tag" value="copy_to_dropbox" />
+ <input type="hidden" name="dl_redir" value="1" />
+ </form>
+ </div>
+ </div>
+ <div style="display:none;" id="login-account-content">
+ <div style="display: none;" id="c2d-twofactor-login">
+ <form novalidate="novalidate" id="c2d-twofactor-login-form" method="post">
+ <div id="c2d-twofactor-error" class="error-message"></div>
+ <div class="sick-input">
+ <label for="email">6-digit code</label>
+ <input autocomplete="off" type="text" id="c2d-twofactor-code" name="twofactor_code" tabindex="13" />
+ </div>
+ <input name="twofactor_login_submit" value="Submit code" class="freshbutton-blue" type="submit" id="twofactor_login_submit" tabindex="15" />
+ <p class="resend-code">
+ <a id="c2d-resend-link">Didn't receive one?</a>
+ </p>
+ </form>
+ </div>
+ </div>
+ </div>
+ <noscript>
+ <p class="center">The Dropbox website requires JavaScript.</p>
+ </noscript>
+ </div>
+ <div style="position: absolute; top: 0; left: 0; font-family: Courier" id="ieconsole"></div>
+ <div style="position:absolute; top:-10000px;width:0px; height:0px; left: 0;" id="FB_HiddenContainer"></div>
+ <div style="display:none;" id="notice-container" class="clearfix"></div>
+ </body>
+</html>
diff --git a/sw/qa/core/data/html/pass/fdo87601-1.html b/sw/qa/core/data/html/pass/fdo87601-1.html
new file mode 100644
index 0000000000..b33f11c1b0
--- /dev/null
+++ b/sw/qa/core/data/html/pass/fdo87601-1.html
@@ -0,0 +1,100 @@
+
+ <html xmlns:v="urn:schemas-microsoft-com:vml"
+ xmlns:o="urn:schemas-microsoft-com:office:office"
+ xmlns:w="urn:schemas-microsoft-com:office:word"
+ xmlns:m="http://schemas.microsoft.com/office/2006/01/omml"
+ xmlns="http://www.w3.org/TR/REC-html40">
+ <head>
+ <meta http-equiv=Content-Type content="text/html; charset=utf-8">
+ <style>
+ v\:* {behavior:url(#default#VML);}
+ o\:* {behavior:url(#default#VML);}
+ w\:* {behavior:url(#default#VML);}
+ .shape {behavior:url(#default#VML);}
+ </style>
+ <style>
+ @page
+ {
+ mso-page-orientation: portrait;
+ size:21cm 29.7cm; margin:1cm 1cm 1cm 1cm;
+ }
+ @page Section1 {
+ mso-header-margin:.5in;
+ mso-footer-margin:.5in;
+ mso-header: h1;
+ mso-footer: f1;
+ mso-bidi-font:Arial;
+ }
+ div.Section1 { page:Section1; }
+ table {
+ border-spacing: 0;
+ border-collapse: collapse;
+ font-size: 10.0pt;
+ }
+ td
+ {
+ border: 1px solid #000;
+ font-size:10.0pt;
+ font-family:Verdana,sans-serif;
+ margin-bottom:0.000cm;
+ vertical-align:top;
+ }
+ p.MsoFooter, li.MsoFooter, div.MsoFooter
+ {
+ margin:0in;
+ margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ tab-stops:center 3.0in right 6.0in;
+ font-size:10.0pt;
+ }
+ </style>
+ <xml>
+ <w:WordDocument>
+ <w:View>Print</w:View>
+ <w:Zoom>100</w:Zoom>
+ <w:DoNotOptimizeForBrowsertc2ms/>
+ </w:WordDocument>
+ </xml>
+ </head>
+ <body style="width:21.001cm;">
+ <div class="Section1">
+ <br>
+ <br>
+ <h1 style="mso-element:header;font-size:24.0pt;font-weight:normal;font-family:Verdana,sans-serif;color:#f00;" id="h1">
+ <p class="MsoHeader">
+ Your bug here
+ </p>
+ </h1>
+ <br>
+ <table width="700" cellpadding="6" style="border-collapse:collapse;">
+ <tr>
+ <td width="200" border="1" style="font-weight:bold;">x</td>
+ <td width="500" style="font-weight:bold;">x</td>
+ </tr>
+ <tr>
+ <td style="font-weight:bold;">x</td>
+ <td style="font-weight:bold;">x</td>
+ </tr>
+ <tr>
+ <td style="font-weight:bold;">x</td>
+ <td style="font-weight:bold;">x</td>
+ </tr>
+ <tr>
+ <td style="font-weight:bold;">x</td>
+ <td style="font-weight:bold;">x</td>
+ </tr>
+ </table>
+ <br>
+ <table width="700" cellpadding="6" style="border:1px solid #bbb; border-collapse:collapse;">
+<tr><td width="50" style="border-bottom:1px solid #bbb;"></td><td width="110" style="border:1px solid #fff; border-bottom:1px solid #bbb;"></td><td width="540" style="border:1px solid #fff;border-bottom:1px solid #bbb;"></td></tr>
+ <tr>
+ <td width="50" style="border:1px solid #bbb;vertical-align:top;text-align:center;font-weight:bold;color:#666;">x</td>
+ <td width="110" style="border:1px solid #bbb;vertical-align:top;text-align:center;font-weight:bold;color:#666;">x</td>
+ <td width="540" style="border:1px solid #bbb;vertical-align:top;text-align:center;font-weight:bold;color:#666;">x</td>
+ </tr>
+ <tr><td style="border:1px solid #bbb;vertical-align:top;" width="50">x</td><td style="border:1px solid #bbb;vertical-align:top;" width="110">x</td><td style="border:1px solid #bbb;vertical-align:top;" width="540">x</td></tr>
+<tr><td style="border:1px solid #bbb;vertical-align:top;" width="50">x</td><td style="border:1px solid #bbb;vertical-align:top;" width="110">x</td><td style="border:1px solid #bbb;vertical-align:top;" width="540">x</td></tr>
+<tr><td style="border:1px solid #bbb;vertical-align:top;" width="50">x</td><td style="border:1px solid #bbb;vertical-align:top;" width="110">x</td><td style="border:1px solid #bbb;vertical-align:top;" width="540">x</td></tr>
+</table> </div>
+ </body>
+ </html>
diff --git a/sw/qa/core/data/html/pass/kde141510-1.html b/sw/qa/core/data/html/pass/kde141510-1.html
new file mode 100644
index 0000000000..a6aff52d81
--- /dev/null
+++ b/sw/qa/core/data/html/pass/kde141510-1.html
@@ -0,0 +1,744 @@
+<html><head>
+
+
+
+
+
+
+
+
+
+
+
+
+<title>Frontier Honda-New Vehicle Specials for Honda Accord, Civic, CR-V Dealership at Longmont, Colorado CO</title>
+<META NAME="description" CONTENT="New Vehicle Specials for Honda Accord, Honda Civic, Honda CR-V, Honda Element, Honda Fit, Honda Odyssey, Honda Pilot, Honda Ridgeline and Honda S2000 at Frontier Honda, Longmont, Colorado CO."><META NAME="keywords" CONTENT="new vehicle specials, honda, honda dealer, honda cars dealer, honda dealer longmont, honda dealer colorado, honda longmont co, honda dealership colorado, go honda, honda accord, honda civic, honda cr-v, honda element, honda fit, honda odyssey, honda pilot, honda ridgeline, honda s2000, coupe, sedan, hybrid, honda civic, price, certified, online finance, cost, pricing, wholesale, denver, fort collins, greeley, loveland, lyons, niwot, erie, dacono, mead, berthoud, johnstown, milliken, gilcrest, platteville, fort lupton, brighton, lafayette, louisville, frontier honda, longmont, colorado, co"><meta name="distribution" content="Global"> <meta name="email" content="support@izmocars.com"> <meta name="author" content="IZMOCARS"> <meta name="copyright" content="Copyright Frontier Honda ?? 2006"> <meta name="language" content="en"> <meta name="classification" content="automotive"> <meta name="rating" content="General">
+<script src="../scripts/commonscript.js"></script>
+<link href="../styles/mainstyle.css" rel="stylesheet" type="text/css">
+</head>
+<script>
+function OnlineSpecialObject(argOnlineSpecialId,argMakeYear,argMake,argModel,argImageFileName,argPrice,argStockNumber,argInterestRate,argDescription,argSpecialPix)
+{
+var OnlineSpecialId = argOnlineSpecialId ;
+var MakeYear = argMakeYear ;
+var Make = argMake ;
+var Model = argModel ;
+var ImageFileName = argImageFileName ;
+var Price = argPrice ;
+var StockNumber = argStockNumber ;
+var InterestRate = argInterestRate ;
+var Description = argDescription ;
+var SpecialPix = argSpecialPix ;
+this.getOnlineSpecialId = getOnlineSpecialId ;
+this.getMakeYear = getMakeYear ;
+this.getMake = getMake ;
+this.getModel = getModel ;
+this.getImageFileName = getImageFileName ;
+this.getPrice = getPrice ;
+this.getStockNumber = getStockNumber ;
+this.getInterestRate = getInterestRate ;
+this.getDescription = getDescription ;
+this.getSpecialPix = getSpecialPix ;
+function getOnlineSpecialId()
+{
+return OnlineSpecialId;
+}
+function getMakeYear()
+{
+return MakeYear;
+}
+function getMake()
+{
+return Make;
+}
+function getModel()
+{
+return Model;
+}
+function getImageFileName()
+{
+return ImageFileName;
+}
+function getPrice()
+{
+return Price;
+}
+function getStockNumber()
+{
+return StockNumber;
+}
+function getInterestRate()
+{
+return InterestRate;
+}
+function getDescription()
+{
+return Description;
+}
+function getSpecialPix()
+{
+return SpecialPix;
+}
+}
+ function OnlineSpecialObjectWithTrim(argOnlineSpecialId, argMakeYear, argMake, argModel, argImageFileName, argPrice, argStockNumber, argInterestRate, argDescription, argSpecialPix, argTrim)
+{
+var OnlineSpecialId = argOnlineSpecialId ;
+var MakeYear = argMakeYear ;
+var Make = argMake ;
+var Model = argModel ;
+var ImageFileName = argImageFileName ;
+var Price = argPrice ;
+var StockNumber = argStockNumber ;
+var InterestRate = argInterestRate ;
+var Description = argDescription ;
+var SpecialPix = argSpecialPix ;
+var Trim = argTrim;
+this.getOnlineSpecialId = getOnlineSpecialId ;
+this.getMakeYear = getMakeYear ;
+this.getMake = getMake ;
+this.getModel = getModel ;
+this.getImageFileName = getImageFileName ;
+this.getPrice = getPrice ;
+this.getStockNumber = getStockNumber ;
+this.getInterestRate = getInterestRate ;
+this.getDescription = getDescription ;
+this.getSpecialPix = getSpecialPix ;
+this.getTrim = getTrim;
+function getOnlineSpecialId()
+{
+return OnlineSpecialId;
+}
+function getMakeYear()
+{
+return MakeYear;
+}
+function getMake()
+{
+return Make;
+}
+function getModel()
+{
+return Model;
+}
+function getImageFileName()
+{
+return ImageFileName;
+}
+function getPrice()
+{
+return Price;
+}
+function getStockNumber()
+{
+return StockNumber;
+}
+function getInterestRate()
+{
+return InterestRate;
+}
+function getDescription()
+{
+return Description;
+}
+function getSpecialPix()
+{
+return SpecialPix;
+}
+function getTrim()
+{
+return Trim;
+}
+}
+
+arrOnlineSpecial = new Array();
+
+arrOnlineSpecialWithTrim = new Array();
+
+var DataFound =0;
+arrOnlineSpecial[1] = new OnlineSpecialObject(0,'','', '', '', '','','','','');
+arrOnlineSpecialWithTrim[1] = new OnlineSpecialObjectWithTrim(0,'','', '', '', '','','','','','');
+arrOnlineSpecial[2] = new OnlineSpecialObject(0,'','', '', '', '','','','','');
+arrOnlineSpecialWithTrim[2] = new OnlineSpecialObjectWithTrim(0,'','', '', '', '','','','','','');
+arrOnlineSpecial[3] = new OnlineSpecialObject(0,'','', '', '', '','','','','');
+arrOnlineSpecialWithTrim[3] = new OnlineSpecialObjectWithTrim(0,'','', '', '', '','','','','','');
+arrOnlineSpecial[4] = new OnlineSpecialObject(0,'','', '', '', '','','','','');
+arrOnlineSpecialWithTrim[4] = new OnlineSpecialObjectWithTrim(0,'','', '', '', '','','','','','');
+
+ var PreviousPageExist =true;
+
+ var NextPageExist =false;
+
+ var PreviousPageNo =0;
+
+ var NextPageNo =0;
+
+
+</script>
+<body onLoad="MM_preloadImages('/images/menu/new_cars_mo.jpg','/images/menu/pre_owned_mo.jpg','/images/menu/research_mo.jpg','/images/menu/online_sp_mo.jpg','/images/menu/parts_service_mo.jpg','/images/menu/finance_mo.jpg','/images/menu/about_us_mo.jpg','/images/menu/home_mo.jpg')">
+<table width="1000" border="0" align="left" cellpadding="0" cellspacing="0" class="outer">
+ <tr align="left" valign="top"> <td colspan="3" align="center" class="header">
+<script language="javascript1.1">
+function disfin()
+ {
+ ss.style.display="";
+ }
+ function disfin1()
+ {
+ ss.style.display="none";
+ }
+</script>
+
+<table width="1000" height="124" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td height="102"><img src="/images/header/innerpage.jpg" width="1000" height="102" border="0" usemap="#Map" ></td>
+ </tr>
+ <tr>
+ <td valign="top"><table border="0" align="center" cellpadding="0" cellspacing="0">
+ <tr align="left">
+ <td width="142" height="22"><a href="javascript:;" onMouseOver="MM_swapImage('newcarimg','','/images/menu/innerpage/get_a_quote_mo.jpg',1);MM_showHideLayers('newcars','','show','preownedcars','','hide','research','','hide','onlinespecials','','hide','partsservice','','hide','aboutus','','hide')" onMouseOut="MM_swapImgRestore();MM_showHideLayers('newcars','','hide','preownedcars','','hide','research','','hide','onlinespecials','','hide','aboutus','','hide','partsservice','','hide')"><img src="/images/menu/innerpage/get_a_quote.jpg" name="newcarimg" width="142" height="22" border="0" id="newcarimg"></a></td>
+ <td width="200"><a href="javascript:;" onMouseOver="MM_swapImage('preownedimg','','/images/menu/innerpage/search_our_inventory_mo.jpg',1);MM_showHideLayers('newcars','','hide','preownedcars','','show','research','','hide','onlinespecials','','hide','partsservice','','hide','aboutus','','hide')" onMouseOut="MM_swapImgRestore();MM_showHideLayers('newcars','','hide','preownedcars','','hide','research','','hide','onlinespecials','','hide','aboutus','','hide','partsservice','','hide')"><img src="/images/menu/innerpage/search_our_inventory.jpg" name="preownedimg" width="200" height="22" border="0" id="preownedimg"></a></td>
+ <td width="160"><a href="javascript:;" onMouseOver="MM_swapImage('partsserviceimg','','/images/menu/innerpage/service_parts_mo.jpg',1);MM_showHideLayers('newcars','','hide','preownedcars','','hide','research','','hide','onlinespecials','','hide','partsservice','','show','aboutus','','hide')" onMouseOut="MM_swapImgRestore();MM_showHideLayers('newcars','','hide','preownedcars','','hide','research','','hide','onlinespecials','','hide','aboutus','','hide','partsservice','','hide')"><img src="/images/menu/innerpage/service_parts.jpg" name="partsserviceimg" width="160" height="22" border="0" id="partsserviceimg"></a></td>
+ <td width="110"><a href="javascript:;" onMouseOver="MM_swapImage('onlinespecialsimg','','/images/menu/innerpage/specials_mo.jpg',1);MM_showHideLayers('newcars','','hide','preownedcars','','hide','research','','hide','onlinespecials','','show','partsservice','','hide','aboutus','','hide')" onMouseOut="MM_swapImgRestore();MM_showHideLayers('newcars','','hide','preownedcars','','hide','research','','hide','onlinespecials','','hide','aboutus','','hide','partsservice','','hide')"><img src="/images/menu/innerpage/specials.jpg" name="onlinespecialsimg" width="110" height="22" border="0" id="onlinespecialsimg"></a></td>
+ <td width="120"><a href="javascript:;" onMouseOver="MM_swapImage('researchimg','','/images/menu/innerpage/research_mo.jpg',1);MM_showHideLayers('newcars','','hide','preownedcars','','hide','research','','show','onlinespecials','','hide','partsservice','','hide','aboutus','','hide')" onMouseOut="MM_swapImgRestore();MM_showHideLayers('newcars','','hide','preownedcars','','hide','research','','hide','onlinespecials','','hide','aboutus','','hide','partsservice','','hide')"><img src="/images/menu/innerpage/research.jpg" name="researchimg" width="120" height="22" border="0" id="researchimg"></a></td>
+ <td width="119"><a href="javascript:;" onMouseOver="MM_swapImage('aboutusimg','','/images/menu/innerpage/about_us_mo.jpg',1);MM_showHideLayers('newcars','','hide','preownedcars','','hide','research','','hide','onlinespecials','','hide','partsservice','','hide','aboutus','','show')" onMouseOut="MM_swapImgRestore();MM_showHideLayers('newcars','','hide','preownedcars','','hide','research','','hide','onlinespecials','','hide','aboutus','','hide','partsservice','','hide')"><img src="/images/menu/innerpage/about_us.jpg" name="aboutusimg" width="119" height="22" border="0" id="aboutusimg"></a></td>
+ <td width="149"><a href="/index.jsp" onMouseOver="MM_swapImage('homeimg','','/images/menu/innerpage/home_mo.jpg',1);MM_showHideLayers('newcars','','hide','preownedcars','','hide','research','','hide','onlinespecials','','hide','partsservice','','hide','aboutus','','hide')" onMouseOut="MM_swapImgRestore();MM_showHideLayers('newcars','','hide','preownedcars','','hide','research','','hide','onlinespecials','','hide','aboutus','','hide','partsservice','','hide')"><img src="/images/menu/innerpage/home.jpg" alt="Home" name="homeimg" width="149" height="22" border="0" id="homeimg"></a></td>
+ </tr>
+ </table></td>
+ </tr>
+</table>
+<div id="newcars" style="position:absolute; width:180px; height:45px; z-index:1; background-color:#8d8d8d; visibility: hidden; top: 124px; left:0px;"onMouseOver="MM_swapImage('newcarimg','','/images/menu/innerpage/get_a_quote_mo.jpg',1);MM_showHideLayers('newcars','','show','preownedcars','','hide','research','','hide','onlinespecials','','hide','aboutus','','hide','partsservice','','hide')" onMouseOut="MM_swapImgRestore();MM_showHideLayers('newcars','','hide','preownedcars','','hide','research','','hide','onlinespecials','','hide','aboutus','','hide','partsservice','','hide')">
+ <table width="100%" height="15" border="0" cellpadding="0" cellspacing="1">
+ <tr>
+ <td align="left" valign="middle" onMouseOut="disfin1();" onMouseOver="disfin1();"><a href="/newvehicles/selectamodel.jsp?menu=quote" class="block">Select a Model</a></td>
+ </tr>
+ <tr>
+ <td align="left" valign="middle" onMouseOut="disfin1();" onMouseOver="disfin1();"><a href="/newvehicles/quickquote.jsp" class="block">Quick Quote</a></td>
+ </tr>
+ <tr>
+ <td align="left" valign="middle" id="td1" ><a name="a1" href="#" class="blocknew" onMouseOver="disfin();" >Finance &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img src="/images/menu/arrow.gif" border="0" width="7" height="4"></a>
+ </tr>
+
+ </table>
+
+ <table width="100%" border="0" cellspacing="0" cellpadding="0" id="ss" style="padding-left:20px; display:none; border:1px solid #b8b8b8" onMouseOver="this.style.display='';a1.className='blocknew1'" onMouseOut="this.style.display='none';a1.className='blocknew'">
+ <tr bgcolor="#ffffff" height="1" >
+ <td align="left" valign="middle" >
+ <ul type="disc" style="background-color:#ffffff; margin-top:2px; margin-left:5px; margin-bottom:2px; ">
+ <li class="block" ><a href="/admin/leadmail/AutoPostForFinance.jsp?baseURL1=http://www.frontierhonda.com&fintype=FINANCE_INDIVIDUAL" class="hai">Finance Application</a></li>
+ <li class="block" ><a href="/admin/leadmail/AutoPostForFinance.jsp?baseURL1=http://www.frontierhonda.com&fintype=FINANCE_JOINT" class="hai">Joint Finance Application</a></li>
+ <!-- <li class="block" ><a href="/onlinespecials/onlinefinance.jsp?menu=onlinequote" class="hai" >Finance Specials</a></li> -->
+ <li class="block" ><a href="/loanleasecalc.jsp" class="hai">Payment Calculator</a></li>
+ </ul>
+ </td>
+ </tr>
+ </table>
+
+</div>
+<div id="preownedcars" style="position:absolute; width:150px; height:45px; z-index:1; background-color:#8d8d8d; visibility: hidden; top:124px; left:144px;"onMouseOver="MM_swapImage('preownedimg','','/images/menu/innerpage/search_our_inventory_mo.jpg',1);MM_showHideLayers('newcars','','hide','preownedcars','','show','research','','hide','onlinespecials','','hide','aboutus','','hide','partsservice','','hide')" onMouseOut="MM_swapImgRestore();MM_showHideLayers('newcars','','hide','preownedcars','','hide','research','','hide','onlinespecials','','hide','aboutus','','hide','partsservice','','hide')">
+ <table width="100%" height="15" border="0" cellpadding="0" cellspacing="1">
+<!-- <tr>
+ <td align="left" valign="middle"><a href="/research/tradeinappraisal.jsp?menu=pre" class="block">Trade-in Value Appraisal</a></td>
+ </tr> -->
+ <tr>
+ <td align="left" valign="middle"><a href="/newvehicles/selectamodel.jsp?menu=invent" class="block" >New Vehicles</a></td>
+ </tr>
+ <tr>
+ <td align="left" valign="middle"><a onClick="return thirdParty('www.getauto.com');" href="/templates/comingsoon1.jsp" class="block">Certified Pre-Owned</a></td>
+ </tr>
+ <tr>
+ <td align="left" valign="middle"><a onClick="return thirdParty('www.getauto.com');" href="/inventory/preownedcarsearch.jsp" class="block" >Other Pre-Owned</a></td>
+ </tr>
+ </table>
+</div>
+<div id="partsservice" style="position:absolute; width:165px; height:45px; z-index:1; background-color:#8d8d8d; visibility: hidden; top:124px; left: 343px;"onMouseOver="MM_swapImage('partsserviceimg','','/images/menu/innerpage/service_parts_mo.jpg',1);MM_showHideLayers('newcars','','hide','preownedcars','','hide','research','','hide','onlinespecials','','hide','aboutus','','hide','partsservice','','show')" onMouseOut="MM_swapImgRestore();MM_showHideLayers('newcars','','hide','preownedcars','','hide','research','','hide','onlinespecials','','hide','aboutus','','hide','partsservice','','hide')">
+ <table width="100%" height="15" border="0" cellpadding="0" cellspacing="1">
+ <tr>
+ <td align="left" valign="middle"><a href="/partsservice/serviceappointment.jsp" class="block">Service Appointment</a></td>
+ </tr>
+ <tr>
+ <td align="left" valign="middle"><a href="/partsservice/orderparts.jsp" class="block">Order Parts</a></td>
+ </tr>
+ <tr>
+ <td align="left" valign="middle"><a href="/partsservice/printcoupon.jsp" class="block">Parts/Service Coupons</a></td>
+ </tr>
+
+ </table>
+</div>
+<div id="onlinespecials" style="position:absolute; width:150px; height:45px; z-index:1; background-color:#8d8d8d; visibility: hidden; left:503px; top:124px;"onMouseOver="MM_swapImage('onlinespecialsimg','','/images/menu/innerpage/specials_mo.jpg',1);MM_showHideLayers('newcars','','hide','preownedcars','','hide','research','','hide','onlinespecials','','show','aboutus','','hide','partsservice','','hide')" onMouseOut="MM_swapImgRestore();MM_showHideLayers('newcars','','hide','preownedcars','','hide','research','','hide','onlinespecials','','hide','aboutus','','hide','partsservice','','hide')">
+ <table width="100%" height="15" border="0" cellpadding="0" cellspacing="1">
+ <tr>
+ <td width="24%" align="left" valign="middle"><a href="/onlinespecials/onlinenewcar.jsp" class="block">New Vehicle Specials</a></td>
+ </tr>
+ <tr>
+ <td align="left" valign="middle"><a href="/onlinespecials/onlineusedcar.jsp" class="block">Pre-Owned Specials</a></td>
+ </tr>
+ <tr>
+ <td align="left" valign="middle"><a href="/onlinespecials/onlinefinance.jsp?menu=special" class="block">Finance Specials</a></td>
+ </tr>
+ <tr>
+ <td align="left" valign="middle"><a href="/onlinespecials/weekendspecials.jsp" class="block">Weekend Specials</a></td>
+ </tr>
+
+ </table>
+</div>
+<div id="research" style="position:absolute; width:170px; height:45px; z-index:2; background-color:#8d8d8d; visibility: hidden; top:124px; left:614px;"onMouseOver="MM_swapImage('researchimg','','/images/menu/innerpage/research_mo.jpg',1);MM_showHideLayers('newcars','','hide','preownedcars','','hide','research','','show','onlinespecials','','hide','aboutus','','hide','partsservice','','hide')" onMouseOut="MM_swapImgRestore();MM_showHideLayers('newcars','','hide','preownedcars','','hide','research','','hide','onlinespecials','','hide','aboutus','','hide','partsservice','','hide')">
+ <table width="100%" height="15" border="0" cellpadding="0" cellspacing="1">
+ <tr>
+ <td align="left" valign="middle"><a href="/research/tradeinappraisal.jsp" class="block">Trade-in Value</a></td>
+ </tr>
+ <tr>
+ <td align="left" valign="middle" width="100%" height="15" ><a href="/newvehicles/comparecar.jsp" class="block" >Compare Vehicle</a></td>
+ </tr>
+ <tr>
+ <td align="left" valign="middle" width="100%" height="15" ><a href="/research/virtualbrochure.jsp" class="block" >Virtual Brochure</a></td>
+ </tr>
+ </table>
+</div>
+
+<div id="aboutus" style="position:absolute; width:156px; height:60px; z-index:1; background-color:#8d8d8d; visibility: hidden; left: 732px; top:124px;"onMouseOver="MM_swapImage('aboutusimg','','/images/menu/innerpage/about_us_mo.jpg',1);MM_showHideLayers('newcars','','hide','preownedcars','','hide','research','','hide','onlinespecials','','hide','aboutus','','show','partsservice','','hide')" onMouseOut="MM_swapImgRestore();MM_showHideLayers('newcars','','hide','preownedcars','','hide','research','','hide','onlinespecials','','hide','aboutus','','hide','partsservice','','hide')">
+ <table width="100%" height="15" border="0" cellpadding="0" cellspacing="1">
+ <tr>
+ <td align="left" valign="middle"><a href="/aboutus/aboutus.jsp" class="block">About Us</a></td>
+ </tr>
+ <tr>
+ <td align="left" valign="middle"><a href="/aboutus/contactus.jsp" class="block">Contact Us</a></td>
+ </tr>
+ <tr>
+ <td><a href="/aboutus/meetstaff.jsp" class="block">Meet the Staff</a></td>
+ </tr>
+ <tr>
+ <td align="left" valign="middle"><a href="/aboutus/careers.jsp" class="block">Careers</a></td>
+ </tr>
+ <tr>
+ <td align="left" valign="middle"><a href="/aboutus/hoursanddirections.jsp" class="block" >Hours &amp; Directions</a></td>
+ </tr>
+ <tr>
+ <td align="left" valign="middle"><a href="/aboutus/frontier_honda_colorado.jsp" class="block" >Frontier Honda in Your Vicinity</a></td>
+ </tr>
+ </table>
+</div>
+
+
+<map name="Map">
+ <area shape="rect" coords="34,27,422,78" href="/index.jsp" alt="Longmont's Honda dealership - Frontier Honda dealer at 710 South Main Street Longmont, Colorado (CO) 80501.">
+ <area shape="rect" coords="851,4,999,96" alt="Frontier Honda - Colorado Honda dealer offering new and used cars including Accord Coupe, Accord Sedan, Accord Hybrid, Civic Coupe, Civic Hybrid, Civic Sedan, Civic Si, Civic Si Sedan, CR-V, Element, Fit,Odyssey, Pilot, Ridgeline & S2000.">
+</map>
+</td> </tr>
+ <tr align="left" valign="top">
+ <td width="135" align="center" class="subheader"><img src="../images/subheader/online_specials.jpg" alt="Specials" width="134" height="152"></td>
+ <td width="716" align="center" class="form"><table width="100%" border="0" cellspacing="0" cellpadding="0" class="form">
+ <tr>
+ <td width="3" align="left" valign="top" ><img src="../images/table_layout/left_top.jpg" width="4" height="4" ></td>
+ <td width="716" height="3"></td>
+ <td width="3" align="right" valign="top" ><img src="../images/table_layout/right_top.jpg" width="4" height="4"></td>
+ </tr>
+ <tr>
+ <td height="20" colspan="3" align="left" valign="top" class="pagetitle" style="padding-left:16;"><img src="../images/page-titles/new_veh_spcls.jpg" alt="New Vehicle Specials" width="167" height="27"></td>
+ </tr>
+ <tr align="left">
+ <td colspan="3" valign="top"><table align="center" width="700" border="0" cellspacing="0" cellpadding="0">
+ <!--if part begins here-->
+
+ <tr Id=DataToDisplay3 align="center" valign="middle">
+ <td height="30" colspan="9">Check out these great deals on selected New vehicles. For more info, click on the link below.</td>
+ </tr>
+
+
+ <tr Id=DataToDisplay align="center" valign="top">
+ <td valign="top" Id=DataBlock1 colspan="3"><div style="position:static; overflow:auto; width:95%; height:350px">
+ <table width="150" border="0" align="center" cellpadding="0" cellspacing="0">
+
+ <tr align="center">
+
+ <td valign="top"></td>
+ <td valign="top">&nbsp;</td>
+ <td valign="top">&nbsp;</td>
+ <td valign="top"><table width="196" height="356" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td width="2" height="2" align="left" valign="top"><img src="../images/onlinspecialoutline/left_top.jpg" width="2" height="2"></td>
+ <td background="../images/onlinspecialoutline/mid_strip.jpg"><img src="../images/misc/spacer.gif" width="1" height="1"></td>
+ <td width="2" height="2" align="right" valign="top"><img src="../images/onlinspecialoutline/right_top.jpg" width="2" height="2"></td>
+ </tr>
+ <tr>
+ <td background="../images/onlinspecialoutline/mid_strip.jpg"><img src="../images/misc/spacer.gif" width="1" height="1"></td>
+ <td align="left" valign="top" bgcolor="#FFFFFF">
+ <table width="196" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF">
+ <tr valign="middle">
+ <td height="56" colspan="2" align="center">
+
+ <label id=Year_2><b>2007</b></label>
+ <label id=Make_2><b>HONDA</b></label>
+ <label id=Model_2><b>Accord Sedan </b></label>
+ <label id=Trim_2><b>Value Package Manual </b></label></td>
+ </tr>
+ <tr>
+ <td width="97" height="15" align="left" valign="middle" style="padding-left:3px;">Price:</td>
+ <td rowspan="4" align="right" valign="middle" ><img src="../images/onlinspecialoutline/online_sp.jpg" width="123" height="65"></td>
+ </tr>
+ <tr>
+ <td height="15" align="left" valign="middle" style="padding-left:3px;">$ <strong>
+ <label id=Price_2><b>17545</b></label>
+ </strong></td>
+ </tr>
+ <tr>
+ <td width="97" height="15" align="left" valign="middle" style="padding-left:3px;">Stock No: </td>
+ </tr>
+ <tr>
+ <td height="15" align="left" valign="middle" style="padding-left:3px;"><label id=Stock_2><b>70232</b></label></td>
+ </tr>
+ <tr>
+ <td colspan="2" align="center" valign="top" >
+ <img src="http://www.izmoauto.com/newcaronlinespecial/2007/honda/CM5517EXW/desert_mist_metallic.jpg" width="220" height="140" onerror="this.src='../images/otherimages/img_not_avail.jpg'">
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" align="center" valign="top" >
+ <table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
+ <tr>
+ <td height="10" bgcolor="#ffffff" align="center" valign="middle">Model No#
+ <label id=TrimID_2><b>CM5517EXW</b></label></td>
+ </tr>
+ <tr>
+ <td align="center" valign="middle" ><div align="center" style="height:60; width:230; overflow:auto; border:2px solid #46A0F6">
+ <label id=Description_2>Super sale on All Accord`s models!
+
+Please call Sammy or Jesse Valdez at 303-772-2900 for more info. and special internet pricing.
+plus dealer & handling of $379 plus tax.
+(MSRP$19,175)</label>
+ </div></td>
+ </tr>
+ </table></td>
+ </tr>
+ <tr>
+ <td colspan="2" align="center" bgcolor="#46a0f6"> <a href="javascript: MM_openBrWindow('moreinfo.jsp?makeyear=2007&make=HONDA&trim=Value Package Manual&model=Accord Sedan&online_type=New Cars&stockno=70232&msrp=17545', 'Moreinfo', 'width=400,height=330,scrolling=no')" ><img src="../images/onlinspecialoutline/more_info.jpg" alt="More Info" name="Image301" width="193" height="42" border="0" id="more_info"></a> </td>
+ </tr>
+ </table></td>
+ <td background="../images/onlinspecialoutline/mid_strip.jpg"><img src="../images/misc/spacer.gif" width="1" height="1"></td>
+ </tr>
+ <tr>
+ <td width="2" height="2" align="left" valign="top"><img src="../images/onlinspecialoutline/left_botom.jpg" width="2" height="2"></td>
+ <td background="../images/onlinspecialoutline/mid_strip.jpg"><img src="../images/misc/spacer.gif" width="1" height="1"></td>
+ <td align="right" valign="top"width="2" height="2" ><img src="../images/onlinspecialoutline/right_bottom.jpg" width="2" height="2"></td>
+ </tr>
+ </table>
+ <br></td>
+ <td valign="top"></td>
+
+ <td valign="top"></td>
+ <td valign="top">&nbsp;</td>
+ <td valign="top">&nbsp;</td>
+ <td valign="top"><table width="196" height="356" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td width="2" height="2" align="left" valign="top"><img src="../images/onlinspecialoutline/left_top.jpg" width="2" height="2"></td>
+ <td background="../images/onlinspecialoutline/mid_strip.jpg"><img src="../images/misc/spacer.gif" width="1" height="1"></td>
+ <td width="2" height="2" align="right" valign="top"><img src="../images/onlinspecialoutline/right_top.jpg" width="2" height="2"></td>
+ </tr>
+ <tr>
+ <td background="../images/onlinspecialoutline/mid_strip.jpg"><img src="../images/misc/spacer.gif" width="1" height="1"></td>
+ <td align="left" valign="top" bgcolor="#FFFFFF">
+ <table width="196" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF">
+ <tr valign="middle">
+ <td height="56" colspan="2" align="center">
+
+ <label id=Year_2><b>2007</b></label>
+ <label id=Make_2><b>HONDA</b></label>
+ <label id=Model_2><b>Accord Sedan </b></label>
+ <label id=Trim_2><b>LX Automatic </b></label></td>
+ </tr>
+ <tr>
+ <td width="97" height="15" align="left" valign="middle" style="padding-left:3px;">Price:</td>
+ <td rowspan="4" align="right" valign="middle" ><img src="../images/onlinspecialoutline/online_sp.jpg" width="123" height="65"></td>
+ </tr>
+ <tr>
+ <td height="15" align="left" valign="middle" style="padding-left:3px;">$ <strong>
+ <label id=Price_2><b>19610</b></label>
+ </strong></td>
+ </tr>
+ <tr>
+ <td width="97" height="15" align="left" valign="middle" style="padding-left:3px;">Stock No: </td>
+ </tr>
+ <tr>
+ <td height="15" align="left" valign="middle" style="padding-left:3px;"><label id=Stock_2><b>70376</b></label></td>
+ </tr>
+ <tr>
+ <td colspan="2" align="center" valign="top" >
+ <img src="http://www.izmoauto.com/newcaronlinespecial/2007/honda/CM5647EW/royal_blue_pearl.jpg" width="220" height="140" onerror="this.src='../images/otherimages/img_not_avail.jpg'">
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" align="center" valign="top" >
+ <table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
+ <tr>
+ <td height="10" bgcolor="#ffffff" align="center" valign="middle">Model No#
+ <label id=TrimID_2><b>CM5647EW</b></label></td>
+ </tr>
+ <tr>
+ <td align="center" valign="middle" ><div align="center" style="height:60; width:230; overflow:auto; border:2px solid #46A0F6">
+ <label id=Description_2>Super sale on All Accord`s models!
+Please call Sammy or Jesse Valdez at 303-772-2900 for more info. and special internet pricing.
+plus dealer & handling of $379 plus tax.
+(MSRP $21,475)</label>
+ </div></td>
+ </tr>
+ </table></td>
+ </tr>
+ <tr>
+ <td colspan="2" align="center" bgcolor="#46a0f6"> <a href="javascript: MM_openBrWindow('moreinfo.jsp?makeyear=2007&make=HONDA&trim=LX Automatic&model=Accord Sedan&online_type=New Cars&stockno=70376&msrp=19610', 'Moreinfo', 'width=400,height=330,scrolling=no')" ><img src="../images/onlinspecialoutline/more_info.jpg" alt="More Info" name="Image301" width="193" height="42" border="0" id="more_info"></a> </td>
+ </tr>
+ </table></td>
+ <td background="../images/onlinspecialoutline/mid_strip.jpg"><img src="../images/misc/spacer.gif" width="1" height="1"></td>
+ </tr>
+ <tr>
+ <td width="2" height="2" align="left" valign="top"><img src="../images/onlinspecialoutline/left_botom.jpg" width="2" height="2"></td>
+ <td background="../images/onlinspecialoutline/mid_strip.jpg"><img src="../images/misc/spacer.gif" width="1" height="1"></td>
+ <td align="right" valign="top"width="2" height="2" ><img src="../images/onlinspecialoutline/right_bottom.jpg" width="2" height="2"></td>
+ </tr>
+ </table>
+ <br></td>
+ <td valign="top"></td>
+
+ </tr>
+
+ <tr align="center">
+
+ <td valign="top"></td>
+ <td valign="top">&nbsp;</td>
+ <td valign="top">&nbsp;</td>
+ <td valign="top"><table width="196" height="356" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td width="2" height="2" align="left" valign="top"><img src="../images/onlinspecialoutline/left_top.jpg" width="2" height="2"></td>
+ <td background="../images/onlinspecialoutline/mid_strip.jpg"><img src="../images/misc/spacer.gif" width="1" height="1"></td>
+ <td width="2" height="2" align="right" valign="top"><img src="../images/onlinspecialoutline/right_top.jpg" width="2" height="2"></td>
+ </tr>
+ <tr>
+ <td background="../images/onlinspecialoutline/mid_strip.jpg"><img src="../images/misc/spacer.gif" width="1" height="1"></td>
+ <td align="left" valign="top" bgcolor="#FFFFFF">
+ <table width="196" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF">
+ <tr valign="middle">
+ <td height="56" colspan="2" align="center">
+
+ <label id=Year_2><b>2007</b></label>
+ <label id=Make_2><b>HONDA</b></label>
+ <label id=Model_2><b>Accord Sedan </b></label>
+ <label id=Trim_2><b>Special Edition Automatic </b></label></td>
+ </tr>
+ <tr>
+ <td width="97" height="15" align="left" valign="middle" style="padding-left:3px;">Price:</td>
+ <td rowspan="4" align="right" valign="middle" ><img src="../images/onlinspecialoutline/online_sp.jpg" width="123" height="65"></td>
+ </tr>
+ <tr>
+ <td height="15" align="left" valign="middle" style="padding-left:3px;">$ <strong>
+ <label id=Price_2><b>20239</b></label>
+ </strong></td>
+ </tr>
+ <tr>
+ <td width="97" height="15" align="left" valign="middle" style="padding-left:3px;">Stock No: </td>
+ </tr>
+ <tr>
+ <td height="15" align="left" valign="middle" style="padding-left:3px;"><label id=Stock_2><b>70399</b></label></td>
+ </tr>
+ <tr>
+ <td colspan="2" align="center" valign="top" >
+ <img src="http://www.izmoauto.com/newcaronlinespecial/2007/honda/CM5637EW/alabaster_silver_metallic.jpg" width="220" height="140" onerror="this.src='../images/otherimages/img_not_avail.jpg'">
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" align="center" valign="top" >
+ <table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
+ <tr>
+ <td height="10" bgcolor="#ffffff" align="center" valign="middle">Model No#
+ <label id=TrimID_2><b>CM5637EW</b></label></td>
+ </tr>
+ <tr>
+ <td align="center" valign="middle" ><div align="center" style="height:60; width:230; overflow:auto; border:2px solid #46A0F6">
+ <label id=Description_2>Super sale on All Accord`s models!
+Please call Sammy or Jesse Valdez at 303-772-2900 for more info. and special internet pricing.
+plus dealer & handling of $379 plus tax. (MSRP $22,175)</label>
+ </div></td>
+ </tr>
+ </table></td>
+ </tr>
+ <tr>
+ <td colspan="2" align="center" bgcolor="#46a0f6"> <a href="javascript: MM_openBrWindow('moreinfo.jsp?makeyear=2007&make=HONDA&trim=Special Edition Automatic&model=Accord Sedan&online_type=New Cars&stockno=70399&msrp=20239', 'Moreinfo', 'width=400,height=330,scrolling=no')" ><img src="../images/onlinspecialoutline/more_info.jpg" alt="More Info" name="Image301" width="193" height="42" border="0" id="more_info"></a> </td>
+ </tr>
+ </table></td>
+ <td background="../images/onlinspecialoutline/mid_strip.jpg"><img src="../images/misc/spacer.gif" width="1" height="1"></td>
+ </tr>
+ <tr>
+ <td width="2" height="2" align="left" valign="top"><img src="../images/onlinspecialoutline/left_botom.jpg" width="2" height="2"></td>
+ <td background="../images/onlinspecialoutline/mid_strip.jpg"><img src="../images/misc/spacer.gif" width="1" height="1"></td>
+ <td align="right" valign="top"width="2" height="2" ><img src="../images/onlinspecialoutline/right_bottom.jpg" width="2" height="2"></td>
+ </tr>
+ </table>
+ <br></td>
+ <td valign="top"></td>
+
+ </tr>
+
+ </table>
+ </div></td>
+ </tr>
+
+
+ <tr id="Price">
+ <td height="20" valign="middle"><div align="justify">
+ <table width="80%" border="0" align="center" cellpadding="0" cellspacing="0">
+ <tr>
+ <td>Prices plus government fees and taxes, any finance charges, any dealer document preparation charge, and any emission testing charge.</td>
+ </tr>
+ </table>
+ </div></td>
+ </tr>
+
+ <!--if part ends here-->
+ <!--else part begins here-->
+
+ <!--else part ends here-->
+ </table></td>
+ </tr>
+ <tr>
+ <td width="3" valign="top" align="left" id="left-bot"><img src="../images/table_layout/left_bottom.jpg" width="4" height="4"></td>
+ <td height="3" ></td>
+ <td width="3" align="right" valign="bottom" id="right-bot"><img src="../images/table_layout/right_bottom.jpg" width="4" height="4"></td>
+ </tr>
+ </table></td>
+ <td width="139" align="center" class="banner"><table width="139" border="0" cellspacing="0" cellpadding="0">
+<tr>
+ <td width="139" align="left" valign="top"><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="139" height="447">
+ <param name="movie" value="../banner.swf">
+ <param name="wmode" value="transparent">
+ <param name="quality" value="high">
+ <embed src="../banner.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="139" height="450"></embed>
+ </object></td>
+ </tr>
+</table>
+</td>
+ </tr>
+ <tr align="left" valign="bottom">
+ <td colspan="3" align="center" class="address"><table width="1000" height="19" border="0" align="left" cellpadding="0" cellspacing="0" bgcolor="#000000">
+ <tr>
+ <td height="19" align="left" valign="middle" bgcolor="#000000" style="padding-left:12px; "><span class="address">710 South Main Street Longmont, CO 80501. &nbsp;Phone: (303) 772-2900 &nbsp;Fax: (303) 485-9092</strong> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.frontierhonda.com/sitemap.jsp" class="address">Site
+ Map</a>&nbsp;|&nbsp;<a href="#" class="address" onClick="MM_openBrWindow('https://secure.izmoauto.com/disclaimer/disclaimer.htm','disclaimer','scrollbars=no,width=520,height=430')">Disclaimer</a></span></td>
+ <td width="150" height="19" align="left" valign="top" bgcolor="#000000"><img src="/images/otherimages/powered_by.jpg" width="139" height="15"></td>
+ </tr>
+</table>
+<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+_uacct = "UA-1139600-1";
+urchinTracker();
+</script></td>
+ </tr>
+</table>
+</body>
+<script>
+ /*if(DataFound > 0)
+ {
+ var d1=document.getElementById('DataNotFound1');
+ d1.style.display='none';
+ var d1=document.getElementById('DataNotFound2');
+ d1.style.display='none';
+
+ if(PreviousPageExist == true)
+ {
+ var d1=document.getElementById('HrefForPreviousPage');
+ d1.href="onlinenewcar.jsp?currentPage="+PreviousPageNo;
+ var d1=document.getElementById('HrefForPreviousPage2');
+ d1.href="onlinenewcar.jsp?currentPage="+PreviousPageNo;
+ }
+ else
+ {
+ var d1=document.getElementById('NavigationPrevious_TD');
+ d1.style.display='none';
+ var d1=document.getElementById('NavigationPrevious_TD1');
+ d1.style.display='none';
+ }
+
+
+ if(NextPageExist == true)
+ {
+ var d1=document.getElementById('HrefForNextPage');
+ d1.href="onlinenewcar.jsp?currentPage="+NextPageNo;
+ var d1=document.getElementById('HrefForNextPage2');
+ d1.href="onlinenewcar.jsp?currentPage="+NextPageNo;
+ }
+ else
+ {
+ var d1=document.getElementById('NavigationNext_TD');
+ d1.style.display='none';
+ var d1=document.getElementById('NavigationNext_TD1');
+ d1.style.display='none';
+ }
+ var i=0;
+ for(i=1; i <= 4; i++)
+ {
+ d1=document.getElementById('Image_'+i);
+ //d1.src=arrOnlineSpecial[i].getImageFileName();
+ var imagePath = arrOnlineSpecial[i].getImageFileName();
+
+ if(imagePath.indexOf("http://") < 0)
+ {
+ imagePath = "../admin/onlinespecials/clientmedia/"+imagePath;
+ }
+ d1.src = imagePath;
+
+ d1=document.getElementById('Year_'+i);
+ d1.innerHTML = "<b>"+ arrOnlineSpecial[i].getMakeYear() +"</b>";
+
+ d1=document.getElementById('Make_'+i);
+ d1.innerHTML = "<b>"+ arrOnlineSpecial[i].getMake()+"</b>";
+
+ d1=document.getElementById('Model_'+i);
+ var tempModel = arrOnlineSpecial[i].getModel();
+ var trimid = '';
+ if(tempModel != null && tempModel.indexOf("|") >= 0)
+ {
+ trimid = tempModel.substring(tempModel.indexOf("|")+1);
+ tempModel = tempModel.substring(0, tempModel.indexOf("|"));
+ }
+ d1.innerHTML = "<b>"+tempModel+"</b>";
+
+ d1=document.getElementById('TrimID_'+i);
+ d1.innerHTML = "<b>"+trimid+"</b>";
+
+ d1=document.getElementById('Trim_'+i);
+ d1.innerHTML = "<b>"+arrOnlineSpecialWithTrim[i].getTrim()+"</b>";
+
+ d1=document.getElementById('Price_'+i);
+ d1.innerHTML = "<b>"+ arrOnlineSpecial[i].getPrice() +"</b>";
+
+ d1=document.getElementById('Stock_'+i);
+ d1.innerHTML = "<b>"+ arrOnlineSpecial[i].getStockNumber() +"</b>";
+
+ d1=document.getElementById('Description_'+i);
+ d1.innerHTML = "<div style='height:50px; width:100%; border:1px solid; border-color:#cccccc; overflow:auto;'>"+arrOnlineSpecial[i].getDescription()+"</div>";
+
+ var d1=document.getElementById('HrefMoreInfoPage_'+i);
+ d1.href="javascript:MM_openBrWindow('moreinfo.jsp?makeyear="+arrOnlineSpecial[i].getMakeYear()+"&model="+arrOnlineSpecial[i].getModel()+"&make="+arrOnlineSpecial[i].getMake()+"&trim="+arrOnlineSpecialWithTrim[i].getTrim()+"&online_type=New Cars&stockno="+arrOnlineSpecial[i].getStockNumber()+"&msrp="+arrOnlineSpecial[i].getPrice()+"','moreinfo','scrollbars=No,width=400,height=350, top=241, left=142')";
+
+ if(i > DataFound)
+ {
+ d1=document.getElementById('DataBlock'+i);
+ d1.style.display='none';
+
+ }
+
+ }
+
+
+ }
+ else
+ {
+ var d1=document.getElementById('DataToDisplay');
+ d1.style.display='none';
+
+ var d1=document.getElementById('Navigation');
+ d1.style.display='none';
+
+ var d1=document.getElementById('DataToDisplay3');
+ d1.style.display='none';
+
+
+ }*/
+</script>
+</html>
diff --git a/sw/qa/core/data/html/pass/ofz-msan-1.html b/sw/qa/core/data/html/pass/ofz-msan-1.html
new file mode 100644
index 0000000000..5237a3d1dd
--- /dev/null
+++ b/sw/qa/core/data/html/pass/ofz-msan-1.html
Binary files differ
diff --git a/sw/qa/core/data/html/pass/ofz20455.html b/sw/qa/core/data/html/pass/ofz20455.html
new file mode 100644
index 0000000000..6e5ca0aa7e
--- /dev/null
+++ b/sw/qa/core/data/html/pass/ofz20455.html
Binary files differ
diff --git a/sw/qa/core/data/html/pass/ofz39850-1.html b/sw/qa/core/data/html/pass/ofz39850-1.html
new file mode 100644
index 0000000000..ebe25683ce
--- /dev/null
+++ b/sw/qa/core/data/html/pass/ofz39850-1.html
Binary files differ
diff --git a/sw/qa/core/data/html/pass/ofz40593-1.html b/sw/qa/core/data/html/pass/ofz40593-1.html
new file mode 100644
index 0000000000..43510d5d00
--- /dev/null
+++ b/sw/qa/core/data/html/pass/ofz40593-1.html
Binary files differ
diff --git a/sw/qa/core/data/html/pass/ofz40766-1.html b/sw/qa/core/data/html/pass/ofz40766-1.html
new file mode 100644
index 0000000000..c0dff9de70
--- /dev/null
+++ b/sw/qa/core/data/html/pass/ofz40766-1.html
Binary files differ
diff --git a/sw/qa/core/data/html/pass/ofz43310-1.html b/sw/qa/core/data/html/pass/ofz43310-1.html
new file mode 100644
index 0000000000..e84d1cccf5
--- /dev/null
+++ b/sw/qa/core/data/html/pass/ofz43310-1.html
Binary files differ
diff --git a/sw/qa/core/data/html/pass/ofz5007-1.html b/sw/qa/core/data/html/pass/ofz5007-1.html
new file mode 100644
index 0000000000..f427c4c606
--- /dev/null
+++ b/sw/qa/core/data/html/pass/ofz5007-1.html
@@ -0,0 +1 @@
+<table> <caption> <table><td></td><caption><table align="right"><td><MARQUEE> \ No newline at end of file
diff --git a/sw/qa/core/data/html/pass/ofz5353-1.html b/sw/qa/core/data/html/pass/ofz5353-1.html
new file mode 100644
index 0000000000..25cff17de5
--- /dev/null
+++ b/sw/qa/core/data/html/pass/ofz5353-1.html
@@ -0,0 +1 @@
+ <table><td></tr> <big> <td>ÿ<table> <td></td><S STYLE= float:left;width:3 ><a STYLE="float:left; width:3 "> \ No newline at end of file
diff --git a/sw/qa/core/data/html/pass/ofz53680-1.html b/sw/qa/core/data/html/pass/ofz53680-1.html
new file mode 100644
index 0000000000..d7fbcb2ebb
--- /dev/null
+++ b/sw/qa/core/data/html/pass/ofz53680-1.html
Binary files differ
diff --git a/sw/qa/core/data/html/pass/ofz5535-1.html b/sw/qa/core/data/html/pass/ofz5535-1.html
new file mode 100644
index 0000000000..5439e009b3
--- /dev/null
+++ b/sw/qa/core/data/html/pass/ofz5535-1.html
@@ -0,0 +1 @@
+<table><td SDVALSDNUM=;0;MrS)000000000000000000000000000000000000;> \ No newline at end of file
diff --git a/sw/qa/core/data/html/pass/ofz5855-1.html b/sw/qa/core/data/html/pass/ofz5855-1.html
new file mode 100644
index 0000000000..a24f6cff04
--- /dev/null
+++ b/sw/qa/core/data/html/pass/ofz5855-1.html
@@ -0,0 +1 @@
+<div title="header"><Table><td><table>ÿ<td></table><style>@page:first</style>
diff --git a/sw/qa/core/data/html/pass/ofz8255-1.html b/sw/qa/core/data/html/pass/ofz8255-1.html
new file mode 100644
index 0000000000..7bad71504e
--- /dev/null
+++ b/sw/qa/core/data/html/pass/ofz8255-1.html
@@ -0,0 +1 @@
+<MULTICOL GUTTER=4228 COLS=48346> \ No newline at end of file
diff --git a/sw/qa/core/data/html/pass/ofz9733-1.html b/sw/qa/core/data/html/pass/ofz9733-1.html
new file mode 100644
index 0000000000..3da9bdb808
--- /dev/null
+++ b/sw/qa/core/data/html/pass/ofz9733-1.html
@@ -0,0 +1 @@
+<div title="footer"><div>ÿ</ol></div><p ID=ÿ></div><div title="footer"> \ No newline at end of file
diff --git a/sw/qa/core/data/html/pass/tdf93971-1.html b/sw/qa/core/data/html/pass/tdf93971-1.html
new file mode 100644
index 0000000000..f516556dc8
--- /dev/null
+++ b/sw/qa/core/data/html/pass/tdf93971-1.html
@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<!-- saved from url=(0266)file:///home/yanpas/%D0%97%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8/%D0%A1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%83%20%D0%BC%D1%8B%D1%81%D0%B0%20%D0%A2%D0%B5%D0%BD%D0%B4%D1%80%D0%B0%20%E2%80%94%20%D0%92%D0%B8%D0%BA%D0%B8%D0%BF%D0%B5%D0%B4%D0%B8%D1%8F.html -->
+<html lang="ru" dir="ltr" class="client-js ve-available">
+<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-Сражение_у_мыÑа_Тендра skin-vector action-view">
+
+
+ <div id="content" class="mw-body" role="main">
+ <a id="top"></a>
+
+ <div id="siteNotice"><div id="centralNotice"></div><!-- CentralNotice --></div>
+ <div class="mw-indicators">
+</div>
+ <h1 id="firstHeading" class="firstHeading" lang="ru">Сражение у мыÑа Тендра</h1>
+ <div id="bodyContent" class="mw-body-content">
+
+ <div id="contentSub"></div>
+
+ <div id="mw-content-text" lang="ru" dir="ltr" class="mw-content-ltr">
+
+
+
+<p></p>
+<div id="toc" class="toc">
+<div id="toctitle">
+<h2>Содержание</h2>
+<span class="toctoggle">&nbsp;[<a href="https://ru.wikipedia.org/w/index.php?title=%D0%A1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83_%D0%BC%D1%8B%D1%81%D0%B0_%D0%A2%D0%B5%D0%BD%D0%B4%D1%80%D0%B0&printable=yes#" id="togglelink">убрать</a>]&nbsp;</span></div>
+<ul>
+<li class="toclevel-1 tocsection-1"><a href="https://ru.wikipedia.org/w/index.php?title=%D0%A1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83_%D0%BC%D1%8B%D1%81%D0%B0_%D0%A2%D0%B5%D0%BD%D0%B4%D1%80%D0%B0&printable=yes#.D0.9F.D1.80.D0.B5.D0.B4.D1.8B.D1.81.D1.82.D0.BE.D1.80.D0.B8.D1.8F"><span class="tocnumber">1</span> <span class="toctext">ПредыÑториÑ</span></a></li>
+<li class="toclevel-1 tocsection-2"><a href="https://ru.wikipedia.org/w/index.php?title=%D0%A1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83_%D0%BC%D1%8B%D1%81%D0%B0_%D0%A2%D0%B5%D0%BD%D0%B4%D1%80%D0%B0&printable=yes#28_.D0.B0.D0.B2.D0.B3.D1.83.D1.81.D1.82.D0.B0"><span class="tocnumber">2</span> <span class="toctext">28 авгуÑта</span></a></li>
+<li class="toclevel-1 tocsection-3"><a href="https://ru.wikipedia.org/w/index.php?title=%D0%A1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83_%D0%BC%D1%8B%D1%81%D0%B0_%D0%A2%D0%B5%D0%BD%D0%B4%D1%80%D0%B0&printable=yes#29_.D0.B0.D0.B2.D0.B3.D1.83.D1.81.D1.82.D0.B0"><span class="tocnumber">3</span> <span class="toctext">29 авгуÑта</span></a></li>
+<li class="toclevel-1 tocsection-4"><a href="https://ru.wikipedia.org/w/index.php?title=%D0%A1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83_%D0%BC%D1%8B%D1%81%D0%B0_%D0%A2%D0%B5%D0%BD%D0%B4%D1%80%D0%B0&printable=yes#.D0.98.D1.82.D0.BE.D0.B3"><span class="tocnumber">4</span> <span class="toctext">Итог</span></a></li>
+<li class="toclevel-1 tocsection-5"><a href="https://ru.wikipedia.org/w/index.php?title=%D0%A1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83_%D0%BC%D1%8B%D1%81%D0%B0_%D0%A2%D0%B5%D0%BD%D0%B4%D1%80%D0%B0&printable=yes#.D0.A1.D0.BC._.D1.82.D0.B0.D0.BA.D0.B6.D0.B5"><span class="tocnumber">5</span> <span class="toctext">См. также</span></a></li>
+<li class="toclevel-1 tocsection-6"><a href="https://ru.wikipedia.org/w/index.php?title=%D0%A1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83_%D0%BC%D1%8B%D1%81%D0%B0_%D0%A2%D0%B5%D0%BD%D0%B4%D1%80%D0%B0&printable=yes#.D0.9F.D1.80.D0.B8.D0.BC.D0.B5.D1.87.D0.B0.D0.BD.D0.B8.D1.8F"><span class="tocnumber">6</span> <span class="toctext">ПримечаниÑ</span></a></li>
+<li class="toclevel-1 tocsection-7"><a href="https://ru.wikipedia.org/w/index.php?title=%D0%A1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83_%D0%BC%D1%8B%D1%81%D0%B0_%D0%A2%D0%B5%D0%BD%D0%B4%D1%80%D0%B0&printable=yes#.D0.A1.D1.81.D1.8B.D0.BB.D0.BA.D0.B8"><span class="tocnumber">7</span> <span class="toctext">СÑылки</span></a></li>
+</ul>
+</div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</div>
+ <div class="visualClear"></div>
+ </div>
+ </div>
+
+
+
+
+
+
+
+</body></html> \ No newline at end of file
diff --git a/sw/qa/core/data/odt/fail/.gitignore b/sw/qa/core/data/odt/fail/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sw/qa/core/data/odt/fail/.gitignore
diff --git a/sw/qa/core/data/odt/fail/82fff64a-0a21-4b09-bbdc-2914a5a150f0.odt b/sw/qa/core/data/odt/fail/82fff64a-0a21-4b09-bbdc-2914a5a150f0.odt
new file mode 100644
index 0000000000..7d823df752
--- /dev/null
+++ b/sw/qa/core/data/odt/fail/82fff64a-0a21-4b09-bbdc-2914a5a150f0.odt
Binary files differ
diff --git a/sw/qa/core/data/odt/fail/c2dfc5bd-8366-40e7-b862-55e13fdc52dc.odt b/sw/qa/core/data/odt/fail/c2dfc5bd-8366-40e7-b862-55e13fdc52dc.odt
new file mode 100644
index 0000000000..7cafa8d5e1
--- /dev/null
+++ b/sw/qa/core/data/odt/fail/c2dfc5bd-8366-40e7-b862-55e13fdc52dc.odt
Binary files differ
diff --git a/sw/qa/core/data/odt/fail/forcepoint-dtor-1.odt b/sw/qa/core/data/odt/fail/forcepoint-dtor-1.odt
new file mode 100644
index 0000000000..6442200cde
--- /dev/null
+++ b/sw/qa/core/data/odt/fail/forcepoint-dtor-1.odt
Binary files differ
diff --git a/sw/qa/core/data/odt/fail/forcepoint-xstor-1.odt b/sw/qa/core/data/odt/fail/forcepoint-xstor-1.odt
new file mode 100644
index 0000000000..1844d7882b
--- /dev/null
+++ b/sw/qa/core/data/odt/fail/forcepoint-xstor-1.odt
Binary files differ
diff --git a/sw/qa/core/data/odt/fail/tdf102018.odt b/sw/qa/core/data/odt/fail/tdf102018.odt
new file mode 100644
index 0000000000..d804aec11d
--- /dev/null
+++ b/sw/qa/core/data/odt/fail/tdf102018.odt
Binary files differ
diff --git a/sw/qa/core/data/odt/fdo68983.odt b/sw/qa/core/data/odt/fdo68983.odt
new file mode 100644
index 0000000000..01df104407
--- /dev/null
+++ b/sw/qa/core/data/odt/fdo68983.odt
Binary files differ
diff --git a/sw/qa/core/data/odt/indeterminate/.gitignore b/sw/qa/core/data/odt/indeterminate/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sw/qa/core/data/odt/indeterminate/.gitignore
diff --git a/sw/qa/core/data/odt/pass/.gitignore b/sw/qa/core/data/odt/pass/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sw/qa/core/data/odt/pass/.gitignore
diff --git a/sw/qa/core/data/odt/pass/CVE-2012-4233-1.odt b/sw/qa/core/data/odt/pass/CVE-2012-4233-1.odt
new file mode 100644
index 0000000000..9d3c3dc97f
--- /dev/null
+++ b/sw/qa/core/data/odt/pass/CVE-2012-4233-1.odt
Binary files differ
diff --git a/sw/qa/core/data/odt/pass/fdo84692.odt b/sw/qa/core/data/odt/pass/fdo84692.odt
new file mode 100644
index 0000000000..db5c878c9f
--- /dev/null
+++ b/sw/qa/core/data/odt/pass/fdo84692.odt
Binary files differ
diff --git a/sw/qa/core/data/odt/pass/ooo95711-1.odt b/sw/qa/core/data/odt/pass/ooo95711-1.odt
new file mode 100644
index 0000000000..4bcb3b4467
--- /dev/null
+++ b/sw/qa/core/data/odt/pass/ooo95711-1.odt
Binary files differ
diff --git a/sw/qa/core/data/odt/pass/tdf112017.odt b/sw/qa/core/data/odt/pass/tdf112017.odt
new file mode 100644
index 0000000000..02a24d9db1
--- /dev/null
+++ b/sw/qa/core/data/odt/pass/tdf112017.odt
Binary files differ
diff --git a/sw/qa/core/data/odt/pass/tdf112101.odt b/sw/qa/core/data/odt/pass/tdf112101.odt
new file mode 100644
index 0000000000..ca29bd732e
--- /dev/null
+++ b/sw/qa/core/data/odt/pass/tdf112101.odt
Binary files differ
diff --git a/sw/qa/core/data/odt/pass/tdf112122.odt b/sw/qa/core/data/odt/pass/tdf112122.odt
new file mode 100644
index 0000000000..83f602a807
--- /dev/null
+++ b/sw/qa/core/data/odt/pass/tdf112122.odt
Binary files differ
diff --git a/sw/qa/core/data/odt/pass/tdf112123.odt b/sw/qa/core/data/odt/pass/tdf112123.odt
new file mode 100644
index 0000000000..c5d2195b94
--- /dev/null
+++ b/sw/qa/core/data/odt/pass/tdf112123.odt
Binary files differ
diff --git a/sw/qa/core/data/odt/pass/tdf122599-1.odt b/sw/qa/core/data/odt/pass/tdf122599-1.odt
new file mode 100644
index 0000000000..4bbb2dfea0
--- /dev/null
+++ b/sw/qa/core/data/odt/pass/tdf122599-1.odt
Binary files differ
diff --git a/sw/qa/core/data/odt/pass/tdf97879.odt b/sw/qa/core/data/odt/pass/tdf97879.odt
new file mode 100644
index 0000000000..b345267635
--- /dev/null
+++ b/sw/qa/core/data/odt/pass/tdf97879.odt
Binary files differ
diff --git a/sw/qa/core/data/odt/tdf151846.odt b/sw/qa/core/data/odt/tdf151846.odt
new file mode 100644
index 0000000000..4f62ef9e81
--- /dev/null
+++ b/sw/qa/core/data/odt/tdf151846.odt
Binary files differ
diff --git a/sw/qa/core/data/odt/test.odt b/sw/qa/core/data/odt/test.odt
new file mode 100644
index 0000000000..5688df4f92
--- /dev/null
+++ b/sw/qa/core/data/odt/test.odt
Binary files differ
diff --git a/sw/qa/core/data/odt/testControlShapeGrouping.odt b/sw/qa/core/data/odt/testControlShapeGrouping.odt
new file mode 100644
index 0000000000..f1caf05934
--- /dev/null
+++ b/sw/qa/core/data/odt/testControlShapeGrouping.odt
Binary files differ
diff --git a/sw/qa/core/data/ooxml/fail/.gitignore b/sw/qa/core/data/ooxml/fail/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sw/qa/core/data/ooxml/fail/.gitignore
diff --git a/sw/qa/core/data/ooxml/fail/EDB-36788-1.docx b/sw/qa/core/data/ooxml/fail/EDB-36788-1.docx
new file mode 100644
index 0000000000..ed710be680
--- /dev/null
+++ b/sw/qa/core/data/ooxml/fail/EDB-36788-1.docx
Binary files differ
diff --git a/sw/qa/core/data/ooxml/fail/LIBREOFFICE-DBDAZAEC.docx b/sw/qa/core/data/ooxml/fail/LIBREOFFICE-DBDAZAEC.docx
new file mode 100644
index 0000000000..add554ae95
--- /dev/null
+++ b/sw/qa/core/data/ooxml/fail/LIBREOFFICE-DBDAZAEC.docx
Binary files differ
diff --git a/sw/qa/core/data/ooxml/fail/ofz14422-1.docx b/sw/qa/core/data/ooxml/fail/ofz14422-1.docx
new file mode 100644
index 0000000000..8284f6afc4
--- /dev/null
+++ b/sw/qa/core/data/ooxml/fail/ofz14422-1.docx
Binary files differ
diff --git a/sw/qa/core/data/ooxml/fail/ofz37458-1.docx b/sw/qa/core/data/ooxml/fail/ofz37458-1.docx
new file mode 100644
index 0000000000..04e7d60629
--- /dev/null
+++ b/sw/qa/core/data/ooxml/fail/ofz37458-1.docx
Binary files differ
diff --git a/sw/qa/core/data/ooxml/fail/ofz4825-1.docx b/sw/qa/core/data/ooxml/fail/ofz4825-1.docx
new file mode 100644
index 0000000000..ce8e6493af
--- /dev/null
+++ b/sw/qa/core/data/ooxml/fail/ofz4825-1.docx
Binary files differ
diff --git a/sw/qa/core/data/ooxml/fail/ofz9934-1.docx b/sw/qa/core/data/ooxml/fail/ofz9934-1.docx
new file mode 100644
index 0000000000..b97afaee8d
--- /dev/null
+++ b/sw/qa/core/data/ooxml/fail/ofz9934-1.docx
Binary files differ
diff --git a/sw/qa/core/data/ooxml/indeterminate/.gitignore b/sw/qa/core/data/ooxml/indeterminate/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sw/qa/core/data/ooxml/indeterminate/.gitignore
diff --git a/sw/qa/core/data/ooxml/pass/fdo63164-1.docx b/sw/qa/core/data/ooxml/pass/fdo63164-1.docx
new file mode 100644
index 0000000000..768ec6ce38
--- /dev/null
+++ b/sw/qa/core/data/ooxml/pass/fdo63164-1.docx
Binary files differ
diff --git a/sw/qa/core/data/ooxml/pass/fdo64256.docx b/sw/qa/core/data/ooxml/pass/fdo64256.docx
new file mode 100644
index 0000000000..e8e901dd10
--- /dev/null
+++ b/sw/qa/core/data/ooxml/pass/fdo64256.docx
Binary files differ
diff --git a/sw/qa/core/data/ooxml/pass/fdo73608-1.docx b/sw/qa/core/data/ooxml/pass/fdo73608-1.docx
new file mode 100644
index 0000000000..d3cc84a6ed
--- /dev/null
+++ b/sw/qa/core/data/ooxml/pass/fdo73608-1.docx
Binary files differ
diff --git a/sw/qa/core/data/ooxml/pass/fdo73608-2.docx b/sw/qa/core/data/ooxml/pass/fdo73608-2.docx
new file mode 100644
index 0000000000..f5588782cd
--- /dev/null
+++ b/sw/qa/core/data/ooxml/pass/fdo73608-2.docx
Binary files differ
diff --git a/sw/qa/core/data/ooxml/pass/fdo78885.docx b/sw/qa/core/data/ooxml/pass/fdo78885.docx
new file mode 100644
index 0000000000..558d71ee14
--- /dev/null
+++ b/sw/qa/core/data/ooxml/pass/fdo78885.docx
Binary files differ
diff --git a/sw/qa/core/data/ooxml/pass/fdo78904_fileHang.docx b/sw/qa/core/data/ooxml/pass/fdo78904_fileHang.docx
new file mode 100644
index 0000000000..dce50f3dce
--- /dev/null
+++ b/sw/qa/core/data/ooxml/pass/fdo78904_fileHang.docx
Binary files differ
diff --git a/sw/qa/core/data/ooxml/pass/fdo78906.docx b/sw/qa/core/data/ooxml/pass/fdo78906.docx
new file mode 100644
index 0000000000..1a6c6ea17c
--- /dev/null
+++ b/sw/qa/core/data/ooxml/pass/fdo78906.docx
Binary files differ
diff --git a/sw/qa/core/data/ooxml/pass/fdo79129.docx b/sw/qa/core/data/ooxml/pass/fdo79129.docx
new file mode 100644
index 0000000000..46ff0f5ee5
--- /dev/null
+++ b/sw/qa/core/data/ooxml/pass/fdo79129.docx
Binary files differ
diff --git a/sw/qa/core/data/ooxml/pass/fdo79131.docx b/sw/qa/core/data/ooxml/pass/fdo79131.docx
new file mode 100644
index 0000000000..5f10d9c86f
--- /dev/null
+++ b/sw/qa/core/data/ooxml/pass/fdo79131.docx
Binary files differ
diff --git a/sw/qa/core/data/ooxml/pass/fdo79838.docx b/sw/qa/core/data/ooxml/pass/fdo79838.docx
new file mode 100644
index 0000000000..eef1e59978
--- /dev/null
+++ b/sw/qa/core/data/ooxml/pass/fdo79838.docx
Binary files differ
diff --git a/sw/qa/core/data/ooxml/pass/fdo79940.docx b/sw/qa/core/data/ooxml/pass/fdo79940.docx
new file mode 100644
index 0000000000..8d17489e80
--- /dev/null
+++ b/sw/qa/core/data/ooxml/pass/fdo79940.docx
Binary files differ
diff --git a/sw/qa/core/data/ooxml/pass/fdo79973.docx b/sw/qa/core/data/ooxml/pass/fdo79973.docx
new file mode 100644
index 0000000000..48bf51096b
--- /dev/null
+++ b/sw/qa/core/data/ooxml/pass/fdo79973.docx
Binary files differ
diff --git a/sw/qa/core/data/ooxml/pass/fdo80514.docx b/sw/qa/core/data/ooxml/pass/fdo80514.docx
new file mode 100644
index 0000000000..5ea2ce7593
--- /dev/null
+++ b/sw/qa/core/data/ooxml/pass/fdo80514.docx
Binary files differ
diff --git a/sw/qa/core/data/ooxml/pass/fdo80580.docx b/sw/qa/core/data/ooxml/pass/fdo80580.docx
new file mode 100644
index 0000000000..90793fe9b4
--- /dev/null
+++ b/sw/qa/core/data/ooxml/pass/fdo80580.docx
Binary files differ
diff --git a/sw/qa/core/data/ooxml/pass/fdo81380.docx b/sw/qa/core/data/ooxml/pass/fdo81380.docx
new file mode 100644
index 0000000000..52458448fb
--- /dev/null
+++ b/sw/qa/core/data/ooxml/pass/fdo81380.docx
Binary files differ
diff --git a/sw/qa/core/data/ooxml/pass/fdo81491.docx b/sw/qa/core/data/ooxml/pass/fdo81491.docx
new file mode 100644
index 0000000000..0da621514d
--- /dev/null
+++ b/sw/qa/core/data/ooxml/pass/fdo81491.docx
Binary files differ
diff --git a/sw/qa/core/data/ooxml/pass/fill.docx b/sw/qa/core/data/ooxml/pass/fill.docx
new file mode 100644
index 0000000000..b9a4501b28
--- /dev/null
+++ b/sw/qa/core/data/ooxml/pass/fill.docx
Binary files differ
diff --git a/sw/qa/core/data/ooxml/pass/liststyle-gridbefore.docx b/sw/qa/core/data/ooxml/pass/liststyle-gridbefore.docx
new file mode 100644
index 0000000000..60dae2aad4
--- /dev/null
+++ b/sw/qa/core/data/ooxml/pass/liststyle-gridbefore.docx
Binary files differ
diff --git a/sw/qa/core/data/ooxml/pass/ofz20801-1.docx b/sw/qa/core/data/ooxml/pass/ofz20801-1.docx
new file mode 100644
index 0000000000..0e1647ae27
--- /dev/null
+++ b/sw/qa/core/data/ooxml/pass/ofz20801-1.docx
Binary files differ
diff --git a/sw/qa/core/data/ooxml/pass/tdf108272.docx b/sw/qa/core/data/ooxml/pass/tdf108272.docx
new file mode 100644
index 0000000000..8ee707c5ba
--- /dev/null
+++ b/sw/qa/core/data/ooxml/pass/tdf108272.docx
Binary files differ
diff --git a/sw/qa/core/data/ooxml/pass/tdf119136.docx b/sw/qa/core/data/ooxml/pass/tdf119136.docx
new file mode 100644
index 0000000000..2baa624bbb
--- /dev/null
+++ b/sw/qa/core/data/ooxml/pass/tdf119136.docx
Binary files differ
diff --git a/sw/qa/core/data/ooxml/pass/tdf123001.docx b/sw/qa/core/data/ooxml/pass/tdf123001.docx
new file mode 100644
index 0000000000..e94a66208e
--- /dev/null
+++ b/sw/qa/core/data/ooxml/pass/tdf123001.docx
Binary files differ
diff --git a/sw/qa/core/data/ooxml/pass/tdf89088.docx b/sw/qa/core/data/ooxml/pass/tdf89088.docx
new file mode 100644
index 0000000000..fc6718569e
--- /dev/null
+++ b/sw/qa/core/data/ooxml/pass/tdf89088.docx
Binary files differ
diff --git a/sw/qa/core/data/ooxml/pass/tdf92157-1-minimized.docx b/sw/qa/core/data/ooxml/pass/tdf92157-1-minimized.docx
new file mode 100644
index 0000000000..6edbe18095
--- /dev/null
+++ b/sw/qa/core/data/ooxml/pass/tdf92157-1-minimized.docx
Binary files differ
diff --git a/sw/qa/core/data/ooxml/pass/tdf93284.docx b/sw/qa/core/data/ooxml/pass/tdf93284.docx
new file mode 100644
index 0000000000..aedc026e8a
--- /dev/null
+++ b/sw/qa/core/data/ooxml/pass/tdf93284.docx
Binary files differ
diff --git a/sw/qa/core/data/ooxml/pass/tdf96749.docx b/sw/qa/core/data/ooxml/pass/tdf96749.docx
new file mode 100644
index 0000000000..c7b79eec09
--- /dev/null
+++ b/sw/qa/core/data/ooxml/pass/tdf96749.docx
Binary files differ
diff --git a/sw/qa/core/data/ooxml/pass/vml-path.docx b/sw/qa/core/data/ooxml/pass/vml-path.docx
new file mode 100644
index 0000000000..6369783f50
--- /dev/null
+++ b/sw/qa/core/data/ooxml/pass/vml-path.docx
Binary files differ
diff --git a/sw/qa/core/data/rtf/README b/sw/qa/core/data/rtf/README
new file mode 100644
index 0000000000..cd109d3fa1
--- /dev/null
+++ b/sw/qa/core/data/rtf/README
@@ -0,0 +1,3 @@
+Put RTF crash-test files here only in case the crash is in Writer core. If the
+crash is in the RTF import itself, use the writerfilter RTF testsuite instead,
+that's faster.
diff --git a/sw/qa/core/data/rtf/fail/.gitignore b/sw/qa/core/data/rtf/fail/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sw/qa/core/data/rtf/fail/.gitignore
diff --git a/sw/qa/core/data/rtf/fail/UnoCursor-1.rtf b/sw/qa/core/data/rtf/fail/UnoCursor-1.rtf
new file mode 100644
index 0000000000..8b816bdd22
--- /dev/null
+++ b/sw/qa/core/data/rtf/fail/UnoCursor-1.rtf
Binary files differ
diff --git a/sw/qa/core/data/rtf/fail/forcepoint-4.rtf b/sw/qa/core/data/rtf/fail/forcepoint-4.rtf
new file mode 100644
index 0000000000..004fdeeca9
--- /dev/null
+++ b/sw/qa/core/data/rtf/fail/forcepoint-4.rtf
@@ -0,0 +1,1779 @@
+{\rtf1\ansi \deff4\deflang1033{\fonttbl{\f0\froman\fcharset0\fprq2 Tms Rmn;}{\f1\froman\fcharset2\fprq2 Symbol;}{\f2\fswiss\fcharset0\fprq2 Helv{\*\falt Arial};}{\f3\fmodern\fcharset0\fprq1 Courier;}
+{\f4\froman\fcharset0\fprq2 Times New Roman;}{\f5\fswiss\fcharset0\fprq2 Arial;}{\f6\froman\fcharset0\fprq2 MS Serif;}{\f7\fswiss\fcharset0\fprq2 MS Sans Serif;}{\f8\froman\fcharset0\fprq2 Times;}{\f9\fswiss\fcharset0\fprq2 Helvetica;}
+{\f10\fswiss\fcharset0\fprq2 System;}{\f11\fmodern\fcharset0\fprq1 Courier New;}{\f12\froman\fcharset0\fprq2 New York;}{\f13\fswiss\fcharset0\fprq2 Geneva;}{\f14\fnil\fcharset2\fprq2 Marlett;}{\f15\fnil\fcharset2\fprq2 Wingdings;}
+{\f16\fswiss\fcharset0\fprq2 Arial Narrow;}{\f17\fswiss\fcharset0\fprq2 Arial Black;}{\f18\froman\fcharset0\fprq2 Book Antiqua;}{\f19\froman\fcharset0\fprq2 Bookman Old Style;}{\f20\froman\fcharset0\fprq2 Century Schoolbook;}
+{\f21\fnil\fcharset2\fprq2 Monotype Sorts;}{\f22\fswiss\fcharset0\fprq2 Haettenschweiler;}{\f23\froman\fcharset0\fprq2 Garamond;}{\f24\fmodern\fcharset2\fprq1 MS LineDraw;}{\f25\fswiss\fcharset0\fprq2 Helvetica-Narrow;}
+{\f26\froman\fcharset255\fprq2 Roman;}{\f27\fscript\fcharset255\fprq2 Script;}{\f28\fmodern\fcharset255\fprq2 Modern;}{\f29\fswiss\fcharset0\fprq1 MS Dialog;}{\f30\froman\fcharset0\fprq2 Bookman{\*\falt Bookman Old Style};}
+{\f31\fnil\fcharset0\fprq0 Times New Roman Monotype{\*\falt Times New Roman};}{\f32\fnil\fcharset0\fprq0 Stone Sans{\*\falt Times New Roman};}{\f33\froman\fcharset0\fprq2 Palatino;}{\f34\fnil\fcharset0\fprq0 Arial Monotype;}}{\colortbl;\red0\green0\blue0;
+\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;
+\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\widctlpar \f4\fs20 \snext0 Normal;}{\s1\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl1\pndec\pnprev1\pnstart1\pnsp144 {\pntxta .}}\b\f5\fs28\kerning28
+\sbasedon0\snext0 heading 1,H1;}{\s2\sb380\sa160\sl-320\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl2\pndec\pnprev1\pnstart1\pnsp144 }\b\f9\fs28\cf1 \sbasedon15\snext0 heading 2,H2;}{\s3\sb280\sa140\sl-280\slmult0
+\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f9\cf1\kerning28 \sbasedon2\snext16 heading 3,H3;}{\s4\sb120\sa80\keep\keepn\widctlpar{\*\pn \pnlvl4\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\i\f9\fs20\kerning28 \sbasedon0\snext16 heading 4,H4;}{\s5\sb240\sa60\widctlpar{\*\pn \pnlvl5\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\f5\fs22 \sbasedon0\snext0 heading 5,H5;}{\s6\sb240\sa60\widctlpar{\*\pn \pnlvl6\pndec\pnprev1\pnstart1\pnsp144
+{\pntxtb .}}\i\f5\fs22 \sbasedon0\snext0 heading 6,H6;}{\s7\sb240\sa60\widctlpar{\*\pn \pnlvl7\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\f5\fs20 \sbasedon0\snext0 heading 7;}{\s8\sb240\sa60\widctlpar{\*\pn \pnlvl8\pndec\pnprev1\pnstart1\pnsp144
+{\pntxtb .}}\i\f5\fs20 \sbasedon0\snext0 heading 8;}{\s9\sb240\sa60\widctlpar{\*\pn \pnlvl9\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\i\f5\fs18 \sbasedon0\snext0 heading 9;}{\*\cs10 \additive Default Paragraph Font;}{\s15\li864\sb100\sl-260\slmult0
+\nowidctlpar \f8\fs20\cf1 \snext15 T1.Text1;}{\s16\sa120\widctlpar \f4\fs20 \sbasedon0\snext16 Body Text;}{\s17\fi-288\li1655\sb100\sa100\sl-260\slmult0\keepn\nowidctlpar\tx1655 \f8\fs20\cf1 \snext17 A.A+List;}{
+\s18\fi-288\li1655\sb100\sa100\sl-260\slmult0\nowidctlpar\tx1655\tx1958 \f8\fs20\cf1 \snext18 A.AList;}{\s19\li1655\sb100\sa100\sl-260\slmult0\keepn\nowidctlpar\tx1655 \f31\fs20\cf1 \snext19 A.AList_nonum;}{\s20\qc\nowidctlpar \f8\fs4\cf1 \snext20
+anchorhldr;}{\s21\fi-792\li2015\sb100\sa100\sl-260\slmult0\nowidctlpar\tx2015 \f8\fs20\cf1 \snext21 b1.Bul_list;}{\s22\fi-289\li1224\sb100\sa100\sl-260\slmult0\nowidctlpar\tx1224\tldot\tx3685 \f8\fs20\cf1 \snext22 b1.Bullet1;}{
+\s23\fi-289\li1584\sb100\sa100\sl-260\slmult0\nowidctlpar\tx1584\tldot\tx3685 \f8\fs20\cf1 \snext23 b2.Bullet2;}{\s24\li864\sb100\sa140\sl-380\slmult0\keepn\nowidctlpar\tqr\tx432\tx864 \b\f9\fs36\cf1 \snext24 chptr_title;}{\s25\li1224\sb100\sl-200\slmult0
+\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 \snext25 Code;}{\s26\fi-1008\li1007\sb100\sl-200\slmult0\nowidctlpar\tx1007
+\f3\fs18\cf1 \snext26 EN.EdNote;}{\s27\fi-1008\li1871\sb120\sa100\sl-200\slmult0\nowidctlpar\brdrb\brdrs\brdrw15 \tx1871 \f9\fs18\cf1 \snext27 Fg.Figure;}{\s28\fi-288\li1007\sa60\sl-180\slmult0\nowidctlpar\brdrt\brdrs\brdrw15 \tx1007 \f8\fs16\cf1
+\snext28 FN.Footnote;}{\s29\widctlpar\tqc\tx4320\tqr\tx8640 \f4\fs20 \sbasedon0\snext29 footer;}{\s30\fi-288\li1152\ri1152\sa60\sl200\slmult0\nowidctlpar\tx1152 \f8\fs16\cf1 \snext30 Footnote;}{\s31\li1295\sb100\sa100\sl-260\slmult0\nowidctlpar
+\f8\fs20\cf1 \snext31 glosry_nxt;}{\s32\fi-432\li1295\sb100\sa100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 \snext32 glossary;}{\s33\sb120\sa120\sl-220\slmult0\keepn\nowidctlpar\tqr\tx432\tx864 \b\f9\fs20\cf1 \snext33 H1.Heading1;}{
+\s34\fi-865\li864\sb380\sa160\sl-320\slmult0\keepn\nowidctlpar\tqr\tx432\tx864 \b\f9\fs28\cf1 \snext34 H2.Heading2;}{\s35\fi-865\li864\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864 \b\f9\cf1 \snext35 H3.Heading3;}{
+\s36\fi-865\li864\sb320\sa160\sl-320\slmult0\keepn\nowidctlpar\tqr\tx432\tx864 \b\f9\fs28\cf1 \snext36 H3.Heading3_top;}{\s37\fi-865\li864\sb240\sa160\sl-200\slmult0\keepn\nowidctlpar\tqr\tx432\tx864\tqr\tx8567 \b\f9\fs20\cf1 \snext37 H4.Heading4;}{
+\s38\li864\sb160\sa100\sl-180\slmult0\keepn\nowidctlpar\tqr\tx432\tx864 \b\f9\fs18\cf1 \snext38 H5.Heading5;}{\s39\li1440\sb100\sa100\sl-260\slmult0\nowidctlpar\tx1224\tldot\tx3685 \f8\fs20\cf1 \snext39 indent1;}{\s40\li864\sb100\sl-260\slmult0
+\nowidctlpar\brdrt\brdrs\brdrw15 \f8\fs20\cf1 \snext40 IR.Impl_Rec;}{\s41\fi-289\li1224\sb100\sa100\sl-260\slmult0\nowidctlpar\tx1224 \f8\fs20\cf1 \snext41 N.NList;}{\s42\li1224\sb100\sa100\sl-260\slmult0\nowidctlpar\tx1440 \f31\fs20\cf1 \snext42
+N.NList_nonum;}{\s43\fi-289\li1224\sb100\sa100\sl-260\slmult0\nowidctlpar\tx1224 \f8\fs20\cf1 \snext43 N/.NList=1;}{\s44\li576\sb120\sa200\sl-479\slmult0\keepn\nowidctlpar\tx576 \f31\fs43\cf1 \snext44 PrT.PrfcTitle;}{
+\s45\fi-288\li1152\ri1152\sa80\sl-200\slmult0\nowidctlpar\tx1152\tx1871 \f8\fs16\cf1 \snext45 TableFootnote;}{\s46\fi-1008\li1871\sb200\sa200\sl-200\slmult0\nowidctlpar\tx1871 \f9\fs18\cf1 \snext46 Tb.Table;}{\s47\qc\sb120\sl-180\slmult0
+\keepn\nowidctlpar \b\f9\fs16\cf1 \snext47 TbH.TblHdctr;}{\s48\sb140\sl-200\slmult0\keepn\nowidctlpar \b\f9\fs18\cf1 \snext48 TbH.TblHdLft;}{\s49\qr\sb140\sl-200\slmult0\keepn\nowidctlpar \b\f9\fs18\cf1 \snext49 TbH.TblHdRt;}{
+\s50\qc\sb180\sa120\sl-220\slmult0\nowidctlpar \f8\fs16\cf1 \snext50 TbT.TblTxtCtr;}{\s51\sb180\sa120\sl-220\slmult0\nowidctlpar\tx144 \f8\fs16\cf1 \snext51 TbT.TblTxtLft;}{\s52\qr\sb180\sa120\sl-220\slmult0\nowidctlpar \f8\fs16\cf1 \snext52
+TbT.TblTxtRt;}{\s53\fi-289\li288\sb180\sa120\sl-220\slmult0\nowidctlpar\tx288 \f8\fs16\cf1 \snext53 TbTxt.N+;}{\s54\fi-289\li288\sb180\sa120\sl-220\slmult0\nowidctlpar\tx288 \f8\fs16\cf1 \snext54 TbTxt.N=1;}{\s55\sl-240\slmult0\nowidctlpar \f32\fs20\cf1
+\snext55 temp;}{\s56\fi-1081\li3120\sl-240\slmult0\nowidctlpar\tx3240\tqr\tldot\tx9119\tqr\tx9551 \f31\fs20 \snext56 Table1LOT;}{\s57\fi-360\li540\sl-200\slmult0\nowidctlpar \f31\fs18 \snext57 Level2IX;}{\s58\sb80\sa140\sl-220\slmult0
+\nowidctlpar\tx2520\tx4200\tx6480 \f33\fs20\cf1 \snext58 ML.ColsList;}{\s59\qj\sl-220\slmult0\nowidctlpar \f31\fs18\cf1 \snext59 IndexIX;}{\s60\fi-1081\li3120\sl-240\slmult0\nowidctlpar\tx3240\tqr\tldot\tx9119\tqr\tx9551 \f31\fs20\cf1 \snext60
+Table-pageLOT;}{\s61\fi-1200\li3240\sl-240\slmult0\nowidctlpar\tx3240\tqr\tldot\tx9119\tqr\tx9551 \f31\fs20 \snext61 Figure1-pageLOF;}{\s62\qj\sl-240\slmult0\nowidctlpar\tqr\tx9240 \f32\fs20\cf8 \snext62 HeaderRight;}{\s63\qj\sl-220\slmult0\nowidctlpar
+\f31\fs18 \snext63 SortOrderIX;}{\s64\fi-720\li2700\sb120\sl-320\slmult0\nowidctlpar\tqr\tx2520\tx2700 \f31\fs28\cf1 \snext64 1HeadingTOC;}{\s65\fi-1081\li3120\sl-240\slmult0\nowidctlpar\tx3240\tqr\tldot\tx9119\tqr\tx9551 \f31\fs20 \snext65
+Table-page1LOT;}{\s66\qj\sl-100\slmult0\nowidctlpar\tx540\tqr\tx9240 \f33\fs8\cf1 \snext66 spacer;}{\s67\sb180\sl-180\slmult0\keepn\nowidctlpar \f34\fs18\cf1 \snext67 GroupTitlesIX;}{\s68\fi-1200\li3240\sl-240\slmult0
+\nowidctlpar\tx3240\tqr\tldot\tx9119\tqr\tx9551 \f31\fs20\cf1 \snext68 FigureLOF;}{\s69\sb259\sl-200\slmult0\keepn\nowidctlpar\tx2520\tx4200\tx6480 \b\f9\fs18\cf1 \snext69 MH.ColsHd;}{\s70\sb80\sa80\sl-200\slmult0\nowidctlpar \f31\fs18 \snext70
+TbT2.TblText2;}{\s71\fi-1200\li3240\sl-240\slmult0\nowidctlpar\tx3240\tqr\tldot\tx9119\tqr\tx9551 \f31\fs20 \snext71 Figure-pageLOF;}{\s72\sb140\sl-200\slmult0\keepn\nowidctlpar \f31\fs18\cf1 \snext72 TbH.TblHd;}{\s73\li1320\sl-240\slmult0\nowidctlpar
+\f33\fs20\cf1 \snext73 T0.Text0;}{\s74\qj\fi-455\li3154\sl-280\slmult0\nowidctlpar\tqr\tx2700\tx3154 \f31\cf1 \snext74 2HeadingTOC;}{\s75\fi-360\li360\sl-200\slmult0\nowidctlpar \f31\fs18 \snext75 Level1IX;}{\s76\fi-360\li720\sl-200\slmult0\nowidctlpar
+\f31\fs18 \snext76 Level3IX;}{\s77\fi-1140\li3179\sl-220\slmult0\nowidctlpar\tx3179\tqr\tldot\tx9119\tqr\tx9600 \f31\fs18\cf1 \snext77 Figure-page1LOF;}{\s78\qj\sl-220\slmult0\nowidctlpar \f31\fs18\cf1 \snext78 SeparatorsIX;}{\s79\sl200\slmult0
+\nowidctlpar \f8\fs16\cf1 \snext79 CellBody;}{\s80\fi-1081\li3120\sl-240\slmult0\nowidctlpar\tx3240\tqr\tldot\tx9119\tqr\tx9551 \f31\fs20 \snext80 TableLOT;}{\s81\fi-1200\li3240\sl-240\slmult0\nowidctlpar\tx3240\tqr\tldot\tx9119\tqr\tx9551 \f31\fs20
+\snext81 Figure1LOF;}{\s82\qj\fi-540\li3694\sl-240\slmult0\nowidctlpar\tqr\tx3154\tx3694 \f31\fs20\cf1 \snext82 3HeadingTOC;}{\s83\li1224\sb80\sl-200\slmult0
+\nowidctlpar\tx1440\tx1620\tx1800\tx1980\tx2160\tx2340\tx2520\tx2700\tx2880\tx3060\tx3240\tx3420\tx3600\tx3780\tx3960 \f3\fs16\cf1 \snext83 TuCv.TutCode4;}{\s84\qj\sl-280\slmult0\nowidctlpar \f8\cf1 \snext84 Body;}{\s85\fi-1260\li3240\sl-240\slmult0
+\nowidctlpar\tx3240 \f31\fs20 \snext85 TableTitleLOT;}{\s86\fi-1140\li3179\sl-220\slmult0\nowidctlpar\tx3179\tqr\tldot\tx9119\tqr\tx9600 \f31\fs18\cf1 \snext86 Table1-pageLOT;}{\*\cs87 \additive\super \sbasedon10 endnote reference;}{\*\cs88 \additive
+\super \sbasedon10 footnote reference;}{\s89\widctlpar\tqc\tx4320\tqr\tx8640 \f4\fs20 \sbasedon0\snext89 header;}{\s90\li864\sb100\sa240\sl-400\slmult0\keepn\nowidctlpar\tx864 \b\f9\fs36\cf1 \snext90 Pr.Preface;}{\s91\sb120\keep\widctlpar \f4\fs20
+\sbasedon0\snext0 Definition item;}{\*\cs92 \additive\fs16 \sbasedon10 annotation reference;}{\s93\widctlpar \f4\fs20 \sbasedon0\snext93 annotation text;}{\s94\qc\sb720\sa160\keep\keepn\widctlpar \b\f5\fs48\kerning28 \sbasedon0\snext95 Title Cover;}{
+\s95\qc\sb240\sa160\keep\keepn\widctlpar \i\f5\fs36\kerning28 \sbasedon94\snext16 Subtitle Cover;}{\s96\fi-360\li720\widctlpar{\*\pn \pnlvl11\pnf1\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}\f4\fs20 \sbasedon0\snext96 List Bullet 2;}{
+\s97\li864\sb100\sl-260\slmult0\nowidctlpar \b\i\f30\fs18\cf1 \sbasedon15\snext97 bman;}{\s98\li360\ri360\sb120\sa120\widctlpar \f11\fs20 \sbasedon0\snext98 Syntax;}{\s99\sb360\widctlpar\tqr\tx8640 \b\f5 \sbasedon0\snext0 toc 1;}{
+\s100\sb240\widctlpar\tqr\tldot\tx8640 \f4\fs20 \sbasedon0\snext0 toc 2;}{\s101\li240\widctlpar\tqr\tldot\tx8640 \f4\fs20 \sbasedon0\snext0 toc 3;}{\s102\li480\widctlpar\tqr\tldot\tx8640 \f4\fs18 \sbasedon0\snext0 toc 4;}{
+\s103\li720\widctlpar\tqr\tldot\tx8640 \f4\fs18 \sbasedon0\snext0 toc 5;}{\s104\li960\widctlpar\tqr\tldot\tx8640 \f4\fs18 \sbasedon0\snext0 toc 6;}{\s105\li1200\widctlpar\tqr\tldot\tx8640 \f4\fs18 \sbasedon0\snext0 toc 7;}{
+\s106\li1440\widctlpar\tqr\tldot\tx8640 \f4\fs18 \sbasedon0\snext0 toc 8;}{\s107\li1680\widctlpar\tqr\tldot\tx8640 \f4\fs18 \sbasedon0\snext0 toc 9;}{\s108\li864\sb100\sa140\sl-380\slmult0\keepn\nowidctlpar\tqr\tx432\tx864 \v\f8\fs36 \sbasedon24\snext108
+noTOC1;}{\s109\li864\sb100\sl-260\slmult0\nowidctlpar \b\i\f8\fs20\cf6 \sbasedon15\snext109 attent;}{\s110\li864\sb100\sa140\sl-380\slmult0\keepn\nowidctlpar\tqr\tx432\tx864 \v\f8\fs36 \sbasedon24\snext110 noTOC;}{\*\cs111 \additive\sbasedon10
+page number;}{\s112\fi-288\li288\sa60\widctlpar \f8\fs20 \sbasedon0\snext112 footnote text;}{\s113\li576\sb60\widctlpar \f11\fs20 \sbasedon0\snext113 c1.Code 1;}{\s114\li360\ri360\sb240\sl240\slmult0
+\widctlpar\tx720\tx1080\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4406\tx4680\tx5400\tx6120\tx6840\tx7560\tx8280\tx9000\tx9720 \f3\fs20\cf1 \sbasedon0\snext114 Code Example;}{\s115\fi-360\li1080\ri720\sb120\widctlpar{\*\pn \pnlvl10
+\pndec\uldashdd\pnstart1\pnindent360\pnhang{\pntxta )}}\fs20 \sbasedon0\snext115 Numbered List;}{\s116\li720\ri720\sb120\widctlpar \fs20 \sbasedon0\snext116 Simple List;}{\s117\sb240\keepn\widctlpar \b\f25 \sbasedon6\snext0 Highlighted Paragraph 1;}{
+\s118\fi-1440\li1872\ri432\sb120\keep\widctlpar \fs20 \sbasedon0\snext118 Definition List,DL;}}{\*\revtbl {Unknown;}{Frank Dawson;}}{\info{\title vCalendar Specification, v0.4}{\subject Versit vCalendar Specification V0.4}{\author Frank Dawson}
+{\keywords VERSIT vCalendar Calendaring Scheduling}{\operator Frank Dawson}{\creatim\yr1996\mo9\dy3\hr10\min1}{\revtim\yr1995\mo9\dy18\hr7\min10}{\printim\yr1996\mo9\dy12\hr12\min25}{\version30}{\edmins218}{\nofpages62}{\nofwords15938}{\nofchars90851}
+{\*\company }{\vern57431}}\margl2160\margr1440\margt2160\margb1627 \facingp\widowctrl\ftnbj\aenddoc\margmirror\linkstyles\hyphcaps0 \fet0{\*\template D:\\PERSONAL\\0122\\0122_2\\DAVECHAP.DOT}\sectd \psz1\pgnrestart\pgnlcrm\linex0\colsx0\titlepg
+{\headerl \pard\plain \s55\sl-240\slmult0\widctlpar \f32\fs20\cf1
+\par \pard \s55\sl-240\slmult0\widctlpar\brdrb\brdrth\brdrw45\brsp20
+\par }{\headerr \pard\plain \s55\sl-240\slmult0\widctlpar\brdrb\brdrth\brdrw45\brsp20 \f32\fs20\cf1
+\par
+\par }{\footerl \pard\plain \s29\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqc\tx4320\tqr\tx8640 \f4\fs20 \chpgn \tab \tab {\field{\*\fldinst TITLE \\* MERGEFORMAT }{\fldrslt vCalendar Specification, v0.4}}
+\par }{\footerr \pard\plain \s29\widctlpar\tqc\tx4320\tqr\tx8640 \f4\fs20 {\field{\*\fldinst STYLEREF "Pr.Preface" \\* MERGEFORMAT }{\fldrslt {\lang1024 Copyrights}}}{\f8 \tab \tab }\chpgn
+\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 \qc\sb1600\widctlpar \f4\fs20 {\b\i\f19\fs56 vCalendar}{\b\i\fs40
+\par }\pard \qc\sb120\widctlpar {\i\fs48 The Electronic Calendaring and Scheduling
+\par }\pard \qc\sb120\widctlpar {\i\fs48 Exchange Format}{\b\fs48
+\par }\pard \qc\sb120\widctlpar {\fs40 Version 1.0
+\par }\pard \qc\sb1200\widctlpar {\b {\pict\wmetafile8\picw1693\pich1693\picwgoal960\pichgoal960 \picscalex276\picscaley276\picbmp\picbpp8
+010009000003760600000000520600000000050000000b0200000000050000000c023000300005000000090200000000050000000102ffffff00040000000701030052060000430f2000cc00000030003000000000003000300000000000280000003000000030000000010008000000000000000000120b0000120b0000d8
+000000d8000000ffffff00ceffff009cffff0063ffff0031ffff0000ffff00ffccff00ccccff0099ccff0066ccff0033ccff0000ccff00ff99ff00cc99ff009999ff006699ff003399ff000099ff00ff66ff00cc66ff009966ff006666ff003366ff000066ff00ff33ff00cc33ff009933ff006633ff003333ff000033ff00
+ff00ff00cc00ff009900ff006600ff003300ff000000ff00ffffcc00ccffcc0099ffcc0066ffcc0033ffcc0000ffcc00ffcccc00cccccc0099cccc0066cccc0033cccc0000cccc00ff99cc00cc99cc009999cc006699cc003399cc000099cc00ff66cc00cc66cc009966cc006666cc003366cc000066cc00ff33cc00cc33cc
+009933cc006633cc003333cc000033cc00ff00cc00cc00cc009900cc006600cc003300cc000000cc00ffff9900ccff990099ff990066ff990033ff990000ff9900ffcc9900cccc990099cc990066cc990033cc990000cc9900ff999900cc99990099999900669999003399990000999900ff669900cc669900996699006666
+99003366990000669900ff339900cc33990099339900663399003333990000339900ff009900cc00990099009900660099003300990000009900ffff6600ccff660099ff660066ff660033ff660000ff6600ffcc6600cccc660099cc660066cc660033cc660000cc6600ff996600cc99660099996600699966003399660000
+996600ff666600cc66660099666600666666003366660000666600ff336600cc33660099336600663366003333660000336600ff006600cc00660099006600660066003300660000006600ffff3300ccff330099ff330066ff330033ff330000ff3300ffcc3300cccc330099cc330066cc330033cc330000cc3300ff993300
+cc99330099993300669933003399330000993300ff663300cc66330099663300666633003366330000663300ff333300cc33330099333300663333003333330000333300ff003300cc00330099003300660033003300330000003300ffff0000ccff000099ff000066ff000033ff000000ff0000ffcc0000cccc000099cc00
+0066cc000033cc000000cc0000ff990000cc99000099990000669900003399000000990000ff660000cc66000099660000666600003366000000660000ff330000cc33000099330000663300003333000000330000ff000000cc00000099000000660000003300000000000000000000000000000000000000000000000007
+07151b1c1b15070700000000000000000000000000000000000000000000000000000000000000000000000000000707151b1c221c1b1507070000000000000000000000000000000000000000000000000000000000000000000000000707151b1c2247221c1b150707000000000000000000000000000000000000000000
+000000000000000000000000000707151b1c226bd76b221c1b15070700000000000000000000000000000000000000000000000000000000000000000707151b1c226bd7d7d76b221c1b1507070000000000000000000000000000000000000000000000000000000000000707151b1c226bd7d7d7d7d76b221c1b15070700
+0000000000000000000000000000000000000000000000000000000707151b1c226bd7d7d756d7d7d76b221c1b15070700000000000000000000000000000000000000000000000000000707151b1c226bd7d7d7562b56d7d7d76b221c1b1507070000000000000000000000000000000000000000000000000707151b1c22
+6bd7d7d7562b000056d7d7d76b221c1b150707000000000000000000000000000000000000000000000707151b1c226bd7d7d7562b0000000056d7d7d76b221c1b15070700000000000000000000000000000000000000000707151b1c226bd7d7d7562b56000000002b56d7d7d76b221c1b15070700000000000000000000
+00000000000000000707151b1c226bd7d7d7562b000056000056000056d7d7d76b221c1b150707000000000000000000000000000000000707151b1c226bd7d7d7562b000000002b560000000056d7d7d76b221c1b15070700000000000000000000000000000707151b1c226bd7d7d7562b5600000000562b000000002b56
+d7d7d76b221c1b1507070000000000000000000000000707151b1c226bd7d7d7562b000056000056000056000056000056d7d7d76b221c1b150707000000000000000000000007151b1c226bd7d7d7562b000000002b56000000002b560000000056d7d7d76b221c1b15070700000000000000000007151b1c226bd7d7d756
+2b5600000000562b00000000562b000000000056d7d7d76b221c1b1507070000000000000000071b1c226bd7d7d7562b0000560000560000560000560000560000562b2b56d7d7d76b221c1b150707000000000000000715226bd7d7d7562b000000002b56000000002b56000000002b56002bd70056d7d7d76b221c1b1507
+0700000000000000076bd7d7d7562b5600000000562b00000000562b00000000562b000000000056d7d7d76b221c1b1507000000000000000007d7d7562b002b56000056000056000056000056000056000056000000000056d7d7d76b221c1b1507000000000000d7d7d7562b00d756002b56000000002b56000000002b56
+000000002b560000000056d7d7d76b221c1b07000000000056d7d7562b0000562b00562b00000000562b00000000562b00000000562b000000000056d7d7d76b2215070000000056d700d7d72b0000000000002b56000056000056000056000056000056000056000000000056d7d7d76b07000000000000d7d75600d75600
+000056d756002b56000000002b56000000002b56000000002b560000000056d7d7d75600000000000000565656d7d756000000562b00562b00000000562b00000000562b00000000562b000000000056d7d7d7560000000000000056d700d7d72b0000000000002b560000560000560000560000560000561c1c5600000000
+0056d7d7d70000000000000000d7d75600d75600d75600d756002b56000000002b56000000002b561c1c1c1c2b5600000000d7d700000000000810090100565656d7d756d75600562b00562b00000000562b00000000562b1c1c1c1c562b00002b56d700000000000910101007000056d700d7d7562b00000000002b560000
+560000560000560000561c1c560000002b56d70000000000001010100800000000d7d75600d75600000056d756002b56000000002b56000000002b560000002b56d7000000000000000f090f010000000000565656d7d756000000562b00562b00000000562b00000000562b00002b56d70000000000000000090f01000000
+0000000056d700d7d72b0000000000002b560000560000560000560000562b56d70000000000000000000105000000000000000000d7d75600d75600000056d756002b56000000002b560000002b56d700000007090901000000000000000000000000000000565656d7d756000000562b00562b00000000562b00002b56d7
+000000000810100f0800000000000000010909070000000056d700d7d72b0000000000002b560000560000562b56d700000000000810100a0f080000000000080f1010080000000000d7d75600d75600d75600d756002b560000002b56d70000000000000109100f0f0900000000080f0a101008000000000000565656d7d7
+56d75600562b00562b00002b56d7000000000000000008090f0f0f08000008090f0f1009010000000000000056d700d7d7562b000000000000562b56d7000000000000000000000709090f0700010809090f0908000000000000000000d7d75600d75600000056d7002b56d700000000000000000000000000070808000107
+080909070000000008080100000000565656d7d756000000002b56d700000000000001080800000000000808000000010807000000000008101009000000000056d700d7d72b00002b56d70000000000000009101008000000000000000000000000000000000710101009000000000000d7d75600d7562b56d70000000000
+00000009101010070000000000000000000000000000010f0a10100800000000000000565656d7d756d70000080801000000000810100a0f010000000000000000000000000008090f100907000000000808010056d700d7d70000000f1009010000000709100f090800000000000000000000000007090f090f0900000000
+081010090000d7d756000000000910100800000000090f090f0907000000000000000000000001080809080700000007101010090000005600000000000910100f0800000007080908080100000000000000000000000001080801000000010f0a101008000000000000000000080f10090801000000010808010000000000
+030000000000}}{\b
+\par }\pard \qc\sb1600\widctlpar {\fs40 A}{\i\fs40 }{\b\i\f19\fs40 versit}{\i\fs40 }{\fs40 Consortium Specification
+\par }\pard \qc\sb480\widctlpar {\fs40 September 18, 1996
+\par }\pard\plain \s15\li864\sb100\sl-260\slmult0\widctlpar \f8\fs20\cf1 \sect \sectd \psz1\pgnlcrm\linex0\colsx0 \pard\plain \s90\li864\sb100\sa240\sl-400\slmult0\keepn\nowidctlpar\tx864 \b\f9\fs36\cf1 Copyrights
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\widctlpar \f8\fs20\cf1 \'a9, 1996, International Business Machines Corp., Lucent Technologies, Inc., and Siemens. All rights reserved.
+\par \pard \s15\li864\sb100\sl-260\slmult0\widctlpar Permission is granted to copy and distribute this publication provided that it is reproduced in its entirety without modification and includes the above copyright notice and this permission notice.
+\par \pard \s15\li864\sb100\sl-260\slmult0\widctlpar
+No licenses, express or implied, are granted with respect to any of the technology described in this publication. International Business Machines Corp., Lucent Technologies, Inc., and Siemens retain all their intellectual property rights in the technology
+ described in this publication.
+\par \pard \s15\li864\sb100\sl-260\slmult0\widctlpar Even though International Business Machines Corp., Lucent Technologies, Inc., and Siemens have reviewed this specification, {\b\fs18
+INTERNATIONAL BUSINESS MACHINES CORP., LUCENT TECHNOLOGIES, INC., AND SIEMENS, MAKE NO WARRANTY OR REPRESENTATION, EITHER EXPRESS OR IMPLIED, WITH RESPECT TO THIS PUBLICATION, ITS QUALITY OR ACCURACY, NONINFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR a PAR
+TICULAR PURPOSE. AS a RESULT, THIS SPECIFICATION IS DELIVERED \ldblquote AS IS\rdblquote AND THE READER ASSUMES THE ENTIRE RISK AS TO ITS QUALITY, ACCURACY OR SUITABILITY FOR ANY PARTICULAR PURPOSE..
+\par }\pard \s15\li864\sb100\sl-260\slmult0\widctlpar {\b\fs18
+IN NO EVENT WILL INTERNATIONAL BUSINESS MACHINES CORP., LUCENT TECHNOLOGIES, INC., AND SIEMENS, be LIABLE FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES RESULTING FROM ANY DEFECT OR INACCURACY IN THIS PUBLICATION, EVEN IF ADVISED OF T
+HE POSSIBILITY OF SUCH DAMAGES.
+\par }\pard \s15\li864\sb100\sl-260\slmult0\widctlpar This publication is provided with RESTRICTED RIGHTS. Use, duplication, or disclosure by the Government are subject to restrictions set forth in DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar \sect \sectd \psz1\pgnlcrm\linex0\colsx0 {\headerl \pard\plain \s55\sl-240\slmult0\widctlpar\brdrb\brdrth\brdrw45\brsp20 \f32\fs20\cf1
+\par \pard \s55\sl-240\slmult0\widctlpar\brdrb\brdrth\brdrw45\brsp20
+\par }{\headerr \pard\plain \s55\sl-240\slmult0\widctlpar\brdrb\brdrth\brdrw45\brsp20 \f32\fs20\cf1
+\par \pard \s55\sl-240\slmult0\widctlpar\brdrb\brdrth\brdrw45\brsp20
+\par }{\footerl \pard\plain \s29\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqc\tx4320\tqr\tx8640 \f4\fs20 \chpgn \tab \tab {\field{\*\fldinst TITLE \\* MERGEFORMAT }{\fldrslt vCalendar Specification, v0.4}}
+\par }{\footerr \pard\plain \s29\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqc\tx4320\tqr\tx8640 \f4\fs20 {\field{\*\fldinst STYLEREF "Pr.Preface" \\* MERGEFORMAT }{\fldrslt {\lang1024 Trademarks}}}\tab \tab \chpgn
+\par }\pard\plain \s90\li864\sb100\sa240\sl-400\slmult0\keepn\nowidctlpar\tx864 \b\f9\fs36\cf1 Trademarks
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 {\b\i\f19\fs18 versit}, the {\b\i\f30\fs18 versit }
+ logo, versitcard, vCard, vCalendar are trademarks of Apple Computer, Inc., AT&T Corp., International Business Machines Corp., and Siemens.
+\par Apple and the Apple Logo are trademarks of Apple Computer, Inc. registered in the U.S. and other countries.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar AT&T is a registered trademarks of AT&T Corp.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar IBM is a registered trademarks of International Business Machines Corporation.
+\par \pard\plain \s90\li864\sb100\sa240\sl-400\slmult0\keepn\nowidctlpar\tx864 \b\f9\fs36\cf1 \sect \sectd \psz1\pgnlcrm\linex0\colsx0 \pard\plain \s90\li864\sb100\sa240\sl-400\slmult0\keepn\nowidctlpar\tx864 \b\f9\fs36\cf1 Contributors
+\par \trowd \trgaph108\trleft-108 \cellx4320\cellx8748 \pard\plain \s15\sb100\sl-260\slmult0\widctlpar\intbl \f8\fs20\cf1 Roland H. Alden\cell Stephen J. Bartlett\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \trowd \trgaph108\trleft-108 \cellx4320\cellx8748
+ \pard\plain \s15\sb100\sl-260\slmult0\widctlpar\intbl \f8\fs20\cf1 Jay Batson, ON Technology\cell John Binici, Iris Associates\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s15\sb100\sl-260\slmult0\widctlpar\intbl \f8\fs20\cf1 Stev
+e Carter, Novell\cell Liang-Jye Chang, Starfish Software\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s15\sb100\sl-260\slmult0\widctlpar\intbl \f8\fs20\cf1 Andre Courtemanche, CS&T\cell Jim Cunnie, AT&T EasyCommerce\cell \pard\plain
+\widctlpar\intbl \f4\fs20 \row \pard\plain \s15\sb100\sl-260\slmult0\widctlpar\intbl \f8\fs20\cf1 Frank Dawson, IBM Corporation\cell Rik Drummond, The Drummond Group\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s15\sb100\sl-260\slmult0
+\widctlpar\intbl \f8\fs20\cf1 Gavin Eadie, University of Michigan\cell Pat Egen, Provident Life and Accident\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s15\sb100\sl-260\slmult0\widctlpar\intbl \f8\fs20\cf1 Randell Flint, Sundial Systems
+\cell Ben Forta, OnTime/Division of FTP\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s15\sb100\sl-260\slmult0\widctlpar\intbl \f8\fs20\cf1 Anik Ganguly, OnTime/Division of FTP.\cell Arvind Goyal, Lotus Development Corporation\cell
+\pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s15\sb100\sl-260\slmult0\widctlpar\intbl \f8\fs20\cf1 David Goodhand, Microsoft\cell Steve Hanna, ON Technology\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s15\sb100\sl-260\slmult0
+\widctlpar\intbl \f8\fs20\cf1 John Hansen, Starfish Software\cell Niraj Jain, Oracle Corporation\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s15\sb100\sl-260\slmult0\widctlpar\intbl \f8\fs20\cf1 Del Jensen, Novell\cell \pard
+\s15\sb100\sl-260\slmult0\widctlpar\intbl Bruce M. Johnston, Lotus Development Corporation\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s15\sb100\sl-260\slmult0\widctlpar\intbl \f8\fs20\cf1 Dr. Mark K. Joseph, Attachmate Corporation{
+\f2\fs24 \cell }Bruce Kahn, Iris Associates\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s15\sb100\sl-260\slmult0\widctlpar\intbl \f8\fs20\cf1 Don Lavange, Novell\cell Larry Mason, Microsystems Software, Inc.\cell \pard\plain
+\widctlpar\intbl \f4\fs20 \row \pard\plain \s15\sb100\sl-260\slmult0\widctlpar\intbl \f8\fs20\cf1 Skip Montanaro, Automatrix, Inc.\cell Pete O\rquote Leary, Clear Blue Networking Systems, Inc.\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain
+\s15\sb100\sl-260\slmult0\widctlpar\intbl \f8\fs20\cf1 Ron Rassner, Creative Networks, Inc.\cell Vinod Seraphin, Lotus Development Corporation\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s15\sb100\sl-260\slmult0\widctlpar\intbl
+\f8\fs20\cf1 Uppili Srivivasan, Oracle Corporation\cell Tom Steppe, OnTime/Divison of FTP Software\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s15\sb100\sl-260\slmult0\widctlpar\intbl \f8\fs20\cf1 Dean Stevens, Now Software, Inc.\cell
+Budi Sutardja\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s15\sb100\sl-260\slmult0\widctlpar\intbl \f8\fs20\cf1 Robert Tatar, Automatrix, Inc.\cell Yvonne Tso, SunSoft\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \trowd
+\trgaph108\trleft-108 \cellx4320\cellx8748 \pard\plain \s15\sb100\sl-260\slmult0\widctlpar\intbl \f8\fs20\cf1 Mike Weston, Netscape Communications Corporation.\cell \pard \s15\sb100\sl-260\slmult0\widctlpar\intbl Steve Wincor, Lockheed Martin\cell
+\pard\plain \widctlpar\intbl \f4\fs20 {\f8\cf1 \row }\pard\plain \s15\sb100\sl-260\slmult0\widctlpar \f8\fs20\cf1
+\par \pard \s15\li864\sb100\sl-260\slmult0\widctlpar \sect \sectd \psz1\pgnlcrm\linex0\colsx0 {\footerl \pard\plain \s29\widctlpar\brdrt\brdrs\brdrw15\brsp40 \tqc\tx4320\tqr\tx8640 \f4\fs20 {\field{\*\fldinst PAGE \\* roman \\* MERGEFORMAT }{\fldrslt {
+\lang1024 vi}}}\tab \tab {\field{\*\fldinst TITLE \\* MERGEFORMAT }{\fldrslt vCalendar Specification, v0.4}}
+\par }{\footerr \pard\plain \s29\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqc\tx4320\tqr\tx8640 \f4\fs20 {\field{\*\fldinst STYLEREF "Pr.Preface" \\* MERGEFORMAT }{\fldrslt {\lang1024 Reference Information}}}\tab \tab {\field{\*\fldinst PAGE \\* roman \\
+* MERGEFORMAT }{\fldrslt {\lang1024 v}}}
+\par }\pard\plain \s90\li864\sb100\sa240\sl-400\slmult0\keepn\nowidctlpar\tx864 \b\f9\fs36\cf1 {\cchs256 Reference Information
+\par }\pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1
+The cited references contain provisions which, through reference in this specification, constitute provisions of this specification. At the time of publication, the indicated versions in the following references were valid. Parties to agreements based on
+this specification are encouraged to research the possibility of revised standards.
+\par \pard\plain \s22\fi-289\li1224\sb100\sa100\sl-260\slmult0\widctlpar\tx1224\tldot\tx3685 \f8\fs20\cf1 {\f31\fs14 \bullet \tab }ANSI X3.4-1977, {\i Code for Information Interchange}, American National Standards Institute, 1977.
+\par \pard \s22\fi-289\li1224\sb100\sa100\sl-260\slmult0\widctlpar\tx1224\tldot\tx3685 \bullet \tab IETF RFC 1738, {\i Universal Resource Locator}, December 1994.
+\par \pard \s22\fi-289\li1224\sb100\sa100\sl-260\slmult0\widctlpar\tx1224\tldot\tx3685 \bullet \tab IETF Network Working Group RFC 1766, {\i Tags for the Identification of Languages,} March 1995.
+\par {\f31\fs14 \bullet \tab }ISO 639, {\i Code for The Representation of names of languages}, International Organization for Standardization, April, 1988.
+\par {\f31\fs14 \bullet \tab }ISO 3166, {\i Codes for The Representation of names of countries}, International Organization for Standardization, December, 1993.
+\par \pard \s22\fi-289\li1224\sb100\sa100\sl-260\slmult0\widctlpar\tx1224\tldot\tx3685 {\f31\fs14 \bullet \tab }ISO 8601, {\i Data elements and interchange formats\emdash Information interchange\emdash Representation of dates and times}
+, International Organization for Standardization, June, 1988.
+\par \pard \s22\fi-289\li1224\sb100\sa100\sl-260\slmult0\nowidctlpar\tx1224\tldot\tx3685 {\f31\fs14 \bullet \tab }ISO 8601, {\i Technical Corrigendum 1, Data elements and interchange formats\emdash Information interchange\emdash
+Representation of dates and tmes}, International Organization for Standardization, May, 1991.
+\par \bullet \tab ISO 8859-1, {\i Information Processing\emdash 8-Bit single-byte coded graphic character sets\emdash Part 1: Latin Alphabet No. 1,} International Organization for Standardization, February, 1987.
+\par \bullet \tab ISO/IEC 9070, {\i Information Technology\emdash SGML Support Facilities\emdash Registration Procedures for Public Text Owner Identifiers,} Second Edition, International Organization for Standardization, April, 1991.
+\par \bullet \tab RFC1521, {\i MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for Specifying and Describing the Format of Internet Message Bodies,} Network Working Group, September, 1993.
+\par \pard \s22\fi-289\li1224\sb100\sa100\sl-260\slmult0\nowidctlpar\tx1224\tldot\tx3685 \bullet \tab XAPIA CSA, {\i Calendaring and Scheduling Application Programming Interface (CSA) Version 1.0,} X.400 API Association, November 15, 1994.
+\par \pard \s22\fi-289\li1224\sb100\sa100\sl-260\slmult0\nowidctlpar\tx1224\tldot\tx3685
+\par \pard \s22\fi-289\li1224\sb100\sa100\sl-260\slmult0\widctlpar\tx1224\tldot\tx3685 \sect \sectd \margtsxn2520\psz1\pgnlcrm\linex0\colsx0 {\headerl \pard\plain \s55\sl-240\slmult0\widctlpar\brdrb\brdrth\brdrw45\brsp20 \f32\fs20\cf1
+\par \pard \s55\sl-240\slmult0\widctlpar\brdrb\brdrth\brdrw45\brsp20
+\par }{\headerr \pard\plain \s55\sl-240\slmult0\widctlpar\brdrb\brdrth\brdrw45\brsp20 \f32\fs20\cf1
+\par \pard \s55\sl-240\slmult0\widctlpar\brdrb\brdrth\brdrw45\brsp20
+\par }{\footerl \pard\plain \s29\widctlpar\brdrt\brdrs\brdrw15\brsp40 \tqc\tx4320\tqr\tx8640 \f4\fs20 {\field{\*\fldinst PAGE \\* MERGEFORMAT }{\fldrslt {\lang1024 viii}}}\tab \tab {\field{\*\fldinst TITLE \\* MERGEFORMAT }{\fldrslt
+vCalendar Specification, v0.4}}
+\par }{\footerr \pard\plain \s29\widctlpar\brdrt\brdrs\brdrw15\brsp20 \tqc\tx4320\tqr\tx8640 \f4\fs20 {\field{\*\fldinst STYLEREF "Pr.Preface" \\* MERGEFORMAT }{\fldrslt {\lang1024 Contents}}}\tab \tab {\field{\*\fldinst PAGE \\* MERGEFORMAT }{\fldrslt {
+\lang1024 vii}}}
+\par }\pard\plain \s90\li864\sa240\sl-400\slmult0\keepn\widctlpar\tx864 \b\f9\fs36\cf1 {\i\f30 versit}{\b0 Update
+\par }\pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 {\b\i\f30\fs18 versit } is a multivendor development initiative of the communication and computer industries, founded by Apple, AT&T, IBM and Siemens. The {\b\i\f30\fs18 versit }
+parties believe that great potential exists in improving the nature of communications in the business world\emdash
+permitting companies to better manage their quality, productivity, customer satisfaction and cost of operations, while expanding the market opportunities for a variety of product and service vendors. {\b\i\f30\fs18 versit }
+parties will jointly define and support open specifications that facilitate and promote the interoperability of advanced personal information and communication devices, networks and services.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar The {\b\i\f30\fs18 versit }
+vision is to enable diverse communication and computing devices, applications and services from competing vendors to interoperate in all environments. Through developing a series of specifications for interoperability among diverse communications and comp
+uting devices, applications, networks and services, {\b\i\f30\fs18\cchs256 versit }\rquote s vision will become a reality.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar {\b\i\f30\fs18 versit }\rquote s primary development areas are in:
+\par \pard\plain \s22\fi-288\li1224\sb100\sl-260\slmult0\nowidctlpar\tx1224\tldot\tx3685 \f8\fs20\cf1 \bullet \tab Personal Data Interchange (PDI)
+\par \bullet \tab Computer Telephone Integration (CTI)
+\par \bullet \tab Conferencing and Messaging (C&M)
+\par \bullet \tab Wired and Wireless connectivity
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 {\b\i\f30\fs18 versit }specifications are directed at both the decision makers and the implementation teams of:
+\par \pard\plain \s22\fi-288\li1224\sb100\sl-260\slmult0\nowidctlpar\tx1224\tldot\tx3685 \f8\fs20\cf1 \bullet \tab Equipment Manufacturers
+\par \bullet \tab Independent Software Vendors
+\par \bullet \tab Information Service Providers
+\par \bullet \tab Online Service Providers
+\par \bullet \tab Software Houses
+\par \bullet \tab Users
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 {\b\i\f30\fs18 versit }specifications are made available to any interested party. In turn, {\b\i\f30\fs18 versit }encourages the support of our goals by soliciting feedback on {
+\b\i\f30\fs18 versit }specifications.{\cchs256
+\par }All comments relating to {\b\i\f30\fs18 versit }or the material within this specification should be submitted to:
+\par \pard \s15\qc\li864\sb100\sl-260\slmult0\widctlpar {\b\i\f30\fs18 versit } \line (800) 803-6240\line (201) 327-2803 (Outside USA)\line pdi@v{\cchs256 ersit.com\line http://www.versit.com}
+\par \pard\plain \widctlpar \f4\fs20
+\par \pard\plain \s24\li864\sb100\sa140\sl-380\slmult0\keepn\nowidctlpar\tqr\tx432\tx864 \b\f9\fs36\cf1 {\strike \sect }\sectd \margtsxn2520\psz1\pgnlcrm\linex0\colsx0 {\*\pnseclvl1\pndec\pnprev1\pnstart1 {\pntxta .}}{\*\pnseclvl2\pndec\pnprev1\pnstart1
+{\pntxta .}}{\*\pnseclvl3\pndec\pnprev1\pnstart1 {\pntxta .}}{\*\pnseclvl4\pndec\pnprev1\pnstart1 {\pntxta .}}{\*\pnseclvl5\pndec\pnprev1\pnstart1 {\pntxta .}}{\*\pnseclvl6\pndec\pnprev1\pnstart1 {\pntxta .}}{\*\pnseclvl7\pndec\pnprev1\pnstart1
+{\pntxta .}}{\*\pnseclvl8\pndec\pnprev1\pnstart1 {\pntxta .}}{\*\pnseclvl9\pndec\pnprev1\pnstart1 {\pntxta .}}\pard\plain \s90\li864\sb100\sa240\sl-400\slmult0\keepn\nowidctlpar\tx864 \b\f9\fs36\cf1 Contents
+\par \pard\plain \s99\sb360\widctlpar\tqr\tx8640 \b\f5 {\field\fldedit{\*\fldinst TOC \\o "2-4" \\t "chptr_title,1" }{\fldrslt {\lang1024 Section 1 : Introduction\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165325 }{\field{\*\fldinst {\lang1024
+ PAGEREF _Toc367165325 }}{\fldrslt {\lang1024 1}}}}}{\lang1024
+\par }\pard\plain \s99\sb360\widctlpar\tqr\tx8640 \b\f5 {\field\fldedit{\*\fldinst TOC \\o "2-4" \\t "chptr_title,1" }{\fldrslt {\lang1024 Section 1 : Introduction\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165325 }{\field{\*\fldinst {\lang1024
+ PAGEREF _Toc367165 }}{\fldrslt {\lang1024 1}}}}}{\lang1024
+\par }\pard\plain \s100\sb240\widctlpar\tqr\tldot\tx8640 \f4\fs20 {\lang1024 1.1 Overview\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165326 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165326 }}{\fkdrslt {\lang1024 1}}}}}{\lang1024
+\par }\pard \s100\sb240\widctlpar\tqr\tldot\tx8640 {\lang1024 1.2 Scope\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165327 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165327 }}{\fldrslt {\lang1024 2}}}}}{\lang1024
+\par 1.3 Contents\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165328 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165328 }}{\fldrslt {\lang1024 3}}}}}{\lang1024
+\par 1.4 Definitions and Abbreviations\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165329 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165329 }}{\fldrslt {\lang1024 3}}}}}{\lang1024
+\par }\pard\plain \s99\sb360\widctlpar\tqr\tx8640 \b\f5 {\lang1024 Section 2 : vCalendar\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165330 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165330 }}{\fldrslt {\lang1024 5}}}}}{\lang1024
+\par }\pard\plain \s100\sb240\widctlpar\tqr\tldot\tx8640 \f4\fs20 {\lang1024 2.1 Encoding Characteristics\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165331 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165331 }}{\fldrslt {\lang1024 5}}}}}{
+\par }\pard\plain \s100\sb240\widctlpar\tqr\tldot\tx8640 \f4\fs20 {\lang1024 2.1 Encoding Characteristics\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165331 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165331 }}{\fldrslt {\lang1024 5}}}}}{
+\lang1024
+\par }\pard\plain \s101\li240\widctlpar\tqr\tldot\tx8640 \f4\fs20 {\lang1024 2.1.1 vCalendar Object\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165332 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165332 }}{\fldrslt {\lang1024 5}}}}}{\lang1024
+
+\par }\pard\plain \s102\li480\widctlpar\tqr\tldot\tx8640 \f4\fs18 {\lang1024 2.1.1.1 vEvent Object\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165333 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165333 }}{\fldrslt {\lang1024 5}}}}}{\lang1024
+
+\par 2.1.1.2 vTodo Object\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165334 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165334 }}{\fldrslt {\lang1024 6}}}}}{\lang1024
+\par }\pard\plain \s101\li240\widctlpar\tqr\tldot\tx8640 \f4\fs20 {\lang1024 2.1.2 Property\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165335 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165335 }}{\fldrslt {\lang1024 6}}}}}{\lang1024
+\par }\pard \s101\li240\widctlpar\tqr\tldot\tx8640 {\lang1024 2.1.3 Delimiters\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165336 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165336 }}{\fldrslt {\lang1024 7}}}}}{\lang1024
+\par 2.1.4 Encodings\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165337 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165337 }}{\fldrslt {\lang1024 7}}}}}{\lang1024
+\par 2.1.5 Character Set\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165338 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165338 }}{\fldrslt {\lang1024 8}}}}}{\lang1024
+\par 2.1.6 Language\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165339 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165339 }}{\fldrslt {\lang1024 8}}}}}{\lang1024
+\par 2.1.7 Date and Time\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165340 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165340 }}{\fldrslt {\lang1024 8}}}}}{\lang1024
+\par 2.1.8 Time Duration\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165341 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165341 }}{\fldrslt {\lang1024 9}}}}}{\lang1024
+\par 2.1.9 Value Location\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165342 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165342 }}{\fldrslt {\lang1024 9}}}}}{\lang1024
+\par 2.1.10 Binary Values\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165343 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165343 }}{\fldrslt {\lang1024 10}}}}}{\lang1024
+\par 2.1.11 Basic Recurrence Rule Grammar\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165344 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165344 }}{\fldrslt {\lang1024 10}}}}}{\lang1024
+\par }\pard\plain \s102\li480\widctlpar\tqr\tldot\tx8640 \f4\fs18 {\lang1024 2.1.11.1 Daily Rule\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165345 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165345 }}{\fldrslt {\lang1024 10}}}}}{\lang1024
+
+\par 2.1.11.2 Weekly Rule\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165346 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165346 }}{\fldrslt {\lang1024 11}}}}}{\lang1024
+\par 2.1.11.3 Monthly Rule\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165347 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165347 }}{\fldrslt {\lang1024 11}}}}}{\lang1024
+\par 2.1.11.4 Yearly Rule\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165348 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165348 }}{\fldrslt {\lang1024 12}}}}}{\lang1024
+\par 2.1.11.5 Grammar\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165349 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165349 }}{\fldrslt {\lang1024 12}}}}}{\lang1024
+\par 2.1.11.6 Glossary\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165350 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165350 }}{\fldrslt {\lang1024 13}}}}}{\lang1024
+\par 2.1.11.7 Policies\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165351 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165351 }}{\fldrslt {\lang1024 14}}}}}{\lang1024
+\par }\pard\plain \s100\sb240\widctlpar\tqr\tldot\tx8640 \f4\fs20 {\lang1024 2.2 vCalendar Properties\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165352 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165352 }}{\fldrslt {\lang1024 15}}}}}{\lang1024
+
+\par }\pard\plain \s101\li240\widctlpar\tqr\tldot\tx8640 \f4\fs20 {\lang1024 2.2.1 Daylight Savings Rule\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165353 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165353 }}{\fldrslt {\lang1024 15}}}}}{
+\lang1024
+\par }\pard \s101\li240\widctlpar\tqr\tldot\tx8640 {\lang1024 2.2.2 Geographic Position\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165354 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165354 }}{\fldrslt {\lang1024 15}}}}}{\lang1024
+\par 2.2.3 Product Identifier\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165355 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165355 }}{\fldrslt {\lang1024 16}}}}}{\lang1024
+\par 2.2.4 Time Zone\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165356 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165356 }}{\fldrslt {\lang1024 16}}}}}{\lang1024
+\par 2.2.5 Version\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165357 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165357 }}{\fldrslt {\lang1024 16}}}}}{\lang1024
+\par }\pard\plain \s100\sb240\widctlpar\tqr\tldot\tx8640 \f4\fs20 {\lang1024 2.3 vEvent and vTodo Properties\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165358 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165358 }}{\fldrslt {\lang1024 17}}}}}{
+\lang1024
+\par }\pard\plain \s101\li240\widctlpar\tqr\tldot\tx8640 \f4\fs20 {\lang1024 2.3.1 Attachment\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165359 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165359 }}{\fldrslt {\lang1024 17}}}}}{\lang1024
+\par }\pard \s101\li240\widctlpar\tqr\tldot\tx8640 {\lang1024 2.3.2 Attendee\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165360 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165360 }}{\fldrslt {\lang1024 17}}}}}{\lang1024
+\par 2.3.3 Audio Reminder\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165361 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165361 }}{\fldrslt {\lang1024 19}}}}}{\lang1024
+\par 2.3.4 Categories\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165362 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165362 }}{\fldrslt {\lang1024 20}}}}}{\lang1024
+\par 2.3.5 Classification\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165363 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165363 }}{\fldrslt {\lang1024 20}}}}}{\lang1024
+\par 2.3.6 Date/Time Created\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165364 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165364 }}{\fldrslt {\lang1024 21}}}}}{\lang1024
+\par 2.3.7 Date/Time Completed\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165365 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165365 }}{\fldrslt {\lang1024 21}}}}}{\lang1024
+\par 2.3.8 Description\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165366 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165366 }}{\fldrslt {\lang1024 22}}}}}{\lang1024
+\par 2.3.9 Display Reminder\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165367 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165367 }}{\fldrslt {\lang1024 22}}}}}{\lang1024
+\par 2.3.10 Due Date/Time\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165368 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165368 }}{\fldrslt {\lang1024 22}}}}}{\lang1024
+\par 2.3.11 End Date/Time\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165369 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165369 }}{\fldrslt {\lang1024 23}}}}}{\lang1024
+\par 2.3.12 Exception Date/Times\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165370 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165370 }}{\fldrslt {\lang1024 23}}}}}{\lang1024
+\par 2.3.13 Exception Rule\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165371 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165371 }}{\fldrslt {\lang1024 23}}}}}{\lang1024
+\par 2.3.14 Last Modified\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165372 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165372 }}{\fldrslt {\lang1024 23}}}}}{\lang1024
+\par 2.3.15 Location\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165373 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165373 }}{\fldrslt {\lang1024 24}}}}}{\lang1024
+\par 2.3.16 Mail Reminder\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165374 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165374 }}{\fldrslt {\lang1024 24}}}}}{\lang1024
+\par 2.3.17 Number Recurrences\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165375 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165375 }}{\fldrslt {\lang1024 24}}}}}{\lang1024
+\par 2.3.18 Priority\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165376 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165376 }}{\fldrslt {\lang1024 25}}}}}{\lang1024
+\par 2.3.19 Procedure Reminder\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165377 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165377 }}{\fldrslt {\lang1024 25}}}}}{\lang1024
+\par 2.3.20 Related To\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165378 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165378 }}{\fldrslt {\lang1024 25}}}}}{\lang1024
+\par 2.3.21 Recurrence Date/Times\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165379 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165379 }}{\fldrslt {\lang1024 26}}}}}{\lang1024
+\par 2.3.22 Recurrence Rule\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165380 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165380 }}{\fldrslt {\lang1024 26}}}}}{\lang1024
+\par 2.3.23 Resources\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165381 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165381 }}{\fldrslt {\lang1024 26}}}}}{\lang1024
+\par 2.3.24 Sequence Number\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165382 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165382 }}{\fldrslt {\lang1024 27}}}}}{\lang1024
+\par 2.3.25 Start Date/Time\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165383 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165383 }}{\fldrslt {\lang1024 27}}}}}{\lang1024
+\par 2.3.26 Status\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165384 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165384 }}{\fldrslt {\lang1024 27}}}}}{\lang1024
+\par 2.3.27 Summary\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165385 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165385 }}{\fldrslt {\lang1024 28}}}}}{\lang1024
+\par 2.3.28 Time Transparency\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165386 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165386 }}{\fldrslt {\lang1024 28}}}}}{\lang1024
+\par 2.3.29 Uniform Resource Locator\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165387 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165387 }}{\fldrslt {\lang1024 29}}}}}{\lang1024
+\par 2.3.30 Unique Identifier\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165388 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165388 }}{\fldrslt {\lang1024 29}}}}}{\lang1024
+\par }\pard\plain \s100\sb240\widctlpar\tqr\tldot\tx8640 \f4\fs20 {\lang1024 2.4 Miscellaneous Properties\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165389 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165389 }}{\fldrslt {\lang1024 29}}}}}{
+\lang1024
+\par }\pard\plain \s101\li240\widctlpar\tqr\tldot\tx8640 \f4\fs20 {\lang1024 2.4.1 Extensions\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165390 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165390 }}{\fldrslt {\lang1024 29}}}}}{\lang1024
+\par }\pard\plain \s100\sb240\widctlpar\tqr\tldot\tx8640 \f4\fs20 {\lang1024 2.5 Formal Definition\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165391 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165391 }}{\fldrslt {\lang1024 30}}}}}{\lang1024
+
+\par }\pard\plain \s99\sb360\widctlpar\tqr\tx8640 \b\f5 {\lang1024 Section 3 : Internet Recommendations\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165392 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165392 }}{\fldrslt {\lang1024 35}}}}}{
+\lang1024
+\par }\pard\plain \s100\sb240\widctlpar\tqr\tldot\tx8640 \f4\fs20 {\lang1024 3.1 Recommended Practice With SMTP/MIME\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165393 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165393 }}{\fldrslt {\lang1024 35}
+}}}}{\lang1024
+\par }\pard\plain \s101\li240\widctlpar\tqr\tldot\tx8640 \f4\fs20 {\lang1024 3.1.1 Text/Plain Content Type\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165394 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165394 }}{\fldrslt {\lang1024 35}}}}}{
+\lang1024
+\par }\pard \s101\li240\widctlpar\tqr\tldot\tx8640 {\lang1024 3.1.2 Text/X-vCalendar Content Type\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165395 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165395 }}{\fldrslt {\lang1024 36}}}}}{\lang1024
+
+\par }\pard\plain \s100\sb240\widctlpar\tqr\tldot\tx8640 \f4\fs20 {\lang1024 3.2 Recommended Practice With HTTP/HTML\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165396 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165396 }}{\fldrslt {\lang1024 37}
+}}}}{\lang1024
+\par }\pard\plain \s99\sb360\widctlpar\tqr\tx8640 \b\f5 {\lang1024 Section 4 : UI Support Recommendations\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165397 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165397 }}{\fldrslt {\lang1024 41}}}}}{
+\lang1024
+\par }\pard\plain \s100\sb240\widctlpar\tqr\tldot\tx8640 \f4\fs20 {\lang1024 4.1 File System\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165398 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165398 }}{\fldrslt {\lang1024 41}}}}}{\lang1024
+\par }\pard \s100\sb240\widctlpar\tqr\tldot\tx8640 {\lang1024 4.2 Clipboard\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165399 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165399 }}{\fldrslt {\lang1024 41}}}}}{\lang1024
+\par 4.3 Drag/Drop\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165400 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165400 }}{\fldrslt {\lang1024 41}}}}}{\lang1024
+\par }\pard\plain \s99\sb360\widctlpar\tqr\tx8640 \b\f5 {\lang1024 Section 5 : Conformance\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165401 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165401 }}{\fldrslt {\lang1024 43}}}}}{\lang1024
+\par }\pard \s99\sb360\widctlpar\tqr\tx8640 {\lang1024 Section 6 : Extended Recurrence Grammar\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165402 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165402 }}{\fldrslt {\lang1024 44}}}}}{\lang1024
+\par }\pard\plain \s100\sb240\widctlpar\tqr\tldot\tx8640 \f4\fs20 {\lang1024 6.1 Rule Introduction\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165403 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165403 }}{\fldrslt {\lang1024 44}}}}}{\lang1024
+
+\par }\pard \s100\sb240\widctlpar\tqr\tldot\tx8640 {\lang1024 6.2 Grammar\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165404 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165404 }}{\fldrslt {\lang1024 45}}}}}{\lang1024
+\par 6.3 Glossary\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165405 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165405 }}{\fldrslt {\lang1024 46}}}}}{\lang1024
+\par 6.4 Policies\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165406 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165406 }}{\fldrslt {\lang1024 47}}}}}{\lang1024
+\par 6.5 Examples\tab }{\field{\*\fldinst {\lang1024 GOTOBUTTON _Toc367165407 }{\field{\*\fldinst {\lang1024 PAGEREF _Toc367165407 }}{\fldrslt {\lang1024 49}}}}}{\lang1024
+\par }\pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 }}\pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1
+\par \pard\plain \s24\li864\sb100\sa140\sl-380\slmult0\keepn\widctlpar\tqr\tx432\tx864 \b\f9\fs36\cf1 {\*\bkmkstart _Toc346992804}\sect \sectd \margtsxn2520\psz1\pgnrestart\linex0\colsx0 {\footerr \pard\plain \s29\widctlpar\brdrt\brdrs\brdrw15\brsp20
+\tqc\tx4320\tqr\tx8640 \f4\fs20 {\field\fldedit{\*\fldinst STYLEREF "chptr_title" \\* MERGEFORMAT }{\fldrslt }}\tab \tab {\field{\*\fldinst PAGE \\* MERGEFORMAT }{\fldrslt {\lang1024 51}}}
+\par }\pard\plain \s24\li864\sb100\sa140\sl-380\slmult0\keepn\nowidctlpar\tqr\tx432\tx864 \b\f9\fs36\cf1 {\*\bkmkstart _Toc365129064}{\*\bkmkstart _Toc367165325}Section 1 : Introduction{\*\bkmkend _Toc346992804}{\*\bkmkend _Toc365129064}
+{\*\bkmkend _Toc367165325}
+\par {\pntext\pard\plain\b\v\f5\fs28\kerning28 1.\tab}\pard\plain \s1\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl1\pndec\pnprev1\pnstart1\pnsp144 {\pntxta .}}\b\f5\fs28\kerning28 {\cs92\b0\v\f8\fs16 {\*\atnid DS}{\*\atnauthor Dave Stuban}\chatn {\*\annotation
+\pard\plain \s93\widctlpar \f4\fs20 {\field\flddirty{\*\fldinst PAGE \\# "'Page: '#'\line '"{\cs92\fs16 }}{\fldrslt }}{\cs92\fs16 \chatn }
+This entry/line in the section is assigned the style for the level 1 heading. This is done so that a section number can be given in the chapter title (style \ldblquote chptr_title\rdblquote ) and so that \ldblquote heading 1\rdblquote
+ (more specifically, the format/heading numbering of the form \ldblquote 1. Overview\rdblquote ) can be \ldblquote skipped,\rdblquote and the appropriate form for the next-level of heading can be properly displayed (eg., \ldblquote 1.1 Overview
+\rdblquote ). It is, and must be, formatted as \ldblquote hidden text\rdblquote prior to pagination and/or printing.}}{\v \tab \tab
+\par }\pard\plain \s15\li864\sb100\sl-260\slmult0\widctlpar \f8\fs20\cf1 Personal Data Interchange ({\b PDI}
+) occurs every time two or more individuals communicate, in either a business or personal context, face-to-face, or across space and time. Such interchanges frequ
+ently include the exchange of informal information, such as business cards, telephone numbers, addresses, dates and times of appointments, etc. Augmenting PDI with electronics and telecommunications can help ensure that information is quickly and reliably
+ communicated, stored, organized and easily located when needed.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar Personal information, by nature, is complex and diverse. Currently, proprietary standards exist to structure some types of PDI information, but no single, open specification comprehensively ad
+dresses the needs of collecting and communicating PDI information across many common communication channels such as telephones, voice-mail, e-mail, and face-to-face meetings. {\b\i\f30\fs18 versit }
+ is developing a comprehensive family of PDI technologies based on open specifications and interoperability agreements to help meet this technology need.
+\par {\*\bkmkstart _Toc346992805}{\*\bkmkstart _Toc365129065}{\*\bkmkstart _Toc367165326}{\pntext\pard\plain\b\f9\fs28\cf1 1.1\tab}\pard\plain \s2\sb380\sa160\sl-320\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl2\pndec\pnprev1\pnstart1\pnsp144 }
+\b\f9\fs28\cf1 Overview{\*\bkmkend _Toc346992805}{\*\bkmkend _Toc365129065}{\*\bkmkend _Toc367165326}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This specification defines a format for an electronic calendaring and scheduling ({\b\i vCalendar}) format. The vCalendar format allows for the capture of information normall
+y stored within a calendaring and scheduling application; such as a Personal Information Manager or a Group Scheduling product.
+\par The format is suitable as an interchange format between applications or systems. The format is defined independent of the particular method used to transport it. The transport for this exchange might be a file system, point-to-point asynchronous communica
+tion, wired-network transport, or some form of unwired transport.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar a vCalendar is a data stream consisting of one or more vCalenda
+r objects. The individual vCalendar definitions can be identified and parsed within the data stream. The vCalendar data stream may exist as a persistent form in a file system, document management system, network connection between two network endpoints, o
+r in any other digital transport that has an abstraction of a stream of bytes.
+\par Conceptually, a {\i vCalendar Writer} creates vCalendar data streams and a {\i vCalendar Reader} interprets vCalendar data streams. The vCalendar Reader and Writer may be implemented as a
+single application or as separate applications. It is not the intent of this specification to define the implementation of these processes beyond some fundamental capabilities related to the format of the vCalendar data stream and a common set of conforma
+nce requirements.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar
+This specification provides for a clear-text encoding. The specification also includes a formal grammar for the clear-text encoding to aid in the implementation of parsers and to serve as the definitive reference when ambiguities or questi
+ons arise in interpreting the descriptive prose definition of the specification.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar
+The clear-text encoding of this specification can be used in environments which are constrained to 7-bit transfer encodings, short line lengths, and low bandwidth. In addition, the encoding is simple in order to facilitate the implementation of reader and
+ writer applications on small platforms, such as Personal Digital Assistants (PDA), cellular telephones, or alphanumeric pagers.
+\par {\*\bkmkstart _Toc346992806}{\*\bkmkstart _Toc365129066}{\*\bkmkstart _Toc367165327}{\pntext\pard\plain\b\f9\fs28\cf1 1.2\tab}\pard\plain \s2\sb380\sa160\sl-320\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl2\pndec\pnprev1\pnstart1\pnsp144 }
+\b\f9\fs28\cf1 Scope{\*\bkmkend _Toc346992806}{\*\bkmkend _Toc365129066}{\*\bkmkend _Toc367165327}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 The vCalendar is intended to be used for exchanging information about {\b\i event} and {\b\i todo}
+ types of calendaring and scheduling entities. An event is a calendaring and scheduling entity that represents a scheduled amount of time on a calendar. For example, it may be an activity; such as a one-hour, department meeting from 8 AM to 9 AM, tomorrow
+. a todo is a calendaring and scheduling entity that represents an action-item or assignment. For example, it may be an item of work assigned to an individual; such as \ldblquote turn in travel expense today\rdblquote .
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar In today\rquote s bus
+iness environment, this information is typically kept on a paper-based day-planner or calendar. More and more, this type of information is being also managed within electronic Personal Information Manager or Group Scheduling products. It is appropriate, t
+hen that this specification define this information in terms of a paradigm based on a calendaring and scheduling event and todo entities.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar Prior to the introduction of the vCalendar specification, users of such applications typically had to re-key the origi
+nal information, often transcribing it from paper day-planners, scraps of paper or electronic mail messages. With the advent of the vCalendar specification, this information can be exchanged in an automated and consistent fashion.
+\par The basis for this specification have their origin in openly defined, industry specifications; such as the X.400 API Association\rquote
+s Calendaring and Scheduling API (CSA). In addition, this specification has capabilities that were derived from the experience of multi-vendor demonstrations of this capability.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar
+The specification of all date and time values are defined in terms of the ISO 8601 standard for representation of dates and times. The ISO 8601 standard supersedes all other international standards defined at the time this specification was drafted.
+
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar
+Personal data applications such as Personal Information Managers (PIM) often provide an import/export capability using Comma Separated Value (CSV) or Tab Delimited Files (TDF) formats. However, these solutions do not preserve the intent
+ of the originating application. When a CSV and TDF formatis used by a PIM, the meta-data or semantics of the originating object are only apparent to a similar version of the originating application. Exchange of data between such applications is another
+important application of an industry-standard specification for an electronic calendaring and scheduling interchange format, such as the vCalendar specification.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar This specification is intended to be used as a format for exchange of calendaring and schedulin
+g information from one product to another. This exchange may take place using desktop application interaction techniques; such as a file system FILE-OPEN or FILE-SAVE-AS functions, an operating systems clipboard CUT or COPY or PASTE operations, or a user
+interface DRAG and DROP interaction. In addition, this exchange may take place using a wired or wireless network transport; such as LAN or WAN protocols, switched telephone circuits, IrDA-based infra-red \ldblquote beaming\rdblquote
+ of data, or emerging cellular data services. In any of these example cases, the vCalendar format is intended to be a transport- and platform-independent format for exchanging calendaring and scheduling personal data.
+\par {\*\bkmkstart _Toc346992807}{\*\bkmkstart _Toc365129067}{\*\bkmkstart _Toc367165328}{\pntext\pard\plain\b\f9\fs28\cf1 1.3\tab}\pard\plain \s2\sb380\sa160\sl-320\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl2\pndec\pnprev1\pnstart1\pnsp144 }
+\b\f9\fs28\cf1 Contents{\*\bkmkend _Toc346992807}{\*\bkmkend _Toc365129067}{\*\bkmkend _Toc367165328}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\widctlpar \f8\fs20\cf1 This specification is separated into eight sections:
+\par \pard\plain \s22\fi-289\li1224\sb100\sa100\sl-260\slmult0\nowidctlpar\tx1224\tldot\tx3685 \f8\fs20\cf1 \bullet \tab \ldblquote Section 1 : Introduction\rdblquote
+ introduces PDI and the vCalendar specification with an overview, scope statement and section on definitions and abbreviations.
+\par \bullet \tab \ldblquote Section 2 : vCalendar\rdblquote defines the semantics and syntax for a clear-text encoding of the vCalendar.
+\par \pard \s22\fi-289\li1224\sb100\sa100\sl-260\slmult0\nowidctlpar\tx1224\tldot\tx3685 \bullet \tab \ldblquote Section 3: Internet Recommendations\rdblquote
+ specifies a set of guidelines to facilitate the exchange of vCalendar objects over Internet protocols such as HTTP using HTML and SMTP using MIME.
+\par \bullet \tab \ldblquote Section 4 : UI Support Recommendations\rdblquote
+ specifies a set of guidelines to facilitate the exchange of vCalendar objects at the desktop user interface using the file system, clipboard and drag/drop capabilities of the operating system.
+\par \pard \s22\fi-289\li1224\sb100\sa100\sl-260\slmult0\nowidctlpar\tx1224\tldot\tx3685 \bullet \tab \ldblquote Section 5 : Conformance\rdblquote defines minimum conformance requirements to consider while developing support for this vCalendar specification.
+
+\par \bullet \tab \ldblquote Section 6 : Extended Recurrence Rule Grammar\rdblquote defines reference information on an extended recurrence rule grammar, copied from the XAPIA CSA Specification.
+\par {\*\bkmkstart _Toc346992808}{\*\bkmkstart _Toc365129068}{\*\bkmkstart _Toc367165329}{\pntext\pard\plain\b\f9\fs28\cf1 1.4\tab}\pard\plain \s2\sb380\sa160\sl-320\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl2\pndec\pnprev1\pnstart1\pnsp144 }
+\b\f9\fs28\cf1 Definitions and Abbreviations{\*\bkmkend _Toc346992808}{\*\bkmkend _Toc365129068}{\*\bkmkend _Toc367165329}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\widctlpar \f8\fs20\cf1 Definitions and abbreviations used within this specification follow.
+\par \pard\plain \s32\fi-432\li1295\sb100\sa100\sl-260\slmult0\widctlpar \f8\fs20\cf1 {\b\i API}: Application Programming Interface
+\par {\b\i Electronic Calendar}: Also know as vCalendar.
+\par \pard \s32\fi-432\li1295\sb100\sa100\sl-260\slmult0\widctlpar {\b\i FPI}: Formal Public Identifier. a string expression that represents a public identifier for an object. FPI syntax is defined by ISO 9070.
+\par \pard \s32\fi-432\li1295\sb100\sa100\sl-260\slmult0\widctlpar {\b\i GUID}: Globally Unique IDentifier
+\par \pard \s32\fi-432\li1295\sb100\sa100\sl-260\slmult0\widctlpar {\b\i Internet}: a WAN connecting thousands of disparate networks in industry, education, government, and research. The Internet uses TCP/IP as the standard for transmitting information.
+\par \pard \s32\fi-432\li1295\sb100\sa100\sl-260\slmult0\widctlpar {\b\i ISO}: Organization for International Standardization; a worldwide federation of national standards bodies (ISO Member bodies).
+\par \pard \s32\fi-432\li1295\sb100\sa100\sl-260\slmult0\widctlpar {\b\i MIME}: Multipurpose Internet Mail Extensions, as defined in RFC1521.
+\par {\b\i PDA}: Personal Digital Assistant computing device
+\par \pard \s32\fi-432\li1295\sb100\sa100\sl-260\slmult0\widctlpar {\b\i PDI}: Personal Data Interchange, a collaborative applic
+ation area which involves the communication of data between people who have a business or personal relationship, but do not necessarily share a common computing infrastructure.
+\par \pard \s32\fi-432\li1295\sb100\sa100\sl-260\slmult0\widctlpar {\b\i PIM}: Personal Information Manager
+\par \pard \s32\fi-432\li1295\sb100\sa100\sl-260\slmult0\widctlpar {\b\i RFC### documents}: Internet \ldblquote Request For Comment\rdblquote documents (i.e., RFC822, RFC1521, etc.).
+\par {\b\i URL}: Uniform Resource Locator; a string expression that can represent any resource on the Internet or local system. RFC 1738 defines the syntax for an URL.
+\par \pard \s32\fi-432\li1295\sb100\sa100\sl-260\slmult0\widctlpar {\b\i UTC}: Universal Time Coordinated; also known as UCT, for Universal Coordinated Time.
+\par \pard \s32\fi-432\li1295\sb100\sa100\sl-260\slmult0\widctlpar {\b\i vCalendar}
+: The generic term for an electronic, virtual collection of calendaring and scheduling information that can be transferred between computers, PDAs, or other electronic devices through telephone lines, or e-mail networks, or infrared links. How, when, why,
+ and where vCalendar are used depends on the applications developed utilizing a vCalendar.
+\par \pard \s32\fi-432\li1295\sb100\sa100\sl-260\slmult0\widctlpar {\b\i WAN}: Wide-Area Network
+\par \pard \s32\fi-432\li1295\sb100\sa100\sl-260\slmult0\widctlpar
+\par \pard\plain \s24\li864\sb100\sa140\sl-380\slmult0\keepn\nowidctlpar\tqr\tx432\tx864 \b\f9\fs36\cf1 {\*\bkmkstart _Toc340018649}{\*\bkmkstart _Toc345308899}{\*\bkmkstart _Toc346992813}\sect \sectd \margtsxn2520\psz1\linex0\colsx0 \pard\plain
+\s24\li864\sb100\sa140\sl-380\slmult0\keepn\widctlpar\tqr\tx432\tx864 \b\f9\fs36\cf1 {\*\bkmkstart _Toc346992854}{\*\bkmkstart _Toc365129069}{\*\bkmkstart _Toc367165330}{\*\bkmkend _Toc340018649}{\*\bkmkend _Toc345308899}{\*\bkmkend _Toc346992813}
+Section 2 : {\*\bkmkend _Toc346992854}vCalendar{\*\bkmkend _Toc365129069}{\*\bkmkend _Toc367165330}
+\par {\pntext\pard\plain\b\v\f5\fs28\kerning28 2.\tab}\pard\plain \s1\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl1\pndec\pnprev1\pnstart1\pnsp144 {\pntxta .}}\b\f5\fs28\kerning28 {\cs92\b0\v\f8\fs16 {\*\atnid DS}{\*\atnauthor Dave Stuban}\chatn {\*\annotation
+\pard\plain \s93\widctlpar \f4\fs20 {\field\flddirty{\*\fldinst PAGE \\# "'Page: '#'\line '"{\cs92\fs16 }}{\fldrslt }}{\cs92\fs16 \chatn }
+This entry/line in the section is assigned the style for the level 1 heading. This is done so that a section number can be given in the chapter title (style \ldblquote chptr_title\rdblquote ) and so that \ldblquote heading 1\rdblquote
+ (more specifically, the format/heading numbering of the form \ldblquote 1. Overview\rdblquote ) can be \ldblquote skipped,\rdblquote and the appropriate form for the next-level of heading can be properly displayed (eg., \ldblquote 1.1 Overview
+\rdblquote ). It is, and must be, formatted as \ldblquote hidden text\rdblquote prior to pagination and/or printing.}}{\v \tab \tab
+\par }\pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This section defines the semantics and syntax for encoding the vCalendar in a simple, clear-text encoding.
+\par {\*\bkmkstart _Toc340018694}{\*\bkmkstart _Toc345308941}{\*\bkmkstart _Toc346992855}{\*\bkmkstart _Toc365129070}{\*\bkmkstart _Toc367165331}{\pntext\pard\plain\b\f9\fs28\cf1 2.1\tab}\pard\plain \s2\sb380\sa160\sl-320\slmult0
+\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl2\pndec\pnprev1\pnstart1\pnsp144 }\b\f9\fs28\cf1 Encoding Characteristics{\*\bkmkend _Toc340018694}{\*\bkmkend _Toc345308941}{\*\bkmkend _Toc346992855}{\*\bkmkend _Toc365129070}{\*\bkmkend _Toc367165331}
+
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 The following characteristics are specific to this encoding.
+\par {\*\bkmkstart _Toc340018697}{\*\bkmkstart _Toc345308943}{\*\bkmkstart _Toc346992857}{\*\bkmkstart _Toc365129071}{\*\bkmkstart _Toc367165332}{\pntext\pard\plain\b\f9\cf1\kerning28 2.1.1\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0
+\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f9\cf1\kerning28 vCalendar Object{\*\bkmkend _Toc340018697}{\*\bkmkend _Toc345308943}{\*\bkmkend _Toc346992857}{\*\bkmkend _Toc365129071}
+{\*\bkmkend _Toc367165332}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 a vCalendar data stream may include one or more vCalendar objects. An individual vCalendar object is identified within a data stream by the appearance of the Begin vCalendar Delimiter:
+
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 BEGIN:VCALENDAR
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 The sentinel string must appear as the first characters in the data stream or the first characters on a line.
+\par The vCalendar object is terminated by the appearance of the End vCalendar Delimiter as the first characters on a line:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 END:VCALENDAR
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 {\*\bkmkstart _Toc340018698}{\*\bkmkstart _Toc345308944}{\*\bkmkstart _Toc346992858}
+The vCalendar object is a container for calendaring and scheduling entities. These can include either event or todo entities.
+\par {\*\bkmkstart _Toc365129072}{\*\bkmkstart _Toc367165333}{\pntext\pard\plain\b\i\f9\fs20\kerning28 2.1.1.1\tab}\pard\plain \s4\sb120\sa80\keep\keepn\widctlpar{\*\pn \pnlvl4\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\i\f9\fs20\kerning28 vEvent Object
+{\*\bkmkend _Toc365129072}{\*\bkmkend _Toc367165333}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1
+a vEvent is a grouping of calendaring and scheduling properties that define an entity that represents a scheduled amount of time on a calendar. For example, it may be an activity; such as a one-hour, department meeting from 8 AM to 9 AM, tomorrow.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar An individual vEvent entity is identified within a vCalendar object by the appearance of the delimiter:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 BEGIN:VEVENT
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 The sentinel string must appear as the first characters on a line.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar The vEvent entity is terminated with the appearance of the following delimiter string as the first characters on a line
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 END:VEVENT
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1
+The vEvent entity can not be nested within another vEvent or vTodo entity. If vEvent entities need to be related to each other or to a vTodo entity, they can specify relationship with the RELATED-TO property.
+\par {\*\bkmkstart _Toc365129073}{\*\bkmkstart _Toc367165334}{\pntext\pard\plain\b\i\f9\fs20\kerning28 2.1.1.2\tab}\pard\plain \s4\sb120\sa80\keep\keepn\widctlpar{\*\pn \pnlvl4\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\i\f9\fs20\kerning28 vTodo Object
+{\*\bkmkend _Toc365129073}{\*\bkmkend _Toc367165334}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 a vTodo is a grouping of calendari
+ng and scheduling properties that define an entity that represents an action-item or assignment. For example, it may be an item of work assigned to an individual; such as \ldblquote turn in travel expense today\rdblquote .
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar An individual vTodo entity is identified within a vCalendar object by the appearance of the delimiter:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 BEGIN:VTODO
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 The sentinel string must appear as the first characters on a line.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar The vTodo entity is terminated with the appearance of the following delimiter string as the first characters on a line
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 END:VTODO
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1
+The vTodo entity can not be nested within another vTodo or vEvent entity. If vTodo entities need to be related to each other or to a vEvent entity, they can specify a relationship with the RELATED-TO property.
+\par {\*\bkmkstart _Toc365129074}{\*\bkmkstart _Toc367165335}{\pntext\pard\plain\b\f9\cf1\kerning28 2.1.2\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 Property{\*\bkmkend _Toc340018698}{\*\bkmkend _Toc345308944}{\*\bkmkend _Toc346992858}{\*\bkmkend _Toc365129074}{\*\bkmkend _Toc367165335}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 a {\i property }is the definition of an individual attribute describing the event or todo associated with the vCalendar. a property takes the following form:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 {\f5 PropertyName [\lquote ;\lquote
+ PropertyParameters] \rquote :\lquote PropertyValue}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 as shown in the following example:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 DTSTART:19960415T083000
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 {\*\bkmkstart _Toc340018699}A property takes the fo
+rm of one or more lines of text. The specification of property names and property parameters is case insensitive. The property name can be one of a set of pre-defined strings. The property name must appear as the first characters on a line. In the previou
+s example, \ldblquote DTSTART\rdblquote is the name of the Start Date/Time property. Property values are specified as strings. In the previous example, \ldblquote 19960415T083000\rdblquote
+ is the ISO 8601 formatted value for the Start Date/Time property.
+\par a property value can be further qualifie
+d with a property parameter expression. Property parameter expressions are delimited from the property name with a Semi-colon character (ASCII 59). a Semi-colon in a property parameter value must be escaped with a Backslash character (ASCII 92). The prope
+rty parameter expressions are specified as either a name=value or a value string. The value string can be specified alone in those cases where the value is unambiguous. For example a complete property parameter specification might be:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 DESCRIPTION;ENCODING=Q
+UOTED-PRINTABLE:Don\rquote t forget to order Girl=\line Scout cookies from Stacey today!\tab //Full property parameter expression
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 a valid short version of the same property parameter specification might be:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 DESCRIPTION;QUOTED-PRINTABLE:Don
+\rquote t forget to order Girl=\line Scout cookies from Stacey today!\tab //Full property parameter expression
+\par {\*\bkmkstart _Toc345308945}{\*\bkmkstart _Toc346992859}{\*\bkmkstart _Toc365129075}{\*\bkmkstart _Toc367165336}{\pntext\pard\plain\b\f9\cf1\kerning28 2.1.3\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3
+\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f9\cf1\kerning28 Delimiters{\*\bkmkend _Toc345308945}{\*\bkmkend _Toc346992859}{\*\bkmkend _Toc365129075}{\*\bkmkend _Toc367165336}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Individual lines within the vCalendar data stream are delimited by the (RFC 822) line break, which is a CRLF sequence (ASCII decimal 13, followed by ASCII decimal 10). Long lines
+of text can be split into a multiple-line representation using the RFC 822 \ldblquote folding\rdblquote
+ technique. That is, wherever there may be linear white space (NOT simply LWSP-chars), a CRLF immediately followed by at least one LWSP-char may instead be inserted. For example the line:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1
+DESCRIPTION:This is a very long description that exists on a long line.
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Can be represented as:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1
+DESCRIPTION:This is a very long description \line that exists on a long line.
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 The process of moving from this folded multiple-line representation of a property definition to its single line representation is called \ldblquote unfolding\rdblquote
+. Unfolding is accomplished by regarding CRLF immediately followed by a LWSP-char as equivalent to the LWSP-char.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar It is recommended that folding be limited to higher-level syntactic breaks in structured components of the property definition.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar a formatted text line break in a property value, must also be specified by a (RFC 822) line break, which is a CRLF sequence. However, since the CRLF sequence is used to delimit a line, proper
+ty values with formatted line breaks (i.e., multiple lines) must be encoded using an alternate encoding of either Quoted-Printable or Base64, as defined in RFC 1521.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar For example, in the Quoted-Printable encoding the multiple lines of formatted text are separated with a Quoted-Printable CRLF sequence of \ldblquote =0D\rdblquote followed by \ldblquote =0A\rdblquote
+ followed by a Quoted-Printable softline break sequence of \ldblquote =\rdblquote . Quoted-Printable lines of text must also be limited to less than 76 characters. The 76 characters does not include the CR
+LF (RFC 822) line break sequence. For example a multiple line DESCRIPTION value of:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 Project XYZ Final Review\line
+Conference Room - 3b\line Come Prepared.
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Would be represented in a Quoted-Printable encoding as:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1
+DESCRIPTION;ENCODING=QUOTED-PRINTABLE:Project XYZ Final Review=d=a=\line Conference Room - 3b=d=a=\line Come Prepared.
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1
+Property parameter substrings are delimited by a field delimiter, specified by the Semi-colon character (ASCII decimal 59). a Semi-colon in a property parameter value must be escaped with a Backslash character (ASCII 92).
+\par Compound property values are delimited by a field delimiter, specified by the Semi-colon character (ASCII decimal 59). a Semi-colon in a component of a compound property value must be escaped with a Backslash character (ASCII 92).
+\par {\*\bkmkstart _Toc365129076}{\*\bkmkstart _Toc367165337}{\pntext\pard\plain\b\f9\cf1\kerning28 2.1.4\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 Encodings{\*\bkmkend _Toc365129076}{\*\bkmkend _Toc367165337}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 The default encoding for the vCalendar object is 7-Bit. The default encoding can be overridden for an individual property value by using the \ldblquote ENCODING\rdblquote
+ property parameter. This parameter value can be either \ldblquote BASE64\rdblquote , \ldblquote QUOTED-PRINTABLE\rdblquote , or \ldblquote 8-bit\rdblquote . This parameter may be used on any property.
+\par Some transports (e.g., MIME based electronic mail) may also provide an encoding property at the transport wrapper level. This property can be used in these cases for transporting a vCalendar data stream that has been defined using a default encoding other
+ than 7-bit (e.g., 8-bit).
+\par {\*\bkmkstart _Toc365129077}{\*\bkmkstart _Toc367165338}{\pntext\pard\plain\b\f9\cf1\kerning28 2.1.5\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 Character Set{\*\bkmkend _Toc365129077}{\*\bkmkend _Toc367165338}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 The default character set is ASCII. The default character set can be overridden for an individual property value by using the \ldblquote CHARSET\rdblquote property parameter. This pro
+perty parameter may be used on any property. However, the use of this parameter on some properties may not make sense.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar Any character set registered with the Internet Assigned Numbers Authority (IANA) can be specified by this property parameter. For example, ISO 8859-8 or the Latin/Hebrew character set is specified by:
+
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 DESCRIPTION;CHARSET=ISO-8859-8:...
+
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Some transports (e.g., MIME based electronic mail) may also provide a character set property at the transport wrapper level. This property can be used in the
+se cases for transporting a vCalendar data stream that has been defined using a default character set other than ASCII (e.g., UTF-8).
+\par {\*\bkmkstart _Toc365129078}{\*\bkmkstart _Toc365129080}{\*\bkmkstart _Toc367165339}{\pntext\pard\plain\b\f9\cf1\kerning28 2.1.6\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144
+{\pntxtb .}}\b\f9\cf1\kerning28 Language{\*\bkmkend _Toc365129080}{\*\bkmkend _Toc367165339}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 The default language is \ldblquote en-US\rdblquote (US English). The default language can be overridden for an individual property value by using the \ldblquote LANGUAGE\rdblquote
+ property parameter. The values for this property are a string consistent with RFC 1766, Tags for the Identification of Languages. This property parameter may be used on any property. However, the use of this parameter on some p
+roperties, such as PHOTO, LOGO, SOUND, TEL, may not make sense. Canadian French would be specified by this parameter by the following:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 SUMMARY;LANGUAGE=fr-CA:...
+\par {\*\bkmkstart _Toc367165340}{\pntext\pard\plain\b\f9\cf1\kerning28 2.1.7\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f9\cf1\kerning28 Date and Time
+{\*\bkmkend _Toc365129078}{\*\bkmkend _Toc367165340}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1
+The date and time values for all vCalendar properties are formatted as a string consistent with the ISO 8601 representation for combinations of dates and times. Either the basic or extended format is allowed. The use of UTC, rather than local time, should
+ be used when ever possible in order to avoid time zone ambiguities. The format for the complete, basic representation of a date and time value is written in the following sequence of characters:
+\par \pard\plain \s25\fi-216\li1440\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1
+<year><month><day>T<hour><minute<second><type designator>
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 For example, 8:30 AM on April 15, 1996 local time would be written as:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 19960415T083000
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 And the same time in UTC based time would be written as:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 19960415T083000Z
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Where a value needs to specify a sequence of date and time values, then the property value is a string made up of a list of date and time values, separated by the field separator
+. For example:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1
+19960101T090000Z; 19960201T090000Z; 19960301T090000Z; 19960401T090000Z; ...
+\par {\*\bkmkstart _Toc365129079}{\*\bkmkstart _Toc367165341}{\pntext\pard\plain\b\f9\cf1\kerning28 2.1.8\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 Time Duration{\*\bkmkend _Toc365129079}{\*\bkmkend _Toc367165341}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1
+The values for time duration or periods of time for all vCalendar properties are formatted as a string conformant with the ISO 8601 basic representation for duration of time. a given duration of a period of time is represented by a character string consis
+ting of the designator \ldblquote {\b P}\rdblquote , optionally including the number of years followed by the designator \ldblquote {\b Y}\rdblquote , optionally including the number of months followed by the designator \ldblquote {\b M}\rdblquote
+, optionally including the number of weeks followed by the designator \ldblquote {\b W}\rdblquote , optionally including the number of days followed by the designator \ldblquote {\b D}\rdblquote
+. The sequence can also contain a time component preceded by the designator \ldblquote {\b T}\rdblquote , optionally including the number of hours followed by the designator \ldblquote {\b H}\rdblquote
+, optionally including the number of minutes followed by the designator \ldblquote {\b M}\rdblquote , optionally including the number of seconds followed by the designator \ldblquote {\b S}\rdblquote . For example:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 P6W
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 a period of six weeks;
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 PT15M
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 a period of 15 minutes;
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 PT1H30M
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 a period of 1 hour and thirty minutes; or
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 P2Y10M15dT10H30M20S
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 a period of 2 years, 10 months, 15 days, 10 hours, 30 minutes, and 20 seconds.
+\par {\*\bkmkstart _Toc365129081}{\*\bkmkstart _Toc367165342}{\pntext\pard\plain\b\f9\cf1\kerning28 2.1.9\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 Value Location{\*\bkmkend _Toc365129081}{\*\bkmkend _Toc367165342}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1
+The default location of the property values is inline with the property. However, for some properties, such as those that specify multimedia values, it is efficient to organize the property value as a separate entity (e.g., a file out on the network). The
+ property parameter \ldblquote {\b VALUE}\rdblquote can be specified to override the \ldblquote {\b INLINE}\rdblquote
+ location of the property value. In the case of the vCalendar being transported within a MIME email message, the property value can be specified as being located in a separate MIME entity with the \ldblquote {\b CONTENT-ID}\rdblquote value; or
+\ldblquote {\b CID}\rdblquote for shorthand. In this case, the property value is the Content-ID for the MIME entity containing the property value. In addition, the property value can be specified as being located out on the network using the \ldblquote {
+\b URL}\rdblquote value. In this case, the property value is the Uniform Resource
+Locator for the Internet resource containing the property value. This property parameter may be used on any property. However, the use of this parameter on some properties may not make sense; for example the Version, Time Zone, Status, Priority, Mail Remi
+nder, etc. properties. The following specifies a value not located inline with the vCalendar but out in the Internet:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1
+ATTACH;VALUE=URL:http://www.abc.com/dir_photos/my_photo.gif
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1
+\par {\*\bkmkstart _Toc365129082}{\*\bkmkstart _Toc345308949}{\*\bkmkstart _Toc346992863}{\*\bkmkstart _Toc365129090}{\*\bkmkstart _Toc367165343}{\pntext\pard\plain\b\f9\cf1\kerning28 2.1.10\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0
+\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f9\cf1\kerning28 Binary Values{\*\bkmkend _Toc345308949}{\*\bkmkend _Toc346992863}{\*\bkmkend _Toc365129090}{\*\bkmkend _Toc367165343}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 The vCalendar specification supports inclusion of binary informa
+tion, such as computer graphic images (e.g., JPEG), digital audio (e.g., WAVE), or video graphic images (e.g., MPEG). The binary information can either be referenced with a Uniform Reference Locator (URL), referenced with a message using a MIME Content-ID
+ of the MIME part that contains the content, or placed inline in the vCalendar as the value of a property. Inline binary information is included as a property value after being character encoded using Base 64 (default) or Quoted-Printable encoding.
+
+\par {\*\bkmkstart _Toc367165344}{\pntext\pard\plain\b\f9\cf1\kerning28 2.1.11\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f9\cf1\kerning28 Basic R
+ecurrence Rule Grammar{\*\bkmkend _Toc365129082}{\*\bkmkend _Toc367165344}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 The specification of recurring events can be simplified by the use of a grammar or rule notation. This specification makes use of the Base Recurrence Rule Grammar from the XAPIA\rquote
+s CSA Specification.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar a recurrence rule is a string or clear-text encoding of a recurrence specification. a recurrence rule is composed of several components. a rule begins with a {\b frequency}
+ which describes the type of repeating event (e.g., daily, weekly, etc.). This is followed by an {\b interval} which indicates how often the frequency repeats (i.e., daily, every third day, etc.). This can be followed by optional {\b frequency modifier}
+ information and either an {\b end date} or a {\b duration}.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar Below is the form of a typical rule. This example causes events to be generated every other week on Tuesday and Thursday, for 8 occurrences:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 W2 TU TH #4
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Where, {\b\f3 W} is the {\b Frequency}, {\b\f3 2} is the {\b Interval}, {\b\f3 TU} and {\b\f3 TH} are the optional {\b Frequency Modifiers}, and {\b\f3 #4} is the {\b\f3 Duration}.
+
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar The basic recurrence rule grammar supports six types of repetition.
+The six types follow the same form with only the frequency name and optional modifier information changing from one type of frequency to the next.
+\par {\*\bkmkstart _Toc365129083}{\*\bkmkstart _Toc367165345}{\pntext\pard\plain\b\i\f9\fs20\kerning28 2.1.11.1\tab}\pard\plain \s4\sb120\sa80\keep\keepn\widctlpar{\*\pn \pnlvl4\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\i\f9\fs20\kerning28 Daily Rule
+{\*\bkmkend _Toc365129083}{\*\bkmkend _Toc367165345}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1
+The daily rule is used for specifying repeating events based on an interval of a day or more. These can range from every day to every 200th day and beyond. The daily rule begins with the letter {\b\f3 D}
+ followed by an interval (representing days) and an optional duration or end date.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar Some examples follow:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 Daily for 10 occurrences:\line \tab {
+\b d1 #10}
+\par Daily until 12/24/94:\line \tab {\b d1 19941224T000000Z}
+\par Every other day - forever:\line \tab {\b d2 #0}
+\par Every 10 days, 5 occurrences:\line \tab {\b d10 #5}
+\par {\*\bkmkstart _Toc365129084}{\*\bkmkstart _Toc367165346}{\pntext\pard\plain\b\i\f9\fs20\kerning28 2.1.11.2\tab}\pard\plain \s4\sb120\sa80\keep\keepn\widctlpar{\*\pn \pnlvl4\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\i\f9\fs20\kerning28 Weekly Rule
+{\*\bkmkend _Toc365129084}{\*\bkmkend _Toc367165346}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1
+The weekly rule is used for specifying repeating events based on an interval of a week or more. The basic weekly rule has the same form as the daily rule except that the rule begins with a {\b\f3 W}
+ and can contain an optional list of weekdays the events are generated on. For weekly rules, the interval represents weeks. Some examples follow:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 Weekly for 10 occurrences:\line \tab {
+\b W1 #10}
+\par Weekly until 12/24/94:\line \tab {\b W1 19941224T000000Z}
+\par Every other week - forever:\line \tab {\b W2 #0}
+\par \pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 Weekly on Tuesday and \line Thursday for 5 weeks:\line
+\tab {\b W1 TU TH #5}
+\par \pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640
+Every other week on Monday Wednesday and Friday until 12/24/94:\line \tab {\b W2 MO WE FR 19941224T000000Z}
+\par {\*\bkmkstart _Toc365129085}{\*\bkmkstart _Toc367165347}{\pntext\pard\plain\b\i\f9\fs20\kerning28 2.1.11.3\tab}\pard\plain \s4\sb120\sa80\keep\keepn\widctlpar{\*\pn \pnlvl4\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\i\f9\fs20\kerning28 Monthly Rule
+{\*\bkmkend _Toc365129085}{\*\bkmkend _Toc367165347}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 The monthly rule is used for specifying repeating events base on an interval of a month or more. There are two types of monthly recurrence rules. One for {\b by-position} and one for {
+\b by-day}. The by-position rule allows weekdays in the month to be specified in relation to their occurrence in the
+ month. An example would be to specify the third Sunday of the month or the last Friday of the month. An occurrence specifier may be used in monthly by-position rules. The occurrence specifiers control which occurrence of a weekday in a month an event occ
+urs on:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1
+1+, 2+, ... 5+ for the first occurrence, second, ...fifth occurrence of the month.
+\par \pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640
+1-, 2-, ... 5- for the last occurrence, second to last occurrence, etc.
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 a {\b\f3 2+ FR SA} would indicate the second occurrence of Friday and Saturday in the month. a {\b\f3 1- MO}
+ would indicate the first occurrence of Monday working from the end of the month backwards (i.e., the last occurrence). a {\b\f3 2- MO} would be the second to the last Monday of the month.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar a by-day rule allows actual day numbers to be specified such as the 12th day or 29th day.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar The by-position rule begins with a {\b\f3 MP} and the by-day rule begins with a {\b\f3 MD}. The interval in monthly rules represents months. Some examples follow:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1
+Monthly on the 1st Friday for ten occurrences:\line \tab {\b MP1 1+ FR #10}
+\par Monthly on the 1st Friday until 12/24/94:\line \tab {\b MP1 1+ FR 19941224T000000Z}
+\par \pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 Every other month on the 1st and last \line
+Sunday of the month for 10 occurrences:\line \tab {\b MP2 1+ SU 1- SU #10}
+\par Every six months on the 2nd Monday \line thru Friday for 10 occurrences:\line \tab {\b MP6 2+ MO TU WE TH FR #10}
+\par \pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640
+Monthly on the second last Monday of the month for 6 months:
+\par \tab {\b MP1 2- MO #6}
+\par Monthly on the third to the last day of the month, forever:
+\par \tab {\b MD1 3- #0}
+\par \pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640
+Monthly on the 2nd and 15th of the month for 10 occurrences:\line \tab {\b MD1 2 15 #10}
+\par \pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 In the next example LD refers to \ldblquote LastDay
+\rdblquote in a monthly recurrence rule. Monthly on the 1st and last day of the month for 10 occurrences:\line \tab {\b MD1 1 LD #10} or {\b MD1 1 1- #10}
+\par \pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 Every 18 months on the 10th thru 15{\super th}
+ of the month for 10 occurrences:\line \tab {\b MD18 10 11 12 13 14 15 #10}
+\par \pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640
+Monthly on the second to the last day for 5 months. So, if the start date is August 1996, the event would repeat on 8/30/96, 9/29/96, 10/30/96, 11/29/96, and 12/30/96:\line \tab {\b MD1 2- #5
+\par {\*\bkmkstart _Toc365129086}{\*\bkmkstart _Toc367165348}{\pntext\pard\plain\b\i\f9\fs20\kerning28 2.1.11.4\tab}}\pard\plain \s4\sb120\sa80\keep\keepn\widctlpar{\*\pn \pnlvl4\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\i\f9\fs20\kerning28 Yearly Rule
+{\*\bkmkend _Toc365129086}{\*\bkmkend _Toc367165348}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 The yearly rule is used for specifying repeating events based on an interval of a year or more. There are two types of yearly recurrence rules. One for {\b by-month} and one for {\b
+by-day}. The by-month rule allows specific months out of the year to be specified. The by-day allows specific days to be specified. In the by-month rule, the day in the month the rule is to occur on is determined from the initial appointment.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar The by-month rule begins with a {\b\f3 YM} and the by-day rule begins with a {\b\f3 YD}. The interval in yearly rules represents years. Some examples follow:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1
+Yearly in June and July for 10 occurrences:\line \tab {\b YM1 6 7 #10}
+\par Every other year on January, Feb, and March for 10 occurrences:\line \tab {\b YM2 1 2 3 #10}
+\par Every 3rd year on the 1st, 100th and 200th day for 10 occurrences:\line \tab {\b YD3 1 100 200 #10}
+\par {\*\bkmkstart _Toc365129087}{\*\bkmkstart _Toc367165349}{\pntext\pard\plain\b\i\f9\fs20\kerning28 2.1.11.5\tab}\pard\plain \s4\sb120\sa80\keep\keepn\widctlpar{\*\pn \pnlvl4\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\i\f9\fs20\kerning28 Grammar
+{\*\bkmkend _Toc365129087}{\*\bkmkend _Toc367165349}
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 \{\}\tab \tab 0 or more
+\par []\tab \tab 0 or 1
+\par start\tab ::= <daily> [<enddate>] |
+\par \tab \tab <weekly> [<enddate>] |
+\par \tab \tab <monthlybypos> [<enddate>] |
+\par \tab \tab <monthlybyday> [<enddate>] |
+\par \tab \tab <yearlybymonth> [<enddate>] |
+\par \tab \tab <yearlybyday> [<enddate>]
+\par digit ::= <0|1|2|3|4|5|6|7|8|9>
+\par digits ::= <digit> \{<digits>\}
+\par enddate\tab ::= ISO 8601_date_time value(e.g., 19940712T101530Z)
+\par interval\tab ::= <digits>
+\par duration\tab ::= #<digits>
+\par lastday\tab ::= LD
+\par plus\tab \tab ::= +
+\par minus\tab \tab ::= -
+\par daynumber\tab \tab ::= <1-31> [<plus>|<minus>]| <lastday>
+\par daynumberlist\tab ::= daynumber \{<daynumberlist>\}
+\par month\tab \tab ::= <1-12>
+\par monthlist\tab ::= <month> \{<monthlist>\}
+\par day\tab \tab ::= <1-366>
+\par daylist\tab \tab ::= <day> \{<daylist>\}
+\par occurrence\tab ::= <1-5><plus> | <1-5><minus>
+\par occurrencelist \tab ::= <occurrence> \{<occurrencelist>\}
+\par weekday \tab ::= <SU|MO|TU|WE|TH|FR|SA>
+\par weekdaylist \tab ::= <weekday> \{<weekdaylist>\}
+\par daily\tab \tab ::= D<interval> [<duration>]
+\par weekly\tab \tab ::= W<interval> [<weekdaylist>] [<duration>]
+\par monthlybypos \tab ::= MP<interval> [<occurrencelist> <weekdaylist>] [<duration>]
+\par monthlybyday\tab ::= MD<interval> [<daynumberlist>] [<duration>]
+\par yearlybymonth\tab ::= YM<interval> [<monthlist>] [<duration>]
+\par yearlybyday\tab ::= YD<interval> [<daylist>] [<duration>]
+\par {\*\bkmkstart _Toc365129088}{\*\bkmkstart _Toc367165350}{\pntext\pard\plain\b\i\f9\fs20\kerning28 2.1.11.6\tab}\pard\plain \s4\sb120\sa80\keep\keepn\widctlpar{\*\pn \pnlvl4\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\i\f9\fs20\kerning28 Glossary
+{\*\bkmkend _Toc365129088}{\*\bkmkend _Toc367165350}
+\par \pard\plain \s15\fi-1224\li2088\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 enddate\tab Controls when a repeating event terminates. The enddate is the last time an event can occur.
+\par \pard \s15\fi-1224\li2088\sb100\sl-260\slmult0\nowidctlpar interval\tab Defines the frequency in which a rule repeats.
+\par duration\tab Controls the number of events a rule generates.
+\par \pard \s15\fi-1224\li2088\sb100\sl-260\slmult0\nowidctlpar lastday\tab Can be used as a replacement to daynumber to indicate the last day of the month.
+\par \pard \s15\fi-1224\li2088\sb100\sl-260\slmult0\nowidctlpar daynumber\tab a number representing a day of the month.
+\par month\tab a number representing a month of the year.
+\par day\tab a number representing a day of the year.
+\par occurrence\tab Controls which week of the month a particular weekday event occurs.
+\par weekday\tab a symbol representing a day of the week.
+\par daily\tab Defines a rule that repeats on a daily basis.
+\par weekly\tab Defines a rule that repeats on a weekly basis.
+\par monthlybypos\tab Defines a rule that rege%ns on a monthly basis on a relative day and week.
+\par monthlybyday\tab Defines a rule that repeats on a monthly basis on an absolute day.
+\par yearlybymonth\tab Defines a rule that repeats on specific months of the year.
+\par yearlybyday\tab Defines a rule that repeats on specific days of the year.
+\par {\*\bkmkstart _Toc365129089}{\*\bkmkstart _Toc367165351}{\pntext\pard\plain\b\i\f9\fs20\kerning28 2.1.11.7\tab}\pard\plain \s4\sb120\sa80\keep\keepn\widctlpar{\*\pn \pnlvl4\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\i\f9\fs20\kerning28 Policies
+{\*\bkmkend _Toc365129089}{\*\bkmkend _Toc367165351}
+\par {\pntext\pard\plain\f8\fs20\cf1 1.\tab}\pard\plain \s15\fi-360\li1224\sb100\sl-260\slmult0\nowidctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent360\pnhang{\pntxta .}}\f8\fs20\cf1
+The duration portion of a rule defines the total number of events the rule generates, including the first event.
+\par {\pntext\pard\plain\f8\fs20\cf1 2.\tab}Information, not contained in the rule, necessary to determine the next event time and date is derived from the Start Time entry attribute.
+\par {\pntext\pard\plain\f8\fs20\cf1 3.\tab}\pard \s15\fi-360\li1224\sb100\sl-260\slmult0\nowidctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent360\pnhang{\pntxta .}}
+If an end date and a duration is specified in the rule, the recurring event ceases when the end date is reached or the number of events indicated in the duration occur; whichever comes first.
+\par {\pntext\pard\plain\f8\fs20\cf1 4.\tab}\pard \s15\fi-360\li1224\sb100\sl-260\slmult0\nowidctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent360\pnhang{\pntxta .}}If the duration or an end date is not established in the rule (e.g., {\b\f3 d4}
+) the event occurs twice. That is {\b\f3 d4} is equivalent to {\b\f3 d4 #2}.
+\par {\pntext\pard\plain\f8\fs20\cf1 5.\tab}\pard \s15\fi-360\li1224\sb100\sl-260\slmult0\nowidctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent360\pnhang{\pntxta .}}A duration of {\b\f3 #0} means repeat this event forever.
+\par {\pntext\pard\plain\f8\fs20\cf1 6.\tab}\pard \s15\fi-360\li1224\sb100\sl-260\slmult0\nowidctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent360\pnhang{\pntxta .}}Using the occurrence specifier {\b\f3 5+} (e.g. 5th Friday) or {\b\f3 5-}
+ (e.g. 5th from last Friday) in a month that does not contain 5 weeks does not generate an event and thus does not count against the duration. The same applies to providing a day of the month that does not occur in the month. For example the 30{\super th}
+ or 31{\super st} .
+\par {\pntext\pard\plain\f8\fs20\cf1 7.\tab}\pard \s15\fi-360\li1224\sb100\sl-260\slmult0\nowidctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent360\pnhang{\pntxta .}}
+The start time and date of an entry must be synchronized with one of the repeating events defined by its recurrence rule. The following is not allowed:\line \line \tab Initial Appt Date:\tab 7/1/94 (Friday) \line \tab Recurrence Rule:\tab \tab {\b\f3
+W1 MO TH #5} \line \line The following is acceptable:\line \line \tab Initial Appt Date:\tab 7/1/94 (Friday) \line \tab Recurrence Rule:\tab \tab {\b\f3 W1 MO FR #5} or {\b\f3 W1 #5}
+\par {\pntext\pard\plain\f8\fs20\cf1 8.\tab}\pard \s15\fi-360\li1224\sb100\sl-260\slmult0\nowidctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent360\pnhang{\pntxta .}}If the optional {\b\f3 <occurrencelist>} and {\b\f3 <Ökeeeeeldwe¢íyHus>>>u
+ information is missing from a {\b\f3 <monthlybypos>} occurrence the information is derived from the entry attributes. The {\b\f3 <occurrence>} used in the recurring event is a count from the beginning of the month to the entry date and the {\b\f3
+<weekday>} used is the day of the week the entry is scheduled to occur on. \line \line If the {\b\f3 <monthlybypos>} occurrence or {\b <monthlybyday>} occurrence does not list a week day (e.g., {\b\f3 SU }{\f3 or day}{\b\f3 10})
+in the rule, the week day is established from the entry attribute information. As an example the rule {\b\f3 MP1 #3}
+ used in an entry with a start date of 7/20/94 (which is the third Wednesday of the month) repeats on 8/17/94 which is the third Wednesday of the month.
+\par {\*\bkmkstart _Toc340018702}{\*\bkmkstart _Toc345308950}{\*\bkmkstart _Toc346992864}{\*\bkmkstart _Toc365129091}{\*\bkmkstart _Toc367165352}{\*\bkmkend _Toc340018699}{\pntext\pard\plain\b\f9\fs28\cf1 2.2\tab}\pard\plain \s2\sb380\sa160\sl-320\slmult0
+\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl2\pndec\pnprev1\pnstart1\pnsp144 }\b\f9\fs28\cf1 vCalendar Properties{\*\bkmkend _Toc365129091}{\*\bkmkend _Toc367165352}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 The following properties must appear after the {\b BEGIN:VCALENDAR} delimiter but before the occurrence of the {\b BEGIN:VEVENT} or{\f3\fs16 }{\b BEGIN:VTODO}{\f3\fs16 }
+delimiters. These properties apply to the vCalendar object as a whole; unless overridden by a property within the scope of an event or todo entity.
+\par {\*\bkmkstart _Toc340018729}{\*\bkmkstart _Toc345308968}{\*\bkmkstart _Toc346992882}{\*\bkmkstart _Toc365129092}{\*\bkmkstart _Toc367165353}{\pntext\pard\plain\b\f9\cf1\kerning28 2.2.1\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0
+\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f9\cf1\kerning28 Daylight Savings Rule{\*\bkmkend _Toc365129092}{\*\bkmkend _Toc367165353}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This property is identified by the property name {\b DAYLIGHT}. This property defines the daylight savings time rule observed by the \ldblquote home\rdblquote
+ calendar system that created the vCalendar entity.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar
+Many locations adjust their standard time forward or backward by one hour, in order to accommodate seasonal changes in number of daylight hours. Standard time is also known as Winter Time. Daylight savings time is also known as Advanced Time, Summer Ti
+me, or Legal Time in certain countries.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar
+The property value consists of a sequence of components that define the daylight savings time rule. The value consists of the daylight savings time flag, followed by the daylight savings time offset, followed by the date and time that the daylight savings
+ time begins, followed by the date and time that the daylight savings time ends, followed by the standard time designation, followed by the daylight savings time designation. The daylight savings time flag is TRUE if
+daylight savings time is observed, otherwise it is FALSE and no other components are specified. The daylight savings time offset value is specified in a manner consistent with ISO 8601. The property value is a signed numeric indicating the number of hours
+ and possibly minutes from UTC. The date and time that the daylight savings time begins and ends is specified in a manner consistent with ISO 8601 date and time format. The standard time and daylight savings time designations correspond to the customary c
+haracter designations.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar The following are examples of this property:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1
+DAYLIGHT:TRUE;0-6;19960407T025959;19961027T010000;EST;EDT
+\par DAYLIGHT:FALSE
+\par DAYLIGHT:TRUE;0-9;19960407T115959;19961027T100000;PST;PDT
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Support for this property is optional for implementations conforming to this specification.
+\par {\*\bkmkstart _Toc365129093}{\*\bkmkstart _Toc367165354}{\pntext\pard\plain\b\f9\cf1\kerning28 2.2.2\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 Geographic Position{\*\bkmkend _Toc365129093}{\*\bkmkend _Toc367165354}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This property is identified by the property name {\b GEO}. This property specifies information related to the global position of the \ldblquote home\rdblquote
+system that created the vCalendar object. The property value specifie
+s longitude and latitude. The longitude represents the location east and west of the prime meridian as a positive or negative real number, respectively. The latitude represents the location north and south of the equator as a positive or negative real num
+ber, respectively. The following is an example of this property:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 GEO:37.24,-17.87
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Support for this property is optional for implementations conforming to this specification.
+\par {\*\bkmkstart _Toc365129094}{\*\bkmkstart _Toc367165355}{\*\bkmkend _Toc340018729}{\*\bkmkend _Toc345308968}{\*\bkmkend _Toc346992882}{\pntext\pard\plain\b\f9\cf1\kerning28 2.2.3\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0
+\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f9\cf1\kerning28 Product Identifier{\*\bkmkend _Toc365129094}{\*\bkmkend _Toc367165355}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This property is identified by the property name {\b PRODID}. This pr
+operty specifies the identifier for the product that created the vCalendar object. The vendor of the implementation should assure that this is a globally unique identifier; using some technique such as an ISO 9070 FPI value. The following is an example of
+ this property:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1
+PRODID:-//ABC Corporation//NONSGML My Product//EN
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Support for this property is optional for implementations conforming to this specification.
+\par {\*\bkmkstart _Toc365129095}{\*\bkmkstart _Toc367165356}{\pntext\pard\plain\b\f9\cf1\kerning28 2.2.4\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 Time Zone{\*\bkmkend _Toc365129095}{\*\bkmkend _Toc367165356}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This property is identified by the property name {\b TZ}. This property specifies the standard time zone of the \ldblquote home\rdblquote
+ system that created the vCalendar object. The property value is specified in a manner consistent with ISO 8601. The property value is a signed numeric indicating the number of hours and possibly minutes from UTC. Time zones east o
+f UTC are positive numbers. Time zones west of UTC are negative numbers. The following are examples of this property:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 TZ:0-5
+\par TZ:+05:30
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Support for this property is optional for implementations conforming to this specification.
+\par {\*\bkmkstart _Toc365129096}{\*\bkmkstart _Toc367165357}{\pntext\pard\plain\b\f9\cf1\kerning28 2.2.5\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 Version{\*\bkmkend _Toc365129096}{\*\bkmkend _Toc367165357}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This property specifie
+s the identifier corresponding to the highest version number of the vCalendar Specification supported by the implementation that created the vCalendar object. The value of this property must be 1.0 to correspond to this specification..
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar This property is identified by the property name {\b VERSION}. The following is an example of this property:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 VERSION:1.0
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Support for this property is mandatory for implementations conforming to this specification. This property must appear within the vCalendar data stream.
+\par {\*\bkmkstart _Toc365129097}{\*\bkmkstart _Toc367165358}{\pntext\pard\plain\b\f9\fs28\cf1 2.3\tab}\pard\plain \s2\sb380\sa160\sl-320\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl2\pndec\pnprev1\pnstart1\pnsp144 }\b\f9\fs28\cf1 vEvent
+ and vTodo Properties{\*\bkmkend _Toc340018702}{\*\bkmkend _Toc345308950}{\*\bkmkend _Toc346992864}{\*\bkmkend _Toc365129097}{\*\bkmkend _Toc367165358}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 The following properties may appear within an event or todo calendaring and scheduling entity.
+\par {\*\bkmkstart _Toc365129098}{\*\bkmkstart _Toc367165359}{\pntext\pard\plain\b\f9\cf1\kerning28 2.3.1\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 Attachment{\*\bkmkend _Toc365129098}{\*\bkmkend _Toc367165359}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This property is identified by the property name {\b ATTACH}
+. The property defines an attached object to the vCalendar entity. For example, a document to be reviewed at a scheduled event or the process steps for a todo. The property value can be a text string, a reference to another message body part or a referenc
+e to a URL based document.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar Multiple attachments may be specified by including multiple ATTACH properties within the vCalendar entity.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar The following are examples of this property:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1
+ATTACH;VALUE=CONTENT-ID:<jsmith.part3.96082T083000.xyzMail@host1.com>
+\par ATTACH;VALUE=URL:file://xyzCorp.com/pub/reports/r-960812.ps
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Support for this property is optional for implementations conforming to this specification.
+\par {\*\bkmkstart _Toc365129099}{\*\bkmkstart _Toc367165360}{\pntext\pard\plain\b\f9\cf1\kerning28 2.3.2\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 Attendee{\*\bkmkend _Toc365129099}{\*\bkmkend _Toc367165360}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This property is identified by the property name {\b ATTENDEE}. The property defines an attendee to a group event or todo. The default property value is an (RFC 822) address. The
+property may include property parameters {\b ROLE,} for the role of the attendee in the event or todo; {\b STATUS}, for the status of the attendee\rquote s participation in the event or todo, {\b RSVP}
+, for indicating whether the favor of a reply is requested, and {\b EXPECT}, to indicate the expectation of the attendee\rquote s participation by the originator.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar Multiple attendees may be specified by including multiple ATTENDEE properties within the vCalendar entity.
+\par The property value may reference a vCard object. This provides a useful mechanism to allow more than just the address of the attendee to be referenced.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar The ROLE property parameter for each attendee can have the following values:
+\par
+\par \trowd \trgaph108\trleft1260 \clbrdrt\brdrs\brdrw30\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw45\brdrcf1 \cellx4379\clbrdrt\brdrs\brdrw30\brdrcf1 \clbrdrb\brdrs\brdrw45\brdrcf1 \clbrdrr\brdrs\brdrw15 \cellx5896 \pard\plain
+\s48\sb80\sa80\sl-200\slmult0\keepn\nowidctlpar\intbl \b\f9\fs18\cf1 Description\cell \pard \s48\sb80\sa80\sl-200\slmult0\keepn\nowidctlpar\intbl Property Value\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \trowd \trgaph108\trleft1260 \clbrdrl
+\brdrs\brdrw15\brdrcf1 \cellx4379\clbrdrr\brdrs\brdrw15\brdrcf1 \cellx5896 \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 Indicates an attendee at the event or todo\cell \pard \s51\sb80\sa80\sl-220\slmult0
+\nowidctlpar\intbl\tx144 ATTENDEE\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 Indicates organizer of the event, but not owner\cell \pard \s51\sb80\sa80\sl-220\slmult0
+\nowidctlpar\intbl\tx144 ORGANIZER\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 Indicates owner of the event or todo.\cell \pard \s51\sb80\sa80\sl-220\slmult0
+\nowidctlpar\intbl\tx144 OWNER\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \trowd \trgaph108\trleft1260 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw30\brdrcf1 \cellx4379\clbrdrb\brdrs\brdrw30\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cellx5896
+\pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 Indicates a delegate of another attendee.\cell \pard \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 DELEGATE\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain
+\s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1
+\par The default value for this property parameter is ATTENDEE.
+\par The STATUS property parameter for each attendee can have the following values:
+\par
+\par \trowd \trgaph108\trleft1260 \clbrdrt\brdrs\brdrw30\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw45\brdrcf1 \cellx4379\clbrdrt\brdrs\brdrw30\brdrcf1 \clbrdrb\brdrs\brdrw45\brdrcf1 \clbrdrr\brdrs\brdrw15 \cellx5896 \pard\plain
+\s48\sb80\sa80\sl-200\slmult0\keepn\nowidctlpar\intbl \b\f9\fs18\cf1 Description\cell \pard \s48\sb80\sa80\sl-200\slmult0\keepn\nowidctlpar\intbl Property Value\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \trowd \trgaph108\trleft1260 \clbrdrl
+\brdrs\brdrw15\brdrcf1 \cellx4379\clbrdrr\brdrs\brdrw15\brdrcf1 \cellx5896 \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 Indicates todo was accepted by attendee\cell \pard \s51\sb80\sa80\sl-220\slmult0
+\nowidctlpar\intbl\tx144 ACCEPTED\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 Indicates event or todo requires action by attendee\cell \pard \s51\sb80\sa80\sl-220\slmult0
+\nowidctlpar\intbl\tx144 NEEDS ACTION\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 Indicates event or todo was sent out to attendee\cell \pard \s51\sb80\sa80\sl-220\slmult0
+\nowidctlpar\intbl\tx144 SENT\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 Indicates event is tentatively accepted by attendee\cell \pard \s51\sb80\sa80\sl-220\slmult0
+\nowidctlpar\intbl\tx144 TENTATIVE\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 Indicates attendee has confirmed their attendance at the event\cell \pard
+\s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 CONFIRMED\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 Indicates event or todo has been rejected by attendee\cell
+\pard \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 DECLINED\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 Indicates todo has been completed by attendee\cell \pard
+\s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 COMPLETED\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \trowd \trgaph108\trleft1260 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15 \cellx4379\clbrdrb\brdrs\brdrw15 \clbrdrr
+\brdrs\brdrw15\brdrcf1 \cellx5896 \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 Indicates event or todo has been delegated by the attendee to another\cell \pard \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144
+DELEGATED\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1
+\par The default value for this property parameter is NEEDS ACTION.
+\par The RSVP property parameter for each attendee can have the following values:
+\par
+\par \trowd \trgaph108\trleft1260 \clbrdrt\brdrs\brdrw30\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw45\brdrcf1 \cellx4379\clbrdrt\brdrs\brdrw30\brdrcf1 \clbrdrb\brdrs\brdrw45\brdrcf1 \clbrdrr\brdrs\brdrw15 \cellx5896 \pard\plain
+\s48\sb80\sa80\sl-200\slmult0\keepn\nowidctlpar\intbl \b\f9\fs18\cf1 Description\cell \pard \s48\sb80\sa80\sl-200\slmult0\keepn\nowidctlpar\intbl Property Value\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \trowd \trgaph108\trleft1260 \clbrdrl
+\brdrs\brdrw15\brdrcf1 \cellx4379\clbrdrr\brdrs\brdrw15\brdrcf1 \cellx5896 \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 Indicates a reply is requested\cell \pard \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 YES
+\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \trowd \trgaph108\trleft1260 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw30\brdrcf1 \cellx4379\clbrdrb\brdrs\brdrw30\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cellx5896 \pard\plain
+\s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 Indicates a reply is not requested.\cell \pard \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 NO\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain
+\s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1
+\par The default value for this property parameter is NO.
+\par The EXPECT property parameter for each attendee can have the following values:
+\par
+\par \trowd \trgaph108\trleft1260 \clbrdrt\brdrs\brdrw30\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw45\brdrcf1 \cellx4379\clbrdrt\brdrs\brdrw30\brdrcf1 \clbrdrb\brdrs\brdrw45\brdrcf1 \clbrdrr\brdrs\brdrw15 \cellx5896 \pard\plain
+\s48\sb80\sa80\sl-200\slmult0\keepn\nowidctlpar\intbl \b\f9\fs18\cf1 Description\cell \pard \s48\sb80\sa80\sl-200\slmult0\keepn\nowidctlpar\intbl Property Value\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \trowd \trgaph108\trleft1260 \clbrdrl
+\brdrs\brdrw15\brdrcf1 \cellx4379\clbrdrr\brdrs\brdrw15\brdrcf1 \cellx5896 \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 Indicates request is for your information.\cell \pard \s51\sb80\sa80\sl-220\slmult0
+\nowidctlpar\intbl\tx144 FYI\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 Indicates presence is definitely required.\cell \pard \s51\sb80\sa80\sl-220\slmult0
+\nowidctlpar\intbl\tx144 REQUIRE\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 Indicates presence is being requested \cell \pard \s51\sb80\sa80\sl-220\slmult0
+\nowidctlpar\intbl\tx144 REQUEST\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \trowd \trgaph108\trleft1260 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw30\brdrcf1 \cellx4379\clbrdrb\brdrs\brdrw30\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cellx5896
+\pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 Indicates an immediate response needed.\cell \pard \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 IMMEDIATE\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain
+\s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1
+\par The default value for this property parameter is FYI.
+\par The following is an example of this property\rquote s use for a todo:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1
+ATTENDEE;ROLE=OWNER;STATUS=COMPLETED:jsmith@host1.com
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 The following is an example of this property used for specifying multiple attendees to an event:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1
+ATTENDEE;ROLE=OWNER;STATUS=CONFIRMED:John Smith <jsmith@host1.com>\line ATTENDEE;ROLE=ATTENDEE;STATUS=TENTATIVE:Henry Cabot <hcabot@host2.com>\line ATTENDEE;ROLE=DELEGATE;STATUS=CONFIRMED:Jane Doe <jdoe@host1.com>
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 The following is an example of this property with the value specified as an URL reference to a vCard that contains the information about the attendee:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1
+ATTENDEE;ROLE=ATTENDEE;STATUS=CONFIRMED;VALUE=URL;TYPE=VCARD:\line http://www.xyz.com/~myvcard.vcf
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Support for this property is optional for implementations conforming to this specification.
+\par {\*\bkmkstart _Toc365129100}{\*\bkmkstart _Toc367165361}{\pntext\pard\plain\b\f9\cf1\kerning28 2.3.3\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 Audio Reminder{\*\bkmkend _Toc365129100}{\*\bkmkend _Toc367165361}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This property is identified by the property name {\b AALARM}
+. The property defines an audio reminder for the vCalendar entity. An audio reminder is an alarm that is sounded for the event.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar The value for the audio reminder consists of the {\b Run Time}, or the date and time that the reminder is to be executed; {\b Snooze Time}
+, or the duration of time after the Run Time that the reminder is to be dormant prior to being repeated; {\b Repeat Count}, or the number of times that the reminder is to be repeated; and the {\b Audio Content}
+, or the digital sound to be played when the reminder is executed.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar The following are some examples of this property:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1
+AALARM;TYPE=WAVE;VALUE=URL:19960415T235959; ; ; file:///mmedia/taps.wav
+\par \pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640
+AALARM;TYPE=WAVE;VALUE=CONTENT-ID:19960903T060000;PT15M;4;<jsmith.part2.=\line 960901T083000.xyzMail@host1.com>
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 The property has the following additional property parameters:
+\par
+\par \trowd \trgaph108\trleft1260 \clbrdrt\brdrs\brdrw30\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw45\brdrcf1 \cellx4379\clbrdrt\brdrs\brdrw30\brdrcf1 \clbrdrb\brdrs\brdrw45\brdrcf1 \clbrdrr\brdrs\brdrw15 \cellx5896 \pard\plain
+\s48\sb80\sa80\sl-200\slmult0\keepn\nowidctlpar\intbl \b\f9\fs18\cf1 Description\cell \pard \s48\sb80\sa80\sl-200\slmult0\keepn\nowidctlpar\intbl Property Parameter Values\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \trowd \trgaph108\trleft1260
+\clbrdrl\brdrs\brdrw15\brdrcf1 \cellx4379\clbrdrr\brdrs\brdrw15\brdrcf1 \cellx5896 \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 {\b\i TYPE}\cell \pard \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \cell
+\pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 Indicates the MIME basic audio content type.\cell \pard \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 PCM\cell \pard\plain
+\widctlpar\intbl \f4\fs20 \row \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 Indicates the WAVE format for audio content.\cell \pard \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 WAVE\cell \pard\plain
+\widctlpar\intbl \f4\fs20 \row \trowd \trgaph108\trleft1260 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15 \cellx4379\clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15\brdrcf1 \cellx5896 \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144
+\f8\fs16\cf1 Indicates the AIFF format for audio content.\cell \pard \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 AIFF\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar The
+Reminder properties are primarily provided as a means for allowing the capture of alarm information when accessing a calendar system. It may not be an appropriate property to send in an event or todo request.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar Support for this property is optional for implementations conforming to this specification.
+\par {\*\bkmkstart _Toc365129101}{\*\bkmkstart _Toc367165362}{\pntext\pard\plain\b\f9\cf1\kerning28 2.3.4\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 Categories{\*\bkmkend _Toc365129101}{\*\bkmkend _Toc367165362}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This property is identified by the property name {\b CATEGORIES}
+. This property defines the categories for the vCalendar entity. More than one category may be specified as a list of categories separated by the Semi-Colon character (ASCII decimal 59).
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar The following are some examples of this property:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 CATEGORIES:APPOINTMENT;EDUCATION
+
+\par CATEGORIES:MEETING
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Some of the possible values for this property might include the following:
+\par
+\par \trowd \trgaph108\trleft1260 \clbrdrt\brdrs\brdrw30\brdrcf1 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw45\brdrcf1 \clbrdrr\brdrs\brdrw15 \cellx3150 \pard\plain \s48\qc\sb80\sa80\sl-200\slmult0\keepn\nowidctlpar\intbl \b\f9\fs18\cf1 Some Possible
+\par Property Values\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \trowd \trgaph108\trleft1260 \clbrdrl\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15\brdrcf1 \cellx3150 \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 APPOINTMENT\cell
+\pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 BUSINESS\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144
+\f8\fs16\cf1 EDUCATION\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 HOLIDAY\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s51\sb80\sa80\sl-220\slmult0
+\nowidctlpar\intbl\tx144 \f8\fs16\cf1 MEETING\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 MISCELLANEOUS\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain
+\s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 PERSONAL\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 PHONE CALL\cell \pard\plain \widctlpar\intbl
+\f4\fs20 \row \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 SICK DAY\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 SPECIAL OCCASION\cell
+\pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 TRAVEL\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \trowd \trgaph108\trleft1260 \clbrdrl\brdrs\brdrw15 \clbrdrb
+\brdrs\brdrw30\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cellx3150 \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 VACATION\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s15\li864\sb100\sl-260\slmult0
+\nowidctlpar \f8\fs20\cf1 {\*\bkmkstart _Toc365129102}
+\par Support for this property is mandatory for implementations conforming to this specification.
+\par {\*\bkmkstart _Toc367165363}{\pntext\pard\plain\b\f9\cf1\kerning28 2.3.5\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f9\cf1\kerning28 Classification
+{\*\bkmkend _Toc365129102}{\*\bkmkend _Toc367165363}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This property is identified by the property name {\b CLASS}. This property defines the access classification for the vCalendar entity.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar
+a calendar entity access classification is only one component of the general security system within a calendar application. It provides a method of capturing the scope of the access the calendar owner intends for information within an individual calendar
+entry. The access classification of an individual vCalendar entity is useful when measured along with the other security components of a ca
+lendar system (e.g., user authorization, access rights, access role, etc.). Hence, the semantics of the individual access classifications can not be completely defined by this specification. Additionally, due to the \ldblquote blind\rdblquote
+ nature of most exchange process
+es using this specification, these entity classifications can not serve as an enforcement statement for a system receiving a vCalendar data stream. Rather, they provide a method for capturing the intention of the calendar owner for the access to the calen
+dar entry.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar The following is an example of this property:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 CLASS:PUBLIC
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 The property can have the following values:
+\par
+\par \trowd \trgaph108\trleft1260 \clbrdrt\brdrs\brdrw30\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw45\brdrcf1 \cellx4379\clbrdrt\brdrs\brdrw30\brdrcf1 \clbrdrb\brdrs\brdrw45\brdrcf1 \clbrdrr\brdrs\brdrw15 \cellx5896 \pard\plain
+\s48\sb80\sa80\sl-200\slmult0\keepn\nowidctlpar\intbl \b\f9\fs18\cf1 Description\cell \pard \s48\sb80\sa80\sl-200\slmult0\keepn\nowidctlpar\intbl Property Value\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \trowd \trgaph108\trleft1260 \clbrdrl
+\brdrs\brdrw15\brdrcf1 \cellx4379\clbrdrr\brdrs\brdrw15\brdrcf1 \cellx5896 \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 Indicates general, public access.\cell \pard \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144
+PUBLIC\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 Indicates restricted, private access.\cell \pard \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 PRIVATE\cell
+\pard\plain \widctlpar\intbl \f4\fs20 \row \trowd \trgaph108\trleft1260 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw30\brdrcf1 \cellx4379\clbrdrb\brdrs\brdrw30\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cellx5896 \pard\plain
+\s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 Indicates very restricted, confidential access.\cell \pard \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 CONFIDENTIAL\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain
+\s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1
+\par The default value for this property is PUBLIC.
+\par Support for this property is optional for implementations conforming to this specification.
+\par {\*\bkmkstart _Toc365129103}{\*\bkmkstart _Toc367165364}{\pntext\pard\plain\b\f9\cf1\kerning28 2.3.6\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 Date/Time Created{\*\bkmkend _Toc365129103}{\*\bkmkend _Toc367165364}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This property is identified by the property name {\b DCREATED}. Th
+is property specifies the date and time that the vCalendar entity was created within the originating calendar system. This is not generally the same date and time that the vCalendar object was created. The date and time value is the local or UTC based tim
+e expressed in the complete representation, basic format as specified in ISO 8601. The following is example of this property:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 DCREATED:19960329T083000
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Support for this property is optional for implementations conforming to this specification.
+\par {\*\bkmkstart _Toc365129104}{\*\bkmkstart _Toc367165365}{\pntext\pard\plain\b\f9\cf1\kerning28 2.3.7\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 Date/Time Completed{\*\bkmkend _Toc365129104}{\*\bkmkend _Toc367165365}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This property is identified by the property name {\b COMPLETED}
+. This property defines the date and time that the todo was actually completed. The date and time value is expressed in the complete representation, basic format as specified in ISO 8601. The time can either be in local or UTC based time. The following is
+ an example of this property:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 COMPLETED:19960401T235959
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Support for this property is mandatory for implementations conforming to this specification.
+\par {\*\bkmkstart _Toc340018752}{\*\bkmkstart _Toc345308992}{\*\bkmkstart _Toc346992906}{\*\bkmkstart _Toc365129105}{\*\bkmkstart _Toc367165366}{\pntext\pard\plain\b\f9\cf1\kerning28 2.3.8\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0
+\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f9\cf1\kerning28 Description{\*\bkmkend _Toc365129105}{\*\bkmkend _Toc367165366}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This property is identified by the property name {\b DESCRIPTION}
+. This property provides a more complete description of the vCalendar entity, than that provided by the SUMMARY property. The following is an examples of the property with formatted line breaks in the property value:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1
+DESCRIPTION;ENCODING=QUOTED-PRINTABLE:Meeting to provide technical=\line review for \ldblquote Phoenix\rdblquote design. =d=a=\line Happy face Conference Room. Phoenix design team=\line must attend this meeting. RSVP to team leader.
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 The following is an examples of the property with folding of long lines:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1
+DESCRIPTION:Last draft of the new novel is to be completed\line for the editor\rquote s proof today.
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Support for this property is mandatory for implementations conforming to this specification.
+\par {\*\bkmkstart _Toc365129106}{\*\bkmkstart _Toc367165367}{\pntext\pard\plain\b\f9\cf1\kerning28 2.3.9\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 Display Reminder{\*\bkmkend _Toc365129106}{\*\bkmkend _Toc367165367}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This property is identified by the property name {\b DALARM}
+. The property defines a display reminder for the vCalendar entity. a display reminder is an alarm that is popped up into the user interface or otherwise visually displayed for the event.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar The value for the display reminder consists of the {\b Run Time}, or the date and time that the reminder is to be executed; {\b Snooze Time}
+, or the duration of time after the Run Time that the reminder is to be dormant prior to being repeated; {\b Repeat Count}, or the number of times that the reminder is to be repeated; and the {\b Display String}
+, or the text to be displayed when the reminder is executed.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar The following is an example of this property:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1
+DALARM:19960415T235000;PT5M;2;Your Taxes Are Due !!!
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 The Reminder properties are primarily provided as a means for allowing
+ the capture of alarm information when accessing a calendar system. It may not be an appropriate property to send in an event or todo request.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar Support for this property is optional for implementations conforming to this specification.
+\par {\*\bkmkstart _Toc365129107}{\*\bkmkstart _Toc367165368}{\pntext\pard\plain\b\f9\cf1\kerning28 2.3.10\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 Due Date/Time{\*\bkmkend _Toc365129107}{\*\bkmkend _Toc367165368}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This property is identified by the property name {\b DUE}
+. This property defines the date and time that the todo is due to be completed. The date and time value is expressed in the complete representation, basic format as specified in ISO 8601. The time can either be
+in local or UTC based time. The following is an example of this property:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 DUE:19960401T235959Z
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Support for this property is mandatory for implementations conforming to this specification.
+\par {\*\bkmkstart _Toc365129108}{\*\bkmkstart _Toc367165369}{\pntext\pard\plain\b\f9\cf1\kerning28 2.3.11\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 End Date/Time{\*\bkmkend _Toc365129108}{\*\bkmkend _Toc367165369}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This property is identified by the property name {\b DTEND}
+. This property defines the date and time that the event will end. The date and time value is expressed in the complete representation, basic format as specified in ISO 8601. The time can either be in local or UTC based time. Events may have an end date/t
+ime but no start date/time. In that case, the event does not take up any time. The following is an example of this property:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 DTEND:19960401T235959Z
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Support for this property is mandatory for implementations conforming to this specification.
+\par {\*\bkmkstart _Toc365129109}{\*\bkmkstart _Toc367165370}{\pntext\pard\plain\b\f9\cf1\kerning28 2.3.12\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 Exception Date/Times{\*\bkmkend _Toc365129109}{\*\bkmkend _Toc367165370}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This property is identified by the property name {\b EXDATE}
+. This property defines the list of date/time exceptions for a recurring vCalendar entity. The date and time values is expressed in the complete representation, basic format as specified in ISO 86
+01. The times can either be in local or UTC based time. The number of date/time exceptions is specified by the Number Exceptions property. The following is an example of this property:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1
+EXDATE:19960402T010000Z;19960403T010000Z;19960404T010000Z
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Support for this property is optional for implementations conforming to this specification.
+\par {\*\bkmkstart _Toc365129110}{\*\bkmkstart _Toc367165371}{\pntext\pard\plain\b\f9\cf1\kerning28 2.3.13\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 Exception Rule{\*\bkmkend _Toc365129110}{\*\bkmkend _Toc367165371}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This property is identified by the property name {\b EXRULE}. This property defines a rule or repeating pattern for an exception to a recurring vCalendar entity, based
+ on the Basic Recurrence Rule Grammar of XAPIA\rquote s CSA. The value for the property is a pattern specification for the recurrence exception. The following are some examples of this property:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 XRULE:W2 TU TH #2\tab \tab \tab
+// Except every other week, on Tuesday and Thursday
+\par \tab \tab \tab \tab \tab \tab \tab // for 4 occurrences
+\par XRULE:D1 #10\tab \tab \tab \tab // Except daily for 10 occurrences
+\par XRULE:YM1 6 7 #8\tab \tab \tab // Except yearly in June and July for 8 occurrences
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Support for this property is optional for implementations conforming to this specification.
+\par {\*\bkmkstart _Toc365129111}{\*\bkmkstart _Toc367165372}{\pntext\pard\plain\b\f9\cf1\kerning28 2.3.14\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 Last Modified{\*\bkmkend _Toc365129111}{\*\bkmkend _Toc367165372}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This property is identified by the property name {\b LAST-MODIFIED}
+. The property specifies the date and time that the vCalendar entity was last revised. The following is an example of this property:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 LAST-MODIFIED:19960817T133000Z
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Support for this property is optional for implementations conforming to this specification.
+\par {\*\bkmkstart _Toc365129112}{\*\bkmkstart _Toc367165373}{\pntext\pard\plain\b\f9\cf1\kerning28 2.3.15\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 Location{\*\bkmkend _Toc365129112}{\*\bkmkend _Toc367165373}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This property is identified by the property name {\b LOCATION}. The property defines the intended location for a vCalendar entity.
+\par The property value may reference a vCard object. This provides a useful mechanism to specify a location in terms of its electronic business card.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar The following are some examples of this property:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1
+LOCATION:Conference Room - f123, Bldg. 002\tab \tab // or
+\par LOCATION;VALUE=URL;TYPE=VCARD:http://www.xyzcorp.com/~jsmith.vcf
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Support for this property is optional for implementations conforming to this specification.
+\par {\*\bkmkstart _Toc365129113}{\*\bkmkstart _Toc367165374}{\pntext\pard\plain\b\f9\cf1\kerning28 2.3.16\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 Mail Reminder{\*\bkmkend _Toc365129113}{\*\bkmkend _Toc367165374}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This property is identified by the property name {\b MALARM}. The property defines an email address that is to be sent a reminder for the vCalendar entity
+. a mail reminder is an electronic mail address that will be sent a display string as an alarm for the event.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar The value for the procedure reminder consists of the {\b Run Time}, or the date and time that the reminder is to be executed; {\b Snooze Time}
+, or the duration of time after the Run Time that the reminder is to be dormant prior to being repeated; {\b Repeat Count}, or the number of times that the reminder is to be repeated; {\b Email Address}
+, or the (RFC 822) email address that is to be sent the reminder and the {\b Note}, or the textual reminder string that is to be sent to the email address.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar The following is an example of this property:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1
+MALARM:19960416T000000;PT1H;24;IRS@us.gov;The Check Is In The Mail!
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1
+The Reminder properties are primarily provided as a means for allowing the capture of alarm information when accessing a calendar system. It may not be an appropriate property to send in an event or todo request.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar Support for this property is optional for implementations conforming to this specification.
+\par {\*\bkmkstart _Toc365129114}{\*\bkmkstart _Toc367165375}{\pntext\pard\plain\b\f9\cf1\kerning28 2.3.17\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 Number Recurrences{\*\bkmkend _Toc365129114}{\*\bkmkend _Toc367165375}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This property is identified by the property name {\b RNUM}
+. The property defines the number of times the calendar entry will reoccur. The value is equal to the number of recurrences that are specified by the union of the Recurrence Dates, Recurrence Rule, Exception Dates, and Exception Rule property values. The
+following is an example of this property:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 RNUM:3
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 In the event that this value does not match the computed number of recurrences, it will be ignored and the computer number of recurrences will be used.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar Support for this property is optional for implementation conforming to this specification.
+\par {\*\bkmkstart _Toc365129115}{\*\bkmkstart _Toc367165376}{\pntext\pard\plain\b\f9\cf1\kerning28 2.3.18\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 Priority{\*\bkmkend _Toc365129115}{\*\bkmkend _Toc367165376}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This property is identified by the property name {\b PRIORITY}
+. The property defines the priority for the vCalendar entity. The value is an alphanumeric. a value of zero (ASCII decimal 48) specifies an undefined priority. a value of one is the highest priority. a value of two is the second highest priority. Subseque
+nt numbers specify a decreasing ordinal priority. The following is an example of this property:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 PRIORITY:2
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Support for this property is mandatory for implementation conforming to this specification.
+\par {\*\bkmkstart _Toc365129116}{\*\bkmkstart _Toc367165377}{\pntext\pard\plain\b\f9\cf1\kerning28 2.3.19\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 Procedure Reminder{\*\bkmkend _Toc365129116}{\*\bkmkend _Toc367165377}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This property is identified by the property name {\b PALARM}
+. The property defines a procedure reminder for the vCalendar entity. a procedure reminder is a procedure, or application executable that will be run as an alarm for the event.
+\par While this property has many useful purposes, implementors should be aware of the security implications of sending a vCalendar data stream containing this property
+. The security implications are similar to those associated with active messages within electronic mail.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar The value for the procedure reminder consists of the {\b Run Time}, or the date and time that the reminder is to be executed; {\b Snooze Time}
+, or the duration of time after the Run Time that the reminder is to be dormant prior to being repeated; {\b Repeat Count}, or the number of times that the reminder is to be repeated; and the {\b Procedure Name}
+, or the path to the procedure to be run when the reminder is executed.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar The following is an example of this property:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1
+PALARM;VALUE=URL:19960415T235000;PT5M;2;file:///myapps/shockme.exe
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 {\*\bkmkstart OLE_LINK2}
+The Reminder properties are primarily provided as a means for allowing the capture of alarm information when accessing a calendar system. It may not be an appropriate property to send in an event or todo request.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar Support for this property is optional for implementations conforming to this specification.
+\par {\*\bkmkstart _Toc365129117}{\*\bkmkstart _Toc367165378}{\*\bkmkend OLE_LINK2}{\pntext\pard\plain\b\f9\cf1\kerning28 2.3.20\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144
+{\pntxtb .}}\b\f9\cf1\kerning28 Related To{\*\bkmkend _Toc365129117}{\*\bkmkend _Toc367165378}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This property is identified by the property name {\b RELATED-TO}. The property is used to
+ represent relationships or references between this vCalendar entity and another. The property value consists of the persistent, globally unique identifier of another vCalendar entity. This value would be represented in a vCalendar data stream by the UID
+property.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar
+a linked relationship can be specified by a series of entities that each, in turn, refer to their parent entity. a group relationship can be specified by a number of entities that all refer to one common parent entity.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar Changes to a calendar entit
+y referenced by this property may impact the related calendar entity. For example, if a group event changes it start or end date or time, then the related, dependent events will need to have their start and end dates changed in a corresponding way. This p
+roperty is intended only to provide information on the relationship of calendar entities. It is up to the target calendar system to maintain this relationship.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar The following is an example of this property:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1
+RELATED-TO:<jsmith.part7.19961T083000.xyzMail@host3.com>
+\par RELATED-TO:19960401-080045-4000F192713-0052
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Support for this property is optional for implementations conforming to this specification.
+\par {\*\bkmkstart _Toc365129118}{\*\bkmkstart _Toc367165379}{\pntext\pard\plain\b\f9\cf1\kerning28 2.3.21\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 Recurrence Date/Times{\*\bkmkend _Toc365129118}{\*\bkmkend _Toc367165379}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This property is identified by the property name {\b RDATE}
+. This property defines the list of date/times for a recurring vCalendar entity. The date and time values is expressed in the complete representation, basic format as specified in ISO 8601. The times can either be in local or UTC based time. The number of
+ recurring date/times is specified by the Number Recurrences property. The following is an example of this property:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1
+RDATE:19960402T010000Z;19960403T010000Z;19960404T010000Z
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Support for this property is optional for implementations conforming to this specification.
+\par {\*\bkmkstart _Toc365129119}{\*\bkmkstart _Toc367165380}{\pntext\pard\plain\b\f9\cf1\kerning28 2.3.22\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 Recurrence Rule{\*\bkmkend _Toc365129119}{\*\bkmkend _Toc367165380}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This property is identified by the property name {\b RRULE}
+. This property defines a rule or repeating pattern for a recurring vCalendar entity, based on the Basic Recurrence Rule Grammar of XAPIA\rquote s CSA. The value for the property is a pattern specification for the recur
+rence. The following is an example of this property:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 RRULE:W2 TU TH\tab \tab \tab
+// Every other week, on Tuesday and Thursday
+\par RRULE:D1 #10\tab \tab \tab \tab // Daily for 10 occurrences
+\par RRULE:YM1 6 7 #8\tab \tab \tab // Yearly in June and July for 8 occurrences
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Support for this property is optional for implementations conforming to this specification.
+\par {\*\bkmkstart _Toc365129120}{\*\bkmkstart _Toc367165381}{\pntext\pard\plain\b\f9\cf1\kerning28 2.3.23\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 Resources{\*\bkmkend _Toc365129120}{\*\bkmkend _Toc367165381}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This property is identified by the property name {\b RESOURCES}. This property defines the equipment or resources needed in the vCalendar event.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar Some of the values that the property may have include the following:
+\par
+\par \trowd \trgaph108\trleft1260 \clbrdrt\brdrs\brdrw30\brdrcf1 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw45\brdrcf1 \clbrdrr\brdrs\brdrw15 \cellx3150 \pard\plain \s48\qc\sb80\sa80\sl-200\slmult0\keepn\nowidctlpar\intbl \b\f9\fs18\cf1 Some Possible
+\par Property Values\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \trowd \trgaph108\trleft1260 \clbrdrl\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15\brdrcf1 \cellx3150 \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 CATERING\cell
+\pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 CHAIRS\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144
+\f8\fs16\cf1 COMPUTER PROJECTOR\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 EASEL\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s51\sb80\sa80\sl-220\slmult0
+\nowidctlpar\intbl\tx144 \f8\fs16\cf1 OVERHEAD PROJECTOR\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 SPEAKER PHONE\cell \pard\plain \widctlpar\intbl \f4\fs20 \row
+\pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 TABLE\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 TV\cell \pard\plain \widctlpar\intbl
+\f4\fs20 \row \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 VCR\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 VIDEO PHONE\cell \pard\plain
+\widctlpar\intbl \f4\fs20 \row \trowd \trgaph108\trleft1260 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw30\brdrcf1 \clbrdrr\brdrs\brdrw15\brdrcf1 \cellx3150 \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 VEHICLE\cell
+\pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1
+\par The following is an example of this property:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 RESOURCES:EASEL;PROJECTOR;VCR
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Support for this property is optional for implementations conforming to this specification.
+\par {\*\bkmkstart _Toc365129121}{\*\bkmkstart _Toc367165382}{\pntext\pard\plain\b\f9\cf1\kerning28 2.3.24\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 Sequence Number{\*\bkmkend _Toc365129121}{\*\bkmkend _Toc367165382}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This property is identified by the property name {\b SEQUENCE}. This property defines the instance of the vCalendar entity in a sequence of revisions. When a vC
+alendar entity is created its sequence number is zero (ASCII decimal 48). It is incremented each time it is revised. The following is an example of this property:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 SEQUENCE:1
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Support for this property is optional for implementations conforming to this specification.
+\par {\*\bkmkstart _Toc365129122}{\*\bkmkstart _Toc367165383}{\pntext\pard\plain\b\f9\cf1\kerning28 2.3.25\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 Start Date/Time{\*\bkmkend _Toc365129122}{\*\bkmkend _Toc367165383}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This property is identified by the property name {\b DTSTART}
+. This property defines the date and time that the event will start. The date and time value is expressed in the complete representation, basic format as specified in ISO 860
+1. The time can either be in local or UTC based time. Events may have a start date/time but no end date/time. In that case, the event does not take up any time. The following is an example of this property:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 DTSTART:19960401T235959
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Support for this property is mandatory for implementations conforming to this specification.
+\par {\*\bkmkstart _Toc365129123}{\*\bkmkstart _Toc367165384}{\pntext\pard\plain\b\f9\cf1\kerning28 2.3.26\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 Status{\*\bkmkend _Toc365129123}{\*\bkmkend _Toc367165384}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This property is identified by the property name {\b STATUS}. This property defines the status associated with the vCalendar entity. This property can be used when the ATTENDEE property
+is either not supported or not needed. The following is an example of this property:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 STATUS:TENTATIVE
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 The property can have the following values:
+\par
+\par \trowd \trgaph108\trleft1260 \clbrdrt\brdrs\brdrw30\brdrcf1 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw45\brdrcf1 \cellx4379\clbrdrt\brdrs\brdrw30\brdrcf1 \clbrdrb\brdrs\brdrw45\brdrcf1 \clbrdrr\brdrs\brdrw15 \cellx5896 \pard\plain
+\s48\sb80\sa80\sl-200\slmult0\keepn\nowidctlpar\intbl \b\f9\fs18\cf1 Description\cell \pard \s48\sb80\sa80\sl-200\slmult0\keepn\nowidctlpar\intbl Property Value\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \trowd \trgaph108\trleft1260 \clbrdrl
+\brdrs\brdrw15\brdrcf1 \cellx4379\clbrdrr\brdrs\brdrw15\brdrcf1 \cellx5896 \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 Indicates todo was accepted\cell \pard \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 ACCEPTED
+\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 Indicates event or todo requires action\cell \pard \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 NEEDS ACTION\cell
+\pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 Indicates event or todo was sent out.\cell \pard \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 SENT\cell \pard\plain
+\widctlpar\intbl \f4\fs20 \row \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 Indicates event is tentatively accepted\cell \pard \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 TENTATIVE\cell \pard\plain
+\widctlpar\intbl \f4\fs20 \row \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 Indicates event is confirmed\cell \pard \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 CONFIRMED\cell \pard\plain \widctlpar\intbl
+\f4\fs20 \row \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 Indicates event or todo has been declined\cell \pard \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 DECLINED\cell \pard\plain \widctlpar\intbl \f4\fs20
+\row \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 Indicates todo has been completed\cell \pard \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 COMPLETED\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \trowd
+\trgaph108\trleft1260 \clbrdrl\brdrs\brdrw15\brdrcf1 \clbrdrb\brdrs\brdrw15 \cellx4379\clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15\brdrcf1 \cellx5896 \pard\plain \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 \f8\fs16\cf1 Indicates eve
+nt or todo has been delegated\cell \pard \s51\sb80\sa80\sl-220\slmult0\nowidctlpar\intbl\tx144 DELEGATED\cell \pard\plain \widctlpar\intbl \f4\fs20 \row \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1
+\par The default value for this property is NEEDS ACTION.
+\par Support for this property is mandatory for implementations conforming to this specification.
+\par {\*\bkmkstart _Toc365129124}{\*\bkmkstart _Toc367165385}{\pntext\pard\plain\b\f9\cf1\kerning28 2.3.27\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 Summary{\*\bkmkend _Toc365129124}{\*\bkmkend _Toc367165385}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This property is identified by the property name {\b SUMMARY}. This property defines a short summary or subject of the vCalendar entity. The following is an example of this property:
+
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 SUMMARY:Department Party
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Support for this property is mandatory for implementations conforming to this specification.
+\par {\*\bkmkstart _Toc365129125}{\*\bkmkstart _Toc367165386}{\pntext\pard\plain\b\f9\cf1\kerning28 2.3.28\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 Time Transparency{\*\bkmkend _Toc365129125}{\*\bkmkend _Toc367165386}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This property is identified by the property name {\b TRANSP}
+. This property defines whether the event is transparent to free time searches. The value of this property is a number. a value of zero (ASCII decimal 48) guaranttes that the entry will blocks time and will be factored into a free time search. a value of
+one (ASCII decimal 49) specifies that the entry will not block time and will not be factored into a free time search. Any values greater than \ldblquote 1\rdblquote will provide implementation specific transparency semantic
+s. Some implementations may treat values greater than one as non-blocking or transparent events. Other implementations may use the numeric value to provide a layering of levels of transparency. The default value is zero (ASCII decimal 48), the event is no
+t transparent and will block free time searches. The following is an example of this property:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 TRANSP:0
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Support for this property is optional for implementations conforming to this specification.
+\par {\*\bkmkstart _Toc365129126}{\*\bkmkstart _Toc367165387}{\pntext\pard\plain\b\f9\cf1\kerning28 2.3.29\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 Uniform Resource Locator{\*\bkmkend _Toc365129126}{\*\bkmkend _Toc367165387}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This property is identified by the property name {\b URL}
+. This property defines a Uniform Resource Locator for an Internet location that can be used to obtain real-time information associated with the vCalendar entity. Valid values for this property are a string conforming to the IETF RFC 1738, {\i
+Uniform Resource Locators}. The following is an example of this property:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1
+URL:http://abc.com/pub/calendars/jsmith/mytime.or3
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Support for this property is optional for implementations conforming to this specification.
+\par {\*\bkmkstart _Toc365129127}{\*\bkmkstart _Toc367165388}{\pntext\pard\plain\b\f9\cf1\kerning28 2.3.30\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 Unique Identifier{\*\bkmkend _Toc365129127}{\*\bkmkend _Toc367165388}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This property is identified by the property name {\b UID}
+. This property defines a persistent, globally unique identifier associated with the vCalendar entity. Some examples of forms of unique identifiers would include ISO 9070 formal public identifiers (FPI), X.500 distinguished names, machine-generated
+\ldblquote random\rdblquote numbers with a statistically high likelihood of being globally unique and Uniform Resource Locators (URL). If an URL is specified, it is suggested that the URL reference a service which can render an updated version of the v
+Calendar for the object. The following is an example of this property:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 UID:19960401-080045-4000F192713-0052
+
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1
+This property is an important method for group scheduling applications to match calendar entities with later modification or deletion requests. Calendaring applications that do not generate this property in vCalendar entities may be limiting their interop
+erability with other group scheduling applications.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar Support for this property is optional for implementations conforming to this specification.
+\par {\*\bkmkstart _Toc365129128}{\*\bkmkstart _Toc367165389}{\pntext\pard\plain\b\f9\fs28\cf1 2.4\tab}\pard\plain \s2\sb380\sa160\sl-320\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl2\pndec\pnprev1\pnstart1\pnsp144 }\b\f9\fs28\cf1 Misce
+llaneous Properties{\*\bkmkend _Toc340018752}{\*\bkmkend _Toc345308992}{\*\bkmkend _Toc346992906}{\*\bkmkend _Toc365129128}{\*\bkmkend _Toc367165389}
+\par {\*\bkmkstart _Toc340018753}{\*\bkmkstart _Toc345308993}{\*\bkmkstart _Toc346992907}{\*\bkmkstart _Toc365129129}{\*\bkmkstart _Toc367165390}{\pntext\pard\plain\b\f9\cf1\kerning28 2.4.1\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0
+\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}\b\f9\cf1\kerning28 Extensions{\*\bkmkend _Toc340018753}{\*\bkmkend _Toc345308993}{\*\bkmkend _Toc346992907}{\*\bkmkend _Toc365129129}{\*\bkmkend _Toc367165390}
+
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 The clear-text encoding provides a \ldblquote standard mechanism for doing non-standard things\rdblquote . This extension support is provided for implementers to \ldblquote
+push the envelope\rdblquote on the existing version of the specification. Extension properties are specified by property and/or property parameter names that have the initial sub-string of {\b X-}
+ (the two character sequence: Capital X character followed by the Dash character). It is recommended that vendors concatenate onto this sentinel an added sh
+ort sub-string to identify the vendor. This will facilitate readability of the extensions and minimize possible collision of names between different vendors. All vCalendar Readers are expected to be able to interpret the extension properties and property
+parameters but may ignore them. The following might be the abc vendor\rquote s extension for an audio-clip form of subject property:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1
+X-ABC-MMSUBJ;TYPE=WAV; VALUE=URL: http://load.noise.org/mysubj.wav
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 At present, there is no registration authority for names of extension properties.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar
+Support for this property is mandatory for implementations conforming to this specification. However, an implementation may not be able to act on the extension property. Conformance only requires that an implementation be able to parse vCalendar data stre
+ams with extensions. The implementation need not act on them.
+\par {\*\bkmkstart _Toc365129130}{\*\bkmkstart _Toc367165391}{\pntext\pard\plain\b\f9\fs28\cf1 2.5\tab}\pard\plain \s2\sb380\sa160\sl-320\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl2\pndec\pnprev1\pnstart1\pnsp144 }\b\f9\fs28\cf1 Formal Definition
+{\*\bkmkend _Toc365129130}{\*\bkmkend _Toc367165391}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 The following modified Backus-Naur Notation (BNF) is provided to assist developers in building parsers for the clear-text encoding.
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1
+\par This syntax is written according to the form described in RFC 822,
+\par but it references just this small subset of RFC 822 literals:
+\par CR = <ASCII CR, carriage return> ; ( 15, 13.)
+\par LF = <ASCII LF, linefeed> ; ( 12, 10.)
+\par CRLF\tab = CR LF
+\par SPACE = <ASCII SP, space> ; ( 40, 32.)
+\par HTAB = <ASCII HT, horizontal-tab> ; ( 11, 9.)
+\par
+\par All literal property names are valid as upper, lower, or mixed case.
+\par
+\par ws\tab \tab = 1*(SPACE / HTAB)
+\par \tab ; \ldblquote whitespace,\rdblquote one or more spaces or tabs
+\par
+\par wsls\tab \tab = 1*(SPACE / HTAB / CRLF)
+\par \tab ; whitespace with line separators
+\par
+\par value\tab \tab = 7bit / 8bit / quoted-printable / base64
+\par \tab ; The value must be in the encoding type specified for the property value.
+\par
+\par 7bit\tab \tab = <7bit us-ascii printable chars, excluding CR LF>
+\par
+\par 8bit\tab \tab = <MIME RFC 1521 8-bit text>
+\par
+\par quoted-printable = <MIME RFC 1521 quoted-printable text>
+\par
+\par base64\tab \tab = <MIME RFC 1521 base64 text>
+\par \tab ; the end of the text is marked with two CRLF sequences
+\par \tab ; this results in one blank line before the start of the next
+\par \tab ; property
+\par
+\par \pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 {\v groups\tab \tab = groups \ldblquote .\rdblquote word
+
+\par \tab \tab / word
+\par
+\par }\pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 word\tab \tab
+, >
+\par
+\par vcal_file\tab = [wsls] vcal [wsls]
+\par
+\par vcal\tab \tab = \ldblquote BEGIN\rdblquote [ws] \ldblquote :\rdblquote [ws] \ldblquote VCALENDAR\rdblquote [ws] 1*CRLF
+\par \tab \tab calprop calentities [ws] *CRLF
+\par \tab \tab \ldblquote END\rdblquote [ws] \ldblquote :\rdblquote [ws] \ldblquote VCALENDAR\rdblquote [ws] 1*CRLF
+\par
+\par calentities\tab = calentities *CRLF calentity
+\par \tab \tab / calentity
+\par
+\par calentity\tab = evententity
+\par \tab \tab / todoentity
+\par
+\par evententity\tab = \ldblquote BEGIN\rdblquote [ws] \ldblquote :\rdblquote [ws] \ldblquote EVENT\rdblquote [ws] 1*CRLF
+\par \tab \tab entprops [ws] *CRLF
+\par \tab \tab \ldblquote END\rdblquote [ws] \ldblquote :\rdblquote [ws] \ldblquote EVENT\rdblquote [ws] 1*CRLF
+\par
+\par todoentity\tab = \ldblquote BEGIN\rdblquote [ws] \ldblquote :\rdblquote [ws] \ldblquote TODO\rdblquote [ws] 1*CRLF
+\par \tab \tab entprops [ws] *CRLF
+\par \tab \tab \ldblquote END\rdblquote [ws] \ldblquote :\rdblquote [ws] \ldblquote TODO\rdblquote [ws] 1*CRLF
+\par
+\par calprops\tab = calprops *CRLF calprop
+\par \tab \tab / calprop
+\par
+\par calprop\tab = \ldblquote DAYLIGHT\rdblquote
+\par \tab \tab [params] \ldblquote :\rdblquote value CRLF
+\par \tab \tab / \ldblquote GEO\rdblquote
+\par \tab \tab [params] \ldblquote :\rdblquote value CRLF
+\par \tab \tab / \ldblquote PRODID\rdblquote
+\par \tab \tab [params] \ldblquote :\rdblquote value CRLF
+\par \tab \tab / \ldblquote TZ\rdblquote
+\par \tab \tab [params] \ldblquote :\rdblquote value CRLF
+\par \tab \tab / \ldblquote VERSION\rdblquote
+\par \tab \tab [params] \ldblquote :\rdblquote \ldblquote 1.0\rdblquote CRLF
+\par \tab ; The VERSION calendar property MUST appear in the vCalendar object.
+\par
+\par entprops\tab = entprops *CRLF entprop
+\par \tab \tab / entprop
+\par
+\par entprop\tab = [ws] simprop
+\par \tab \tab [params] \ldblquote :\rdblquote value CRLF
+\par \tab \tab / [ws] \ldblquote AALARM\rdblquote
+\par \tab \tab [params] \ldblquote :\rdblquote aalarmparts CRLF
+\par \tab \tab / [ws] \ldblquote CATEGORIES\rdblquote
+\par \tab \tab [params] \ldblquote :\rdblquote 1*catvals CRLF
+\par \tab \tab / [ws] \ldblquote CLASS\rdblquote
+\par \tab \tab [params] \ldblquote :\rdblquote classvals CRLF
+\par \tab \tab / [ws] \ldblquote DALARM\rdblquote
+\par \tab \tab [params] \ldblquote :\rdblquote dalarmparts CRLF
+\par \tab \tab / [ws] \ldblquote EXDATE\rdblquote
+\par \tab \tab [params] \ldblquote :\rdblquote xdatevals CRLF
+\par \tab \tab / [ws] \ldblquote MALARM\rdblquote
+\par \tab \tab [params] \ldblquote :\rdblquote malarmparts CRLF
+\par \tab \tab / [ws] \ldblquote PALARM\rdblquote
+\par \tab \tab [params] \ldblquote :\rdblquote palarmparts CRLF
+\par \tab \tab / [ws] \ldblquote RDATE\rdblquote
+\par \tab \tab [params] \ldblquote :\rdblquote rdatevals CRLF
+\par \tab \tab / [ws] \ldblquote RESOURCES\rdblquote
+\par \tab \tab [params] \ldblquote :\rdblquote 1*resvals CRLF
+\par \tab \tab / [ws] \ldblquote STATUS\rdblquote
+\par \tab \tab [params] \ldblquote :\rdblquote statvals CRLF
+\par
+\par simprop\tab = \ldblquote ATTACH\rdblquote / \ldblquote ATTENDEE\rdblquote / \ldblquote DCREATED\rdblquote / \ldblquote COMPLETED\rdblquote
+\par \tab \tab / \ldblquote DESCRIPTION\rdblquote / \ldblquote DUE\rdblquote / \ldblquote DTEND\rdblquote / EXRULE / LAST-MODIFIED
+\par \tab \tab / \ldblquote LOCATION\rdblquote / \ldblquote RNUM\rdblquote / \ldblquote PRIORITY\rdblquote / \ldblquote RELATED-TO\rdblquote / \ldblquote RRULE\rdblquote
+\par \tab \tab / \ldblquote SEQUENCE\rdblquote / \ldblquote DTSTART\rdblquote / \ldblquote SUMMARY\rdblquote / \ldblquote TRANSP\rdblquote / \ldblquote URL\rdblquote / \ldblquote UID\rdblquote
+\par \tab \tab /\rdblquote X-\rdblquote word
+\par
+\par aalarmparts\tab = 0*3(strnosemi \ldblquote ;\rdblquote ) strnosemi
+\par \tab ; runTime, snoozeTime, repeatCount, audioContent
+\par
+\par catvals\tab = \ldblquote APPOINTMENT\rdblquote / \ldblquote BUSINESS\rdblquote / \ldblquote EDUCATION\rdblquote / \ldblquote HOLIDAY\rdblquote / \ldblquote MEETING\rdblquote
+\par \tab \tab / \ldblquote MISCELLANEOUS\rdblquote / \ldblquote PERSONAL\rdblquote / \ldblquote PHONE CALL\rdblquote / \ldblquote SICK DAY\rdblquote
+\par \tab \tab / \ldblquote SPECIAL OCCASION\rdblquote / \ldblquote TRAVEL\rdblquote / \ldblquote VACATION\rdblquote / \ldblquote X-\ldblquote word / value
+\par
+\par classvals\tab = \ldblquote PUBLIC\rdblquote / \ldblquote PRIVATE\rdblquote / \ldblquote CONFIDENTIAL\rdblquote / \ldblquote X-\ldblquote word / value
+\par
+\par dalarmparts\tab = 0*3(strnosemi \ldblquote ;\rdblquote ) strnosemi
+\par \tab ; runTime, snoozeTime, repeatCount, displayString
+\par
+\par xdatevals\tab = 1*value
+\par \tab ; One or more date/time values
+\par
+\par malarmparts\tab = 0*4(strnosemi \ldblquote ;\rdblquote ) strnosemi
+\par \tab ; runTime, snoozeTime, repeatCount, addressString, noteString
+\par
+\par palarmparts\tab = 0*3(strnosemi \ldblquote ;\rdblquote ) strnosemi
+\par \tab ; runTime, snoozeTime, repeatCount, procedureName
+\par
+\par rdatevals\tab = 1*value
+\par \tab ; One or more date/time values
+\par
+\par resvals\tab = \ldblquote CATERING\rdblquote / \ldblquote CHAIRS\rdblquote / \ldblquote EASEL\rdblquote / \ldblquote PROJECTOR\rdblquote / \ldblquote VCR\rdblquote
+\par \tab \tab / \ldblquote VEHICLE\rdblquote / \ldblquote X-\ldblquote word / value
+\par
+\par statvals\tab = \ldblquote ACCEPTED\rdblquote / \ldblquote NEEDS ACTION\rdblquote / \ldblquote SENT\rdblquote / \ldblquote TENTATIVE\rdblquote
+\par \tab \tab / \ldblquote CONFIRMED\rdblquote / \ldblquote DECLINED\rdblquote / \ldblquote COMPLETED\rdblquote / \ldblquote DELEGATED\rdblquote
+\par \tab \tab / \ldblquote X-\ldblquote word / value
+\par
+\par params\tab \tab = \ldblquote ;\rdblquote [ws] paramlist
+\par
+\par paramlist\tab = paramlist [ws] \ldblquote ;\rdblquote [ws] param
+\par \tab \tab / param
+\par
+\par param\tab \tab = \ldblquote TYPE\rdblquote [ws] \ldblquote =\ldblquote [ws] ptypeval
+\par \tab \tab / [\ldblquote VALUE\rdblquote [ws] \ldblquote =\ldblquote [ws]] pvalueval
+\par \tab \tab / [\ldblquote ENCODING\rdblquote [ws] \ldblquote =\ldblquote [ws]] pencodingval
+\par \tab \tab / \ldblquote CHARSET\rdblquote [ws] \ldblquote =\ldblquote [ws] charsetval
+\par \tab \tab / \ldblquote LANGUAGE\rdblquote [ws] \ldblquote =\ldblquote [ws] langval
+\par \tab \tab / \ldblquote ROLE\rdblquote [ws] \ldblquote =\rdblquote [ws] roleval
+\par \tab \tab / \ldblquote STATUS\rdblquote [ws] \ldblquote =\rdblquote [ws] statuval
+\par \tab \tab / \ldblquote X-\rdblquote word [ws] \ldblquote =\ldblquote [ws] word
+\par \tab \tab / knowntype
+\par
+\par ptypeval\tab = knowntype / \ldblquote X-\rdblquote word
+\par
+\par knowntype\tab = \ldblquote WAVE\rdblquote / \ldblquote PCM\rdblquote / \ldblquote VCARD\rdblquote / \ldblquote X-\ldblquote word / value
+\par
+\par pvalueval\tab = \ldblquote INLINE\rdblquote / \ldblquote URL\rdblquote / \ldblquote CONTENT-ID\rdblquote / \ldblquote CID\rdblquote / \ldblquote X-\rdblquote word
+\par
+\par pencodingval \tab = \ldblquote 7bIT\rdblquote / \ldblquote 8bIT\rdblquote / \ldblquote QUOTED-PRINTABLE\rdblquote / \ldblquote BASE64\rdblquote / \ldblquote X-\rdblquote word
+\par
+\par \pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 charsetval\tab
+= <a character set string as defined in Section 7.1 of RFC 1521>
+\par \pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640
+\par langval\tab = <a language string as defined in RFC 1766>
+\par
+\par roleval\tab = \ldblquote ATTENDEE\rdblquote / \ldblquote ORGANIZER\rdblquote / \ldblquote OWNER\rdblquote / \ldblquote X-\ldblquote word
+\par
+\par statusval\tab = \ldblquote ACCEPTED\rdblquote / \ldblquote NEEDS ACTION\rdblquote / \ldblquote SENT\rdblquote / \ldblquote TENTATIVE\rdblquote / \ldblquote CONFIRMED\rdblquote
+\par \tab \tab / \ldblquote DECLINED\rdblquote / \ldblquote COMPLETED\rdblquote / \ldblquote DELEGATED\rdblquote / \ldblquote X-\ldblquote word
+\par
+\par strnosemi\tab = *(*nonsemi (\ldblquote \\;\rdblquote / \ldblquote \\\rdblquote CRLF)) *nonsemi
+\par \tab ; To include a semicolon in this string, it must be escaped
+\par \tab ; with a \ldblquote \\\rdblquote character.
+\par
+\par nonsemi\tab \tab = <any non-control ASCII except \ldblquote ;\rdblquote >
+\par
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1
+\par \sect \sectd \margtsxn2520\psz1\linex0\colsx0 \pard\plain \s24\li864\sb100\sa140\sl-380\slmult0\keepn\widctlpar\tqr\tx432\tx864 \b\f9\fs36\cf1 {\*\bkmkstart _Toc346992914}{\*\bkmkstart _Toc365129131}{\*\bkmkstart _Toc367165392}Section 3 :
+{\*\bkmkend _Toc346992914}Internet Recommendations{\*\bkmkend _Toc365129131}{\*\bkmkend _Toc367165392}
+\par {\pntext\pard\plain\b\v\f5\fs28\kerning28 3.\tab}\pard\plain \s1\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl1\pndec\pnprev1\pnstart1\pnsp144 {\pntxta .}}\b\f5\fs28\kerning28 {\cs92\b0\v\f8\fs16 {\*\atnid DS}{\*\atnauthor Dave Stuban}\chatn {\*\annotation
+\pard\plain \s93\widctlpar \f4\fs20 {\field\flddirty{\*\fldinst PAGE \\# "'Page: '#'\line '"{\cs92\fs16 }}{\fldrslt }}{\cs92\fs16 \chatn }
+This entry/line in the section is assigned the style for the level 1 heading. This is done so that a section number can be given in the chapter title (style \ldblquote chptr_title\rdblquote ) and so that \ldblquote heading 1\rdblquote
+ (more specifically, the format/heading numbering of the form \ldblquote 1. Overview\rdblquote ) can be \ldblquote skipped,\rdblquote and the appropriate form for the next-level of heading can be properly displayed (eg., \ldblquote 1.1 Overview
+\rdblquote ). It is, and must be, formatted as \ldblquote hidden text\rdblquote prior to pagination and/or printing.}}{\b0\v\cf8 \tab 1\tab }{\v
+\par {\*\bkmkstart _Toc365129132}{\*\bkmkstart _Toc367165393}{\pntext\pard\plain\b\f9\fs28\cf1 3.1\tab}}\pard\plain \s2\sb380\sa160\sl-320\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl2\pndec\pnprev1\pnstart1\pnsp144 }\b\f9\fs28\cf1
+Recommended Practice With SMTP/MIME{\*\bkmkend _Toc365129132}{\*\bkmkend _Toc367165393}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 The vCalendar information can be transported
+ through SMTP/MIME based electronic mail services. Interoperability of vCalendar information over SMTP/MIME transports can be better assured by following a common set of recommended practices for encapsulation of the vCalendar.
+\par {\*\bkmkstart _Toc365129133}{\*\bkmkstart _Toc367165394}{\pntext\pard\plain\b\f9\cf1\kerning28 3.1.1\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 Text/Plain Content Type{\*\bkmkend _Toc365129133}{\*\bkmkend _Toc367165394}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1
+Without any change to existing SMTP or MIME compliant user agents, a vCalendar object can be included within Internet email messages. This might be the case for an existing, simple user agent such as a legacy SMTP mail system. While this approach provides
+ for transport of vCalendars over SMTP services, it does not allow for the end user to take advantage of the full capabilities of either the vCalendar or Internet email (i.e., MIME) functionality.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar The following demonstrates how a vCalendar can be included as a SMTP message made up of a RFC 822 message. This may be an initial method for incorporating vCalendar objects into SMTP messages.
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 Date: Thr, 25 Jan 96 0932 EDT\line
+From: john.smith@host.com\line Subject: Re: RFC822 vCalendar Example\line Sender: john.smith@host.com\line To: smartin@host2.com\line Message-ID: <JOHNSMITH.960125T091020.xyzMail@host3.com>\line \line Steve: Thanks for the call earlier today. Let\rquote
+s get together\line tomorrow at 8:30 AM EST to discuss your new proposal. Here is\line the meeting notice for your PIM.
+\par \pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx16384\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 BEGIN:VCALENDAR\line VERSION:1.0\line BEGIN:VEVENT\line
+CATEGORIES:MEETING\line STATUS:TENTATIVE\line DTSTART:19960401T033000Z\line DTEND:19960401T043000Z\line SUMMARY:Your Proposal Review\line DESCRIPTION:Steve and John to review newest proposal material\line CLASS:PRIVATE\line END:VEVENT\line END:VCALENDAR
+
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 The following example demonstrates how a vCalendar can be included as a separate text/plain content portion within current MIME user agents.
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 Date: Fri, 26 Jan 1996 07:53:00 0-500
+\line From: smartin@host2.com\line Subject: RE: Text/Plain MIME vCalendar Example\line To: john.smith@host.com\line Mime-Version: 1.0\line Content-Type: multipart/mixed; boundary=vCalendar\line Message-ID: <ABC-1.0-Note-martin-steve-0824475754>\line
+
+\par \pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 --vCalendar\line
+Content-Type:text/plain; charset=us-ascii\line Content-Transfer-Encoding: 7bit
+\par \pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 John: I can\rquote
+t make that meeting at 8:30. How about doing it\line over lunch at noon? Here is an action item for the meeting.
+\par \pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 --vCalendar\line
+Content-Type:text/plain; charset=us-ascii; name="MARTIN.VCS"\line
+\par \pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 BEGIN:VCALENDAR\line VERSION:1.0\line BEGIN:VTODO\line
+SUMMARY:John to pay for lunch\line DUE:19960401T083000Z\line STATUS:NEEDS ACTION\line END:VTODO\line END:VCALENDAR
+\par \pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640
+\par --vCalendar\emdash
+\par {\*\bkmkstart _Toc365129134}{\*\bkmkstart _Toc367165395}{\pntext\pard\plain\b\f9\cf1\kerning28 3.1.2\tab}\pard\plain \s3\sb280\sa140\sl-280\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl3\pndec\pnprev1\pnstart1\pnsp144 {\pntxtb .}}
+\b\f9\cf1\kerning28 Text/X-vCalendar Content Type{\*\bkmkend _Toc365129134}{\*\bkmkend _Toc367165395}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1
+The vCalendar object can also be passed as a non-standard MIME media type. This would be useful in order to clearly identify the vCalendar object in an electronic mail message body part. a non-s
+tandard, vCalendar object should be identified as the MIME type/subtype \ldblquote text/x-vCalendar\rdblquote .
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar The following example demonstrates how a vCalendar containing both an event and a todo can be included as a separate text/x-vCalendar content portion within a MIME user agent.
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 Date: Fri, 26 Jan 1996 07:53:00 0-500
+\line From: smartin@host2.com\line Subject: RE: Text/X-vCalendar MIME vCalendar Example\line To: john.smith@host.com\line Mime-Version: 1.0\line Content-Type: multipart/mixed; boundary=vCalendar\line Message-ID: <ABC-1.0-Note-martin-steve-0824475754>
+\line
+\par \pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 --vCalendar\line
+Content-Type:text/plain; charset=us-ascii\line Content-Transfer-Encoding: 7bit
+\par John: I can\rquote t make that meeting at 8:30. How about doing it\line over lunch at noon? Here is an event for your PIM. I have \line also given you an action item for the meeting.
+\par --vCalendar\line Content-Type:text/x-vCalendar; charset=us-ascii; name="MARTIN.VCS"\line
+\par \pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 BEGIN:VCALENDAR\line VERSION:1.0\line BEGIN:VEVENT\line
+CATEGORIES:MEETING\line STATUS:NEEDS ACTION\line DTSTART:19960401T073000Z\line DTEND:19960401T083000Z\line SUMMARY:Steve\rquote s Proposal Review\line DESCRIPTION:Steve and John to review newest proposal material\line CLASS:PRIVATE\line END:VEVENT\line
+BEGIN:VTODO\line SUMMARY:John to pay for lunch\line DUE:19960401T083000Z\line STATUS:NEEDS ACTION\line END:VTODO\line END:VCALENDAR
+\par \pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640
+\par --vCalendar\emdash
+\par {\*\bkmkstart _Toc365129135}{\*\bkmkstart _Toc367165396}{\pntext\pard\plain\b\f9\fs28\cf1 3.2\tab}\pard\plain \s2\sb380\sa160\sl-320\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl2\pndec\pnprev1\pnstart1\pnsp144 }\b\f9\fs28\cf1
+Recommended Practice With HTTP/HTML{\*\bkmkend _Toc365129135}{\*\bkmkend _Toc367165396}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1
+The vCalendar specification provides a useful format for conveying calendaring and scheduling information between a Web browser and a HTTP server. Homepages can be used as a web-based document for publishing public events. The events can be easily formatt
+ed into vCalendar objects for transfer between the server and a requesting browser. The following examples are provided to illustrate possible scenarios where a non-standard \ldblquote text/x-vCalendar\rdblquote
+ MIME type/subtype corresponding the vCalendar can be used to transfer calendaring and scheduling information across the World Wide Web.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar The following example demonstrates how a vCalendar object can be included in an HTML document or Web page. This may be an initial method for incorporating vCalendar objects into Web pages. This sam
+ple assumes that the Web Browser is capable of handling the OBJECT HTML 3.2 element.
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 {\*\bkmkstart OLE_LINK1}<html>\line
+<head>\line <title>HTTP/Web vCalendar Example</title>\line </head>\line <body bgcolor="#ffffff">\line <h1>Special <i>New</i> Events</h1>\line <h3>The latest events to be added to the calendar of activities are:</h3>\line <hr>\line <center>\line
+<object data=martin.vcs type="text/x-vCalendar">\line Your browser does not support OBJECT or the text/x-vCalendar MIME type/subtype. Get the events' data <a href=martin.vcs>here</a> and manually use it.\line </object>\line </center>\line <hr>\line
+<center>\line <A HREF="mailto:john.smith@host.com"><img src="bottomtext.gif" border=0></A>\line </center>\line <hr>\line </body>\line </html>
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 {\*\bkmkend OLE_LINK1}
+The following table demonstrates a simple HTTP transaction between client and server that retrieves a vCalendar object from the Web Server. The entries under Client and Server are the actual HTTP headers and data that might be exchanged.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar
+\par \trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw15 \trbrdrl\brdrs\brdrw15 \trbrdrb\brdrs\brdrw15 \trbrdrr\brdrs\brdrw15 \trbrdrh\brdrs\brdrw15 \trbrdrv\brdrs\brdrw15 \clbrdrt\brdrs\brdrw30 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw30 \clbrdrr
+\brdrs\brdrw15 \cellx4140\clbrdrt\brdrs\brdrw30 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw30 \clbrdrr\brdrs\brdrw15 \cellx5220\clbrdrt\brdrs\brdrw30 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw30 \clbrdrr\brdrs\brdrw15 \cellx8748 \pard\plain
+\s48\sb80\sa80\sl-200\slmult0\keepn\nowidctlpar\intbl \b\f9\fs18\cf1 Client\cell \pard \s48\sb80\sa80\sl-200\slmult0\keepn\nowidctlpar\intbl Direction\cell \pard \s48\sb80\sa80\sl-200\slmult0\keepn\nowidctlpar\intbl Server\cell \pard\plain
+\widctlpar\intbl \f4\fs20 {\b\f9\fs18\cf1 \row }\trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw15 \trbrdrl\brdrs\brdrw15 \trbrdrb\brdrs\brdrw15 \trbrdrr\brdrs\brdrw15 \trbrdrh\brdrs\brdrw15 \trbrdrv\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb
+\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cellx4140\clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cellx5220\clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cellx8748 \pard \widctlpar\intbl\tx0\tx360 {\f3\fs16\cf1
+GET martin.vcs HTTP/1.0
+\par }\pard \widctlpar\intbl\tx0\tx360 {\f3\fs16\cf1 User-Agent: MyBrowser/1.0
+\par }\pard \widctlpar\intbl\tx0\tx360 {\f3\fs16\cf1 Accept: text/html, text/plain, image/gif, image/jpeg, */*\cell }\pard \widctlpar\intbl\tx0\tx360 {\f3\fs16\cf1 ->\cell }\pard \widctlpar\intbl\tx0\tx360 {\f3\fs16\cf1 \cell }\pard \widctlpar\intbl {
+\f3\fs16\cf1 \row }\trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw15 \trbrdrl\brdrs\brdrw15 \trbrdrb\brdrs\brdrw15 \trbrdrr\brdrs\brdrw15 \trbrdrh\brdrs\brdrw15 \trbrdrv\brdrs\brdrw15 \clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15
+\clbrdrr\brdrs\brdrw15 \cellx4140\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cellx5220\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cellx8748 \pard
+\widctlpar\intbl\tx0\tx360 {\f3\fs16\cf1 \cell }\pard \widctlpar\intbl\tx0\tx360 {\f3\fs16\cf1 <-\cell }\pard \widctlpar\intbl\tx0\tx360 {\f3\fs16\cf1 200 OK
+\par }\pard \li40\ri40\keep\widctlpar\intbl\tx0\tx40 {\f3\fs16\cf1 Server: YourServer/1.1
+\par }\pard \li40\ri40\keep\widctlpar\intbl\tx0\tx40 {\f3\fs16\cf1 Date: 25 Jan 96 0932 EDT
+\par Content-Type: text/x-vCalendar
+\par }\pard \li40\ri40\keep\keepn\widctlpar\intbl\tx0\tx40 {\f3\fs16\cf1 Content-Length: 257
+\par }\pard \keep\keepn\widctlpar\intbl\tx0\tx40 {\f3\fs16\cf1
+\par }\pard \li40\ri40\keep\keepn\widctlpar\intbl\tx0\tx40 {\f3\fs16\cf1 BEGIN:VCALENDAR
+\par }\pard \li40\ri40\keep\keepn\widctlpar\intbl\tx0\tx40 {\f3\fs16\cf1 BEGIN:VEVENT
+\par CATEGORIES:MEETING
+\par STATUS:TENTATIVE
+\par DTSTART:19960401T033000Z
+\par DTEND:19960401T043000Z
+\par SUBJECT:Your Proposal Review
+\par }\pard \li40\ri40\keep\keepn\widctlpar\intbl\tx0\tx40 {\f3\fs16\cf1 DESCRIPTION:Steve and John to review newest proposal material
+\par }\pard \li40\ri40\keep\keepn\widctlpar\intbl\tx0\tx40 {\f3\fs16\cf1 CLASS:PRIVATE
+\par END:VEVENT
+\par }\pard \widctlpar\intbl\tx0\tx360 {\f3\fs16\cf1 END:VCALENDAR\cell }\pard \widctlpar\intbl {\f3\fs16\cf1 \row }\pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar The following example illustrates how a \ldblquote month at a glance\rdblquote type of information can be displayed on a homepage with the events or todos being links to vCalendar objects.
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1
+<!DOCTYPE HTML PUBLIC "-//W3c//DTD HTML 3.2//EN">\line <HTML>\line <HEAD><TITLE>HTTP/Web vCalendar Example</TITLE></HEAD>\line <BODY BGCOLOR="#FFFFFF">\line <H1>Calendar/Events for August</H1>\line <HR><CENTER>\line <TABLE BORDER=1 >\line <TR>\line
+<TD ALIGN=LEFT VALIGN=TOP WIDTH="17%" BGCOLOR="#80ff">\line <CENTER><P>Monday</P></CENTER></TD>\line <TD ALIGN=LEFT VALIGN=TOP WIDTH="17%" BGCOLOR="#80ff">\line <CENTER><P>Tuesday</P></CENTER></TD>\line
+<TD ALIGN=LEFT VALIGN=TOP WIDTH="17%" BGCOLOR="#80ff">\line <CENTER><P>Wednesday</P></CENTER></TD>\line <TD ALIGN=LEFT VALIGN=TOP WIDTH="17%" BGCOLOR="#80ff">\line <CENTER><P>Thursday</P></CENTER></TD>\line
+<TD ALIGN=LEFT VALIGN=TOP WIDTH="17%" BGCOLOR="#80ff">\line <CENTER><P>Friday</P></CENTER></TD>\line <TD ALIGN=CENTER VALIGN=TOP WIDTH="17%" BGCOLOR="#80ff">\line <CENTER><P>Saturday - Sunday</P></CENTER></TD>\line </TR>
+\par \pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 <TR>\line
+<TD ALIGN=LEFT VALIGN=TOP ROWSPAN="2" WIDTH="17%" BGCOLOR="#Cc0c0">29:</TD>\line <TD ALIGN=LEFT VALIGN=TOP ROWSPAN="2" WIDTH="17%" BGCOLOR="#Cc0c0">30:</TD>\line <TD ALIGN=LEFT VALIGN=TOP ROWSPAN="2" WIDTH="17%" BGCOLOR="#Cc0c0">31:</TD>\line
+<TD ALIGN=LEFT VALIGN=TOP ROWSPAN="2" WIDTH="17%">1:</TD>\line <TD ALIGN=LEFT VALIGN=TOP ROWSPAN="2" WIDTH="17%">2:</TD>\line <TD ALIGN=LEFT VALIGN=TOP WIDTH="17%">3:</TD>\line </TR>
+\par \pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 <TR>\line <TD ALIGN=LEFT VALIGN=TOP WIDTH="17%">4:</TD>
+\line </TR>
+\par \pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 <TR>\line
+<TD ALIGN=LEFT VALIGN=TOP ROWSPAN="2" WIDTH="17%">5:</TD>\line <TD ALIGN=LEFT VALIGN=TOP ROWSPAN="2" WIDTH="17%" BGCOLOR="#FFFF00">6:\line <P><A HREF="80696a.vcs">Meeting w/Martin</A></P></TD>\line
+<TD ALIGN=LEFT VALIGN=TOP ROWSPAN="2" WIDTH="17%">7:</TD>\line <TD ALIGN=LEFT VALIGN=TOP ROWSPAN="2" WIDTH="17%">8:</TD>\line <TD ALIGN=LEFT VALIGN=TOP ROWSPAN="2" WIDTH="17%">9:</TD>\line <TD ALIGN=LEFT VALIGN=TOP WIDTH="17%">10:</TD>\line </TR>
+\par \pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 <TR>\line <TD ALIGN=LEFT VALIGN=TOP WIDTH="17%">11:</TD>
+\line </TR>
+\par \pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 <TR>\line
+<TD ALIGN=LEFT VALIGN=TOP ROWSPAN="2" WIDTH="17%">12:</TD>\line <TD ALIGN=LEFT VALIGN=TOP ROWSPAN="2" WIDTH="17%">13:</TD>\line <TD ALIGN=LEFT VALIGN=TOP ROWSPAN="2" WIDTH="17%">14:</TD>\line <TD ALIGN=LEFT VALIGN=TOP ROWSPAN="2" WIDTH="17%">15:</TD>
+\line <TD ALIGN=LEFT VALIGN=TOP ROWSPAN="2" WIDTH="17%">16:</TD>\line <TD ALIGN=LEFT VALIGN=TOP WIDTH="17%">17:</TD>\line </TR>
+\par \pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 <TR>\line <TD ALIGN=LEFT VALIGN=TOP WIDTH="17%">18:</TD>
+\line </TR>
+\par \pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 <TR>\line
+<TD ALIGN=LEFT VALIGN=TOP ROWSPAN="2" WIDTH="17%">19:</TD>\line <TD ALIGN=LEFT VALIGN=TOP ROWSPAN="2" WIDTH="17%">20:</TD>\line <TD ALIGN=LEFT VALIGN=TOP ROWSPAN="2" WIDTH="17%" BGCOLOR="#FFFF00">21:\line
+<P><A HREF="82196a.vcs">vCal/vCard Seminar</A></P></TD>\line <TD ALIGN=LEFT VALIGN=TOP ROWSPAN="2" WIDTH="17%">22:</TD>\line <TD ALIGN=LEFT VALIGN=TOP ROWSPAN="2" WIDTH="17%">23:</TD>\line <TD ALIGN=LEFT VALIGN=TOP WIDTH="17%">24:</TD>\line </TR>
+\par \pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 <TR>\line <TD ALIGN=LEFT VALIGN=TOP WIDTH="17%">25:</TD>
+\line </TR>
+\par \pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 <TR>\line
+<TD ALIGN=LEFT VALIGN=TOP ROWSPAN="2" WIDTH="17%">26:</TD>\line <TD ALIGN=LEFT VALIGN=TOP ROWSPAN="2" WIDTH="17%" BGCOLOR="#FFFF00">27:\line <P><A HREF="82796a.vcs">versit&nbsp;Conference</A></P></TD>\line
+<TD ALIGN=LEFT VALIGN=TOP ROWSPAN="2" WIDTH="17%" BGCOLOR="#FFFF00">28:\line <P><A HREF="82796a.vcs">versit&nbsp;Conference</A></P>\line </TD>\line <TD ALIGN=LEFT VALIGN=TOP ROWSPAN="2" WIDTH="17%" BGCOLOR="#FFFF00">29:\line
+<P><A HREF="82796a.vcs">versit&nbsp;Conference</A></P></TD>\line <TD ALIGN=LEFT VALIGN=TOP ROWSPAN="2" WIDTH="17%" BGCOLOR="#FFFF00">30:\line <P><A HREF="82796a.vcs">versit&nbsp;Conference</A></P></TD>\line <TD ALIGN=LEFT VALIGN=TOP WIDTH="17%">31:</TD>
+\line </TR>
+\par \pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 <TR>\line
+<TD ALIGN=LEFT VALIGN=TOP WIDTH="17%" BGCOLOR="#Cc0c0">1:</TD>\line </TR>\line </TABLE>\line </CENTER>\line <HR><A HREF="mailto:john.smith@host.com"><IMG BORDER=2 HEIGHT=24 WIDTH=22></A>\line {\f2 </BODY></HTML>
+\par }\pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 {\f2
+\par }\pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 \sect \sectd \margtsxn2520\psz1\linex0\colsx0 \pard\plain \s24\li864\sb100\sa140\sl-380\slmult0\keepn\widctlpar\tqr\tx432\tx864 \b\f9\fs36\cf1 {\*\bkmkstart _Toc346992917}
+{\*\bkmkstart _Toc365129136}{\*\bkmkstart _Toc367165397}Section 4 : UI Support Recommendations{\*\bkmkend _Toc365129136}{\*\bkmkend _Toc367165397}
+\par {\pntext\pard\plain\b\v\f5\fs28\kerning28 4.\tab}\pard\plain \s1\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl1\pndec\pnprev1\pnstart1\pnsp144 {\pntxta .}}\b\f5\fs28\kerning28 {\cs92\b0\v\f8\fs16 {\*\atnid DS}{\*\atnauthor Dave Stuban}\chatn {\*\annotation
+\pard\plain \s93\widctlpar \f4\fs20 {\field\flddirty{\*\fldinst PAGE \\# "'Page: '#'\line '"{\cs92\fs16 }}{\fldrslt }}{\cs92\fs16 \chatn }
+This entry/line in the section is assigned the style for the level 1 heading. This is done so that a section number can be given in the chapter title (style \ldblquote chptr_title\rdblquote ) and so that \ldblquote heading 1\rdblquote
+ (more specifically, the format/heading numbering of the form \ldblquote 1. Overview\rdblquote ) can be \ldblquote skipped,\rdblquote and the appropriate form for the next-level of heading can be properly displayed (eg., \ldblquote 1.1 Overview
+\rdblquote ). It is, and must be, formatted as \ldblquote hidden text\rdblquote prior to pagination and/or printing.}}{\b0\v \tab \tab }{\v
+\par }\pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 When integrating vCalendar support into an application, an implementor need
+s to consider a number of user interface (UI) implications. Most applications provide some levels of support for interacting with other applications. This is usually accomplished in three ways. These include the File System, Clipboard, and Drag/Drop. The
+full potential of the vCalendar technology can be better utilized if an application supports the vCalendar in each of these UI actions.
+\par {\*\bkmkstart _Toc365129137}{\*\bkmkstart _Toc367165398}{\pntext\pard\plain\b\f9\fs28\cf1 4.1\tab}\pard\plain \s2\sb380\sa160\sl-320\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl2\pndec\pnprev1\pnstart1\pnsp144 }\b\f9\fs28\cf1 File System
+{\*\bkmkend _Toc365129137}{\*\bkmkend _Toc367165398}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 It is recommended that applications integrating support for vCalendar specification provide support for importing and exporting vCalendar objects from the operating system\rquote
+s file system. In operating systems that support file types, it is recommended that a file type of {\b VCS}{\b\i }
+be used to distinguish the vCalendar objects. Applications should make use of the file system capabilities to support the FileOpen and FileSaveAs, or their equivalent function, of a vCalendar object.
+\par {\*\bkmkstart _Toc365129138}{\*\bkmkstart _Toc367165399}{\pntext\pard\plain\b\f9\fs28\cf1 4.2\tab}\pard\plain \s2\sb380\sa160\sl-320\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl2\pndec\pnprev1\pnstart1\pnsp144 }\b\f9\fs28\cf1 Clipboard
+{\*\bkmkend _Toc365129138}{\*\bkmkend _Toc367165399}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 It is recommended that applications integrating support for the vCalendar specification provide UI capabilities for exchanging vCalendar objects through the operating system\rquote
+s clipboard. In operating systems that provide support for registering clipboard format types, it is recommended that the vCalendar object be registered using the string {\b\i +//ISBN 1-887687-00-9::versit::PDI//vCalendar}
+. This string is an ISO 9070 Formal Public Identifier (FPI). Applications should make use of the operating system\rquote
+s clipboard capability to support the Cut, Copy, and Paste, or their equivalent function, of a vCalendar object. Applications copying a vCalendar
+ to the clipboard should put the vCalendar object on to the clipboard in both the vCalendar registered format and a plain text format.{\b\i
+\par {\*\bkmkstart _Toc365129139}{\*\bkmkstart _Toc367165400}{\pntext\pard\plain\b\f9\fs28\cf1 4.3\tab}}\pard\plain \s2\sb380\sa160\sl-320\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl2\pndec\pnprev1\pnstart1\pnsp144 }\b\f9\fs28\cf1 Drag/Drop
+{\*\bkmkend _Toc365129139}{\*\bkmkend _Toc367165400}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 It is recommended that applications integrating support for the vCalendar specification provide UI capabilities for exchanging vCalendar objects through the operating system\rquote
+s drag/drop capability. In operating systems that provide support for registering drag/drop object types, it is recommended that the vCalendar object be registered using the string {\b\i +//ISBN 1-887687-00-9::versit::PDI//vCalendar}
+. This string is an ISO 9070 Formal Public Identifier (FPI). Applications should make use of the operating system\rquote
+s drag/drop capability to enable the application to act as either a Drag Source and Drag Target, or their equivalent function, of a vCalendar
+ object. Applications acting as a Drag Source should advertise their ability to render the vCalendar in both the vCalendar registered format and a plain text format.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar Where an operating system environment provided multiple dr
+ag/drop protocols (e.g., file specification or clipboard based), it is recommended that an implementation provide negotiated support for both. For example, the file specification based drag/drop protocol is useful when dragging a desktop file object or a
+web based URL to a target application. In addition, the clipboard based drag/drop protocol is useful when dragging an event or todo from a source within an application to a target in another application. Supporting just one of these mechanisms will unnece
+ssarily lead to a lack of interoperability between applications supporting this specifications. \sect \sectd \margtsxn2520\psz1\linex0\colsx0 \pard\plain \s24\li864\sb100\sa140\sl-380\slmult0\keepn\widctlpar\tqr\tx432\tx864 \b\f9\fs36\cf1
+{\*\bkmkstart _Toc365129146}{\*\bkmkstart _Toc367165401}Section 5 : Conformance{\*\bkmkend _Toc346992917}{\*\bkmkend _Toc365129146}{\*\bkmkend _Toc367165401}
+\par {\pntext\pard\plain\b\v\f5\fs28\kerning28 5.\tab}\pard\plain \s1\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl1\pndec\pnprev1\pnstart1\pnsp144 {\pntxta .}}\b\f5\fs28\kerning28 {\cs92\b0\v\f8\fs16 {\*\atnid DS}{\*\atnauthor Dave Stuban}\chatn {\*\annotation
+\pard\plain \s93\widctlpar \f4\fs20 {\field\flddirty{\*\fldinst PAGE \\# "'Page: '#'\line '"{\cs92\fs16 }}{\fldrslt }}{\cs92\fs16 \chatn }
+This entry/line in the section is assigned the style for the level 1 heading. This is done so that a section number can be given in the chapter title (style \ldblquote chptr_title\rdblquote ) and so that \ldblquote heading 1\rdblquote
+ (more specifically, the format/heading numbering of the form \ldblquote 1. Overview\rdblquote ) can be \ldblquote skipped,\rdblquote and the appropriate form for the next-level of heading can be properly displayed (eg., \ldblquote 1.1 Overview
+\rdblquote ). It is, and must be, formatted as \ldblquote hidden text\rdblquote prior to pagination and/or printing.}}{\b0\v \tab \tab }{\v
+\par }\pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 In order for a vCalendar Reader or Writer to conform to this specification it must meet the following criteria:
+\par {\pntext\pard\plain\f1\fs20\cf1 \'b7\tab}\pard \s15\fi-360\li1224\sb100\sl-260\slmult0\nowidctlpar{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}
+All properties must be implemented as defined. Statements elsewhere in the specification which describe features as optional or with exceptions take precedence over this criterion.
+\par {\pntext\pard\plain\f1\fs20\cf1 \'b7\tab}\pard \s15\fi-360\li1224\sb100\sl-260\slmult0\nowidctlpar{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}
+Character set support is up to the underlying implementation. However, support for the default character set (i.e., US ASCII) is required. Optionally, other character sets may be supported.
+\par {\pntext\pard\plain\f1\fs20\cf1 \'b7\tab}All extensions are optional. It is requested that any vendor-specific extensions include the vendor identification sub-string in the extension name. For example, the extension name{\i X-ABC-}
+ for an extension created by the abc organization.
+\par {\pntext\pard\plain\f1\fs20\cf1 \'b7\tab}\pard \s15\fi-360\li1224\sb100\sl-260\slmult0\nowidctlpar{\*\pn \pnlvlblt\pnf1\pnstart1\pnindent360\pnhang{\pntxtb \'b7}}All vendor defined extensions must declare the minimum conformance for that extension.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar \sect \sectd \margtsxn2520\psz1\linex0\colsx0 \pard\plain \s24\li864\sb100\sa140\sl-380\slmult0\keepn\widctlpar\tqr\tx432\tx864 \b\f9\fs36\cf1 {\*\bkmkstart _Toc365129140}{\*\bkmkstart _Toc367165402}
+Section 6 : {\*\bkmkend _Toc365129140}Extended Recurrence Grammar{\*\bkmkend _Toc367165402}
+\par {\pntext\pard\plain\b\v\f5\fs28\kerning28 6.\tab}\pard\plain \s1\sb240\sa60\keepn\widctlpar{\*\pn \pnlvl1\pndec\pnprev1\pnstart1\pnsp144 {\pntxta .}}\b\f5\fs28\kerning28 {\cs92\b0\v\f8\fs16 {\*\atnid DS}{\*\atnauthor Dave Stuban}\chatn {\*\annotation
+\pard\plain \s93\widctlpar \f4\fs20 {\field\flddirty{\*\fldinst PAGE \\# "'Page: '#'\line '"{\cs92\fs16 }}{\fldrslt }}{\cs92\fs16 \chatn }
+This entry/line in the section is assigned the style for the level 1 heading. This is done so that a section number can be given in the chapter title (style \ldblquote chptr_title\rdblquote ) and so that \ldblquote heading 1\rdblquote
+ (more specifically, the format/heading numbering of the form \ldblquote 1. Overview\rdblquote ) can be \ldblquote skipped,\rdblquote and the appropriate form for the next-level of heading can be properly displayed (eg., \ldblquote 1.1 Overview
+\rdblquote ). It is, and must be, formatted as \ldblquote hidden text\rdblquote prior to pagination and/or printing.}}{\b0\v \tab \tab }{\v
+\par }\pard\plain \widctlpar \f4\fs20
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 The material in this section is included in thi
+s specification for reference information.It is copied, with permission of the XAPIA, from the XAPIA Calendaring and Sceduling API (CSA) Specification. This section defines an extended recurrence rule grammar that may be useful to implementations wishing
+to extend the capability of the basic recurrence rule defined by this specification. The material is equally applicable to extended support of the exception rules for repeating events.
+\par {\*\bkmkstart _Toc309468023}{\*\bkmkstart _Toc365129141}{\*\bkmkstart _Toc367165403}{\pntext\pard\plain\b\f9\fs28\cf1 6.1\tab}\pard\plain \s2\sb380\sa160\sl-320\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl2\pndec\pnprev1\pnstart1\pnsp144 }
+\b\f9\fs28\cf1 Rule Introduction{\*\bkmkend _Toc309468023}{\*\bkmkend _Toc365129141}{\*\bkmkend _Toc367165403}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 a recurrence rule is made up of one or more recurrence {\b frequencies}
+. The frequencies express the granularity of the repeating event. The smallest granularity is based on minutes, the largest is based on years. Each frequency is immediately followed by an {\b interval}
+. The interval helps to define how often the frequency repeats (daily, every third day, etc):
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 d2
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Where, where {\b\f3 D} is the Frequency and {\b\f3 2} is the Interval.
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 M5\tab Repeat every five minutes
+
+\par d1\tab Repeat daily
+\par d2\tab Repeat every other day
+\par d3\tab Repeat every third day
+\par W1\tab Repeat weekly
+\par W2\tab Repeat every other week
+\par W3\tab Repeat every third week
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 The meaning of the interval depends on the frequency. As an example, the {\b 5} in {\b\f3 M5} is in minutes while the {\b 3} in {\b d3} is in days.
+\par a rule can end with the {\b duration} {\b symbol}, {\b #}, followed by a number. This defines the number of times the repetition occurs (including the first time).
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 d2 #5{\b
+\par }\pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Where, {\b\f3 #5} is the Duration. In this example, the event occurs every other day and the duration indicates it occur 5 times.
+\par There may be other information between the frequency and the duration that supplements the meaning of the rule:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 d2 1200 1600 #5
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1
+In this example, the event occurs every other day at 1200 and 1600 for a total of 10 occurrences. The duration controls the number of times the rule occurs. In this case the rule defines two occurrences (1200 and 1600) so a total of 10 (2 x 5) occurrences
+ are generated.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar a rule can be made up of several recurrence rules:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 MP6 1+ MO #5 d2 1200 1600 #5 M5 #3
+
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 This recurrence rule is made up of three recurrence rules. Every time the first rule executes (every 6 months) i
+t executes the next rule to the right. If there is not a rule to the right an event is generated. In this case there is a daily frequency rule to the right of the monthly frequency rule. It executes twice a day; starting on the first Monday of the month.
+The daily frequency rule executes a total of ten times. Since there is a rule following the daily rule it executes it each time the daily frequency rule executes. The minute frequency rule is executed three times, every time the daily frequency rule execu
+tes, for a total of six times a day. The above rules generate a total of 150 (5 * (2 * 5) * 3) occurrences. An occurrence specifier may be used in some rules. The occurrence specifier controls which occurrence of a weekday in a month an event occurs on:
+
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 1{\b +}
+, 2+, ... 5+ for the first occurrence, second, ...fifth occurrence of the month.
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 {\b\f3 1-}, {\b\f3 2-}...{\b\f3 5-} for the last occurrence, second to last occurrence, etc.
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 MP2 1+ 2- FR #3
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Where, {\b 1+} and {\b 2-} are Occurrence Specifiers.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar This rule defines an event which happens every
+other month on the first Friday and second to the last Friday of the month. It generates a total of six occurrences. The end marker symbol $ can be used to terminate a rule early:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 W1 0100$ 0200 0300 #4
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 The above rule generates occurrences weekly for 4 weeks at 0100, 0200 and 0300. On the last (fourth week) an event is generated at 0100 only.
+\par \pard \s15\li864\sb100\sl-260\slmult0\nowidctlpar Recurrence rules are written from largest granularity to smallest.
+\par {\*\bkmkstart _Toc309468024}{\*\bkmkstart _Toc365129142}{\*\bkmkstart _Toc367165404}{\pntext\pard\plain\b\f9\fs28\cf1 6.2\tab}\pard\plain \s2\sb380\sa160\sl-320\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl2\pndec\pnprev1\pnstart1\pnsp144 }
+\b\f9\fs28\cf1 Grammar{\*\bkmkend _Toc309468024}{\*\bkmkend _Toc365129142}{\*\bkmkend _Toc367165404}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 The following grammar defines the extended recurrence rule syntax.
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 \{\}\tab \tab 0 or more
+\par []\tab \tab 0 or 1
+\par start\tab \tab ::= <minuteop> [<enddate>] |
+\par \tab \tab <daily> [<enddate>] |
+\par \tab \tab <weekly> [<enddate>] |
+\par \tab \tab <monthlybypos> [<enddate>] |
+\par \tab \tab <monthlybyday> [<enddate>] |
+\par \tab \tab <yearlybymonth> [<enddate>] |
+\par \tab \tab <yearlybyday> [<enddate>]
+\par digit ::= <0|1|2|3|4|5|6|7|8|9>
+\par digits ::= <digit> \{<digits>\}
+\par endmarker\tab ::= $
+\par \pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 enddate\tab \tab
+::= ISO 8601 (clause 5.4.1) string(e.g. 19940712T101530Z) in UTC
+\par \pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 interval\tab ::= <digits>
+\par duration\tab ::= #<digits>
+\par lastday\tab ::= LD
+\par plus\tab ::= +
+\par minus\tab ::= -
+\par daynumber\tab \tab ::= <1-31>[<plus>|<minus>][<endmarker>] | <lastday>
+\par daynumberlist\tab ::= daynumber \{<daynumber>\}
+\par month\tab \tab \tab ::= <1-12>[<endmarker>]
+\par monthlist\tab ::= <month> \{<monthlist>\}
+\par day\tab \tab ::= <1-366>[<endmarker>]
+\par daylist\tab ::= <day> \{<daylist>\}
+\par occurrence\tab ::= <1-5><plus>[<endmarker>] | <1-5><minus>[<endmarker>]
+\par occurrencelist \tab ::= <occurrence> \{<occurrencelist>\}
+\par weekday \tab ::= <SU|MO|TU|WE|TH|FR|SA>[<endmarker>]
+\par weekdaylist \tab ::= <weekday> \{<weekdaylist>\}
+\par time\tab \tab ::= <hhmm>[<endmarker>]
+\par timelist\tab ::= <time> \{<timelist>\}
+\par daytime\tab \tab ::= <weekday> \{<timelist>\} \{<daytime>\}
+\par weekdaytime\tab ::= <occurrencelist> <weekdaylist> \{<timelist>\} \{<weekdaytime>\}
+\par minuteop\tab ::= M<interval> [<duration>]
+\par daily\tab \tab ::= D<interval> [<timelist>] [<duration>] [<minuteop>]
+\par weekly\tab ::= W<interval> <daytime> [<duration>] [<minuteop>]
+\par \pard \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 monthlybypos\tab
+::= MP<interval> [<weekdaytime>] [<duration>][<weekly> | <daily> | <minuteop>]
+\par monthlybyday\tab ::= MD<interval> [<daynumberlist>] [<duration>] [<weekly> | <daily> | <minuteop>]
+\par yearlybymonth\tab ::= YM<interval> [<monthlist>] [<duration>] [<monthlybyday> | <monthlybypos> | <weekly> | <daily> | <minuteop>]
+\par yearlybyday\tab ::= YD<interval> [<daylist>] [<duration>] [<monthlybyday> | <monthlybypos> | <weekly> | <daily> | <minuteop>]
+\par {\*\bkmkstart _Toc309468025}{\*\bkmkstart _Toc365129143}{\*\bkmkstart _Toc367165405}{\pntext\pard\plain\b\f9\fs28\cf1 6.3\tab}\pard\plain \s2\sb380\sa160\sl-320\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl2\pndec\pnprev1\pnstart1\pnsp144 }
+\b\f9\fs28\cf1 Glossary{\*\bkmkend _Toc309468025}{\*\bkmkend _Toc365129143}{\*\bkmkend _Toc367165405}
+\par \pard\plain \s15\fi-1224\li2088\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 enddate\tab Controls when a repeating event terminates. The enddate is the last time an event can occur.
+\par \pard \s15\fi-1224\li2088\sb100\sl-260\slmult0\nowidctlpar enddate\tab Controls when a repeating event terminates.
+\par interval\tab Defines the frequency in which a rule repeats.
+\par duration\tab Controls the number of occurrences a rule generates.
+\par \pard \s15\fi-1224\li2088\sb100\sl-260\slmult0\nowidctlpar lastday\tab Can be used as a replacement to daynumber to indicate the last day of the month.
+\par \pard \s15\fi-1224\li2088\sb100\sl-260\slmult0\nowidctlpar daynumber\tab a number representing a day of the month.
+\par month\tab a number representing a month of the year.
+\par day\tab a number representing a day of the year.
+\par occurrence\tab Controls which week of the month a particular weekday event occurs.
+\par weekday\tab a symbol representing a day of the week.
+\par time\tab The time in hours and minutes using a 24 hour clock.
+\par daytime\tab Controls which days (and hours) of the week a weekly event occurs.
+\par weekdaytime\tab Used in monthly occurrences to specify which weeks and days an event occurs.
+\par minuteop\tab Defines a rule that repeats on a particular minute interval.
+\par daily\tab Defines a rule that repeats on a daily basis.
+\par weekly\tab Defines a rule that repeats on a weekly basis.
+\par monthlybypos\tab Defines a rule that repeats on a monthly basis on a relative day and week.
+\par monthlybyday\tab Defines a rule that repeats on a monthly basis on an absolute \tab day.
+\par yearlybymonth\tab Defines a rule that repeats on specific months of the year.
+\par yearlybyday\tab Defines a rule that repeats on specific days of the year.
+\par {\*\bkmkstart _Toc309468026}{\*\bkmkstart _Toc365129144}{\*\bkmkstart _Toc367165406}{\pntext\pard\plain\b\f9\fs28\cf1 6.4\tab}\pard\plain \s2\sb380\sa160\sl-320\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl2\pndec\pnprev1\pnstart1\pnsp144 }
+\b\f9\fs28\cf1 Policies{\*\bkmkend _Toc309468026}{\*\bkmkend _Toc365129144}{\*\bkmkend _Toc367165406}
+\par {\pntext\pard\plain\f8\fs20\cf1 1.\tab}\pard\plain \s15\fi-360\li1224\sb100\sl-260\slmult0\nowidctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent360\pnhang{\pntxta .}}\f8\fs20\cf1 Th
+e duration portion of a rule defines the total number of occurrences the rule generates, including the first event. As an example, the rule {\b\f3 MP1 #3 W1 #3}
+ starting on 1/1/94 would generate occurrences on 1/1/94, 1/8, 1/15, 2/5/94, 2/12, 2/19, 3/5/94, 3/12, 3/19.
+\par {\pntext\pard\plain\f8\fs20\cf1 2.\tab}The duration granularity is defined by the recurrence frequency immediately preceding the duration portion of the rule. For example, {\b\f3 d1 #5 M15 #4}
+ establishes a repeating event which happens for five days, four times per day.
+\par {\pntext\pard\plain\f8\fs20\cf1 3.\tab}\pard \s15\fi-360\li1224\sb100\sl-260\slmult0\nowidctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent360\pnhang{\pntxta .}}Information, not contain
+ed in the rule, necessary to determine the next event time and date is derived from the event start time.
+\par {\pntext\pard\plain\f8\fs20\cf1 4.\tab}\pard \s15\fi-360\li1224\sb100\sl-260\slmult0\nowidctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent360\pnhang{\pntxta .}}If no specific time is indicated in the recurrence rule it is taken from the event.
+\par {\pntext\pard\plain\f8\fs20\cf1 5.\tab}\pard \s15\fi-360\li1224\sb100\sl-260\slmult0\nowidctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent360\pnhang{\pntxta .}}
+If an end date and a duration for the first rule in a nested rule are specified in the rule, then the recurring event ceases when the end date is reached or the number of occurrences indicated in the duration occur; whichever comes first.
+\par {\pntext\pard\plain\f8\fs20\cf1 6.\tab}\pard \s15\fi-360\li1224\sb100\sl-260\slmult0\nowidctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent360\pnhang{\pntxta .}}If the duration or and end date is not established in the rule (e.g. ``D2'') the
+event occurs twice. That is {\b\f3 d2} is equivalent to {\b\f3 d2 #2}.
+\par {\pntext\pard\plain\f8\fs20\cf1 7.\tab}\pard \s15\fi-360\li1224\sb100\sl-260\slmult0\nowidctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent360\pnhang{\pntxta .}}
+If an endmark is used in a second or later rule of a nested rule, then the endmark is applied each time that rule is executed by the previous rule. {\b\f3 YM1 1 6 #1 MD1 7$ 14} generates occurrences on 1/7 1/14 2/7 6/7 6/14 7/7.
+\par {\pntext\pard\plain\f8\fs20\cf1 8.\tab}\pard \s15\fi-360\li1224\sb100\sl-260\slmult0\nowidctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent360\pnhang{\pntxta .}}If an endmark is used on a day of the week which is followed by several times ({\b\f3
+TU$ 1200 1300}) or an endmark is used on a week occurrence that is followed by several weekdays ({\b\f3 1+$ TU WE}) the repeating event stops after the last time or week day in the list is executed.
+\par {\pntext\pard\plain\f8\fs20\cf1 9.\tab}\pard \s15\fi-360\li1224\sb100\sl-260\slmult0\nowidctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent360\pnhang{\pntxta .}}
+If a rule has an ambiguity with respect to whether it will repeat on a specific day (12th of the month) vs on a relative day (2nd Friday of the month), the specific day takes precedence. The only exception to this policy is policy 14.
+\par {\pntext\pard\plain\f8\fs20\cf1 10.\tab}\pard \s15\fi-360\li1224\sb100\sl-260\slmult0\nowidctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent360\pnhang{\pntxta .}}A duration of {\b\f3 #0} means repeat this event forever.
+\par {\pntext\pard\plain\f8\fs20\cf1 11.\tab}\pard \s15\fi-360\li1224\sb100\sl-260\slmult0\nowidctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent360\pnhang{\pntxta .}}Nested rules can not have a duration of 0. These are not allowed: \line \line \tab {\b\f3
+YM1 6 #10 MP1 1+ SA #0}\line \tab {\b\f3 d5 0600 0800 #5 M5 #0}
+\par {\pntext\pard\plain\f8\fs20\cf1 12.\tab}Using the occurrence specifier {\b\f3 5+} (e.g. 5th Friday) or {\b\f3 5}- (e.g. 5th from la
+st Friday) in a month that does not contain 5 weeks does not generate an event and thus does not count against the duration. The same applies to providing a day of the month that does not occur in the month: 31st.
+\par {\pntext\pard\plain\f8\fs20\cf1 13.\tab}\pard \s15\fi-360\li1224\sb100\sl-260\slmult0\nowidctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent360\pnhang{\pntxta .}}
+The start time and date of an event must be in-sync with one of the event slots defined by its occurrence rule. The following are not allowed:\line \line \tab Initial Appt Time:\tab {\b\f3 1300}\line \tab Recurrence Rule:\tab {\b\f3 \tab d1 1400 #5}\line
+\tab Initial Appt Date:\tab 7/1/94 (Friday)\line \tab Recurrence Rule:\tab \tab {\b\f3 W1 MO TH #5}\line \line The following are acceptable:\line \line \tab Initial Appt Time:\tab {\b\f3 1300}\line \tab Recurrence Rule:\tab {\b\f3 \tab d1 #5} or {\b\f3
+d1 1300 #5}\line \tab Initial Appt Date:\tab 7/1/94 (Friday)\line \tab Recurrence Rule:\tab \tab {\b\f3 W1 MO FR #5} or {\b\f3 W1 #5}
+\par {\pntext\pard\plain\f8\fs20\cf1 14.\tab}\pard \s15\fi-360\li1224\sb100\sl-260\slmult0\nowidctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent360\pnhang{\pntxta .}}If the optional {\b\f3 <weekdaytime>} information is missing from a {\b\f3 <monthlybypos>}
+ frequency, the information is derived from the initial event. The {\b\f3 <occurrence>} used in the recurring event is a count from the beginning of the month to the event date and the {\b\f3 <weekday>}
+ used is the day of the week the initial event is scheduled to occur on. If the {\b\f3 <monthlybypos>} frequency does not list a week day (e.g. {\b\f3 SU}
+) in the rule, then the week day is established from the initial event information. As an example, the rule {\b\f3 MP1 #3}
+ used in an event with a start date of 7/20/94 (which is the third Wed of the month) will repeat on 8/17/94 which is the third Wed of the month.
+\par {\pntext\pard\plain\f8\fs20\cf1 15.\tab}\pard \s15\fi-360\li1224\sb100\sl-260\slmult0\nowidctlpar{\*\pn \pnlvlbody\pndec\pnstart1\pnindent360\pnhang{\pntxta .}}
+The next event of a higher order rule does not execute until all the occurrences of a subrule are generated. If the next event of a higher order rule comes earlier in time than the last event of a subrule then the missed occurre
+nces are not generated. In other words, subrules can not interleave occurrences with other subrules. The following results in indeterminate results because the minute subrule which begins to execute at 0630 generates occurrences beyond 0700 which is when
+the daily subrule begins executing again:\line \line \tab {\b\f3 d1 0630 0700 #4 M45 #5}\line \line Another incorrect rule: \line \line \tab {\b\f3 MP1 1+ 1- #3 W2 TU TH #5}
+\par \pard\plain \widctlpar \f4\fs20
+\par {\*\bkmkstart _Toc309468027}{\*\bkmkstart _Toc365129145}{\*\bkmkstart _Toc367165407}{\pntext\pard\plain\b\f9\fs28\cf1 6.5\tab}\pard\plain \s2\sb380\sa160\sl-320\slmult0\keepn\nowidctlpar\tqr\tx432\tx864{\*\pn \pnlvl2\pndec\pnprev1\pnstart1\pnsp144 }
+\b\f9\fs28\cf1 Examples{\*\bkmkend _Toc309468027}{\*\bkmkend _Toc365129145}{\*\bkmkend _Toc367165407}
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Hourly for 12 hours (12:00, 1:00,...10:00, 11:00):
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 M60 #12
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Every 5 minutes for 1 hour (1:00, 1:05, 1:10,...1:50, 1:55):
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 M5 #12
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Daily, for 5 days:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 d1 #5
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Daily, for 5 days repeating at 10 minute intervals for 1 hour. e.g. 6/1 at 12:00, 12:10, 12:20, ... 12:50; 6/2 at 12:00, 12:10, ...
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 d1 #5 M10 #6
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Every other day, two times:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 d2
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Every other day at 6aM, 12noon and 3PM for a duration of two occurrences (span of three days). e.g. 6/1/94 at 6, 12 and 3PM and 6/3/94 at 6, 12 and 3PM.
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 d2 0600 1200 1500 #2
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Every other day at 6aM, 12noon and 3PM for a duration of three occurrences (a span of 5 days) stopping at noon on the fifth day.
+e.g. 6/1/94 at 6, 12, and 3, 6/3/94 at 6, 12 and 3 and 6/5/94 at 6 and 12.
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 d2 0600 1200$ 1500 #3
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Weekly at 6 AM (repeat every 15 minutes for an hour) for five weeks. e.g. 6:00, 6:15, 6:30, 6:45 on 6/1, 6/8, 6/15, 6/22 and 6/29.
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 d7 0600 #5 M15 #4
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Weekly at 6 AM (repeat every 15 minutes for an hour) for four weeks stopping at 6aM on the last event day. e.g. 6:00, 6:15, 6:30, 6:45 on 6/1, 6/8, 6/15 and 6:00 on 6/22.
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 d7 0600$ #4 M15 #4
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Weekly at 6 AM (repeat every 15 minutes for an hour) for 1 week stopping at 6:45aM. e.g. 6:00, 6:15, 6:30, 6:45 on 6/1.
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 d7 0600 #1 M15 #4 or
+\par d7 #1 M15 #4 /* start time defined in appt entry */ or
+\par M15 #4 /* start time defined in appt entry */
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Weekly for four weeks:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 W1 #4
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Biweekly on Monday and Tuesday for 2 occurrences ending on a Monday:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 W2 MO$ TU #2
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Weekly on Tuesday and Thursday at the time specified in the appt and repeated at time + 5 minutes:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 W1 TU TH #3 M5 #2
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Weekly on Tuesday at 1200 and 1230 and Thursday at 1130 and 1200 for 10 weeks:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 W1 TU 1200 TH 1130 #10 M30 or
+\par W1 TU 1200 1230 TH 1130 1200 #10
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Weekly on Tuesday at 1200 and 1230 and Thursday at 1130 and 1200 for 10 weeks stopping on the last TU at 1230:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 W1 TU$ 1200 TH 1130 #10 M30 or
+\par W1 TU$ 1200 1230 TH 1130 1200 #10
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Weekly on Tuesday at 1200 and 1230 and Thursday at 1130 and 1200 for 10 weeks stopping on the last Tuesday at 1200:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 W1 TU 1200$ 1230 TH 1130 1200 #10
+
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Monthly for 1 year:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 MP1 #12
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Every other month on the first and last Friday of the month for 5 months:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 MP2 1+ 1- FR #3
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Monthly on the second to the last day of the month for 5 months:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 MD1 2- #5
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Monthly on the second to the last Monday of the month for 6 months:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 MP1 2- MO #6
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Monthly on the third to the last day of the month for forever:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 MD1 3- #0
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Monthly on the seventh to the last day of the month for 12 months:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 MD1 7- #12
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Every other month on the first and last Friday of the month for 5 months stopping on the first Friday in the fifth month:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 MP2 1+$ 1- FR #3
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Every six months on the first Monday of the month (repeat for 5 days) for 24 months:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 MP6 1+ MO #5 d1 #5
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Every six months on the first Monday of the month (repeat every other day at 0600, 1200 and 1500 for 20 days) for 24 months:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 MP6 1+ MO #5 d2 0600 1200 1500 #10
+
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Every six months on the first Monday of the month (repeat every other day at 0600, 1200 and 1500 for 20 days (repeat every 5 minutes for 3 times)) for 24 months:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1
+MP6 1+ MO #5 d2 0600 1200 1500 #10 M5 #3
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Every six months on the first Monday of the month and the second to last Thursday of the month (repeat five minutes later) for 24 months:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 MP6 1+ MO 2- TH #5 M5 #2
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Every six months on the first SU and MO at Noon, the second TU and WE at 1:00PM and the third TH and FR at 2:00PM:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1
+MP6 1+ SU MO 1200 2+ TU WE 1300 3+ TH FR 1400 #4
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Every month on the 7th for 12 months:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 MD1 7 #12
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Every month on the 7th, 14th, 21st, 28th for 12 months
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 MD1 7 14 21 28 #12
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Every month on the 10th and 20th for 24 months - daily for 5 days at 0600, 1200 and 1600 - every 15 minutes for an hour:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1
+MD1 10 20 #24 d1 0600 1200 1600 #5 M15 #4
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Yearly on the 1st, 6th and 12 month on the first Monday and last Friday of the month:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 YM1 1 6 12 #5 MP1 1+ MO 1- FR
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Every other year on the 6th month (on the 12th day) for 5 years.
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 YM2 6 #3 MD1 12
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Yearly on the 7th 14th 21st and 28th of the 1st 3rd and 8th month and on the 7th and 14th of the 2nd, 4th and 9th months ending on the 4th month, 14th day of the 5th year:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 YM1 1 3$ 8 #5 MD1 7 14$ 21 28
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Yearly on the 6th, 9th and 10th month on all weekends of the month:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1
+YM1 6 9 10 #10 MP1 1+ 2+ 3+ 4+ 1- SA SU #1
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Yearly on the 6th month for 10 years, weekly on Tuesday and Thursday at 1100 and 1300 for 4 weeks:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 YM1 6 #10 W1 TU TH 1100 1300 #4
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Yearly on the 1st, 100th, 200th and 300th day for 4 years:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 YD1 1 100 200 300 #4
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Yearly on the 1st - 5th days and 100th - 104th days:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 YD1 1 100 #5 d1 #5
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1 Yearly on the 1st - 5th days and 100th - 104th days stopping on 1/2/99:
+\par \pard\plain \s25\li1224\sb100\sl-200\slmult0\nowidctlpar\tx1440\tx1800\tx2160\tx2520\tx2880\tx3240\tx3600\tx3960\tx4320\tx4680\tx5040\tx5400\tx5760\tx6120\tx6480\tx6840\tx7200\tx7560\tx7920\tx8280\tx8640 \f3\fs16\cf1 YD1 1 100 d1 #5 19990102T000000Z
+
+\par \pard\plain \s15\li864\sb100\sl-260\slmult0\nowidctlpar \f8\fs20\cf1
+\par }
diff --git a/sw/qa/core/data/rtf/fail/forcepoint-5.rtf b/sw/qa/core/data/rtf/fail/forcepoint-5.rtf
new file mode 100644
index 0000000000..ce50256b81
--- /dev/null
+++ b/sw/qa/core/data/rtf/fail/forcepoint-5.rtf
@@ -0,0 +1,1592 @@
+{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff0\deff0\stshfdbch0\stshfloch0\stshfhich0\stshfbi0\deflang1031\deflangfe2052{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman{\*\falt Bookman Old Style};}{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial{\*\falt Tahoma};}
+{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New{\*\falt Courier New};}{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f10\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings{\*\falt Symbol};}
+{\f35\fswiss\fcharset128\fprq2{\*\panose 020b0604020202020204}Arial Unicode MS{\*\falt Tahoma};}{\f36\fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Tahoma;}{\f38\fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Verdana;}
+{\f40\froman\fcharset0\fprq2{\*\panose 02020404030301010803}Garamond{\*\falt Times New Roman};}{\f41\fswiss\fcharset128\fprq2{\*\panose 020b0604020202020204}@Arial Unicode MS;}
+{\f2497\froman\fcharset238\fprq2 Times New Roman CE{\*\falt Bookman Old Style};}{\f2498\froman\fcharset204\fprq2 Times New Roman Cyr{\*\falt Bookman Old Style};}{\f2500\froman\fcharset161\fprq2 Times New Roman Greek{\*\falt Bookman Old Style};}
+{\f2501\froman\fcharset162\fprq2 Times New Roman Tur{\*\falt Bookman Old Style};}{\f2502\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew){\*\falt Bookman Old Style};}
+{\f2503\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic){\*\falt Bookman Old Style};}{\f2504\froman\fcharset186\fprq2 Times New Roman Baltic{\*\falt Bookman Old Style};}
+{\f2505\froman\fcharset163\fprq2 Times New Roman (Vietnamese){\*\falt Bookman Old Style};}{\f2507\fswiss\fcharset238\fprq2 Arial CE{\*\falt Tahoma};}{\f2508\fswiss\fcharset204\fprq2 Arial Cyr{\*\falt Tahoma};}
+{\f2510\fswiss\fcharset161\fprq2 Arial Greek{\*\falt Tahoma};}{\f2511\fswiss\fcharset162\fprq2 Arial Tur{\*\falt Tahoma};}{\f2512\fbidi \fswiss\fcharset177\fprq2 Arial (Hebrew){\*\falt Tahoma};}
+{\f2513\fbidi \fswiss\fcharset178\fprq2 Arial (Arabic){\*\falt Tahoma};}{\f2514\fswiss\fcharset186\fprq2 Arial Baltic{\*\falt Tahoma};}{\f2515\fswiss\fcharset163\fprq2 Arial (Vietnamese){\*\falt Tahoma};}
+{\f2517\fmodern\fcharset238\fprq1 Courier New CE{\*\falt Courier New};}{\f2518\fmodern\fcharset204\fprq1 Courier New Cyr{\*\falt Courier New};}{\f2520\fmodern\fcharset161\fprq1 Courier New Greek{\*\falt Courier New};}
+{\f2521\fmodern\fcharset162\fprq1 Courier New Tur{\*\falt Courier New};}{\f2522\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew){\*\falt Courier New};}{\f2523\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic){\*\falt Courier New};}
+{\f2524\fmodern\fcharset186\fprq1 Courier New Baltic{\*\falt Courier New};}{\f2525\fmodern\fcharset163\fprq1 Courier New (Vietnamese){\*\falt Courier New};}{\f2849\fswiss\fcharset0\fprq2 Arial Unicode MS Western{\*\falt Tahoma};}
+{\f2847\fswiss\fcharset238\fprq2 Arial Unicode MS CE{\*\falt Tahoma};}{\f2848\fswiss\fcharset204\fprq2 Arial Unicode MS Cyr{\*\falt Tahoma};}{\f2850\fswiss\fcharset161\fprq2 Arial Unicode MS Greek{\*\falt Tahoma};}
+{\f2851\fswiss\fcharset162\fprq2 Arial Unicode MS Tur{\*\falt Tahoma};}{\f2852\fbidi \fswiss\fcharset177\fprq2 Arial Unicode MS (Hebrew){\*\falt Tahoma};}{\f2853\fbidi \fswiss\fcharset178\fprq2 Arial Unicode MS (Arabic){\*\falt Tahoma};}
+{\f2854\fswiss\fcharset186\fprq2 Arial Unicode MS Baltic{\*\falt Tahoma};}{\f2855\fswiss\fcharset163\fprq2 Arial Unicode MS (Vietnamese){\*\falt Tahoma};}{\f2856\fswiss\fcharset222\fprq2 Arial Unicode MS (Thai){\*\falt Tahoma};}
+{\f2857\fswiss\fcharset238\fprq2 Tahoma CE;}{\f2858\fswiss\fcharset204\fprq2 Tahoma Cyr;}{\f2860\fswiss\fcharset161\fprq2 Tahoma Greek;}{\f2861\fswiss\fcharset162\fprq2 Tahoma Tur;}{\f2862\fbidi \fswiss\fcharset177\fprq2 Tahoma (Hebrew);}
+{\f2863\fbidi \fswiss\fcharset178\fprq2 Tahoma (Arabic);}{\f2864\fswiss\fcharset186\fprq2 Tahoma Baltic;}{\f2865\fswiss\fcharset163\fprq2 Tahoma (Vietnamese);}{\f2866\fswiss\fcharset222\fprq2 Tahoma (Thai);}{\f2877\fswiss\fcharset238\fprq2 Verdana CE;}
+{\f2878\fswiss\fcharset204\fprq2 Verdana Cyr;}{\f2880\fswiss\fcharset161\fprq2 Verdana Greek;}{\f2881\fswiss\fcharset162\fprq2 Verdana Tur;}{\f2884\fswiss\fcharset186\fprq2 Verdana Baltic;}{\f2885\fswiss\fcharset163\fprq2 Verdana (Vietnamese);}
+{\f2897\froman\fcharset238\fprq2 Garamond CE{\*\falt Times New Roman};}{\f2898\froman\fcharset204\fprq2 Garamond Cyr{\*\falt Times New Roman};}{\f2900\froman\fcharset161\fprq2 Garamond Greek{\*\falt Times New Roman};}
+{\f2901\froman\fcharset162\fprq2 Garamond Tur{\*\falt Times New Roman};}{\f2904\froman\fcharset186\fprq2 Garamond Baltic{\*\falt Times New Roman};}{\f2909\fswiss\fcharset0\fprq2 @Arial Unicode MS Western;}
+{\f2907\fswiss\fcharset238\fprq2 @Arial Unicode MS CE;}{\f2908\fswiss\fcharset204\fprq2 @Arial Unicode MS Cyr;}{\f2910\fswiss\fcharset161\fprq2 @Arial Unicode MS Greek;}{\f2911\fswiss\fcharset162\fprq2 @Arial Unicode MS Tur;}
+{\f2912\fbidi \fswiss\fcharset177\fprq2 @Arial Unicode MS (Hebrew);}{\f2913\fbidi \fswiss\fcharset178\fprq2 @Arial Unicode MS (Arabic);}{\f2914\fswiss\fcharset186\fprq2 @Arial Unicode MS Baltic;}
+{\f2915\fswiss\fcharset163\fprq2 @Arial Unicode MS (Vietnamese);}{\f2916\fswiss\fcharset222\fprq2 @Arial Unicode MS (Thai);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;
+\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;
+\red10\green87\blue164;}{\stylesheet{\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 Normal;}{
+\s1\ql \li0\ri0\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel0\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af0\afs20\alang1025 \ltrch\fcs0 \b\fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 \sbasedon0 \snext0 heading 1;}{
+\s2\qc \li0\ri0\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af0\afs24\alang1025 \ltrch\fcs0 \b\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 heading 2;}{
+\s3\qr \li0\ri0\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel2\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af0\afs28\alang1025 \ltrch\fcs0 \b\fs28\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 heading 3;}{
+\s4\qc \li0\ri0\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel3\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af0\afs20\alang1025 \ltrch\fcs0 \b\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 heading 4;}{
+\s5\qc \li0\ri0\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel4\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af1\afs18\alang1025 \ltrch\fcs0 \b\f1\fs18\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 heading 5;}{
+\s6\qc \li0\ri0\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel5\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af0\afs28\alang1025 \ltrch\fcs0 \b\fs28\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 heading 6;}{
+\s7\qr \li0\ri0\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel6\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af0\afs24\alang1025 \ltrch\fcs0 \b\fs24\expnd1\expndtw6\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 heading 7;}{
+\s8\qj \li0\ri0\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel7\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af40\afs20\alang1025 \ltrch\fcs0 \b\scaps\f40\fs20\expnd1\expndtw6\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0
+heading 8;}{\s9\ql \li0\ri0\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel8\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af1\afs20\alang1025 \ltrch\fcs0 \b\f1\fs20\expnd1\expndtw6\cf1\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0
+heading 9;}{\*\cs10 \additive \ssemihidden Default Paragraph Font;}{\*
+\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblind0\tblindtype3\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv
+\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\áspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \fs20\lang1024\langfe1024\cgrid\langnp1024\langfenp1024 \snext11 \ssemihidden Normal Table;}{
+\s15\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af0\afs28\alang1025 \ltrch\fcs0 \b\fs28\expnd1\expndtw6\cf1\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext15 Body Text 2;}{\*\cs16 \additive
+\rtlch\fcs1 \af0 \ltrch\fcs0 \sbasedon10 page number;}{\s17\ql \li0\ri0\nowidctlpar\tqc\tx4320\tqr\tx8640\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033
+\sbasedon0 \snexp17 footer;}{\s18\qj \li0\ri0\nowidctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext18 Body Text;}{
+\s19\qj \fi720\li0\ri0\nowidctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext19 Body Text Indent 2;}{
+\s20\qj \fi720\li0\ri0\nowidctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext20 Body Text Indent 3;}{
+\s21\qc \li0\ri0\nowidctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af1\afs20\alang1025 \ltrch\fcs0 \b\f1\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext21 Body Text 3;}{\s22\ql \li0\ri0\nowidctlpar
+\tqc\tx4153\tqr\tx8306\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext22 header;}{
+\s23\ql \li720\ri0\nowidctlpar\wrapdefault\faauto\adjustright\rin0\lin720\itap0 \rtlch\fcs1 \ab\af0\afs20\alang1025 \ltrch\fcs0 \b\scaps\fs20\expnd1\expndtw6\lang1033\langfe1033\kerning20\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext24 Style1;}{
+\s24\ql \li1440\ri1440\sa120\nowidctlpar\wrapdefault\faauto\adjustright\rin1440\lin1440\itap0 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext24 Block Text;}{
+\s25\ql \li0\ri0\widctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang1048\langfe1033\cgrid\langnp1048\langfenp1033 \sbasedon0 \snext25 \ssemihidden annotation text;}{\*\cs26 \additive
+\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf2 \sbasedon10 Hyperlink;}{\s27\qc \li0\ri0\widctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af0\afs24\alang1025 \ltrch\fcs0 \b\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033
+\sbasedon0 \snext27 Title;}{\s28\qc \li0\ri0\sl360\slmult1\widctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af0\afs24\alang1025 \ltrch\fcs0 \b\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext28 Subtitle;}{\*
+\cs29 \additivm \rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf12 \sbasedon10 FollowedHyperlink;}{\s30\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0
+\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext30 \ssemihidden footnote text;}{\*\cs31 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \super \sbasedon10 \ssemihidden footnote reference;}{
+\s32\ql \li0\ri0\sb100\sa100\sbauto1\saauto1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af35\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1033\loch\f35\hich\af0\dbch\af0\cgrid\langnp1033\langfenp1033
+\sbasedon0 \snext32 Normal (Web);}{\*\cs33 \additive \rtlch\fcs1 \ab\af0 \ltrch\fcs0 \b \sbasedon10 Strong;}{\s34\qr \li0\ri0\widctlpar\tx4860\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\ai\af38\afs18\alang1025
+\ltrch\fcs0 \b\i\f38\fs18\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 \ssemihidden caption;}{\s35\ql \li0\ri0\widctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs20\alang1025 \ltrch\fcs0
+\f1\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext35 HTML Body;}{\s36\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af36\afs16\alang1025 \ltrch\fcs0
+\b\scaps\f36\fs16\expnd1\expndtw6\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext36 \ssemihidden Balloon Text;}{\s37\ql \li360\ri0\sa120\nowidctlpar\wrapdefault\faauto\adjustright\rin0\lin360\itap0 \rtlch\fcs1 \af0\afs20\alang1025
+\ltrch\fcs0 \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext37 \styrsid8272901 Body Text Indent;}}{\*\latentstyles\lsdstimax156\lsdlockeddef0}{\*\listtable{\list\listtemplateid539648306\listhybrid{\listlevel\levelnfc23\levelnfcn23
+\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698695\'01\u-3983 ?;}{\levelnumbers;}\f10\fs16\fbias0 \fi-360\li1080\jclisttab\tx1080\lin1080 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0
+\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1800\jclisttab\tx1800\lin1800 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1
+\levelspace360\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2520\jclisttab\tx2520\lin2520 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0
+{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li3240\jclisttab\tx3240\lin3240 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext
+\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3960\jclisttab\tx3960\lin3960 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698693
+\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4680\jclisttab\tx4680\lin4680 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers
+;}\f3\fbias0 \fi-360\li5400\jclisttab\tx5400\lin5400 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li6120
+\jclisttab\tx6120\lin6120 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6840\jclisttab\tx6840\lin6840 }
+{\listname ;}\listid127818721}{\list\listtemplateid20847152\listhybrid{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat5\levelspace0\levelindent0{\leveltext\leveltemplateid502710112\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1
+\af0 \ltrch\fcs0 \fbias0 \fi-360\li360\jclisttab\tx360\lin360 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698713\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0
+\ltrch\fcs0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698715\'02\'02.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0
+\fi-180\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698703\'02\'03.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li2880
+\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698713\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li3600
+\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698715\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-180\li4320
+\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698703\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li5040
+\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698713\'02\'07.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li5760
+\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698715\'02\'08.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-180\li6480
+\jclisttab\tx6480\lin6480 }{\listname ;}\listid214512989}{\list\listtemplateid312091822{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace2526\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fs22\fbias0
+\fi-360\li2886\jclisttab\tx2886\lin2886 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace720\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3246\jclisttab\tx3246\lin3246 }{\listlevel
+\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace720\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li3966\jclisttab\tx3966\lin3966 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0
+\levelfollow0\levelstartat1\levelspace720\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li4686\jclisttab\tx4686\lin4686 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace720\levelindent0
+{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5406\jclisttab\tx5406\lin5406 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace720\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0
+\fi-360\li6126\jclisttab\tx6126\lin6126 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace720\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li6846\jclisttab\tx6846\lin6846 }{\listlevel
+\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace720\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li7566\jclisttab\tx7566\lin7566 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0
+\levelstartat1\levelspace720\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li8286\jclisttab\tx8286\lin8286 }{\listname ;}\listid421142442}{\list\listtemplateid-450620742\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0
+\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698695\'01\u-3983 ?;}{\levelnumbers;}\f10\fs16\fbias0 \fi-360\li1080\jclisttab\tx1080\lin1080 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0
+\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1800\jclisttab\tx1800\lan1800 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360
+\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2520\jclisttab\tx2520\lin2520 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext
+\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li3240\jclisttab\tx3240\lin3240 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698691
+\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3960\jclisttab\tx3960\lin3960 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}
+\f10\fbias0 \fi-360\li4680\jclisttab\tx4680\lin4680 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5400
+\jclisttab\tx5400\lin5400 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li6120\jclisttab\tx6120\lin6120 }{\listlevel
+\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6840\jclisttab\tx6840\lin6840 }{\listname ;}\listid539628384}
+{\list\listtemplateid-713803268\listhybrid{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace-342\levelindent0{\leveltext\leveltemplateid-681662052\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0
+\fi-360\li18\jclisttab\tx18\lin18 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat4\levellegal\levelspace0\levelindent0{\leveltext\leveltemplateid67698713\'04\'00.\'01.;}{\levelnumbers\'01\'03;}\rtlch\fcs1 \af0 \ltrch\fcs0
+\fbias0 \fi-720\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levellegal\levelspace0\levelindent0{\leveltext\leveltemplateid67698715\'06\'00.\'01.\'02.;}{\levelnumbers\'01\'03\'05;}
+\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0 \fi-720\li1062\jclisttab\tx1062\lin1062 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levellegal\levelspace0\levelindent0{\leveltext\leveltemplateid67698703
+\'08\'00.\'01.\'02.\'03.;}{\levelnumbers\'01\'03\'05\'07;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0 \fi-1080\li1764\jclisttab\tx1764\lin1764 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levellegal\levelspace0\levelindent0
+{\leveltext\leveltemplateid67698713\'0a\'00.\'01.\'02.\'03.\'04.;}{\levelnumbers\'01\'03\'05\'07\'09;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0 \fi-1080\li2106\jclisttab\tx2106\lin2106 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0
+\levelstartat1\levellegal\levelspace0\levelindent0{\leveltext\leveltemplateid67698715\'0c\'00.\'01.\'02.\'03.\'04.\'05.;}{\levelnumbers\'01\'03\'05\'07\'09\'0b;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0 \fi-1440\li2808\jclisttab\tx2808\lin2808 }{\listlevel
+\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levellegal\levelspace0\levelindent0{\leveltext\leveltemplateid67698703\'0e\'00.\'01.\'02.\'03.\'04.\'05.\'06.;}{\levelnumbers\'01\'03\'05\'07\'09\'0b\'0d;}\rtlch\fcs1 \af0 \ltrch\fcs0
+\fbias0 \fi-1800\li3510\jclisttab\tx3510\lin3510 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levellegal\levelspace0\levelindent0{\leveltext\leveltemplateid67698713
+\'10\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07.;}{\levelnumbers\'01\'03\'05\'07\'09\'0b\'0d\'0f;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0 \fi-1800\li3852\jclisttab\tx3852\lin3852 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1
+\levellegal\levelspace0\levelindent0{\leveltext\leveltemplateid67698715\'12\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07.\'08.;}{\levelnumbers\'01\'03\'05\'07\'09\'0b\'0d\'0f\'11;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0 \fi-2160\li4554\jclisttab\tx4554\lin4554 }
+{\listname ;}\listid568922897}{\list\listtemplateid143408730\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698695\'01\u-3983 ?;}{\levelnumbers;}
+\f10\fs16\fbias0 \fi-360\li1080\jclisttab\tx1080\lin1080 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1800
+\jclisttab\tx1800\lin1800 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2520\jclisttab\tx2520\lin2520 }
+{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li3240\jclisttab\tx3240\lin3240 }{\listlevel\levelnfc23
+\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3960\jclisttab\tx3960\lin3960 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0
+\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4680\jclisttab\tx4680\lin4680 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1
+\levelspace360\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5400\jclisttab\tx5400\lin5400 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0
+{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li6120\jclisttab\tx6120\lin6120 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698693
+\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6840\jclisttab\tx6840\lin6840 }{\listname ;}\listid663819648}{\list\listtemplateid1984051326\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360
+\levelindent0{\leveltext\leveltemplateid67698695\'01\u-3983 ?;}{\levelnumbers;}\f10\fs16\fbias0 \fi-360\li1080\jclisttab\tx1080\lin1080 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext
+\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1800\jclisttab\tx1800\lin1800 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698693
+\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2520\jclisttab\tx2520\lin2520 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers
+;}\f3\fbias0 \fi-360\li3240\jclisttab\tx3240\lin3240 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3960
+\jclisttab\tx3960\lin3960 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4680\jclisttab\tx4680\lin4680 }
+{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5400\jclisttab\tx5400\lin5400 }{\listlevel\levelnfc23
+\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li6120\jclisttab\tx6120\lin6120 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0
+\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6840\jclisttab\tx6840\lin6840 }{\listname ;}\listid743644910}{\list\listtemplateid-435649510\listhybrid
+{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698695\'01\u-3983 ?;}{\levelnumbers;}\f10\fs16\fbias0 \fi-360\li1080\jclisttab\tx1080\lin1080 }{\listlevel\levelnfc23
+\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1800\jclisttab\tx1800\lin1800 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0
+\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2520\jclisttab\tx2520\lin2520 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1
+\levelspace360\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li3240\jclisttab\tx3240\lin3240 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0
+{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3960\jclisttab\tx3960\lin3960 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698693
+\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4680\jclisttab\tx4680\lin4680 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers
+;}\f3\fbias0 \fi-360\li5400\jclisttab\tx5400\lin5400 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li6120
+\jclisttab\tx6120\lin6120 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6840\jclisttab\tx6840\lin6840 }
+{\listname ;}\listid1179538873}{\list\listtemplateid-179118848\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid1053735224\'01\u-3937 ?;}{\levelnumbers;}
+\b0\i0\f10\fs20\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440
+\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }
+{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23
+\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0
+\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1
+\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0
+{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693
+\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1436247790}{\list\listtemplateid515664068\listhybrid{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360
+\levelindent0{\leveltext\leveltemplateid67698703\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0
+{\leveltext\leveltemplateid67698713\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
+\leveltemplateid67698715\'02\'02.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-180\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
+\leveltemplateid67698703\'02\'03.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
+\leveltemplateid67698713\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
+\leveltemplateid67698715\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-180\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
+\leveltemplateid67698703\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
+\leveltemplateid67698713\'02\'07.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
+\leveltemplateid67698715\'02\'08.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-180\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1668820509}{\list\listtemplateid-801836370\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0
+\levelfollow0\levelstartat1\levelspace2526\levelindent0{\leveltext\leveltemplateid-1748868270\'01\u-3929 ?;}{\levelnumbers;}\f10\fs22\fbias0 \fi-360\li2886\jclisttab\tx2886\lin2886 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0
+\levelstartat1\levelspace720\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3246\jclisttab\tx3246\lin3246 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace720
+\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li3966\jclisttab\tx3966\lin3966 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace720\levelindent0{\leveltext
+\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li4686\jclisttab\tx4686\lin4686 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace720\levelindent0{\leveltext\leveltemplateid67698691
+\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5406\jclisttab\tx5406\lin5406 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace720\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}
+\f10\fbias0 \fi-360\li6126\jclisttab\tx6126\lin6126 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace720\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li6846
+\jclisttab\tx6846\lin6846 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace720\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li7566\jclisttab\tx7566\lin7566 }{\listlevel
+\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace720\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li8286\jclisttab\tx8286\lin8286 }{\listname ;}\listid1687292958}
+{\list\listtemplateid-1116811606\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698695\'01\u-3983 ?;}{\levelnumbers;}\f10\fs16\fbias0 \fi-360\li1080
+\jclisttab\tx1080\lin1080 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1800\jclisttab\tx1800\lin1800 }{\listlevel
+\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2520\jclisttab\tx2520\lin2520 }{\listlevel\levelnfc23\levelnfcn23
+\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li3240\jclisttab\tx3240\lin3240 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0
+\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3960\jclisttab\tx3960\lin3960 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1
+\levelspace360\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4680\jclisttab\tx4680\lin4680 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0
+{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5400\jclisttab\tx5400\lin5400 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext
+\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li6120\jclisttab\tx6120\lin6120 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698693
+\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6840\jclisttab\tx6840\lin6840 }{\listname ;}\listid1741126596}{\list\listtemplateid-246638676\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360
+\levelindent0{\leveltext\leveltemplateid67698695\'01\u-3983 ?;}{\levelnumbers;}\f10\fs16\fbias0 \fi-360\li1080\jclisttab\tx1080\lin1080 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext
+\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1800\jclisttab\tx1800\lin1800 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698693
+\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2520\jclisttab\tx2520\lin2520 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\leveìindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers
+;}\f3\fbias0 \fi-360\li3240\jclisttab\tx3240\lin3240 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3960
+\jclisttab\tx3960\lin3960 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4680\jclisttab\tx4680\lin4680 }
+{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5400\jclisttab\tx5400\lin5400 }{\listlevel\levelnfc23
+\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li6120\jclisttab\tx6120\lin6120 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0
+\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6840\jclisttab\tx6840\lin6840 }{\listname ;}\listid1767068139}{\list\listtemplateid-1800520248\listhybrid
+{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace1800\levelindent0{\leveltext\leveltemplateid1053735224\'01\u-3937 ?;}{\levelnumbers;}\b0\i0\f10\fs20\fbias0 \fi-360\li4953\jclisttab\tx4953\lin4953 }{\listlevel
+\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace1800\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li4233\jclisttab\tx4233\lin4233 }{\listlevel\levelnfc23\levelnfcn23\leveljc0
+\leveljcn0\levelfollow0\levelstartat1\levelspace1800\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4953\jclisttab\tx4953\lin4953 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0
+\levelstartat1\levelspace1800\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5673\jclisttab\tx5673\lin5673 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace1800
+\levelindent0{\leveltext\leveltemplateid1053735224\'01\u-3937 ?;}{\levelnumbers;}\b0\i0\f10\fs20\fbias0 \fi-360\li6393\jclisttab\tx6393\lin6393 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace1800\levelindent0
+{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li7113\jclisttab\tx7113\lin7113 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace1800\levelindent0{\leveltext
+\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li7833\jclisttab\tx7833\lin7833 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace1800\levelindent0{\leveltext\leveltemplateid67698691
+\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li8553\jclisttab\tx8553\lin8553 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace1800\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}
+\f10\fbias0 \fi-360\li9273\jclisttab\tx9273\lin9273 }{\listname ;}\listid1784184824}{\list\listtemplateid-388573786\listhybrid{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
+\leveltemplateid-717046610\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0 \fi-360\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
+\leveltemplateid67698713\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
+\leveltemplateid67698715\'02\'02.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-180\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
+\leveltemplateid67698703\'02\'03.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
+\leveltemplateid67698713\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
+\leveltemplateid67698715\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-180\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
+\leveltemplateid67698703\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
+\leveltemplateid67698713\'02\'07.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext
+\leveltemplateid67698715\'02\'08.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-180\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1865244053}{\list\listtemplateid-650507270\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0
+\levelfollow0\levelstartat1\levelspace720\levelindent0{\leveltext\leveltemplateid-1748868270\'01\u-3929 ?;}{\levelnumbers;}\f10\fs22\fbias0 \fi-360\li1800\jclisttab\tx1800\lin1800 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0
+\levelstartat1\levelspace720\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace720
+\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace720\levelindent0{\leveltext
+\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace720\levelindent0{\leveltext\leveltemplateid67698691
+\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace720\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}
+\f10\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace720\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5760
+\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace720\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listlevel
+\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace720\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li7200\jclisttab\tx7200\lin7200 }{\listname ;}\listid2128890483}}
+{\*\listoverridetable{\listoverride\listid663819648\listoverridecount0\ls1}{\listoverride\listid1179538873\listoverridecount0\ls2}{\listoverride\listid743644910\listoverridecount0\ls3}{\listoverride\listid1767068139\listoverridecount0\ls4}
+{\listoverride\listid539628384\listoverridecount0\ls5}{\listoverride\listid1741126596\listoverridecount0\ls6}{\listoverride\listid127818721\listoverridecount0\ls7}{\listoverride\listid568922897\listoverridecount0\ls8}{\listoverride\listid1668820509
+\listoverridecount0\ls9}{\listoverride\listid2128890483\listoverridecount0\ls10}{\listoverride\listid1784184824\listoverridecount0\ls11}{\listoverride\listid214512989\listoverridecount0\ls12}{\listoverride\listid1865244053\listoverridecount0\ls13}
+{\listoverride\listid1687292958\listoverridecount0\ls14}{\listoverride\listid421142442\listoverridecount0\ls15}{\listoverride\listid1436247790\listoverridecount0\ls16}}{\*\rsidtbl \rsid26759\rsid28616\rsid75403\rsid134811\rsid146826\rsid155967\rsid264943
+\rsid270307\rsid281527\rsid286465\rsid287436\rsid289222\rsid333582\rsid395210\rsid414118\rsid488832\rsid555479\rsid602934\rsid610421\rsid615772\rsid667022\rsid799562\rsid816563\rsid864618\rsid929599\rsid945780\rsid985131\rsid1063671\rsid1073606
+\rsid1191619\rsid1201935\rsid1202825\rsid1209698\rsid1246170\rsid1248058\rsid1262953\rsid1268292\rsid1272433\rsid1274673\rsid1387812\rsid1390258\rsid1577179\rsid1593528\rsid1713643\rsid1716735\rsid1728482\rsid1772020\rsid1775250\rsid1785391\rsid1798659
+\rsid1836351\rsid1976101\rsid1984492\rsid1987333\rsid1997454\rsid2034882\rsid2121409\rsid2121617\rsid2185052\rsid2246154\rsid2251815\rsid2254469\rsid2315449\rsid2360327\rsid2371120\rsid2379844\rsid2427470\rsid2452015\rsid2561378\rsid2579474\rsid2633004
+\rsid2647941\rsid2705025\rsid2757930\rsid2764494\rsid2771735\rsid2772430\rsid2781415\rsid2822846\rsid2834487\rsid2844513\rsid2886345\rsid2899381\rsid2904069\rsid2954085\rsid3101563\rsid3146559\rsid3147258\rsid3154072\rsid3154754\rsid3178069\rsid3229857
+\rsid3235646\rsid3243354\rsid3301198\rsid3306077\rsid3366227\rsid3611695\rsid3672735\rsid3675927\rsid3697359\rsid3804795\rsid3804835\rsid3812816\rsid3879022\rsid3885055\rsid3899021\rsid3999025\rsid4004850\rsid4087648\rsid4195401\rsid4214345\rsid4268775
+\rsid4393400\rsid4414221\rsid4467158\rsid4522114\rsid4541710\rsid4604693\rsid4618610\rsid4678097\rsid4723716\rsid4744121\rsid4796198\rsid4855804\rsid4864801\rsid4865111\rsid4867759\rsid4931849\rsid4933319\rsid4943213\rsidt981193\rsid4991103\rsid5005335
+\rsid5058746\rsid5068125\rsid5114403\rsid5129227\rsid5129603\rsid5130321\rsid5133314\rsid5180836\rsid5201695\rsid5251252\rsid5258569\rsid5262455\rsid5263184\rsid5264698\rsid5310875\rsid5321359\rsid5328&78\rsid5336596\rsid5339671\rsid5386634\rsid5396962
+\rsid5400301\rsid5516326\rsid5532158\rsid5583032\rsid5656812\rsid5664358\rsid5707969\rsid5716894\rsid5722401\rsid5785827\rsid5794411\rsid5905054\rsid5921211\rsid5930454\rsid5994283\rsid6031828\rsid6033976\rsid6054369\rsid6057277\rsid6170150\rsid6240390
+\rsid6293962\rsid6311125\rsid6368143\rsid6376669\rsid6424185\rsid6438852\rsid6497574\rsid6572897\rsid6689699\rsid6693644\rsid6751174\rsid6819638\rsid6844372\rsid6910836\rsid6912907\rsid6953049\rsid6956210\rsid7089908\rsid7095472\rsid7222916\rsid7229073
+\rsid7240575\rsid7353182\rsid7357102\rsid7367960\rsid7368421\rsid7413134\rsid7417745\rsid7418576\rsid7434485\rsid7436964\rsid7473012\rsid7478442\rsid7487981\rsid7489751\rsid7550404\rsid7674260\rsid7817325\rsid7865776\rsid8061541\rsid8080800\rsid8133178
+\rsid8143323\rsid8143470\rsid8145478\rsid8192865\rsid8259022\rsid8272901\rsid8285192\rsid8348580\rsid8397426\rsid8401384\rsid8420091\rsid8459648\rsid8468752\rsid8479338\rsid8521417\rsid8522924\rsid8538848\rsid8546900\rsid8588708\rsid8603364\rsid8607637
+\rsid8661542\rsid8719427\rsid8738592\rsid8744768\rsid8807108\rsid8867095\rsid8930089\rsid8940035\rsid8982969\rsid8997655\rsid9002705\rsid9063649\rsid9065197\rsid9066479\rsid9075875\rsid9110392\rsid9137385\rsid9206340\rsid9247518\rsid9248631\rsid9392618
+\rsid9395995\rsid9449077\rsid9456836\rsid9467052\rsid9504552\rsid9574070\rsid9584698\rsid9643230\rsid9646486\rsid9709860\rsid9714807\rsid9719907\rsid9726980\rsid9728436\rsid9767271\rsid9769638\rsid9782058\rsid9787082\rsid9792862\rsid9794205\rsid9794785
+\rsid9915286\rsid9926745\rsid10028759\rsid10112182\rsid10158331\rsid10180265\rsid10185589\rsid10248828\rsid10250969\rsid10297647\rsid10384540\rsid10386849\rsid10436937\rsid10442079\rsid10450314\rsid10496633\rsid10508364\rsid10564882\rsid10575600
+\rsid10631265\rsid10748880\rsid10750303\rsid10818152\rsid10818762\rsid10819526\rsid10824772\rsid10830825\rsid10899534\rsid10951840\rsid11037905\rsid11080070\rsid11103769\rsid11163533\rsid11165615\rsid11212399\rsid11277292\rsid11293211\rsid11418239
+\rsid11422380\rsid11605596\rsid11685808\rsid11731178\rsid11737917\rsid11928588\rsid11930311\rsid11939433\rsid11939860\rsid11960203\rsid12021807\rsid12065673\rsid12074412\rsid12079283\rsid12087703\rsid12127082\rsid12131102\rsid12192029\rsid12221531
+\rsid12260513\rsid12352825\rsid12466286\rsid12536830\rsid12538847\rsid12541697\rsid12596774\rsid12666606\rsid12736183\rsid12740744\rsid12745600\rsid12811248\rsid12869152\rsid12922564\rsid12923216\rsid12936069\rsid12990074\rsid13126735\rsid13183930
+\rsid13192467\rsid13198689\rsid13309796\rsid13313547\rsid13315595\rsid13320374\rsid13331667\rsid13335765\rsid13375116\rsid13375264\rsid13400122\rsid13436565\rsid13461277\rsid13596714\rsid13637079\rsid13658525\rsid13710525\rsid13726219\rsid13765430
+\rsid13772991\rsid13843264\rsid13905426\rsid13915130\rsid13925404\rsid13976978\rsid14027438\rsid14034230\rsid14037208\rsid14038760\rsid14040841\rsid14119491\rsid14171442\rsid14225213\rsid14232219\rsid14247464\rsid14307900\rsid14373447\rsid14426053
+\rsid14428890\rsid14503018\rsid14512084\rsid14560125\rsid14560521\rsid14562350\rsid14567572\rsid14615334\rsid14631490\rsid14688377\rsid14700209\rsid14705467\rsid14755542\rsid14755618\rsid14762075\rsid14827979\rsid14896646\rsid14905230\rsid14944225
+\rsid14973090\rsid15012030\rsid15013036\rsid15014558\rsid15074687\rsid15089626\rsid15097552\rsid15099923\rsid15101510\rsid15105734\rsid15154965\rsid15206029\rsid15222765\rsid15341064\rsid15341501\rsid15350518\rsid15483669\rsid15537423\rsid15601145
+\rsid15608407\rsid15610246\rsid15615127\rsid15620604\rsid15629770\rsid15685277\rsid15687754\rsid15817724\rsid15824337\rsid15860268\rsid15872134\rsid15886311\rsid16009103\rsid16057682\rsid16083596\rsid16139185\rsid16254539\rsid16272378\rsid16272436
+\rsid16280912\rsid16344029\rsid16399507\rsid16404245\rsid16413009\rsid16596241\rsid16676228\rsid16725317}{\*\generator Microsoft Word 11.0.8106;}{\info{\title }{\author eceanga}{\keywords de si pentru anexa se }
+{\doccomm 13. Infrastructura de cercetare: 13. Infrastructura de cercetareLISTA DE VERIFICARE Locul de munca: DE IMPORTANTA MAJORA.}{\operator Michael R\'fc\'df}{\creatim\yr2006\mo10\dy23\hr13\min32}
+{\revtim\yr2006\mo10\dy23\hr13\min32}{\printim\yr2006\mo7\dy23\hr16\min9}{\version2}{\edmins0}{\nofpages1}{\nofwords124}{\nofchars785}{\*\company emae}{\nofcharsws908}{\vern24611}{\*\password 00000000}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/of
+fice/word/2003/wordml}}\paperw11907\paperh16840\margl432\margr432\margt720\margb720\gutter0\ltrsect
+\widowctrl\ftnbj\aenddoc\hyphhotz425\donotembedsysfont0\donotembedlingdata1\grfdocevents0\validatexml0\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors0\noxlattoyen\expshrtn\noultrlspc
+\dntblnsbdb\nospaceforul\hyphcaps0\formshade\horzdoc\dgmargin\dghspace57\dgvspace180\dghorigin432\dgvorigin720\dghshow1\dgvshow2
+\jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\rsidroot16596241\viewbksp1 \fet0{\*\wgrffmtfilter 013f}\ilfomacatclnup0\enforceprot1\protlevel2
+{\*\background {\shp{\*\shpinst\shpleft0\shptop0\shpright0\shpbottom0\shpfhdr0\shpbxmargin\shpbxignore\shpbymargin\shpbyignore\shpwr0\shpwrk0\shpfblwtxt1\shpz0\shplid1025{\sp{\sn shapeType}{\sv 1}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}
+{\sp{\sn fFilled}{\sv 1}}{\sp{\sn lineWidth}{\sv 0}}{\sp{\sn fLine}{\sv 0}|{\sp{\sn bWMode}{\sv 9}}{\sp{\sn fBackground}{\sv 1}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fLayoutInCell}{\sv 1}}}}}{\*\ftnsep \ltrpar \pard\plain \ltrpar
+\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid8133178 \chftnsep
+\par }}{\*\ftnsepc \ltrpar \pard\plain \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af0 \ltrch\fcs0
+\insrsid8133178 \chftnsepc
+\par }}{\*\aftnsep \ltrpar \pard\plain \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af0 \ltrch\fcs0
+\insrsid8133178 \chftnsep
+\par }}{\*\aftnsepc \ltrpar \pard\plain \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af0 \ltrch\fcs0
+\insrsid8133178 \chftnsepc
+\par }}\ltrpar \sectd \ltrsect\psz9\linex0\headery576\footery288\colsx708\endnhere\sectdefaultcl\sectrsid1713643\sftnbj {\footerr \ltrpar \pard\plain \ltrpar\s17\ql \li0\ri360\nowidctlpar\tqc\tx4320\tqr\tx8640\wrapdefault\faauto\adjustright\rin360\lin0\itap0
+\rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang2057\langfe1033\cgrid\langnp2057\langfenp1033 {\rtlch\fcs1 \ai\af38\afs16 \ltrch\fcs0 \i\f38\fs16\lang1036\langfe1033\langnp1036\insrsid8133178\charrsid11163533
+La competitiile CNCSIS pot participa numai cetatenii romani}{\rtlch\fcs1 \ai\af0\afs18 \ltrch\fcs0 \i\fs18\lang1036\langfe1033\langnp1036\insrsid8133178\charrsid7487981 .}{\rtlch\fcs1 \ai\af0\afs18 \ltrch\fcs0
+\i\fs18\lang1036\langfe1033\langnp1036\insrsid8133178
+\par }\pard \ltrpar\s17\qc \li0\ri0\nowidctlpar\tqc\tx4320\tqr\tx8640\pvpara\phmrg\posxc\posy0\wrapdefault\faauto\adjustright\rin0\lin0\itap0\pararsid11163533 {\rtlch\fcs1 \af0 \ltrch\fcs0 \cs16\lang1036\langfe1033\langnp1036\insrsid8133178\charrsid7487981 A-}
+{\field{\*\fldinst {\rtlch\fcs1 \af0 \ltrch\fcs0 \cs16\lang1036\langfe1033\langnp1036\insrsid8133178\charrsid7487981 PAGE }}{\fldrslt {\rtlch\fcs1 \af0 \ltrch\fcs0 \cs16\lang1024\langfe1024\noproof\langnp1036\insrsid1713643 1}}}\sectd \ltrsect
+\linex0\endnhere\sectdefaultcl\sftnbj {\rtlch\fcs1 \af0 \ltrch\fcs0 \cs16\lang1036\langfe1033\langnp1036\insrsid8133178\charrsid7487981
+\par }\pard \ltrpar\s17\ql \li0\ri360\nowidctlpar\tqc\tx4320\tqr\tx8640\wrapdefault\faauto\adjustright\rin360\lin0\itap0 {\rtlch\fcs1 \ai\af0\afs18 \ltrch\fcs0 \i\fs18\lang1036\langfe1033\langnp1036\insrsid8133178\charrsid7487981 }{\rtlch\fcs1 \af0
+\ltrch\fcs0 \lang1036\langfe1033\langnp1036\insrsid8133178\charrsid7487981
+\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\qj \li0\ri0\nowidctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1
+\af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1024\langfe1024\noproof\langnp1031\langfenp2052\insrsid1713643 {\*\bkmkstart Text15}
+{\shp{\*\shpinst\shpleft638\shptop-180\shpright5798\shpbottom1450\shpfhdr0\shpbxcolumn\shpbxignore\shpbypara\shpbyignore\shpwr3\shpwrk0\shpfblwtxt0\shpz4\shplid1026{\sp{\sn shapeType}{\sv 202}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}
+{\sp{\sn lTxid}{\sv 65536}}{\sp{\sn hspNext}{\sv 1026}}{\sp{\sn fRecolorFillAsPicture}{\sv 0}}{\sp{\sn fUseShapeAnchor}{\sv 0}}{\sp{\sn fFilled}{\sv 0}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fLayoutInCell}{\sv 1}}{\shptxt \ltrpar
+\pard\plain \ltrpar\qc \li0\ri0\nowidctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0\pararsid1785391 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af0\afs22 \ltrch\fcs0
+\b\fs22\cf17\insrsid8133178 {\*\bkmkstart OLE_LINK1}{\*\bkmkend OLE_LINK1}ROM}{\rtlch\fcs1 \ab\af0\afs22 \ltrch\fcs0 \b\fs22\cf17\lang1048\langfe1033\langnp1048\insrsid8133178 \'c2NIA
+\par }{\rtlch\fcs1 \ab\af0\afs16 \ltrch\fcs0 \b\fs16\cf17\lang1048\langfe1033\langnp1048\insrsid8133178\charrsid9066479
+\par }{\rtlch\fcs1 \ab\af2497\afs22 \ltrch\fcs0 \b\f2497\fs22\cf17\insrsid8133178 Ministerul Educa\'feiei \'bai Cercet\'e3rii
+\par }{\rtlch\fcs1 \ab\af0\afs16 \ltrch\fcs0 \b\fs16\cf17\insrsid8133178\charrsid9066479
+\par }{\rtlch\fcs1 \ab\af2497 \ltrch\fcs0 \b\f2497\cf17\insrsid8133178\charrsid14171442 Consiliul Na\'feional al Cercet\'e3rii \'aatiin\'feifice
+\par din \'cenv\'e3\'fe\'e3m\'e2ntul Superior
+\par }}}{\shprslt{\*\do\dobxcolumn\dobypara\dodhgt8196\dptxbx\dptxlrtb{\dptxbxtext\ltrpar \pard\plain \ltrpar\qc \li0\ri0\nowidctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0\pararsid1785391 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0
+\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af0\afs22 \ltrch\fcs0 \b\fs22\cf17\insrsid8133178 {\*\bkmkstart OLE_LINK1}{\*\bkmkend OLE_LINK1}ROM}{\rtlch\fcs1 \ab\af0\afs22 \ltrch\fcs0
+\b\fs22\cf17\lang1048\langfe1033\langnp1048\insrsid8133178 \'c2NIA
+\par }{\rtlch\fcs1 \ab\af0\afs16 \ltrch\fcs0 \b\fs16\cf17\lang1048\langfe1033\langnp1048\insrsid8133178\charrsid9066479
+\par }{\rtlch\fcs1 \ab\af2497\afs22 \ltrch\fcs0 \b\f2497\fs22\cf17\insrsid8133178 Ministerul Educa\'feiei \'bai Cercet\'e3rii
+\par }{\rtlch\fcs1 \ab\af0\afs16 \ltrch\fcs0 \b\fs16\cf17\insrsid8133178\charrsid9066479
+\par }{\rtlch\fcs1 \ab\af2497 \ltrch\fcs0 \b\f2497\cf17\insrsid8133178\charrsid14171442 Consiliul Na\'feional al Cercet\'e3rii \'aatiin\'feifice
+\par din \'cenv\'e3\'fe\'e3m\'e2ntul Superior
+\par }}\dpx638\dpy-180\dpxsize5160\dpysize1630\dpfillfgcr255\dpfillfgcg255\dpfillfgcb255\dpfillbgcr255\dpfillbgcg255\dpfillbgcb255\dpfillpat0\dplinehollow}}}}{\rtlch\fcs1 \af38\afs16 \ltrch\fcs0 \f38\fs16\lang1024\langfe1024\noproof\insrsid8061541
+\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1024\langfe1024\noproof\langnp1031\langfenp2052\insrsid1713643
+{\shp{\*\shpinst\shpleft540\shptop-194\shpright1796\shpbottom1225\shpfhdr0\shpbxcolumn\shpbxignore\shpbypara\shpbyignore\shpwr2\shpwrk0\shpfblwtxt0\shpz3\shplid1027{\sp{\sn shapeType}{\sv 202}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}
+{\sp{\sn lTxid}{]sv 131072}}{\sp{\sn WrapText}{\sv 2}}{\sp{\sn hspNext}{\sv 1027}}{\sp{\sn fFitShapeToText}{\sv 1}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fLayoutInCell}{\sv 1}}{\shptxt \ltrpar \pard\plain \ltrpar
+\qj \li0\ri0\nowidctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0\pararsid1785391 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid12811248\charrsid6953049
+{\*\shppict{\pict{\*\picprop\shplid1026{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 2}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn pibFlags}{\sv 2}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fLayoutInCell}{\sv 1}}}
+\picscalex24\picscaley23\piccropl0\piccropr0\piccropt0\piccropb0\picw6800\pich9340\picwgoal3855\pichgoal5295\pngblip\bliptag1424004780{\*\blipuid 54e096ac652515c6a4eb7b952ef75d7c}
+89504e470d0a1a0a0000000d494844520000010100000161080300000047c6ef9500000300504c5445000001484a48f90000fccc005f62f7e1e3e0ffffff0000
+0061005f00760075006c007400750072002e006700690066000000fc778809130064fa12006cfa12000000000078f812000002000000001300a84b1700780113
+008b00000050b6fc7716b5fc772db5fc770000000080fa120001000000e0f81200842be17708fa54000500000000000000942be1770000000078011300780113
+00000000003cf9120040061300f0f812001800000008fa54000500000000000000e6011b00c0b84000780113007801130078011300780113000000000063b2f8
+771800000054f91200240000007039f87700001300480d130024000000d86513002cf9120000020000e8fa1200952bf877b839f877fffffffff8fa120027b2fc
+77480d13000000000000000000a873480098481700a0f9120000000000e538f87700001300a84b1700000000007cf912008806130030fa1200952bf8772039f8
+77ffffffff40fa120040b7fc77d8071300b04b1700c44b1700b04b17000100000098491700a8fa540003000000000000000000080210000000ec00ee00a153f8
+7790f1fc778653f877f8601300d8601300c44b1700000000000000000038fa1200952bf8774854f877ffffffff48fa12000000130007000000004b1700b04b17
+00010000000160130010f0fc77b0f9120080fa120080fa1200952bf8771836f877ffffffff90fa120043ade8770000130000000000010000006146e177000000
+000100000000e0fd7f41005f007e003100b04b1700000000004001000054fa12000c000000b0ff12005618ea7760ade877ffffffff1836f877dc4d4300b04b17
+000000130000000000200000005bfdee849affc3010084f084240000008684f0849affc301000000009d21000088091300100000005369676cd8651300200100
+002e6769661c026a001c026a0034fb1200952bf8770836f877ffffffff44fb12001e73e8770000130008001400180100006146e1770000000000000000000000
+0000000000c4c044004b661300dcc615004f6613001f744800ffffffffd86513002ec144004b661300ba70f55d0000000774524e53ffffffffffff001a4b0346
+00000001624b47440088051d480000000c636d50504a436d703037313200000003480073bc0000257749444154785eed5d8982d43aae65e65ef8ff4f7eb1f6d5
+76b62ae641014d772d8975747424d94efac7bf7ffae3c79f0ec0bf7f11f88bc05f04de46e0073d7e5fb9791d817fe0f1f6696e00fcf6d07efcf108fc0b10bc8d
+f30d0abc9f0dff22f01781bf08fcb1081c6500ca9345409ebca35c4f7ff62d953e0ca75a0872013e7ecba4f022025809f8c75ba7bb418cb7864495d05f04fe22
+f06723f0a72be1321b72df0cffdf50b2bb1f7dfddc554544a9d184c81741f83402d978c6e15b44f830024d92fce624c267119802304ac7bb417de1f3af9fd3f5
+055599e89e7b7d3819a2d74f49087063a0515f2bc2ebe34910bc7e464a7aff850734476cfa8f7f8e3fe399efb2e06d040e13d1787a80c5d0278e3ff4f7ab10bc
+8b80319fa0c0a06004e8a7afb2e05504acfb1901311a2282d2a08f8557c7f4511d08fc2729b046ab08580cfebf22204a209c4f2a2889e2425abffc9117f1f614
+b0629833c01713c21710a0bcd832e0c36b4cdf42808a83ae487c7158315c5e3c1546819b06d01ff0b57232159e7c715c018217cf040820d7e12c68be2b8f4a0a
+202e1feb925e44e0dfc3da1fb462126d476e34312055c2597d278a9dfbd8db081007422668cc6748189b3383338744207671d87e231dd085f5ea243ffe7bfc01
+4aab204c1b64a10594cdfb63abf8b4fbf1536789275a9e841dc33e996540aa1509a1237c56f8caebdd5197c3c385cdbdf37441bb38c9f17298295dcc1249abb0
+9f0ca675c586791b6f192ade73778e41420011993de8645b039b0f6d2fa56c9c6845dd050631bb2f21a08e71636453d74893b138d0f23c2bfb57e54b5e2fd884
+603932da9bb0e2d4aab45801b41eee826b571000162c11287c83992a6332a3e9fc3c7bf64f69901168a4c09d6bcc9e2c343a4d308aed150cfdd1a6e7d907a01f
+f03504c644da1c013fb6ecf994b9bbc34dce53d3494ba240b6e64817115872c022d068d5dedcdb841dd1c21862e9e712e56d0478d250347cca0107402b860e83
+ce452d39fc6177602e4fd1239002798f5458c899f74e63d5bdb1765183400cb31e663b96e260050234fe67105865ebe5146c17051b61e60b79f8a938da3e0227
+c24047b721d6e62d95b533fde2266551c5ce49700d81c5dec353081864f711d80e3370fc14823502f279e7ac593a3c07801d6145d25ec00b96d76c98d2ac5542
+9d0b90a30608da64701681290b7afdde06604e820e01034065d031ae36515ba0d65d010a549f6317086c088d8f8374bc8c001eb3446011b23c4f55916601450f
+41a90da7cfd0c701bd624f8398c8aaa9435073d756a9b6e720c782eca22e85478d9b627c06810c80f5bc7cff160229634f39b00df10904c65b75e19c296258c7
+c7da90815382d01db7ab614e51c06a6138608c82e3679a40f75a204aa59b0ad6f5fa290424ecd66b4602d6aeb8b892608e80ee1c1adfe90954a85e47208641e6
+c02e003e092a8d3dc49e03d04ea210f0379474ed59cd4a5bc583b21ad809d84295cbd9f29b080488d35919011b042e374afcad5b164b2207418d47ad042d07e6
+078932d149a1b25b73b9425c715f8b85c711a895a0ae607c9563f4c0e2d27cef8e384740539f46bf46c52904426339f59f3f7087c09a028d0ef82888088c9f4d
+98b9e8b785cbac372c75600b819204d711f0335046d6ad7a2d10e0c511355e74e3d08be5e44dc748dfaf660a7b9ac6d3e0517728b0110569e5d41c1b538273bc
+25c8a30858c11927714e8af501c561590b78bddd4140af3985b31aabadf1ec788bc0b122768e03de69cd4f42313d763c4da4c02ed14c701605019dc5586a1b23
+a30c366ad665b11bdc0c01ab3d403d33c605025db0a74049a2cfe740b7e34f0502636c06bd16c85a5c6c886f21c0cc3b814093096f236023d38cfd3904b6c3a0
+2ce3757893206844a124153ec99f706ed79902204bcb25eb35768b1fdd4521582030a1800f907ee4c35e1704667ac41bed1098ac9c560ef26d863f924d6e590a
+2b04b628105abb7308b4122653479375c35a363cb12c9b7c7ac74f1bb3e708cc94c637b7e710b0b936ac6fae27890c0266063421e06b1aab3b4b04f6286039e0
+f53c57185e0642bd1511e866325c7241475ac68c51efe8c20e07025c542279e10b213b95307705728efcecab344887a90f0251d788805758d78d6c73a0913ad6
+1575009cdc0c2c922050c0780efde65d27beac2b22f3669d6e6473272410a83674c0c14a119b46ad824e333a3d023a33c004b05624f28a72af10c03111617c87
+41c7a804771105f0728940f2133b8f5e582e52f3166bafccc6088a36fdaf44c08127c35522194704723912b4b9c00653a3f5762ec3cc765a92b443cf4b85ec41
+490e769cc5713c7be8d37ce5624e7bd96f34fc5b08b8319a91dbc1155d9d9b1b96f73e81001a150ed9280cbf710701e7d42a342cbe51d02aef5593e35e9e6c08
+62aeab272fc4d7958bbdea5bb770bcc269baeed8806973ad421c344c2890243db1a0ec32e708c42d0409c31a01ce4b8e199aad503cae22d00290152dd5456d4c
+3ad75b25f31428206c10e0584f9c52a1d84040d515234cbf487e540294afbb59087338332e6bae4b059ccd649e28ed8f0c2925d4995a2e9a5334221b7016befb
+7a27888d07577f0ad2e0375f160ecb944acfd0311cda361da524c24832653204101dcb2888148002c819988430c3e287ed8ceb28d587993d58968fc48158060f
+ab8d149e4140cee6cb425fcdc779b8e0b2405986b7c0640b017953ab03b9d00672e3fb571c10efe8dbf9736b0e445718247cccc328cc38091487b267991e2aab
+4717955eb22cf0330e78047aa3cb281019c924f08ec3d1b8e70404fe6c736d5343936e3c800e1b255e5d21a06fdc44a0a723bb2114c4b6ab61d8ccaa72c93a7c
+b23bd51481815ba06894d0f2649c6c16fa136c327dd5dffc9a8bb1fa581029c1b070e8860f952e0a0f907d7304e8b830824a8283b065ea57e376260bd1f19bda
+7ff4093a5879fdcc3e027c1232aa4780591286580cb4c706c96a06ae56467694b0d8aa9698df5eee58e9e35417c9c039026d50b74667da330afa4a6294e0527c
+3a3a220b6bf249cda3ec3a1cc714817ea1ec24027ed82a05eef92035967b35aee1d3f2e32e02288a3304264772e46843b0f1579bdb5a02758eafa5691b01a843
+5a04d2d57a5b6edf70565f2ab51f3e79d41308f075e0b492e5d6e30e68f638504d77ecf8ece9f7744c9ce2318c5412f81ed62c6fcee5ff7741c017d69b996158
+d920601778b71140ddfec6c3a7bd497a0e8c003385fbb3a9b858ab58caf934e73765b417c8004c71f2c8ddba8e6fe2e76fd812ee6fc7b7b9d33a039d60426c11
+056e3fc66432b247204c22fa2a1346831b06bcbd980e0204f9ce553f7efc879ee4d706701928b2928dfd16023c0c25154605229037f3af11f8f11f06e0b85f8d
+dccc4c9e33f774219ff310bec3017180acece233c3f9d05945d68f7ac42f8406e71a001c021902b1984e69db8bb7a3609811825039802f485689a45f20e00038
+deab24481044297a1f010d3446c08ca18802e680f060dc97250546b889e17f2406483528120e642204a116f0f34bb3cce0a5ef442e70931c03043b04d36fabe2
+0fdb51fde034b8be375542a680ada111034b0e77af4726a310332586d87d5f4520ec17085307b6b4d47b09c95cb7e4868cb8bb519978dac04b77784b24f06e1e
+1f309c7c830382008a7dd09a9854391bf2c446b25ca4b346406f5cc799718e008e48c5f1050402001db36cd133eecc2674b6dd982d8c7ced63cd24b1e5fae71c
+02e57c39d5b967a2c0890de7dda25e961d839a0bb12032cd2643c09347340e773fdbc34ad5bb8c80d742cf42bfaee7a71da67c9d2ba14b383e0156478db901ea
+01ae5be84c4a548460860010db70608d00bbfe374240b7d292c1a67f9b230095b096c3231d6e20a0854a4896f1bc9abea77d813a8c7a045713d84e04b39d3cb4
+2f081cb0d4c1146994d059197b834d0404825710e8670528df638a18dc0d35a2364b09b6980b8a0e00cb813d0e509a6ae61fb567d9e380af817c02cc3a0051cb
+ff58e7b23460ce827f91036ce7715f472883e8cbf11f02b0130594aa6d6a0c5374b1249b4541a802173916d7d741fd25dd190054091d4c291b82a560ed28038f
+56997e3e81000dc204a561def2aa5b17a89304587040d2a454c2030c3e397a1cf0c13f542aa728608b8ded1505e2bd7eddc0311455966e222062e68e637f905e
+d0d304d800a141bc00ee7310145170f0deba1ca92f1c08b324de07450964743c09b0e9632651c00edc458035c0b00f3c41083852d63a40377816cb1502a8adfc
+54c2120101255407fb35217dd04069853c73002b40897276b73ec5d46452a46c382840a1ef51c027a7f77b0e51008ac8d59827c85904ba682aa380284fd530b6
+c3941f99210c53d201321275303c18194b8435079a0a711b011cbd398f0ff206019143da7fc02830419236caddcdc1c9603ffe3522404f10463c69e24650b742
+38e4ab51201e1435df5342858d5410853f7693ae1ea0268a64ef982c464944151c7f08127c5f9e213194b7f427070647ce39e038ef3fe94df01c8479412e058c
+1488f0ab1ab208f0c41199e35c0e16a3c7c17afa4790b8f58232e345e2ce48901630ec1183df965140be268712225c28e2b36e75c92821677cf1fd5835401c98
+0dfc8d748b1b5140d9f7120292babbcaaaad07543fa846c41e59aa020ccbf1d7e602437b808afd4f286850e8f4f11e0228037d41d072e00104c0703c3725029b
+1b525f20d4911a88ea234c84f4c82b2692f21a5fe51ad909c11481301bb88c024d7de87263b88a2167c7aa33e265432e03b942b4495020d8c88692981c09c292
+4da809b588189efbf9d3b1673f1770d0a3d3894fe445a2c40401ce8a5c11cb42a22b0acf20e072c539042c042738401326d422411c60e0e3addc0b1d08132522
+809813aadf0cf42e025449fc3c1e2e3fb6a14653446c1e4f19a108b01cf03cca0a010c7c2d0742397c2a1baaf7c5902d0e3c80002b209b0b5828503117b82619
+920142606ba0b39d51d04889f00d25a4f71e3a6049b01d05e26b11014e09bb085029c45ca88260313f5068d61602e47b06ef88011306a7106010e98834dd3494
+60a903c7e41097048f70c0f488941c2c09f2e2b6698686f986046710c05ae0a03dcf1791226c2100d38224049d0ea6df07d5662d6bd01e0246fa86f94a825d04
+cc7c18ae178f8408dfc19a2a25829c0ded96917710203638b7171c30862209247eb6ea015a2a18d3bd60371546d439a11014d970f0fea75d20620e0c3a6815a4
+ade1be0e5004c2e88999260c1202f6ed50126918ec7180ab7d4dfe5c0a8cd177081ce68f13d9fd12940b0c02f826c6c90dc750dd553f908c1d04e0981601f29a
+f8fa2602c6df1000f06bbee8f7cff86c38080021a76be5ca016106da2f30594ace1008956dd8e015aa03d26a3e3610400eb0c5014301ab7ad20872a60c080ce3
+0105b35f428a622e810c01c67aca2e028ed650985aab63671436163b12ec20202ac855a1b48340bc631904fff7ddf1b07d406028ce65b1698acccbb0af660301
+c8aaaeb9c91bfce26cb9df5a7d128191fcc69009574afdd4320a04f09bae1c07c669f81fce1bda995216074f811d04585c9c10c45ef00d0400067b273a800211
+9087cd86e028a4016d9b7233a51419ca104469cd0160802f6c2f7040b3c13a0a40eee81111c000e4df79093951e78880e046063806a831408b4f7360c03ab075
+d920c6fd4a076c182c1140a1070280b99280b12c52026061141040a8ede4397587310ab667cb9559b6c33d1905fb0800f17137357d0bfb27a90e1d69796830ca
+042504408ce6854809e2cc31e603798f4986eb28106971627881031206730eb0fa81f7f934f211ac8522408a004507177f668650270738a837d70b1000781cff
+6b8d739e039b08f081c954fc5111285f3608f8de1f9750b1334c33075b33241001a0af20051a066739600be3850ea4acc252800579f1b22a61b41f940f1ed52b
+1414b35c401d0daaeb23080c0ccf23c024d0b0c8c97762e21480a90e10005469de4680c3e00a02789541e3ff39077a68d61cc0629efa3a0c07a9f44feac08882
+5b08a000f68f09cd1710cc2a224100ebac1109971160213840bcc48199f56f7140fc8fd980ca4d9efa3bcb814d0428ed7cf4bf4e0985fd485efacbfe3b9d0b4c
+18cc38b00adaf6f569884c09d445010180dc871a0243e10e074808ce22b04a6758009749b428d6533e59202002761b010d8353085001b714ba0281917813577f
+fefc159e5c2380bd94fc2d268a4b9d4e760aab4e20204d2996369318e95ab3f0fc286ca384353a606400838041b88300159793b962b511360463538e9dde9144
+7a108adf6f8e4087cb558f63c5709973c004c1630884c926e7016e56b00ba1961c4a3a140373e1a02f757b049cc13f7e65083e8780c987c66a7f7e743654ce60
+bf5062588f2ee542cee17108612d7ae9a2bc0383533aa0994072e2e528d84700ecd7750fea6e380b71445861708da4781d6758744a0ddbcce202de322c6d3d64
+2b82cbd9f0f01f15c6fd861224b96c14e3f695365011f6181398026509605234d33eaca34596cedaf16519052a82a0049f4000227ed080183f4e6ac6a9fc175d
+c81ca0aa9219005bea9803068cf17a5f13dab6c8eb606ed3bb64c480410c6f7280af2ea4f95e504183c0981e23451c38693964c7c03b472804fe815564440027
+cc542027086037680ac21bf3842863d81e2a93bc6fc74f427cfc0049c04883ea294580af2123db8ceccbf6495601982d16004e2180cb70580e98519ceb8c68ad
+b52041910b381f90f4139fe5dc262b0ec5987240982f8e978d75aa977d1420076806de037076bde02a0298feb0149080324a8808c87caaa1366f1fc2a7d06e58
+7ee1cda59b084010e04a94a3c0eb0840ec0ffb71d51a37527232d024806a9911181f19bb47f446260800f1495561ae84323d9401b88640a5854d14a0fce96654
+27039430391daaaa69bec3edc480817dc8ce3a5315b44a780c17eaa1d0105ccb86bced240b418b00d7c13e4a61a5946b06964d25b4667cb994c0ae9d222a4010
+4d072b04048330d42b4a788a03581ba507f50610162d02b4871ae28036d773f8cb0ecbbc1a434166e4deb4c47176ef6e1498295767a36904ec4d074cd624c371
+d91c0b439b0449f888ff6a363b9eae35419da037b7b9805a62168127385090a08a826125e600369d75508b40ad192b047095c8ba9f4ca72840999823c0eda9ec
+7ff9200228019c0521116056c06fd0f363b6a0e1006a405441c903fc32170b0d077089e878f0ece0e71080a172faa371f35535d20c8910989660a47bcafeb89d
+1871305f041b4382be2ac642004008adc9e0e625258428c0ca58b27bd60172ba7f8151d11903530ff2823b222057d6a8b30d0c582ad14b8057cd015e32261072
+017f0d812c04b50ed84181eda4d3623f8601eb202ca8e1174420fd35cec7524949d021401374c00078cf2351b085001782b08b14a3404a628580f500bd080810
+046abecaa146036ec03024e8a28067694718c0f93f89008b16fe0fb55f62418b80173a2c85590ac6e14c8b0c5ad82240322821fb0c0289047d4d68186f309032
+488300540a2db15bb0ec140023a0d523833c4300f40af4e0410e5c46800bc41a01f6e500a27a50699ce771661c90c50af2d207394036d054a046820485ec0b41
+4a536a2221f0dcb10729c1b1732f3eda71c2be4d5b1773c11607887454f9c0b0a44bc01480da8c153108272331485040307baad7018a8226715f452042506643
+0c3b8b8064048700901ede2b891d95f3cc63910bf4e587a2608180497ec4d92042e65998f221be6869039befcf3c26b9c0cf697e0601530ad913d68ed04a4139
+40734a4dc8974fcffa82f64ad1ab553130d6d5c501d87308f0f557521141460c4ef506e69f1a0ef0f4907ee0290ed83d55b9d03ae33bde774e523804916a022e
+9f38a6504568da8d24059baff1a19a03d812bec501d31c951c304fcebec52a002fc3a2a4481d021a3554118dc44517c4089ee5efa6084077fc220710dedb08d0
+35d852139a42d7238058607521dfb508d0d24e2d46927ef2f4947dc691cb1dc90a4140e054144031c0a653552ccf200788e8fd775d14d0e68dd710a03d552d07
+383ec16ffaaec1615d39a0b911a412d5f7dc20531450438145027200bed1efbe8a4035f142f6224bd576fc16744ebf10e150fda8c0a7ca9f70e39a8a17a1b9cc
+822890174b25c4a6c0e59540d7cb3521a44395c2320a98bfe072c601fd0faec4996233d1696a42fb2cacaca2b5f0c9fc5da703b883f42d045c3e2c949029cabc
+656d701ec4856094415b15c345381c123710a0cb95ded1810502c06a2e6bd547425c6c8c08011a61a8091981eb4ac8f5d0cb08a48b0df04a2ad2ab10a7110188
+7cdb16f05cc7f164eefa7dacb7694a4417eb218a417afb733ae084a0d401d3dbd8f4682709d1eb2606d46a8f8029074361581ae65638df4380b530e91093dad8
+aad9d0e10282e70190092f1b13a62890b558a90e24c31852a0f2e25697df1e012b020611278c61c71127049e65a1f45a2310564b1f8c021b0617a34019e0da54
+3e9a2f8d9bc290aa263f02dded02f3632f29e104017486e5bbbac73ebb8100c7889683a130a43c5a2250b4050fad1790852a04453db046c01440521949258481
+acd3665d6188efe3da4180867444f5d0990b82f23c74691acbaf968597a26013016c9626e520551529397e1301a46e8a02ffac9b171d41ce25ba1179ed14a608
+986832c951b68e39ff3caa845a16c6c3aaad6eaed8e1a2d641f9a45a88fd02d6559c1ca68db1cb2014a1900c69d3c03710b097d6f3260aae8a60d180ee4c8148
+61285b0ee8d3d9bd8eed8252583804f8b075f3a9e05925acf718a3e7861bb9f1e5ce871317ae83aacaa1e829021444a2857159d462d06ca51aa7c75d0ec027f3
+78270aaabb9b18a7fa6540927ba16e288ab548d4306821b0278976f20e2a6699510805246affc95c8038db4539f4b2fa1ecdc4e25ffe61c56f10c0b12b07982b
+1dc5c50077994540e00047f67fbf56112902fe720b1675361b855ebe0ef3c95c70333b477281f196a019a31fa4434e94b4704cc3d41338cf464173b181195866
+95d282f82e73580615d4c64c0c1bcf267b481da5ec804cc09b065ee4401506de68eaf3251280ff91f038708f40088da8f598405a12c8364acd36efe8c01281a1
+c4782f1a0c094c93c803991df361e0e359afa9d2e7794ae5b742a0b970851c89c6b32aaaaf792699a68e89ccc07e9a63a6b53413e7627e2681c18e5490364ebc
+1d053e1b3866caa939ff6b6a2070c00e2a02492fb524e4a91e668d20c3f1de86012702739697a22087811d9427341642120314fc227a58168af3111a4a8ccc0e
+37f33f2301258262f7d4c3b92057042d0068a9aa20d1dc281c958926dea93824194de64f20f802022c04530480c55a30519e6047b33eb0a55038d1075cf4bbda
+a08c3abeb6ea531c3042b00080489d12e630d0a4486ca24c6155badfa7105713d04281b8c5d6113d7e52aada241ba2c67f1aed7185f10e02140e3e9743b2e470
+7723582e1c78166001c0d7d619b1794b093d029b0060ba0b10943ff2bbbc279c23626104c994aeaf64297d9d031206c6aae99861d48ee98dfda17a0ca6d74951
+7a22adb73f86c03e003c093aa1028adf1508fee58d13d274bd8a800983f300708acc0cb00921757e990a3ea60881f20290c7eb012b8546cb1aba7ada4ac193fa
+5c5de93219a1b0dbfad6e21f76cfbc591593eae0659db1c1ef61c0b71a9d32d1c0a99f5fd5a4988e67ab047f04991cc17cf57e14a0144a36b343ad5279020093
+039640520b5326d30849e2ca7576d054bcc6da5c62fd6904643d1c137f4e0a5cfcb9640d7d348a9f4fe2b338a833aa5c6d2f41f72e07540a8d9e615587ad4e26
+afafdfbcc1130432987551913692becc8112810975c35c5074b999384c612010489aab2008e5d0fb3ac013f32a04bea85d506089809d0952cbe9a81d027e2bed
+2738e0a4b0464046cf82c94634519027914dfa9072a1b89d1dc9a0bd13e5cb3a40bb5512074008f8da7b4d5c923282e0c928632557341b725cba46c7614eb3e4
+43833cc82933a6b9d6ea9e588ec375a7a817357a2984fe8c10d09c1000504f27042a1248914037b6a910e085025f715479e171044c45c0ab967495e558280d15
+4ef2f41602b2ed8a7616c37fbea696a5925074157c780881c336bcb817ef7a341efa13dd7d608c124d4e856366aa304dbf89a9651c0e7795c0171f04b4546253
+ae21eff37d0114727c59275ed04100e028510c84918f21602ec58a08e028ace05e47209433850ec089b80ca5fbbdc0458ee369d9502808b40098da5dcf12d387
+c3316f4cc4a1201bf51e8ea6cc04127a658b21e4234ac5b48a21381496f2a285b88b9527c41d0034efcb6748e4cf769bd1dabe4f62c95e8f27018883197fb5a3
+727b2842897a1701a87a8dfda0054c3fb3a554446923082a360404b8b1282f48947adc8887e1f2b308e0120805bed3c211fc9e029e0349edcab2ad93c22902b8
+4b27fa36679a5c730f3e9f88826374683d253e14c3ca2b3c5e9b0a4e22602ae3715e09a5c955a91d04cf7180d92fad6863bfb9e19826c322e195856b490213e1
+b3eb723d04f98c3739c0e4b70ad40cc786be4b514e99cb28b092a0c2662bcfdb24b8aa84d8811bd5ebaf9376226603c257e9fb08b8489d5d9fbd458273089884
+0551af6ed974455eff28c95925c6748d34957cfecc4049b9b62754cb3b65f142096d6565d5d63bc2cb6170842d5537a2a00c83090940948a9bbd991661bea572
+1f017f3d80e6bd2487e99052d7f902ad8e023bdcea48b6ee842c8805315e97d764c46963b08f807b275f0a09f2186819f3abf5862dfa6cad5a57f13502527a43
+0fc2cb85da8dd8f3e371df4380a666d6085406161d07652b85664e02703c6da4c52e35f5cddc9e3ab48358cc2b2295ad10dd783aec49be85005d81c571502240
+f77ab88c8034333183d0c9699280bb76ecdf7314941c6f39b05402957ed71da120e5d3872bcfd286bc29076894f1a8ba7b5e48d0252438fc7504ca8c181000d8
+a131681c101630ced40363e4a608b2b539451d21d0a7e40040392710c5ca25895257c968be232475463505a20f561c70dc2cac078be88c74334a16219483dd20
+8802dd64869e0466da105ac3f6f40b0812c16dbb52e1ef2160f4fddc505d990557f73ae0177e8b41880b62679a5a64ad615bbb260834d9d840404980ebd23a0e
+3dab4ca6737357fd7277596081d747ecf959a39a83498b7c89192036057ac7008000ad25e6d16f6a592350173eb96ad95102cc035808d1ec6ca7840182b26c4f
+6c99effb1ad2ebaa001c4a35824d0a4cae0c2a49c0e908b5c74443cfdc785503d9dc44c12402380aacfed3780a12760004214c95eba484418fa2e39d1be09929
+73ab2992981c91911b0088062a0bab6cb48dc06912241eaeec07dcd03e0b5346a0d7530d95087d5b8f6c157ea91d58f432c801d65f1e0b88c28c01c49d63481e
+815f5e1857eec77757f3a3e09359729d5d04981b389729aa52d7640245630d015ee9a28f5f3f3c024b0cf90d567c488df284757155281be6c951b4b02157a681
+6926c8b3f4db561c6fbc8e804940a84930a436b7462767046645625519a630d8d081029a3b08382dc4b89c01b008826936c86bde391437f4abe2c66504a21454
+084ceade940c9310c47754fd0627c30afddd48b88e8097c335004b0a2493bd12148180b3f7177dcf08dd4100539226a369084ca39c6c0dda10a522b180b712ef
+babb7cdf3d042831532ef02748e3f7e92d3838b70651178aed2fbf0902529ddc0660512847086067b7dddc7c8d0af7393010f8753c42c31583b86f856de3be78
+97afe5d2d6914b10bc8440caf68b10af8520270c0301fa1f17f02f994e1f7a088120c817015886810d0409827a6bef36288f20807b99d4132b00aa62a0e88e72
+8960da3a2540fe25b8dbd68f373e8200b8c35c6e91747e9e177a21c8f94058c01b1add82f629d3350a2eb646e66c7c17207c6ad5f35466b5fd52d53ed069ca9d
+bda7313824fcd7c308ac01e883a078a58760d4632885a7cd361f780a018d820d0026089c8280b4f01600ff02024f90405db194c119001b0d9399e5c22b7aee30
+e0006020f0f3d63130f64d525ea6fe82d82286cb69838d59cc33e62002f739302988774cb2b963fdfe7b4e0ff010026f42b0a30b0b04425f7dc6c5abf742393f
+beacde78f675b3f0947bc059103499d27ce451060c1978070159b05f737a593db9bef9a6ee254f0a028f9380eaa2cadd730acc49f02c018e8af84d04f056a367
+6320cf9a9baef16902bc8dc0f84525c544d08a025dcd9c6eca76569baaf71b0ebc10065583306b0914ad1aa4a72360b485ff5b0834bb8cef50c121f00209aec5
+40ab04e5a2c91dfb8902980ddfad0956fcde4b886676e496ddf261365c107898056530af65b09e2a92e983676c87a33000ca818711286fc350e486faa91abf47
+c5b040e069083206bb14a853c6a3f62b050c079e6f0fe26ed66d0a14103c5c0e0903a82f784b0d7d4db04f8184c0c3f61b0604041e0f04778f9a131408103c1b
+004605b52f50523ca8b67428b97bc65504de240077c7262a5ea0417191c3061812330f13c0da6aabe2f73138a302b6307c1480647ec58137eac3721d65c50380
+ecd108a8ec8f4a28ef795c0ece520066179eb4bf36bfe3c0f33cb800c0a3ad506b7fcb81879ba54b003c07c1c4fe3902c7071f8a866f2230357f16054fd68917
+017882042bfb971c78241a2e03701b82b5fd7b08dc8e86d9fda71749f14e39b063ff36027715e1220677d2e19efd2710b84b840ba170c3fe5df37794d01deb4e
+6a384d83cb0170c2fcd308dc0b865334b84c8073f69f8b023af675229ca0c145029c35ff0207f0149741d8c4e01a012e987f19815731b8b84df69afd97a2e06e
+b5b8d842718dff57edbf85c0e5689884c235fabb99cfb358e89ad1d94fded1c586065fb0ff2e072ecb627973f74bfcbfe838fdd86d0e5c05216270cdffb7ed7f
+84035713a4c5e092fd0f987f231b16673f5f24c852c205fe3f63feb3085c2912e017d97dd3fe07a3e07a2c9ce6ce63ee87033da384664ca7ed39f98167cd7f03
+81cb75d20e128f9bff12025704e15bf6bf100577bb860e8a37dcff8e0ebc2209af99ff5a143c4b8437ed7f310a9e02e15df35fe7c0d5a6216d7b7c1187c7eb81
+72ac3b4a5fbce745bbf5d09f41e04a7efc88f99f89824b8af029fb3fa084d694dd60f89cf99fe5c0ae2c7ed4fe0f73006d9b32e1c3e67f8103530c3e6ffeb710a889f015fbbf1205656ef892f95fe4808b86ef99ff6d04301abe6affaf5fff07d6bc7e73de6feb4e0000000049454e44ae426082}}}{\rtlch\fcs1 \af0
+\ltrch\fcs0 \lang1024\langfe1024\noproof\langnp1036\insrsid8133178\charrsid3147258
+\par }}}{\shprslt{\*\do\dobxcolumn\dobypara\dodhgt8195\dptxbx\dptxlrtb{\dptxbxtext\ltrpar \pard\plain \ltrpar\qj \li0\ri0\nowidctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0\pararsid1785391 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0
+\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid12811248\charrsid6953049 {\nonshppict{\pict\picscalex24\picscaley23\piccropl0\piccropr0\piccropt0\piccropb0
+\picw6800\pich9340\picwgoal3855\pichgoal5295\wmetafile8\bliptag1424004780{\*\blipuid 54e096ac652515c6a4eb7b952ef75d7c}0100090000036f7400000000435b000000000400000003010800050000000b0200000000050000000c0262010201030000001e00040000000701040008000000
+26060f000600544e50500601f7180000410b8600ee00610101010000000061010101000000002800000001010000610100000100010000000000000000000000
+000000000000000000000000000000000000ffffff0000000000000000000000000000000001c000000000000000000000000000000000000000000000000000
+0000000000000000000ff0000000000000000000000000000000000000000000000000000000000000000000003ffe0000000000000000000000000000000000
+0000000000000000000000000000000001ffffc000000000000000000000000000000000000000000000000000000000000000000ffffff00000000000000000
+0000000000000000000000000000000000000000000000003ffffffe00000000000000p0000000000000000000000000000000000000000000000001ffffffff
+c00000000000000000000000000000000000000000000000000000000000000ffffffffff0000000000000000000000000000000000000000000000000000000
+0000003ffffffffffe000000000000000000000000000000000000000000000000000000000001ffffffffffff80000000000000000000000000000000000000
+0000000000000000000007fffffffffffff0000000000000000000000000000000000000000000000000000000003ffffffffffffffc00000000000000000000
+000000000000000000000000000000000000ffffffffffffffff00000000000000000000000000000000000000000000000000000007ffffffffffffffffe000
+000000000000000000000000000000000000000000000000001ffffffffffffffffff80000000000000000000000000000000000000000000000000000ffffff
+fffæffffffffff0000000000000000000000000000000000000000000000000007ffffffffffffffffffffe00000000000000000000000000000000000000000
+000000001ffffffffffffffffffffff8000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000
+000000000000000000000003ffffffffffffffffffffffffe0000000000000000000000000000000000000000000000ffffffffffffffffffffffffffc000000
+000000000000000000000000000000000000003fffffffffffffffffffffffffff00000000000000000000000000000000000000000000ffffffffffffffffff
+ffffffffffe0000000000000000000000000000000000000000007fffffffffffffffffffffffffffffc00000000000000000000000000000000000000003fff
+ffffffffffffffffffffffffffff0000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffe000000000000000000000000000
+000000000007fffffffffffffffffffffffffffffffff80000000000000000000000000000000000003ffffffffffffffffffffffffffffffffffe0000000000
+00000000000000000000000001ffffffffffffffffffffffffffffffffffff800000000000000000000000000000000007ffffffffffffffffffffffffffffff
+ffffffe0000000000000000000000000000000003ffffffffffffffffffffffffffffffffffffffc00000000000000000000000000000001ffffffffffffffff
+ffffffffffffffffffffffff80000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffe000000000000000000000000000001f
+fffffffffffffffffffffffffffffffffffffffffc0000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffff80000000000000
+00000000000003ffffffffffffffffffffffffffffffffffffffffffffe00000000000000000000000001fffffffffffffffffffffffffffffffffffffffffff
+fff8000000000000000000000000fffffffffffffffffffffffffffffffffffffffffffffffe000000000000000000000003ffffffffffffffffffffffffffff
+ffffffffffffffffffff80000000000000000000001ffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000ffffffffffffff
+fffffffffffffffffffffffffffffffffffffc00000000000000000003ffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000
+0fffffffffffffffffffffffffffffffffffffffffffffffffffffe000000000000000003ffffffffffffffffffffffffffffffffffffffffffffffffffffff8
+0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000001ffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffc000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000fffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffff80000000000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0000000000003fffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffe0000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000
+0000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffff800000000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00000000003ffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffe00000000003ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00000000007ffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffff00000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000007ff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fff8000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000000000fffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffff8000000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc000000003fffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffc000000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc000000003fffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffe000000003ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000
+00003ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe000000007fffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007ffffffffffffffff7ffffffffffffffffff
+ffffffffffffffffffffffffffff000000007ffffffffffffffff0ffffffffffffffffffffffffffffffffffffffffffffff000000007ffffffffffffffff0ff
+ffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000007fffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffgfffffffffffffffff80000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffgffffffff80000100ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff8000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff80000000ffffffffffffffffffffffFfffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffbfffffffffffffffffffff80000000ffff
+fffffffffffffffffffffffffffffffffffffeffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffdf
+ffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff80000000ffffffffffffffffffffffffffffffæfffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8000
+0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffff80000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000435b0000410b
+c6008800610101010000000061010101000000002800000001010000610100000100040000000000000000000000000000000000000000000000000000000000
+ffffff00f7625f000100000000ccfc000000f900484a4800e0e3e100000000000000000000000000000000000000000000000000000000000000000011111111
+11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222111111
+11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110020101
+11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222
+22221111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+10010101111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+11222222222222211111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+11111111100101011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+11111112222222222222222222111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+11111111111111111001010111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+11111111111122222222222222222222222211111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+11111111111111111111111110010101111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+11111111111111111122222222222222222222222222222111111111111111111111111111111111111111111111111111111111111111111111111111111111
+11111111111111111111111111111111100101011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
+11111111111111111111111222222222222222222222222222222222221111111111111111111111111111111111111111111111111111111111111111111111
+11111111111111111111111111111111111111111001010111111111111111111111111111111111111111111111111111111111111111111111111111111111
+11111111111111111111111111112222222222222222222222222222222222222222111111111111111111111111111111111111111111111111111111111111
+11111111111111111111111111111111111111111111111110010101111111111111111111111111111111111111111111111111111111111111111111111111
+11111111111111111111111111111111112222222222222222222222222222222222222222222221111111111111111111111111111111111111111111111111
+11111111111111111111111111111111111111111111111111111111100101011111111111111111111111111111111111111111111111111111111111111111
+11111111111111111111111111111111111111122222222222222222222222222222222222222222222222222111111111111111111111111111111111111111
+11111111111111111111111111111111111111111111111111111111111111111001010111111111111111111111111111111111111111111111111111111111
+11111111111111111111111111111111111111111111122222222222222222222222222222222222222222222222222222221111111111111111111111111111
+11111111111111111111111111111111111111111111111111111111111111111111111110010101111111111111111111111111111111111111111111111111
+11111111111111111111111111111111111111111111111111222222222222222222222222222222222222222222222222222222222222111111111111111111
+11111111111111111111111111111111111111111111111111111111111111111111111111111111100101011111111111111111111111111111111111111111
+11111111111111111111111111111111111111111111111111111111222222222222222222222222222222222222222222222222222222222222222211111111
+11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111001010111111111111111111111111111111111
+11111111111111111111111111111111111111111111111111111111111112222222222222222222222222222222222222222222222222222222222222222222
+22211111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110010101111111111111111111111111
+11111111111111111111111111111111111111111111111111111111111111111112222222222222222222222222222222222222222222222222222222222222
+22222222222221111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100101011111111111111111
+11111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222222222222222222222222222222222
+22222222222222222222222211111111111111111111111111111111111111111111111111111111111111111111111111111111111111111001010111111111
+11111111111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222222222222222222222222
+22222222222222222222222222222222222111111111111111111111111111111111111111111111111111111111111111111111111111111111111110010101
+11111111111111111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222222222222222222
+22222222222222222222222222222222222222222222211111111111111111111111111111111111111111111111111111111111111111111111111111111111
+10010101111111111111111111111111111111111111111111111111111111111111111111111111111111112222222222222222222222222222222222222222
+22222222222222222222222222222222222222222222222222222222111111111111111111111111111111111111111111111111111111111111111111111111
+11111111100101011111111111111111111111111111111111111111111111111111111111111111111111111111112222222222222222222222222222222222
+22222222222222223322222222222222222222222222222222222222222222222221111111111111111111111111111111111111111111111111111111111111
+11111111111111111001010111111111111111111111111111111111111111111111111111111111111111111111111111112222222222222222222222222222
+22222222222222222222223344332222222222222222222222222222222222222222222222222211111111111111111111111111111111111111111111111111
+11111111111111111111111110010101111111111111111111111111111111111111111111111111111111111111111111111111112222222222222222222222
+22222222222222222222222222223344444433222222222222222222222222222222222222222222222222221111111111111111111111111111111111111111
+11111111111111111111111111111111100101011111111111111111111111111111111111111111111111111111111111111111111111112222222222222222
+22222222222222222222222222222222223344444444443322222222222222222222222222222222222222222222222222211111111111111111111111111111
+11111111111111111111111111111111111111111001010111111111111111111111111111111111111111111111111111111111111111111111122222222222
+22222222222222222222222222222222222222223344444444444444332222222222222222222222222222222222222222222222222222111111111111111111
+11111111111111111111111111111111111111111111111110010101111111111111111111111111111111111111111111111111111111111111111111222222
+22222222222222222222222222222222222222222222223344444444444444444433222222222222222222222222222222222222222222222222222211111111
+11111111111111111111111111111111111111111111111111111111100101011111111111111111111111111111111111111111111111111111111111111111
+22222222222222222222222222222222222222222222222222222344444444444444444444443322222222222222222222222222222222222222222222222222
+22211111111111111111111111111111111111111111111111111111111111111001010111111111111111111111111111111111111111111111111111111111
+11111222222222222222222222222222222222222222222222222222222334444444444444444444444444332222222222222222222222222222222222222222
+22222222222221111111111111111111111111111111111111111111111111111111111110010101111111111111111111111111111111111111111111111111
+11111111112222222222222222222222222222222222222222222222222222222234444444444444444444444444444433222222222222222222222222222222
+22222222222222222222222111111111111111111111111111111111111111111111111111111111100101011111111111111111111111111111111111111111
+1111111111111112222222222222222222222222222222222222222222222222222222223344444444444´444444444444444444443332222222222222222222
+22222222222222222222222222222222211111111111111111111111111111111111111111111111111111111001010111111111111111111111111111111111
+11111111111111111111122222222222222222222222222222222222222222222222222222222233444444444444444444444444444444444444433222222222
+22222222222222222222222222222222222222222221111111111111111111111111111111111111111111111111111110010101111111111111111111111111
+11111111111111111111111111222222222222222222222222222222222222222222222222222222222233444444444444444444444444444444444444444443
+22222222222222222222222222222222222222222222222222222211111111111111111111111111111111111111111111111111100101011111111111111111
+11111111111111111111111111111112222222222222222222222222222222222222222222222222222222222223444444444444444444444444444444444444
+44444444332222222222222222222222222222222222222222222222222222222111111111111111111111111111111111111111111111111001010111111111
+11111111111111111111111111111111111112222222222222222222222222222222222222222222222222222222222223344444444444444444444444444444
+44444444444444444432222222222222222222222222222222222222222222222222222222211111111111111111111111111111111111111111111110010101
+11111111111111111111111111111111111111111112222222222222222222222222222222222222222222222222222222222222344444444444444444444444
+44444444444444444444444444433222222222222222222222222222222222222222222222222222222222111111111111111111111111111111111111111111
+10010101111111111111111111111111111111111111111122222222222222222222222222222222222222222222222222222222222222334444444444444444
+44444444444444444444444444444444444443322222222222222222222222222222222222222222222222222222222221111111111111111111111111111111
+11111111100101011111111111111111111111111111111111111122222222222222222222222222222222222222222222222222222222222222334444444444
+44444444444444444444444444444444444444444444444322222222222222222222222222222222222222222222222222222222222111111111111111111111
+11111111111111111001010111111111111111111111111111111111111222222222222222222222222222222222222222222222222222222222222222234444
+44444444444444444444444444444444444444444444444444444432222222222222222222222222222222222222222222222222222222222222211111111111
+11111111111111111111111110010101111111111111111111111111111111112222222222222222222222222222222222222222222222222222222222222222
+22223444444444444444444444444444444444444444444444444444444443222222222222222222222222222222222222222222222222222222222222222221
+11111111111111111111111111111111100101011111111111111111111111111111112222222222222222222222222222222222222222222222222222222222
+22222222222223444444444444444444444444444444444444444444444444444444322222222222222222222222222222222222222222222222222222222222
+22222222211111111111111111111111111111111001010111111111111111111111111111122222222222222222222222222222222222222222222222222222
+22222222222222222222234444444444444444444444444444444444444444444444444444443222222222222222222222222222222222222222222222222222
+22222222222222222222111111111111111111111111111110020202111111111111111111111111222222222222222222222222222222222222222222222222
+22222222222222222222222222222234444444444444444444444444444444444444444444444444444322222222222222222222222222222222222222222222
+22222222222222222222222222222211111111111111111111111111100101011111111111111111111111222222222222222222222222222222222222222222
+22222222222222222222222222222222222222234444444444444444444444444444444444444444444444444434332222222222222222222222222222222222
+22222222222222222222222222222222222222221111111111111111111111111002020211111111111111111111222222222222222222222222222222222222
+22222222222222222222222222222222222222222222222344444444444444444444444444444444444444444444444443444433222222222222222222222222
+22222222222222222222222222222222222222222222222222211111111111111111111110010101111111111111111111222222222222222222222222222222
+22222222222222222222222222222222222222222222222222222334344444444444444444444444444444444444444444444444344444443222222222222222
+22222222222222222222222222222222222222222222222222222222222221111111111111111111100202021111111111111111222222222222222222222222
+22222222222222222222222222222222222222222222222222222222222334443444444444444444444444444444444444444444444444443444444443222222
+22222222222222222222222222222222222222222222222222222222222222222222222211111111111111111001010111111111111111122222222222222222
+22222222222222222222222222222222222222222222222222222222222222222334444443444444444444444444444444444444444444444444444344444444
+44332222222222222222222222222222222222222222222222222222222222222222222222222222221111111111111110020202111111111111122222222222
+22222222222222222222222222222222222222222222222222222222222222222222222334444444434444444444444444444444444444444444444444444443
+44444444444432222222222222222222222222222222222222222222222222222222222222222222222222222222111111111111100101011111111111112222
+22222222222222222222222222222222222222222222222222222222222222222222222222222234444444444434444444444444444444444444444444444444
+44444434444444444444433222222222222222222222222222222222222222222222222222222222222222222222222222222111111111111002020211111111
+11122222222222222222222222222222222222222222222222222222222222222222222222222222222233444444444444344444444444444444444444444444
+44444444444444344444444444444443322222222222222222222222222222222222222222222222222222222222222222222222222222111111111110010101
+11111111112222222222222222222222222222222222222222222222222222222222222222222222222222222233444444444444444344444444444444444444
+44444444444444444444434444444444444444444322222222222222222222222222222222222222222222222222222222222222222222222222222111111111
+10020202111111111222222222222222222222222222222222222222222222222222222222222222222222222222222233444444444444444443444444444444
+44444444444444444444444444444344444444444444444444332222222222222222222222222222222222222222222222222222222222222222222222222222
+11111111100101011111111112222222222222222222222222222222222222222222222222222222222222222222222222222223444444444444444444443444
+44444444444444444444444444444444444434444444444444444444444432222222222222222222222222222222222222222222222222222222222222222222
+22222222111111111002020211111111222222222222222222222222222222222222222222222222222222222222222222222222222222223444444444444444
+44443444444444444444444444444444444444444443444444444444444444444443222222222222222222222222222222222222222222222222222222222222
+22222222222222222111111110010101111111122222222222222222222222222222222222222222222222222222222222222222222222222222222223444444
+44444444444443444444444444444444444444444444444444434444444444444444444444322222222222222222222222222222222222222222222222222222
+22222222222222222222222222111111100202021111112222222222222222222222222222222222222222222222222222222222222222222222222222222222
+22344444444444444444443444444444444444444444444444444444443444444444444444444444432222222222222222222222222222222222222222222222
+22222222222222222222222222222222222111111001010111111122222222222222222222222222222222222222222222222222222222222222222222222222
+22222222223444444444444444444434444444444444444444444444444444444434444444444444444444443222222222222222222222222222222222222222
+22222222222222222222222222222222222222222221111110020202111112222222222222222222222222222222222222222222222222222222222222222222
+22222222222222222343444444444444444444434444444444444444444444444444444443444444444444444444444343222222222222222222222222222222
+22222222222222222222222222222222222222222222222222221111100101011111122222222222222222222222222222222222222222222222222222222222
+22222222222222222222222234443444444444444444444344444444444444444444444444444444434444444444444444444434443322222222222222222222
+22222222222222222222222222222222222222222222222222222222222211111004040411111222222222222222222222222222222222222222222222222222
+22222222222222222222222222222223444434444444444444444444344444444444444444444444444444443444444444444444444443444444322222222222
+22222222222222222222222222222222222222222222222222222222222222322222111110010101111122222222222222222222222222222222222222222222
+22222222222222222222222222222222222223344444434444444444444444443444444444444444444444444444444434444444444444444444434444444332
+2222222222222222222222222222222222222222222222222222222222222222222222222222211110040404111122222222222r222222222222222222222222
+22222222222222222222222222222222222222222222344444444434444444444444444443444444444444444444444444444443444444444444444444443444
+44444443222222222222222222222222222222222222222222222222222222222222222222222222222221111001010111112222222222222222222222222222
+22222222222222222222222222222222222222222222222222234444444444434444444444444444434444444444444444444444444444434444444444444444
+44434444444444443222222222222222222222222222222222222222222222222222222222222222222222222222211110040404111222222222222222222222
+22222222222222222222222222222222222222222222222222222222223444444444444344444444444444444434444444444444444444444444444344444444
+44444444443444444444444443222222222222222222222222222222222222222222222222222222222222222222222222222211100101011172222222222222
+22222222222222222222222222222222222222222222222222222333322222222344444444444444344444444444444444344444444444444444444444444434
+44444444444444444344444444444444443322222222222222222222222222222222222222222222222222222222222222222222222222111004040411122222
+22222222222222222222222222222222222222222222222222222222222237777322222234444444444444444344444444444444443444444444444444444444
+44444434444444444444444443444444444444444444322222233223322222222222222222222222222222222222222222222222222222222222221110000000
+11222222222222222222222222222222222222222222222222222222222222222223773377322223444444444444444443444444444444444443444444444444
+44444444444444344444444444444444344444444444444444432222223773337322222222222222222222222222222222222222222222222222222222222221
+10040404112222222222222222222222222222222222222222222222222222222222222222237377373222223444444444444444443444444444444444434444
+44444444444444444444434444444444444444434444444444444444443222222233377777322222222222222222222222222222222222222222222222222222
+22222221100101011122222222222222222222222222222222222222222222222222222222222222222373773732222223444444444444444443444444444444
+44434444444444444444444444444344444444444444443444444444444444444322222233377777773222222222222222222222222222222222222222222222
+22222222222222211004040412222222222222222222222222222222222222222222222222222222222222222223773377322222223444444444444444443444
+44444444444434444444444444444444444443444444444444444434444444444444444432222223777777777332222222222222222222222222222222222222
+22222222222222222222222210010101122222222222222222222222222222222222222222222222222222222222222222223777732222222223444444444444
+44443444444444444444344444444444444444444444434444444444444443444444444444444443222222237777773337322222222222222222222222222222
+22222222222222222222222222222222100404041222222222222222222222222222222222222222222222222222222222222222222313333222222222223444
+44444444444443444444444444443444444444444444444444443444444444444444344444444444444444322222222237733377777322222222222222222222
+22222222222222222222222222222222222222221001010112222222222222222222222222222222222222222222222222222222222222222223111132222222
+22222344444444444444443444444444444443444444444444444444444434444444444444443444444444444444432222222222333777777333222222222222
+22222222222222222222222222222222222222222222222210040404122222222222222222222222222222222222222222222222222222222222222222231111
+32222222222222344444444444444434444444444444434444444444444444444444344444444444444344444444444444443222222222222377777337322222
+22222222222222222222222222222222222222222222222222222222100101011222222222222222222222222222222222222222222222222222222222222222
+22233333322222222222222344444444444444434444444444444344444444444444444444434444444444444443444444444444444322222222222223773337
+77322222222222222222222222222222222222222222222222222222222222221004040412222222222222222222222222222222222222222222222222222222
+22222222333555553322222222222222344444444444444434444444444444344444444444444444444344444444444444344444444444444432222222222222
+22337777773222222222222222222222222222222222222222222222222222222222222210010101122222222222222222222222222222222222222222222222
+22222222222233335555555533222222222222222344444444444444344444444444443444444444444444444443444444444444443444444444444444322222
+22222222222377777732222222222222222222222222222222222222222222222222222222222222100404041222222222222222222222222222222222222222
+22222222222222222233555555555533333322222222222222344444444444444344444444444434444444444444444444344444444444444344444444444444
+43222222222222222223733333332222222222222222222222222222222222222222222222222222222222221001010112222222222222222222222222222222
+22222222222222222222222233555555555555533333322222222222222344444444444443444444444444434444444444444444443444444444444443444444
+44444444322222222222222222233555555533333222222222222222222222222222222222222222222222222222222210040404122222222222222222222222
+22222222222222222222222222222223555555333333335333333222222222222222344444444444443444444444444344444444444444444434444444444444
+34444444444444432222222222222222223355555555555553332222222222222222222222222222222222222222222222222222100202021222222222222222
+22222222222222222222222222222222222222235533335555555533533333222222222222222344444444444434444444444443444444444444444444344444
+44444444344444444444443222222222222222222333335555555555555533222222222222222222222222222222222222222222222222221002020212222222
+22222222222222222222222222222222222222222222222333555555555555553353332222222222222223444444444444434444444444434444444444444444
+43444444444444434444444444444432222222222222222233333533333355555555553222222222222222222222222222222222222222222222222210020202
+12222222222222333222222222222222222222222222222222222335555555555555555553553532222222222222223444444444444344444444444434444444
+44444444434444444444444344444444444443222222222222222223333353555555333335555532222222222222222222222222222222222233322222222222
+10020202222222222222223443332222222222222222222222222222222235555555555555555553335555322222222222222234444444444444344444444444
+34444444444444444344444444444434444444444444322222222222222222233333355555555555533353222222222222222222222222222222222333443222
+22222222200202022222222222222234444433222222222222222222222222222222355555553333333355533333555322222222222222234444444444443444
+44444444344444444444444443444444444444344444444444432222222222222222222333553555555555555555332222222222222222222222222222222334
+44443222222222222002020222222222222222234444443222222222222222222222222222222355533355555555335533335553222222222222222344444444
+44443444444444443444444444444444344444444444443444444444444322222222222222222223355533555555555555555533222222222222222222222222
+22223444444322222222222220020202222222222222222344444443322222222222222222222222222223553555555555555533533355553222222222222222
+34444444444443444444444434444444444444443444444444444344444444444432222222222222222222335533333555553335555555553222222222222222
+22222222223344444443222222222222200202022222222222222223444444444322222222222222222222222222223355553555555335335553555532222222
+22222222234444444444434444444444344444444444444434444444444443444444444443222222222222222222223553333335333355533335555532222222
+22222222222222222344444444432222222222222002020222222222222222234444444444322222222222222222222222222355553355555553333555535555
+32222222222222222344444444444434444444444344444444444444344444444444344444444444432222222222222222222355533333535555555555533555
+32222222222222222222222234444444444322222222222220020202222222222222222344444444444322222222222222222222222235555333555555333335
+55555555322222222222222222344444444444344444444443444444444444434444444444443444444444443222222222222222222235555333533555555555
+55555333222222222222222222222223444444444443222222222222200202022222222222222223444444444444333322222222222222222223555533355333
+33733333555555553222222222222222222344444444443444444444434444444444444344444444444434444444444432222222222222222222355553555333
+35555553355555532222222222222222222222234444444444432222222222222002020222222222222222223444444444443444333322222222222222235553
+33355377777353335555555532222222222222222223444444444443444444444344444444444443444444444443444444444443222222222222222222223555
+53555333335555553333555322222222222222222222223444444444443222222222222220020202222222222222222234444444444443444444322222222222
+22223553333333777773555355555555322222222222222222223444444444434444444443444444444444434444444444434444444444432222222222222222
+22235555555533333355553553335555322222222222222222223344444444444432222222222222200202022222222222222222344444444444434444444332
+22222222222223533333377777735553555555555322222222222222222234444444444344444444434444444444444344444444444344444444443222222222
+22222222222355555555333333333333333335553222222222222222223343444444444444322222222222222002020222222222222222223444444444444434
+44444443322222222222223333553777773555555555555553222222222222222222234444444444344444444344444444444443444444444434444444444322
+22222222222222222223555555553333333737373333355322222222222222223344434444444444443222222222222220020202222222222222222234444444
+44444434444444444322222222222235555533777735555555555555532222222222222222222344444444443444444443444444444444434444444444344444
+44444322222222222222222222235555555335537777373733333553222222222222222344444344444444444432222222222222200202022222222222222222
+34444444444444344444444443222222222222355555533337355555555555555322222222222222222222344444444434444444434444444444443444444444
+43444444444432222222222222222222222355555553555377737373533335322222222222222234444434444444444444322222222222222002020222222222
+22222222344444444444443444444444443222222222223555555555333355555555555555322222222222222222223444444444344444444434444444444434
+44444444434444444444322222222222222222222235555555555555373737335533533222222222222223444444344444444444443222222222222220020202
+22222222222222223444444444444434444444444333322222222235555555555555335555555555553222222222222232222223444444444344444444344444
+44444434444444444344444444432222222222222222222222355555555555553737333555555532222222222222344444443444444444444432222222222222
+20020202222222222222222234444444444444344444444437773322222222235555555555555555555555555553222222222223322222234444444443444444
+44344444444444344444444434444444444322222222222222222222235555555555555533333555555553222222222222223444444434444444444444322222
+22222222200202022222222222222222344444444444444344444444377373333222222233555555555555555555555555532222222222343222222344444444
+43444444443444444444443444444444344444444432222222222222222222222355555555555555555555555555532222222222222344444444344444444444
+44322222222222222002020222222222222222223444444444444443444444444333737773333333333335555555555555555555555532222222234432222222
+34444444434444444434444444444434444444443444444444322222222232222222222235555555555555555555555555553222222222222223444444443444
+44444444443222222222222220020202222222222222222234444444444444434444444444433337777373737773333555555555555555555555532222222344
+43222222344444444344444444344444444444344444444434444444432222222222332222222223555555555555555555555555555532222222222222344444
+44434444444444444432222222222222200202022222222222222222344444444444444344444444444344333737377377777733355555555555555555555322
+22223444432222222344444444344444443444444444443444444443444444444322222222234432222222235555555555555555555555555553222222222222
+22344444444344444444444444322222222222222002020222222222222222223444444444444443444444444444344323333737777777773333333333335555
+55555532222234444322222223444444443444444434444444444434444444434444444432222222222344432222223555555555555555555555555533322222
+22222222234444444443444444444444443222222222222220020202222222222222222234444444444444434444444444443444322333377777777777333222
+22223555555555532222344443222222223444444434444444344444444443444444444344444444322222222223444322222235555555555555555555553333
+33322222222222233344444444434444444444444432222222222222200202022222222222222222344444444444444344444444444434444322233337777777
+77373333222223555555555322223444432222222234444444344444444344444444434444444443444444443222222222234444322223555555555553333333
+33333377377322222222233434444444444344444444444444322222222222222002020222222222222222223344444444444443444444444444434444322223
+73377777737737373332223555555555322234444322222222344444443444444443444444444344444444434444444322222222223444443222355555555553
+32222222223777773373222222223444344444444443444444444444433222222222222220020202222222222222222223444444444444434444444444444344
+44432223777333777373737777733223555333353222344444322222222344444443444444434444444443444444443444444443222222222234444432223555
+55555532222222222223777373732222222344443444444444434444444444444322222222222222200202022222222222222222234444444444444344444444
+44444344444432377777773333333337777733333533444353223444443222222223444444434444444344444444434444444434444444432222222222344444
+32235555535555322222222222237737377322222234444434444444444344444444444443222222222222222002020222222222222222222344444444444443
+44444444444443444444433777777773222222233377377735334444353234444443222222234444444344444443444444444344444444344444443222222222
+22344444323555333355532222222222222233737777322223444444344444444443444444444444432222222222222220020202222222222222222223444444
+44444443444444444444434444444337777777322222222222333777335344444332344444432222222344444443444444434444444443444444443444444432
+22222222234444443235334443553222222222222222337377773222344444434444444444434444444444444322222222222222200304032222222222222222
+23444444444444434444444444444344444444377777773222222222222223333353444444333444444432222222344444434444444344444444434444444344
+44444322222222222344444433534444435532222222222222223737777332234444444344444444444344444444444443222222222222222002020222222222
+22222222234444444444444344444444444443444444437777377732222222222222222222334444444434444444322222223444444434444443444444444344
+44444344444443222222222223444444333444444353222222222222222223377773733444444443444444444443444444444444432222222222222220040404
+22222222222222222344444444444443444444444444434444444377773777322222222222222222223344444444444444444322222234444444344444434444
+44444344444443444444432222222222344444443344444443322222222222222222237777373344444444434444444444434444444444444322222222222222
+20020202222222222222222223444444444444434444444444444344444443777377732222222222222222222223444444444444444443222222344444443444
+44434444444443444444434444443222222222223444444434444444333222222222222222222377737373444444444344444444444344444444444443222222
+22222222200404042222222222222222234444444444444344444444444443444444437773777322222222222333333332233444444444444444443222222344
+44443444444344444444434444443444444432222222222344444444444444443322222222222222222222377373734444444443444444444443444544444444
+43222222222222222002020222222222222222222344444444444443444444444444434444443777737773222222222334444444433234444444444444444432
+22222344444434444443443333444344444434444444322222222234444444444444444432222222222222222222223737377734444444434444444444434444
+44444444432222222222222220040404222222222222222223444444444444434444444444444344444437777377732222222334444444444443344444444444
+44444443222223444444344444433332223343444444344444432222222222344444444444444443323333333332222222222237337777344444444344444444
+44434444444444444322222222222222200202022222222222222222234444444444444344444444444443444444377773773322222222344444444444444444
+44444444444444443222223444444344433322222222333444443444444322222222234444444444444444433344444444433322222222333777773444444443
+44444444444344444444444443222222222222222004040422222222222222222344444444444443444444444444434444443777377734322222222334444444
+44444444444444444444444432222234444443333222222222222223334344444432222222223444444444444444444344444444444332222222222337777773
+44444443444444444443444444444444432222222222222220020202222222222222222223444444444444434444444444444344444437773777343222222222
+23444444444444444444444444444444432222344444332222222222222222222233444444322222222344444444444444444444444444444332222222222223
+77777773444444434444444444434444444444444322222222222222200404042222222222222222234444444444444344444444444443444443777737773443
+22222222223444444444444444444444444444444432222343332222222222222222222222223334443222222223444444444444444444444444444432222222
+22222223777777334444444344444444444344444444444443222222222222222002020222222222222222222344444444444443444444444444434444437777
+37773444322222222223444444444444444444444444444444322333322222222222222222222222222222233322222222344444444444444444444444444443
+22222222222223337777733344444443444444444443444444444444432222222222222220040304222222222222222223444444444444434444444444444344
+44437773777344443222222222223444444444444444444444444444443332222222222222222222222222222222222223322222234444444444444444444444
+44444432222222222222344437773737344444434444444444434444444444444322222222222222200202022222222222222222234444444444444344444444
+44444344444377737773444443222222222223444444444444444444444444443322222222222222222332222222233222222222222333222344444444444444
+44444444444443222222222222334444377733773444444344444444444344444444444443222222222222222004040422222222222222222344444444444443
+44444444444443444437777377734444432222222222234444444444444444444444433322222222222223333334322222222343333332222222223333444444
+44444444444444444444322222222222234444443773377734444443444444444443444444444444432222222222222220020202222222222222222223444444
+44444443444444444444434444377737777344444432222222222234444444444444444443333222222233333222344444433322222233344444432223333322
+23334444444444444444444444432222222222223444444437373777734444434444444444434444444444444322222222222222200404042222222222222222
+23444444444444434444444444444344443777377734444444322222222222344444444444444443322322222223344443234444444443322223344444444432
+34444332222333344444444444444444443222222222222234444444437377777344444344444444444344444444444443222222222222222002010122222222
+22222222234444444444444344444444444443444437773777344444444322222222222344444444444433323333322222334444443444433444433322333444
+43344443444444332222223333444444444444444322222222222223444444444373777773444443444444444443444444444444432222222222222220040404
+22222222222222222344444444444443444444444444434443777737773444444443222222222222344444444333222232223222233344444344443434434333
+22333434434344443444443332222234433344444444444432222222222222234444444443377777334444434444444444434444444444444322222222222222
+20000000222222222222222223444444444444434444444444444344437773777734444444443222222222223444443332232222232223222222344333444433
+34443322222233444333444433344322222223444443334444444444322222222222223444444444437777737734444344444444444344444444444443222222
+22222222200404042222222222222222234444444444444344444444444443444377737773444444444432222222222223443323223233223233333222223332
+34444444444443222222344444444444432333222222344444444433344444432222222222222234444444444337773737344443444444444443444444444444
+43222222222222222001020222222222222222222344444444444443444444444444434443777377734444444444322222222222223332223322223322223223
+22222222344444344444432222223444444344444322222222234444444444444334444322222222222222344444444443377737373444434444444444434444
+44444444432222222222222220040404222222222222222223444444444444434444444444444344377737777344444444444322222222222322222222222222
+22222222322222223444334444444322222234444444334443222222223444444444444444433432222222222222234444444444434373737734444344444444
+44434444444444444322222222222222200202022222222222222222234444444444444344444444444443443777377773444444444443222222222332233233
+33223333223332232322222234443444444432222222234444444344432222222344444444444444444443322222222222222344444444444343373777734443
+44444444444344444444444443222222222222222004040422222222222222222344444444444443444444444444434437773777344444444444432222222332
+22222322223322332233233222322222344433344444322222222344444333444322222234444444444444444444444332222222222234444444444443433377
+77734443444444444443444444444444432222222222222220020202222222222222222223444444444444434444444444444343777377773444444444444322
+22233322222222223333333333332222223222223444334444432222222222344444334443222222344444444444444444444444333222222222344444444444
+43443377737344434444444444434444444444444322222222222222200304042222222222222222234444444444444344444444444443437773777734444444
+44444432223443222222233234444444444333332333222234444344443232222222232344443444432222234444444444444444444444444433222222234444
+44444444434437777373443444444444444344444444444443222222222222222002020222222222222222222344444444444443444444444444434377737773
+34444444444444322333333333233553333333333333555533532222344443444433322222222333444434444322223444444444444444444444444444443222
+22234444444444444344437737773434444444444443444444444444432222222222222220040404222222222222222223444444444444434444444444444343
+77737773344444444444443234444355553555553444443444435555555532222344434344343222222223434434344432222234433333334433333333443333
+33344322222344444444444443444373773734344444444444434444444444444322222222222222200202022222222222222222234444444444444344444444
+44444337773777733444444444444432344443555555555534444434444355555555322223444433333332222222233333334444322223444353355344355335
+53443553353444322223444444444444434443377377343444444444444344444444444443222222222222222004040422222222222222222344444444444443
+44444444444443377737777334444444444444333333335555555555333333333333555555555322223444434432222222222223443444432222234443533553
+44355335534435533534443322234444444444444344433737773434444444444443444444444444432222222222222220020202222222222222222223444444
+44444443444444444444433777377734344444444444443444444355555555553444444444435555555553222234444344322222222222234434444322223444
+43555553443555555344355555344443322344444444444443444337377734344444444444434444444444444322222222222222200404032222222222222222
+23444444444444434444444444444377737777343444444444444434444443555555555534444444444355555555553222234444443222222222223444444432
+22234444433555334433355533443355533444443234444444444444434444337777733444444444444344444444444443222222222222222002020222222222
+22222222234444444444444344444444444443777377773434444444444444333333335555555555333333333333555555555532222344444432222222222234
+44444432223444444333333344333333334433333334444433344444444444444344443777777343444444444443444444444444432222222222222220040404
+22222222222222222344444444444443444444444444337773777344344444444444443444444355555555553444443444435555555555332222344444432222
+22222344444443222234444443555553443555555344355555344444433444444444444443444437777773434444444444434444444444444322222222222222
+20020202222222222222222223444444444444434444444444443377737773443444444444444434444443555555555534444434444355555555553322222344
+4443222222222344444432222344444443333333443533333344333333344444433444444444444443444437777733434444444444344444444444443222222
+22222222200404042222222222222222234444444444444344444444444437773777734434444444444444333333335555555555333333333333555555555533
+32222334444432222222344444433222344444444333343344333334334433433334444444344444444444444344444377737343444444444443444444444444
+43222222222222222002020222222222222222222344444444444443444444444444377737777344344444444444443444344335555555534434444443443555
+55555344322223334444432222223444443332223444444444444444444444444444444444444444443444444444444443444443773733434444444444434444
+44444444432222222222222220040404222222222222222223444444444444434444444444443777377734443444444444444434443444355555555344344444
+43443555555553443322233344444432222344444433322344443333333443333333344333333334433333334434444444444444434444437733773344444444
+44434444444444444322222222222222200202022222222222222222234444444444444344444444444437773777344434444444444444344443443355555334
+43333333333443555555344333222332344444322223444443233223444435333534435533553443553355344355335344344444444444444344444373377733
+44444444444344444444444443222222222222222003020222222222222222222344444444444443444444444443777377773444344444444444443333333433
+33333343434444344434343355334343443222222344443222234444322222234444353335344355335534435533553443553353443444444444444443444443
+37377733444444444443444444444444432222222222222220020202222222222222222223444444444444434444444444437773777734443444444444444434
+44443434433344443444443444433444334443344432222222344432222344432222223444443555553443555555344355555534435555534434444444444444
+43444444337777334444444444434444444444444322222222222222200202022222222222222222234444444444444344444444444377737773444434444444
+44444434444443334434443334444434444443343433344444432223223444432234444322322234444433555334433355533443355533344335553344344444
+44444444434444443777777344444444444344444444444443222222222222222002020222222222222222222344444444444443444444444443773777734444
+34444444444444333333333333333333333333333333333333333333333322233223444322344432233223444444333333344333333334433333333443333333
+44344444444444444344444437777773444444444443444444444444432222222222222220020202222222222222222223444444444444434444444444377737
+77734444344444444444443444444344444444443444444444434444444444344444322233234443223444323322234444443335333443533333344333333534
+43333333443444444444444443444444377777334444444444434444444444444322222222222222200202022222222222222222234444444444444344444444
+44377737777344443444444444444434444443444444444434444444444344444444443444443222343234432234432343223444444433353334435333433443
+34333534433433334434444444444444434444444377737334444444444344444444444443222222222222222002020222222222222222222344444444444443
+44444444443777377734444434444444444444333333333333333333333333333333333333333333333332234443344322344334443234444444333333354333
+33433443343333344334333344344444444444444344444443773737344444444443444444444444432222222222222220020203222222222222222223444444
+44444443444444444437737777344444344444444444443444444444443444444444443444444444344444444444323344433443223443344433444444444444
+44444444444444444444444444444444443444444444444443444444437733773444444444434444444444444322222222222222200303032222222222222222
+23444444444444434444444443777377773444443444444444444434444444444434444444444434444444443444444444443333444444322223444444333333
+33333333333333333333333333333333333333333334444444444444434444444433737734444444444344444444444443222222222222222005050522222222
+22222222234444444444444344444444437773777734444434444444444444333333344444333333344444344444444433333334444332233444443222234444
+43235555555555555555555555555555555555555555555555344444444444444344444444373777734444444443444444444444432222222222222220030505
+22222222222222222344444444444443444444444377737777344444344444444444443555553444443555553444443333334444343555344443532233444432
+22234444333555555555555555555555555555555555555555555555553444444444444443444444443377777344444444434444444444444322222222222222
+20050505222222222222222223444444444444434444444437773777734444443444444444444435555534444435555534444435555344443435553444435532
+22334432222344332235555555555555555555555555555555555555555555555534444444444444434444444437777733334444444344444444444443222222
+22222222200505052222222222222222234444444444444344444444377737777344444434444444444444355555333333355555333333355533333333555533
+33335532222344322223443223555555555555555555533333333333333333333333333333344444444444444344444444437333777344444443444444444444
+43222222222222222003030322222222222222222344444444444443444444443777377773444444344444444444443555555555555555555555555555344444
+35555555343555532223443222344432233333333333333333333366666663222222222222222222223444444444444443444444443337777773344444434444
+44444444432222222222222220050505222222222222222223444444444444434444444437773777734444443444444444444435555555555555555555555555
+33444444355555553435555322234443223444323233333333322222222223663636632222222223333333332234444444444444434444444437777733377344
+44434444444444444322222222222222200305052222222222222222234444444444444344444443777377773444444434444444444444355553333333333333
+33355533444444435555555553355555322234432234432232366366366322223323336636366333332222366666363222344444444444444344444444373333
+77777344444344444444444443222222222222222005050522222222222222222344444444444443444444437773777734444444344444444444443555533443
+33343434333333444444443555555555533555553222344322344322322366366366333336366366363663636323323636636632223444444444444443444444
+44337777777333444443444444444444432222222222222220030303222222222222222223444444444444434444444377737777344444443444444444444435
+55553344444444444433334444444355555555555343555532222343223432232223663663663663663663636636636366363363666363222234444444444444
+43444444437777773333733444434444444444444322222222222222200505052222222222222222234444444444444344444437777377773444444434444444
+44444435555334334344444444444443333343335555555553433555532223322223322322236663636636636636636366363663663666636636632222344444
+44444444434444444337733337337333444344444444444443222222222222222005050522222222222222222344444444444443444444377737777344444444
+34444444444444355553333343334444333333343333333533555555343335555322232222223223222236636366636636366363663636366366363666363222
+22344444444444444344444444433373373333734443444444444444432222222222222220020202222222222222222223444444444444434444443777377773
+44444444344444444444443555555333335533333433433433443433433555553435355555322222222222322222366366363333333333333333333333636636
+6366322222344444444444444344444444337373333773734443444444444444432222222222222220020202222222222222222234444444444444344444437
+77377773444444443444444444444435555533353355334443444433344444343555555344333555553222222222223222222366333363663636636366363636
+33333366636322222234444444444444434444444433733373777377344344444444444443222222222222222002020222222222222222222344444444444443
+44444377737777734444444434444444444444355555555535533334444444443444444433355553434435555532222222222232222223333633366363333333
+33336666636363333363222222344444444444444344444444433377737377377343444444444444432222222222222220020202222222222222222223444444
+44444443444443777377773444444444344444444444443555555555555553444444444444444444334355534333555555532222222223222222236663336336
+36366363663633333366666633322222223444444444444443444444444437377377377373434444444444444322222222222222200202022222222222222222
+23444444444444434444437773777734444444443444444444444435555555555533333344444444444444443443555343335555555322222222232222222233
+36636666666666666666663633333336663222222234444444444444434444444444373773733773773344444444444443222222222222222002020222222222
+22222222234444444444444344444377737777344444444434444444444444355555555553334433444444434444444444355534333555335553222222222322
+22222236663633363333333333333366666636333322222222344444444444444344444444443737733773773773444444444444432222222222222220020202
+22222222222222222344444444444443444437773777734444444444344444444444443555555555333444334433333433344444443355335555553335553222
+22223222222222333363363322222333663332333333336663222222223444444444444443444444444377377377733773773444444444444322222222222222
+20020202222222222222222223444444444444434444377737777344444444443444444444444435555555533444444433553333344444444343553355555343
+35553222222232222222222363666663222222366663332236636333322222222234444444444444434444444443773773333733773773444444444443222222
+22222222200202022222222222222222234444444444444344443777377773444444444434444444444444355555555334444433553333333444444444333343
+55555343355553222223222222222223666666632222233666663222366663663222222222344444444444444344444444437737373777337737734444444444
+43222222222222222002020222222222222222222344444444444434444437737777734444444444344444444444443555555533444443555333335334444444
+44435343555555333555532222232222222222236666666322333333666332223666666322222222223444444444444443444444444377373737773737737734
+44444444432222222222222220030404222222222222222223444444444444344443777377773444444444443444444444444435555533334443355553553334
+3444444444335343555553443555532222232222222222236666663r233333436663222223666663222222222234444444444444434444444443773737333337
+73773773444444444322222222222222200404042222222222222222234444444444443444437773777734444444444434444444444444355553333344333555
+55533444344444444443334355555343555555322232222222222222333333322233333636632222233366322222222222344444444444444344444444437377
+37737773773773773444444443222222222222222004040422222222222222222344444444444434444377737777344444444444344444444444443555534333
+33335555555333443344444443335533555553355555553222322222222222222222222222334433366322222222332222222222223444444444444443444444
+44377377377377737737773773444444432222222222222220040404222222222222222223444444444444344443773777734444444444443444444444444435
+55534343337355555555553333444444435555343555335555555532223222222222222222223323222233333333222223332222222222222234444444444444
+43444444443773773773777377737737734444444322222222222222200404042222222222222222234444444444443444437737777344444444444434444444
+44444435555334434337335555555553334444433555555343334355555555532322222222222222222333333222222222222223317332222222222222344444
+44444444434444444437737737733333777377737734444443222222222222222004040422222222222222222344444444444434443777377773444444444444
+34444444444444355555533337333733333333553333334355555555333335555555555323222222222222222234444432222222222222317732222222222222
+22344444444444444344444444377377377737773777377377344444432222222222222220040302222222222222222223444444444444344437773777334444
+44444444344444444444443555555555535553777777735555343533555555555555555555555553232222222222222222344444332222222222223773222222
+22222222223444444444444443444444443773773777377737773773773444444322222222222222200404042222222222222222234444444444443444377377
+77334444444444443444444444444435555555555555553377777735555335555555555555555555555555553222222222222222223444443222222222222223
+73322222222222222234444444444444434444444437737773773333377737737734444443222222222222222002020222222222222222222344444444444434
+44377377773344444444444434444444444444355555555555555555333777735555555555555555555555555555555532222222222222222223443322222222
+22222223771332222222222222344444444444444344444444377377737737777377377377344444432222222222222220040404222222222222222223444444
+44444434437773777343444444444444344444444444443555555555555555555553333335555555555555555555555555555555322222222222222222223332
+22222222222222223333222222222222223444444444444443444444443773777377737773773773734444444322222222222222200202022222222222222222
+23444444444444344377737773434444444444443444444444444435555555555555555555555555555555555555555555555555555555553222222222222222
+22222222222222222222222222222222222222222234444444444444434444444437737777377333337737737344444443222222222222222004030422222222
+22222222234444444444443443773777734344444444444434444444444444333333333333333333333333333333333333333333333333333333333333333333
+33333333333333333333333333333333333333333333333333344444444444444344444444437737773773777377377373444444432222222222222220020202
+22222222222222222344444444444434437737777343444444444444344444444444443222222222222222222222222222222222222222222222222222222222
+35555555555555555555555555555555555555555555555555555555553444444444444443444444444437737737737733373773734444444322222222222222
+20040404222222222222222223444444444444343777377734434444444444443444444444444432222222222222222222222222222322222222222222222222
+22222222355555555555555555555555555555555555555555555555555555555534444444444444434444444444437737737733773737733444444443222222
+22222222200000002222222222222222234444444444443437773777344344444444444434444444444444322222222222222222222222223334322222222222
+22222222222222223555555555555155555555555555555555555555555555555555555555344444444444444344444444444377377377377737373734444444
+43222222222222222004040422222222222222222344444444444434377377773443444444444444344444444444443222222222222222222222222344444333
+22222222222222222222222235555555555555555555555555533335555555555555555555555555553444444444444443444444444443377377373733373737
+34444444432222222222222220020202222222222222222223444444444444343773777344434444444444443444444444444432222222222222222222222334
+44444444322222222222222222222222355555555555555555555555553333335555555555555555555555555534444444444444434444444444434377377333
+77733737344444444322222222222222200403042222222222222222234444444444443377737773444344444444444434444444444444322222222223222322
+22222234444444432222222232223222222222223555555555555555555555553333663333555555555555333335555555344444444444444344444444444344
+33737373777337373444444443222222222222222002020222222222222222222344444444444433777377734443444444444444344444444444443223222222
+33223332222222344444444332223223332333222223322235555555333333555555553366663366663355555553337777735555553444444444444443444444
+44444344443377333333373344444444432222222222222220040404222222222222222223444444444444337737773444434444444444443444444444444432
+23332222333233322222334344444434433233233335332222343222355555537733773555555366666666666666355555537777333355555534444444444444
+43444444444443444443377337733373444444444322222222222222200202022222222222222222234444444444443377377734444344444444444434444444
+44444432223432223333332322334444344444344432333333333232234322223555553777737773555553333666666666333555553777735553355555344444
+44444444434444444444434444443373773733734444444443222222222222222004040322222222222222222344444444444437773777344443444444444444
+34444444444444322234432323333333322344443444434444322335333333323443222235555537773377735555533336666666633335555537777355555555
+55344444444444444344444444444344444437373373333344444444432222222222222220020202222222222222222223444444444444377377734444434444
+44444444344444444444443222344323333333333223444434444344432222233333333334432222355553337377373335555363666666666636355555377735
+55555555553444444444444443444444444443444444433337777773444444444322222222222222200404042222222222222222234444444444443773777344
+44434444444444443444444444444432223443233333532222223444344443444322222353233234344322223555537733773377355555366666666666633555
+55377773555555555534444444444444434444444444434444444377773333344444444443222222222222222004040422222222222222222344444444444437
+73777344444344444444444434444444444444322234443322223333222234444344344432222235322222343443222235555337737337773555555333366666
+33355555555377735555555555344444444444444344444444444344444444333337344444444444432222222222222220040404222222222222233223444444
+44444377737734444443444444444444344444444444443222344434322223553222234443443444322223553222234434432222355555373733377735555536
+66366666366355555553777735555555553444444444444443444444444443444444444444333444444444444322332222222222200404042222222222222343
+23444444444443773777344444434444444444443444444444444432223444344322223553222234434434443232355322233444344322223555553337777373
+55555536633666663663555555537777733335555534444444444444434444444444434444444444443773444444444443234322222222222002020222222222
+22222234334444444444437737773444444344444444444434444444444444322234443443222235532232344433344322333332223443443443222235555553
+37777333555553666336666636663555555533777773555555344444444444444344444444444344444444444433334444444444333432222222222220040404
+22222222222222344434444444444377377344444443444444444444344444444444443222344434432222235333432344343443223333322234434434432222
+35555555333373555555536663366666366635555555553333355555553444444444444443444444444443444444444444433444444444434444322222222222
+20020202222222222222223444344444444437773773444444434444444444443444444444444432223444344433222233334323434443432343432322344344
+34432222355555555553355555555366633666663366355555555555555555555534444444444444434444444444434444444444444434444444443444443222
+22222222200404032222222222222234444344444444377377734444444344444444444434444444444444322234443444343223334444323344433234444332
+23444344344322223555555555555555555553666336666633663555555555555555555555344444444444444344444444444344444444444444344444444344
+44443222222222222002030422222222222222344444344444443773773444444443444444444444344444444444443222344434443432223444444334444433
+34444432234443443443222235555555555555555555363333366666333333555555555555555555553444444444444443444444444443444444444444443444
+4444344444443222222222222004040422222222222222234444434444443777773444444443444444444444344444444444443222344434443432222³444443
+43444344344443222344434434432222355555555555555555553366363666663366635555555555555555555534444444444444434444444444434444444444
+44443444444344444443222222222222200404042222222222222223444444344444377773444444444344444444444434444444444444322234443444344322
+23444434443443443444432223444344344322223555555555555555555533333636666633333355555555555555555555344444444444444344444444444344
+44444444444344444443444444432222222222222004040422222222222222234444443444443777734444444443444444444444344444444444443222344434
+44344322223444344443344434443222234443443443222235555555555555555553366633666666363663355555555555555555553444444444444443444444
+44444344444444444443444444344444444322222222222220020305222222222222222344444443444437773444444444434444444444443444444444444432
+22344434443443222234433444334444334432232344434434432222355555555555555555536663336666663633663555555555555555555534444444444444
+43444444444443444444444444434444434444444443222222222222200404042222222222222223444444434444377344444444444344444444444434444444
+44444432223444344434433333334343443434443343333333444344344322223555555555555555555363366366666663663635555555555555555555344444
+44444444434444444444434444444444444344444344444444432222222222222003040422222222222222234444444434444334444444444443444444444444
+34444444444444322234443444344344334343443344434343334344434443443443222235555555555555555553366636666366663663335555555555555555
+55344444444444444344444444444344444444444443443434444444444322222222222220030404222222222222222344444444344433444444444444434444
+44444444344444444444443222344434443443443443334443444434433444344344434434432222355555555533333333366663666633666633666333333333
+55555555553444444444444443444444444443444444444444433334344444444443222222222222200305052222222222222223444444443444334444444444
+44434444444444443444444444444432223444344434434434443344333433344334334333434344344322223555555533666666663333336663636666363333
+66666666335555555534444444444444434444444444434444444444444343434444444444432222222222222004040422222222222222234444444443443434
+44444444444344444444444434444444444444322234343334333333333333343443344333333334333333333333222235555553666666333666666633636636
+33366666663366666635555555344444444444444344444444444344444444444334434344444444444322222222222220020202222222222222222344444444
+43443443444444444443444444444444344444444444443222333334333433443344343344434443343343444334334334332222355555536666666663663366
+36336663636633663366666666355555553444444444444443444444444443444444444434444343444444444443222222222222200307072222222222222222
+34444444443434434444444444434444444444443444444444444432223444344434434444443443343434333434444444444444344322223555553333333666
+66363633366666666363636636666633333355555534444444444444434444444444434444444443444434434444444444322222222222222002020222222222
+22222222344444444434434434444444444344444444444434444444444444322234444444444434443334343434434433333433343444444443222235555533
+33666336636636636666666666366366366633666333355555344444444444444344444444444344444444344444343444444444443222222222222220030707
+22222222222222223444444444434344434444444443444444444444344444444444443222344444334333333344343443444344334433443333343343332222
+35555555553366633663666666666666666666366333663335555555553444444444444443444444444443444444434444443434444444444432222222222222
+20020202222222222222222234444444444343444434444444434444444444443444444444444432223333334334433443443344433433443344434434443343
+34332222355555555555333663336666666666666666663336663355555555555534444444444444434444444444434444443444444434344444444444322222
+22222222200302022222222222222222344444444443434444434444444344444444444434444444444444322233443344344444444443344343343343444444
+44443443444322223555555555555553333366666666666666666633333355555555555555344444444444444344444444444344444434444444343444444444
+4432222222222222200202022222222222222222344t444444443344444344444443444444444444344444444444443222344434444444444443334334433433
+43333344433444344443222235555555555555336666366666666666666663666663555555555555553444444444444443444444444443444443444444443434
+44444444443222222222222220020202222222222222222234444444444433444444344444434444444444443444444444444432223444444344334443322334
+34444444432222333343434343332222355555555555536666666366663666636666636666663555555555555534444444444444434444444444434434434444
+44444344444444444432222222222222200203072222222222222222344444444444334444444344434344444444444434444444444444322234334433334333
+32222234444444443322222234433443344322223555555555555366666663666353663336666366666663555555555555344444444444444344444444444333
+34344444444443444444444444322222222222222003030422222222222222223444444444443344444443444333444444444444344444444444443222334433
+44334432222222334444444443222223444344434443222235555555555553666663353335553355533335366666635555555555553444444444444443444444
+44443343443444444444434444444444443222222222222220030707222222222222222234444444444443444444443444343344444444443444444444444432
+22234433444344322222222234444444332222234444444444432222355555555555536666355555555555555555555366666355555555555534444444444444
+43444444443344434344444444444444444444444432222222222222200404042222222222222222344444444444434444444434443444334444444434444444
+44444432222344444444443222223332344444443322222344444444444322223555555555553666635555555355555535555555366663555555555555344444
+44444444434444444344444343444444444434444444444444322222222222222007030422222222222222223444444444444344444444434434444434444444
+34444444444444322222344444444432222234323444444432222223444444444432222235555555555536666355555553335533355555553666635555555555
+55344444444444444344444434444434434444444444344444444444443222222222222220040404222222222222222234444444444443444444444344344444
+34444444344444444444443222223444444444322222343334444444332222223444444443222222355555555555366663555555553433443555555536666355
+55555555553444444444444443444443444444343444444444443444444444444432222222222222200404042222222222222222344444444444434444444444
+34344444434444443444444444444432222223344444332222233333334444444322222223344444322222223555555555553666635555555534444435555555
+36666355555555555534444444444444434444344444443434444444444434444444444444322222222222222004040422222222222222223444444444444434
+44444444343444444344443434444444444444322222222333332222222355333344444432222222222333332222222235555555555553666355555555344444
+35555555366635555555555555344444444444444334434444444434344444444444344444444444443222222222222220040403222222222222222234444444
+44444434444444444343444444344443344444444444443222222222222222222222333333334443222222222222222222222222355555555555536663555555
+53444444435555553666355555555555553444444444444443344344444444334444444444443444444444444432222222222222200404042222222222222222
+34444444444444344444444443434444444344434344444444444432222222222233232222222333333344322222333322222222222222223555555555555366
+63555553344444444435555536663555555555555534444444444443334434444444443344444444444434444444444444322222222222222004040422222222
+22222222344444444444443444444444443344444443444344334444444444322222222223333332222233323344433222234344332222222222222235555555
+55555536635555333444444444335555366355555555555555344444444444344344344444444433444444444444344444444444443222222222222220040404
+22222222222222223444444444444434444444444433444444443443444434444444443222222222334444322233343332333222222332334322222222222222
+35555555555555366635555553334443335555536663555555555555553444444444434443434444444444334444444444443444444444444432222222222222
+20040404222222222222222234444444444444344444444444434444444434434444434444444432222222223444443222344444322222222222222344322222
+22222222355555555555555366355555555344355555555366355555555555555534444444443444434344444444443444444444444434444444444444322222
+22222222200404042222222222222222344444444444443444444444444344444444434344444434444444322222222334444433223334333222222222222223
+44322222222222223555555555555555366355555555335555555536635555555555555555344444444344444343444444444434444444444444344444444444
+44322222222222222004040322222222222222223444444444444434444444444443444444444343444444434444443222222222334444322222343222222222
+22222234432222222222222235555555555555555366355555553355555555363555555555555555553444444434444443344444444444344444444444443444
+44444444443222222222222220040404222222222222222234444444444444344444444444434444444443434444444434444432222222222344433222223332
+22222222222333444322222222222222355555555555555555336355555535555555333355555555555555555534444443444444433444444444443444444444
+44443444444444444432222222222222200404042222222222222222344444444444443444444444444344444444443344444444434444322222222222333322
+22222222222222222222333332222222222222223555555555555555555533355555555555533355555555555555555555344444344444444334444444444434
+44444444444434444444444444322222222222222003030322222222222322223444444444444434444444444443444444446433444444444344443333333333
+33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333444434444444443444444
+44444434444444444444344444444444443222232222222220040404222222222223322234444444444444344444444444434444444444334444444444344444
+44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444344444444
+43444444444444344444444444443444444444444432223322222222200202022222222222234322344444444444443444444444444344444444443344444444
+44344444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444434
+44444444434444444444443444444444444434444444444444322343222222222004040422222222222233333444444444444434444444444443444444444443
+44444444444344444444444444444444444444444444444434444444444444444444444434444444444444444444444443444444444444444444444444444444
+44444434444444443444444444444434444444444444344444444444443333322222222220040404222222222222343434444444444444344444444444434444
+44444443344444444443444444444444444444444444444444444444333444444444444444444443434444444444444444444443334444444444444444444444
+44444444444444344444444434444444444444344444444444443444444444444434343222222222200302022222222222223434433444444444443444444444
+44434444444444443444444444443444444444444444444444444444444444443443444444444444444444434344444444444444444444344434444444444444
+44444444444444444444434444444444344444444444443444444444444434444444444443443432222222222004030422222222222234344434444444444434
+44444444444344444444444434444444444434444444444444444444443333344444444434443444444444444444443444344444444444444444434444344444
+44444444444444444444444444444344444444443444444444444434444444444444344444444444344434322222222220020202222222222222343444434444
+44444434444444444443444444444444344444444444434444444444444444333344444333344444344443444444444444444344444344444444444444433444
+44344444444333334444444444444444444443444444444434444444444444344444444444443444444444434444343222222222200403042222222222223443
+44434444443444344444444444434444444444443444444444444344444444444444334444444444444334443444443444444444444443444444344444444444
+44344444443444443334444433333444444444444444434444444444344444444444443444444444444434444344444344434432222222222002020222222222
+22223443444434444433343444444444444344444444444434444444444443444444444444334444444444444444434434444443444444434444434444443444
+44444444434444444434443344444444444443344444444444444344444444443444444444444434444444444444344333444434444344322222222220040404
+22222222222223443444344444344334444444444443444444444444344444444444434444444444434444444444444444444433344444443444443434443444
+44444344443434444344444444344344444444444444444334444444444434444444444434444444444444344444444444443434434444344443443222222222
+20020202222222222222234434444344434444344444444444434444444444443444444444444434444444443444444444444444444444443444444443444434
+43443444444443444344344434444444443334444444444444444444434444444444344444444444344444444444443444444444444433444434434444434432
+22222222200302022222222222222344344443444344444344444444344344444444444434444444444444344444444344444444444444444444444434444444
+44344434443434444444443443444343444444444434444444444444444444444434444444443444444444443444444444444434444444444443444444344344
+44344432222222222000000022222222222223444344443443444444344444443343444444444444344444444444443444444434444444444444444444444444
+43444444444344344443444444444434344443344444444443444444444444444444444444434444444434444444444434444444444444344444444444344444
+44343444443444322222222220020202222222222222234443444434434444444344444434334444444444443444444444444434444443444444444444444444
+44444444434444444444343444434444444444434444443444444444434444444444444444444444444434444444344444444444344444444444443443444444
+43444444443344444434443222222222200202022222222222222344434444434344444443444443444344444444444434444444444444344444344444444444
+44333333333334444344444444444344444434444444444344444434444444444344444333333344444444444444434444443444444444443444444444444434
+33444444344444444433444444344432222222222004040422222222222223444344444344344444443444434444344444444444344444444444444344443444
+44444444332222222222233443444444444443444444344444444434444444344444444443443332222222333444444444444434444434444444444434444444
+44444433434444434444444443344444443444322222222220020202222222222222234443444444343444444443444344444344444444443444444444444443
+44434444444444432222222222222223434444444444434444444344444444344444444344444444434322222222222223344444444444344444344444444444
+34444444444443444434444344444444433444444344443222222222200404042222222222222344434444443434444444434443444444344444444443444444
+44444443443444444444443222222222222222223344444444444344444443444444434444444443444444444333332222222222222334444444444344443444
+44444444344444444443344444344434444444444334444443444432222222222002020222222222222223444344444434344444444434434444444334444444
+43444444444444434434444444444322222222222222222233344444444443444444434444444344444444434444444443343222222222222222234444444444
+34443444444444443444444444344444443444344444444443344444434444322222222220030404222222222222234443444444433444444444434344444444
+43444444434443444444444343444444444432222222222222222222343344444444434444444434444434444444444344444443444322222222222222222234
+44444444434434444444344434444444434444444434434444444444434444444344443222222222200202022222222222222344434444444334444444444343
+44444444443444444344343344444443434444444443222222222222222222223444334444444344444444344444344444444443444444434443222222222222
+22222234444444444344344444334344344444443444444443444344444444444344444443444432222222222003020222222222222223444434444444334444
+44444433444444444443444443443444344444433444444444432222222222222222222223444433444443444444444344434444444444434444443444322222
+22222222222222234444444444343444434443443444444344444444434434444444444433444444434444322222222220030404222222222222223444344444
+44334444444444343444444444443444434344444334444334444444443222222222222222222222234444443344344444444443444344444444444344444344
+44322222222222222222222234444444443434443444443434444434444444444344344444444444334444443444443222222222200202032222222222222234
+44344444443344444444444334444444444443444343444444434443344444444432222222222222223322222344444444343444444444443443444444444443
+44443444443222222222222222222222344444444443344344444434344443444444444443434444444444443444444434444432222222222004040422222222
+22222234443444444443444444444443344444444444434443344444444434433444444443222222222222222233222222344444444334444444444434344444
+44444443444344444322222222222222222222222344444444433443444444433444344444444444434344444444444434444444344444322222222220040404
+22222222222222344434444444433444444444443444444444444434433444444444344344444444432222222222222223443222223444444444344444444444
+43344444444444434434444443222222222222222222222223444444444334344444444334443444444444443434444444444444344444443444443222222222
+20040404222222222222223444434444444434444444444433444444444444434334444444444343444444443222222222222222234432222223444444443444
+44444444433444444444444343444444432222222222222222222222223444444444343444444443344344444444444434344444444444434444444434444432
+22222222200303032222222222222234444344444444334444444444434444444444444343344444444443434444444432222222222222222344322222234444
+44443344444444444334444444444434344444444322222222222222222222222234444444443344444444433443444444444444334444444444444344444444
+34444432222222222004040322222222222222344444344444444344444444444344444444444444333444444444443344444444322222222222222223443222
+22234444444434344444444443344444444444334444444443222222222222222222222222234444444433444444444334344444444444443344444444444443
+44444443444444322222222220040305222222222222223444443444444443344444444444344444444444443344444444444433444444443222222222222222
+34444322222344444443443444444444434344444444443344444444322222222222222222222222222344444444344444444444343444444444444434444444
+44444434444444434444443222222222200404042222222222222223444443444444443444444444443444444444444443444444444444434444444432222222
+22222222344443222222344444434443444444443443444444444434444444443222222222222222222222222223444444443444444444443344444444444443
+34444444444444344444444344444432222222222003030522222222222222234444434444444433444444444443444444444444434444444444444344444444
+32222222222222223444432222223444444344443444444434434444444443344444444432222222222222222222222222234444444434444444444433444444
+44444443444444444444443444444443444443222222222220040404222222222222222344444344444444434444444444434444444444444344444444444443
+44444444432222222222222234444322222234444443444434444443444434444444343444444443223222222222222222222222222344444444344444444444
+33444444444444434444444444444434444444344444432222222222200304042222222222222223444444344444444444444444444434444444444443344444
+44444434444444444322222222222322344443223222234444344444434444434444344444434443444444432332222222222222222222222234444444443444
+44444444334444444444444344444444444443444444443444444322222222222004040422222222222222223444443444444444444444444444344444444444
+43344444444444344444444443222222222223333444433332222344443444444344443444443444444344434444444334322222222222222222222222344444
+44443444444444443444444444444434444444444444434444444434444432222222222220030505222222222222222234444443444444444444444444444344
+44444444433444444444443444444444432222222222223444444443222222344434444444344434444434444434444344444432343222222222222222222222
+22344444444434444444444434444444444444344444444444444444444443444444322222222222200307072222222222222222344444434444444444444444
+44444344444444444434444444444434444444444322222222222234444444432222223444344444443443444444434443444443444444334432222222222222
+22222222223444444444344444444444344444444444443444444444444444444444434444443222222222222003030422222222222222223444444434444444
+44444444444444344444444444344444444444344444444443222222222222344444444322222223443444444434434444444344344444434444443344322222
+22222222222222222234444444443444444444443444444444444434444444444444444444443444444322222222222220030707222222222222222223444444
+34444444444444444444443444444444443444444444443444444444432222222222223444444443222222234434444444343444444443443444444344444334
+44322222222222222222222222344444444434444444444334444444444443444444444444444444444434444443222222222222200404042222222222222222
+23444444434444444444444444444444444444444434444444444434444444444322222222222223444444322222222234344443444334444444443344444443
+4444434444322222222222222222222222344444444434444444444334444444444443444444444444444444444344444443222222222222200304°422222222
+22222222234444444344444444444444444444444444444444344444444444344444444432222222222222234444443222222333343444433343444444444433
+44444443444334444322222222222222222222222234444444443444444444434444444444444444444444444444444444434444443222222222222220030304
+22222222222222222234444444344444444444444444444444444444443444444444434444444444322222222222222344444432222222343334444434334444
+44444434444444434434444443222222222222222222222222344444444434444444444344444444444444444444444444444444443444444432222222222222
+20040404222222222222222222344444444344444444444444444444444444444444444444444344444444443222222222222223444444322222222344334444
+34443344444443444444444344344444432222222222222222222222223444444444344444444443444444444444444444444444444444444434444443222222
+22222222200404042222222222222222222344444444344444444444444444444444444444444444444443444444444432222222222222234444443222222222
+3444334434444434444443444444444343444444422222222222222222222222234444444443444444444434444444444444444444444444444444443444444
+43222222222222222004040422222222222222222223444444443444444444444444444444444444444444444444434444444444322222222222222344444432
+22222222234444343444444344443444444444343444444432222222222222222222222222344444444443444444444444444444444444444444444444444444
+34444444432222222222222220040404222222222222222222234444444443444444444444444444444444444444444444444344444444443222222222222223
+44444432222222222234444343444444344434444444443344444444322222222222222222222222223444444444434444444444444444444444444444444444
+44444444344444443222222222222222200404042222222222222222222234444444443444444444444444444444444444444444444434444444444322222222
+22222222344443222222222222344444334444444343444444444434444444443222222222222222222222222223444444444344444444444444444444444444
+44444444444444434444444432222222222222222004040422222222222222222222344444444443444444444444444444444444444444444443444444444443
+22222222222222223444432222222222222344443344444443434444444443444444444322322222222222222222222222234444444444344444444444444444
+44444444444444444444443444444443222222222222222220040304222222222222222222222344444444443444444444444444444444444444444444434444
+44444432222222222222222234444322222222222223444443344444443444444444344444444443233222222222222222222222222234444444443444444444
+44444444444444444444444444444344444444432222222222222222200304042222222222222222222223444444444443444444444444444444444444444444
+44344444444444322222222222222222344443222222222222223444443444444434444444434444444444323332222222222222222222222222344444444434
+44444444444444444444444444444444444434444444443222222222222222222003030322222222222222222222223444444444443444444444444444444444
+44444444434444444444432222222222222222223444432222222222222234444434444444444444444344444444443344322222222222222222222222222344
+44444443444444444444444444444444444444444443444444444322222222222222222220040403222222222222222222222223444444444443344444444444
+44444444444444443444444444444322222222222222222234444322222222222222344444344444444444444443444444444444443222222222222222222222
+22222344444444434444444444444444444444444444444444344444444443222222222222222222200403042222222222222222222222234444444444444334
+44444444444444444444444434444444444432222222222222222222344443222222222222223444443444444444444444344444444444444432222222222222
+22222222222222344444444433444444444444444444444444444444334444444444322222222222222222222003070722222222222222222222222234444444
+44444443344444444444444444444433444444444443222222222222222222223444432222222222222344444434444444444444443444444444444444322222
+22222222222222222222223444444444443444444444444444444444444444434444444444432222222222222222222220040304222222222222222222222222
+23444444444444444333334444444444443333444444444444322222222222222222222234444322222222222223444444444444444444444434444444444444
+43222222222222222222222222222223444444444443444444444444444444444444433444444444443222222222222222222222200707032222222222222222
+22222222223344444444444444444433333333333344444444444444432222222222222222222222344443222222222222234444444444444444444443444444
+44444444432222222222222222222222222222223444444444443344444444444444444444433444444444444322222222222222222222222003030322222222
+22222222222222222222344444444444444444444444444444444444444444443222222222222222222222223444432222222222222344444444444444444444
+43444444444444433322222222222222222222222222222234444444444444333444444444444444333444444444444432222222222222222222222220040404
+22222222222222222222222222222344444444444444444444444444444444444444444322222222222222222222222234444322222222222223444444444444
+44444444434444444444443443222222222222222222222222222222234444444444444443333444444333334444444444444443222222222222222222222222
+20040404222222222222222222222222222222334444444444444444444444444444444444444332222222222222222222222222344443222222222222344444
+44444444444444444444444444444344432222222222222222222222222222222233444444444444444443333334444444444444444443322222222222222222
+22222222200404042222222222222222222222222222222233444444444444444444444444444444444432222222222222222222222222223444432222222222
+22344444444444444444444444444444444434444322222222222222222222222222222222223444444444444444444444444444444444444443322222222222
+2222222222222222200404042222222222222222222222222222222222344444444444444444444444444444433222222222222222222222222222234444322
+22222222234444444444444444444444444444444443444443222222222222222222222222222222222223344444444444444444444444444444444443322222
+22222222222222222222222220040403222222222222222222222222222222222222334444444444444444444444444433222222222222222222222222222232
+34444322222222223444444444444444444444444444444443344444322222222222222222222222222222222222222334444444444444444444444444444443
+32222222222222222222222222222222200303032222222222222222222222222222222222222233344444444444444444444433222222222222222222222222
+22222332344443222222222344444444444444444444444444444444344444443222222222222222222222222222222222222222233444444444444444444444
+44444332222222222222222222222222222222222004040422222222222222222222222222222222222222222333333444444444444433222222222222222222
+22222222222223333444433332222334444444444444444444444444444444434444444323222222222222222222222222222222222222222223344444444444
+44444444444332222222222222222222222222222222222220040404222222222222222222222222222222222222222222222223333333333333222222222222
+22222222222222222222353534444355533333334444444444444444444444444444433444444433343322222222222222222222222222222222222222222333
+44444444444444444332222222222222222222222222222222222222200404042222222222222222222222222222222222222222222222222222222222222222
+22222222222222222222222222235533344443555555555533333333344444444444444444443444444433444444322222222222222222222222222222222222
+22222222333344444443333332222222222222222222222222222222222222222004040422222222222222222222222222222222222222222222222222222222
+22222222222222222222222222222222222355323444433333555555555555553333444444444444444444444443444444332222222222222222222222222222
+22222222222222222222333333322222222222222222222222222222222222222222222220040404222222222222222222222222222222222222222222222222
+22222222222222222222222222222222222222222235555334444322223333335555555555553444444444444444444444344444332222222222222222222222
+22222222222222222222222222222222222222222222222222222222222222222222222222222222200303042222222222222222222222222222222222222222
+22222222222222222222222222222222222222222222222222355555333333333333333333333335555534444444444444444444434444432222222222222222
+22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222003020222222222222222222222222222222222
+22222222222222222222222222222222222222222222222222222222223555555555555555555555555555555533444444444444444444444444443222222222
+22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222220040403222222222222222222222222
+22222222222222222222222222222222222222222222222222222222222222222235555555555555555555555555555333344444444444444444444444444322
+22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222200202022222222222222222
+22222222222222222222222222222222222222222222222222222222222222222222222222355555555555555555555555333334444444444444444444444444
+44444322222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222005030222222222
+22222222222222222222222222222222222222222222222222222222222222222222222222222222222355555555555555555555534444444443344444444444
+44444444444432222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222220020202
+22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222223555555555555535555553444444333444344
+44444443344444444443222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
+20020203222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222223555555555553335555334444334
+4334434444443334444444444443222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
+22222222200202022222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222223355555555533355553
+44443333434343444433444444444444443222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
+22222222222222222004030222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222333555555
+55555553344433334343443443444444444444444322222222222222222222222222222222222222222222222222222222222222222222222222222222222222
+22222222222222222222222220000000222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
+33333335555553344333333444343433344444444444444432222222222222222222222222222222222222222222222222222222222222222222222222222222
+22222222222222222222222222222222200203042222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
+22222222344443233333344444444443333333444444444444444443222222222222222222222222222222222222222222222222222222222222222222222222
+22222222222222222222222222222222222222222002020222222222222222222222222222222222222222222222222222222222222222222222222222222222
+22222222222222223444432222223444444444444444444444444444444444322222222222222222222222222222222222222222222222222222222222222222
+22222222222222222222222222222222222222222222222220030202222222222222222222222222222222222222222222222222222222222222222222222222
+22222222222222222222222234444322222223444444444444444444444444444444332222222222222222222222222222222222222222222222222222222222
+22222222222222222222222222222222222222222222222222222222200202022222222222222222222222222222222222222222222222222222222222222222
+22222222222222222222222222222222344443222222223444444444444444444444444444432222222222222222222222222222222222222222222222222222
+22222222222222222222222222222222222222222222222222222222222222222002020322222222222222222222222222222222222222222222222222222222
+22222222222222222222222222222222222222223444432222222223333344444444444444444444433222222222222222222222222222222222222222222222
+22222222222222222222222222222222222222222222222222222222222222222222222220020202222222222222222222222222222222222222222222222222
+22222222222222222222222222222222222222222222222234444322222222222222333334444444444444333222222222222222222222222222222222222222
+22222222222222222222222222222222222222222222222222222222222222222222222222222222200603062222222222222222222222222222222222222222
+22222222222222222222222222222222222222222222222333222222344443222222333222222222233333333333332222222222222222222222222222222222
+22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222002020222222222222222222222222222222222
+22222222222222222222222222222222222222222222222222222223443333333444433333334432222222222222222222222222222222222222222222222222
+22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222220030606222222222222222222222222
+22222222222222222222222222222222222222222222222222222222222222234444444444444444444444322222222222222222222222222222222222222222
+22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222200304042222222222222222
+22222222222222222222222222222222222222222222222222222222222222222222222344444444444444444444443222222222222222222222222222222222
+22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222003060622222222
+22222222222222222222222222222222222222222222222222222222222222222222222222222223444444444444444444444432222222222222222222222222
+22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222220040404
+22222222222222222222222222222222222222222222222222222222222222222222222222222222222222234444444444444444444444322222222222222222
+22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
+20030303222222222222222222222222222222222222222222222222222222222222222222222222222222222222222344333333344443333333443222222222
+22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
+22222222200404042222222222222222222222222222222222222222222222222222222222222222222222222222222222222223332222223444432222223332
+22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
+22222222222222222003060322222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222234444322
+22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
+22222222222222222222222220040403222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
+34444322222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
+22222222222222222222222222222222200303032222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
+22222222344443222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
+22222222222222222222222222222222222222222004040422222222222222222222222222222222222222222222222222222222222222222222222222222222
+22222222222222223444432222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
+22222222222222222222222222222222222222222222222220030303222222222222222222222222222222222222222222222222222222222222222222222222
+22222222222222222222222234444322222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
+22222222222222222222222222222222222222222222222222222222200307072222222222222222222222222222222222222222222222222222222222222222
+22222222222222222222222222222223444444322222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
+22222222222222222222222222222222222222222222222222222222222222222003030322222222222222222222222222222222222222222222222222222222
+22222222222222222222222222222222222222234444443222222222222222222222222222222222222222222222222222222222222222222222222222222222
+22222222222222222222222222222222222222222222222222222222222222222222222220030707222222222222222222222222222222222222222222222222
+22222222222222222222222222222222222222222222222333333332222222222222222222222222222222222222222222222222222222222222222222222222
+22222222222222222222222222222222222222222222222222222222222222222222222222222222200603032222222222222222222222222222222222222222
+22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
+22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222003040422222222222222222222222222222222
+22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
+22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222220030202222222222222222222222222
+22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
+22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222200404042222222222222222
+22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
+22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222002020222222222
+22222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
+222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222200404040800000026060f000600544e50500701040000002701ffff030000000000}}}{\rtlch\fcs1 \af0 \ltrch\fcs0
+\lang1024\langfe1024\noproof\langnp1036\insrsid8133178\charrsid3147258
+\par }}\dpx540\dpy-194\dpxsize1229\dpysize1377\dpfillfgcr255\dpfillfgcg255\dpfillfgcb255\dpfillbgcr255\dpfillbgcg255\dpfillbgcb255\dpfillpat1\dplinew15\dplinecor0\dplinecog0\dplinecob0}}}}{\rtlch\fcs1 \af38\afs16 \ltrch\fcs0
+\f38\fs16\lang1024\langfe1024\noproof\insrsid1785391
+\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1024\langfe1024\noproof\langnp1031\langfenp2052\insrsid1713643
+{\shp{\*\shpinst\shpleft6656\shptop-389\shpright8276\shpbottom691\shpfhdr0\shpbxcolumn\shpbxignore\shpbypara\shpbyignore\shpwr1\shpwrk0\shpfblwtxt0\shpz5\shplid1028{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}
+{\sp{\sn fLockAspectRatio}{\sv 1}}{\sp{\sn hspNext}{\sv 1028}}{\sp{\sn pib}{\sv {\pict\picscalex30\picscaley36\piccropl0\piccropr0\piccropt0\piccropb0
+\picw9657\pich5345\picwgoal5475\pichgoal3030\wmetafile8\bliptag-1120665464{\*\blipuid bd3400880d878a06bcdbc69a6e488d0b}0100090000034c03000004004e00000000000400000003010800050000000b0200000000050000000c02010001000400000003010800050000000b0200000000
+050000000c0201000100050000000c02ca006d01050000000b02000000000500000006010100000007000000fc020000da251d000000040000002d0100000800
+0000fa0205000100000000000000040000002d010100050000000601010000002200000038050200070007008b0004008b0014006e0033007900400098001d00
+970010008b0004006e0041008100580097006f00970058008b004a008b005f006e00410008000000fa0200000000000000000000040000002d01020007000000
+fc020000ffffff000000040000002d01030004000000f001000007000000fc020000da251d000000040000002d010000040000002d0101000500000006010100
+0000220000003805020007000700a7000a00a70019008a00390094004400b3002200b3001400a7000a008a0045009d005d00b3007300b3005d00a6004f00a600
+62008a004500040000002d010200040000002d01030004000000f001000007000000fc020000da251d000000040000002d010000040000002d01010005000000
+060101000000220000003805020007000700e3000400e3001400ff003300f4004000d6001d00d6001000e300040000014100ec005800d6006f00d6005800e300
+4a00e3005f0000014100040000002d010200040000002d01030004000000f001000007000000fc020000da251d000000040000002d010000040000002d010100
+05000000060101000000220000003805020007000700c7000a00c7001900e4003900d9004400ba002200ba001400c7000a00e4004500d1005d00ba007300ba00
+5d00c8004f00c8006200e4004500040000002d010200040000002d01030004000000f001000007000000fc020000005d9f000000040000002d01000004000000
+2d0101000500000006010100000034000000240318001600c6001000c4000a00c0000600bb000400b5000400aa000400a30004009f00060099000a0094001000
+900016008f0037008f0037009c0016009c0015009c0012009d0011009f001100b5001200b8001600b9003700b9003700c6001600c600040000002d0102000400
+00002d01030004000000f001000007000000fc020000005d9f000000040000002d010000040000002d0101000500000006010100000024000000240310004300
+8f006d008f0073009000790094007d0099007f009f007f00c6007200c60072009f0071009d006e009c006d009c0050009c005000c6004300c60043008f000400
+00002d010200040000002d01030004000000f001000007000000fc020000005d9f000000040000002d010000040000002d010100050000000601010000003400
+0000240318009b00c6009400c4008e00c0008a00bb008900b5008900aa008900a30089009f008a0099008e009400940090009b008f00bc008f00bc009c009b00
+9c0099009c0097009d0095009f009500b5009700b8009b00b900bc00b900bc00c6009b00c600040000002d010200040000002d01030004000000f00100000700
+0000fc020000005d9f000000040000002d010000040000002d010100050000000601010000004e00000024032500e400b000de00b000d800b000d100af00cc00
+ac00c800a600c7009f00c8009900cc009400d1009000d8008f0007018f0007019c00d8009c00d5009d00d4009f00d500a300d800a400e700a400f000a400f500
+a400fb00a6000201a8000501af000701b5000501bb000201c000fb00c400f500c600c700c600c700b900f500b900f900b800fa00b500f900b100f500b000e400
+b000040000002d010200040000002d01030004000000f001000007000000fc020000005d9f000000040000002d010000040000002d0101000500000006010100
+00000e000000240305001101c60011018f001d018f001d01c6001101c600040000002d010200040000002d01030004000000f001000007000000fc020000005d
+9f000000040000002d010000040000002d010100050000000601010000004e000000240325004601b0004001b0003901b0003301af002e01ac002a01a6002901
+9f002a0199002e0194003301900039018f0069018f0069019c0039019c0037019d0036019f003701a3003901a4004901a4005201a4005701a4005e01a6006301
+a8006701af006901b5006701bb006301c0005e01c4005701c6002901c6002901b9005701b9005b01b8005c01b5005b01b1005701b0004601b000040000002d010200040000002d01030004000000f0010000030000000000}
+}}{\sp{\sn pictureId}{\sv 196608}}{\sp{\sn pictureGray}{\sv 0}}{\sp{\sn pictureBiLevel}{\sv 0}}{\sp{\sn pictureActive}{\sv 0}}{\sp{\sn fRecolorFillAsPicture}{\sv 0}}{\sp{\sn fUseShapeAnchor}{\sv 0}}{\sp{\sn fFilled}{\sv 0}}{\sp{\sn fHitTestFill}{\sv 1}}
+{\sp{\sn fillShape}{\sv 1}}{\sp{\sn fillUseRect}{\sv 0}}{\sp{\sn fNoFillHitTest}{\sv 0}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fPreferRelativeResize}{\sv 1}}{\sp{\sn fLayoutInCell}{\sv 1}}
+{\sp{\sn fReallyHidden}{\sv 0}}{\sp{\sn fScriptAnchor}{\sv 0}}{\sp{\sn fFakeMaster}{\sv 0}}{\sp{\sn fCameFromImgDummy}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}{\shptxt \ltrpar \pard\plain \ltrpar
+\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0\pararsid1785391 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid12811248
+{\pict{\*\picprop\shplid1028{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLockAspectRatio}{\sv 1}}{\sp{\sn pictureGray}{\sv 0}}{\sp{\sn pictureBiLevel}{\sv 0}}{\sp{\sn fRecolorFillAsPicture}{\sv 0}}
+{\sp{\sn fUseShapeAnchor}{\sv 0}}{\sp{\sn fFilled}{\sv 0}}{\sp{\sn fHitTestFill}{\sv 1}}{\sp{\sn fillShape}{\sv 1}}{\sp{\sn fillUseRect}{\sv 0}}{\sp{\sn fNoFillHitTest}{\sv 0}}
+{\sp{\sn fLine}{\sv 0}}{\sp{\sn fPreferRelativeResize}{\sv 1}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fReallyHidden}{\sv 0}}{\sp{\sn fScriptAnchor}{\sv 0}}{\sp{\sn fFakeMaster}{\sv 0}}{\sp{\sn fCameFromImgDummy}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}}
+\picscalex92\picscaley111\piccropl0\piccropr0\piccropt0\piccropb0\picw3096\pich1715\picwgoal1755\pichgoal972\wmetafile8\bliptag-1987183374\blipupi299{\*\blipuid 898dfcf2b4ba8e0e332a116609f681e5}
+0100090000034c03000004004e00000000000400000003010800050000000b0200000000050000000c02010001000400000003010800050000000b0200000000
+050000000c0201000100050000000c02ca006d01050000000b02000000000500000006010100000007000000fc020000da251d000000040000002d0100000800
+0000fa0205000100000000000000040000002d010100050000000601010000002200000038050200070007008b0004008b0014006e0033007900400098001d00
+970010008b0004006e0041008100580097006f00970058008b004a008b005f006e00410008000000fa0200000000000000000000040000002d01020007000000
+fc020000ffffff000000040000002d01030004000000f001000007000000fc020000da251d000000040000002d010000040000002d0101000500000006010100
+0000220000003805020007000700a7000a00a70019008a00390094004400b3002200b3001400a7000a008a0045009d005d00b3007300b3005d00a6004f00a600
+62008a004500040000002d010200040000002d01030004000000f001000007000000fc020000da251d000000040000002d010000040000002d01010005000000
+060101000000220000003805020007000700e3000400e3001400ff003300f4004000d6001d00d6001000e300040000014100ec005800d6006f00d6005800e300
+4a00e3005f0000014100040000002d010200040000002d01030004000000f001000007000000fc020000da251d000000040000002d010000040000002d010100
+05000000060101000000220000003805020007000700c7000a00c7001900e4003900d9004400ba002200ba001400c7000a00e4004500d1005d00ba007300ba00
+5d00c8004f00c8006200e4004500040000002d010200040000002d01030004000000f001000007000000fc020000005d9f000000040000002d01000004000000
+2d0101000500000006010100000034000000240318001600c6001000c4000a00c0000600bb000400b5000400aa000400a30004009f00060099000a0094001000
+900016008f0037008f0037009c0016009c0015009c0012009d0011009f001100b5001200b8001600b9003700b9003700c6001600c600040000002d0102000400
+00002d01030004000000f001000007000000fc020000005d9f000000040000002d010000040000002d0101000500000006010100000024000000240310004300
+8f006d008f0073009000790094007d0099007f009f007f00c6007200c60072009f0071009d006e009c006d009c0050009c005000c6004300c60043008f000400
+00002d010200040000002d01030004000000f001000007000000fc020000005d9f000000040000002d010000040000002d010100050000000601010000003400
+0000240318009b00c6009400c4008e00c0008a00bb008900b5008900aa008900a30089009f008a0099008e009400940090009b008f00bc008f00bc009c009b00
+9c0099009c0097009d0095009f009500b5009700b8009b00b900bc00b900bc00c6009b00c600040000002d010200040000002d01030004000000f00100000700
+0000fc020000005d9f000000040000002d010000040000002d010100050000000601010000004e00000024032500e400b000de00b000d800b000d100af00cc00
+ac00c800a600c7009f00c8009900cc009400d1009000d8008f0007018f0007019c00d8009c00d5009d00d4009f00d500a300d800a400e700a400f000a400f500
+a400fb00a6000201a8000501af000701b5000501bb000201c000fb00c400f500c600c700c600c700b900f500b900f900b800fa00b500f900b100f500b000e400
+b000040000002d010200040000002d01030004000000f001000007000000fc020000005d9f000000040000002d010000040000002d0101000500000006010100
+00000e000000240305001101c60011018f001d018f001d01c6001101c600040000002d010200040000002d01030004000000f001000007000000fc020000005d
+9f000000040000002d010000040000002d010100050000000601010000004e000000240325004601b0004001b0003901b0003301af002e01ac002a01a6002901
+9f002a0199002e0194003301900039018f0069018f0069019c0039019c0037019d0036019f003701a3003901a4004901a4005201a4005701a4005e01a6006301
+a8006701af006901b5006701bb006301c0005e01c4005701c6002901c6002901b9005701b9005b01b8005c01b5005b01b1005701b0004601b000040000002d010200040000002d01030004000000f0010000030000000000}}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid8133178
+\par }}}{\shprslt{\*\do\dobxcolumn\dobypara\dolhgt8197\dptxbx\dptxlrtb{\dptxbxtext\ltrpar \pard\plain \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0\pararsid1785391 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0
+\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid12811248 {\pict{\*\picprop\shplid1028{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}}
+{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLockAspectRatio}{\sv 1}}{\sp{\sn pictureGray}{\sv 0}}{\sp{\sn pictureBiLevel}{\sv 0}}{\sp{\sn fRecolorFillAsPicture}{\sv 0}}{\sp{\sn fUseShapeAnchor}{\sv 0}}{\sp{\sn fFilled}{\sv 0}}{\sp{\sn fHitTestFill}{\sv 1}}
+{\sp{\sn fillShape}{\sv 1}}{\sp{\sn fillUseRect}{\sv 0}}{\sp{\sn fNoFillHitTest}{\sv 0}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fPreferRelativeResize}{\sv 1}}{\sp{\sn fLayoutInCell}{\sv 1}}
+{\sp{\sn fReallyHidden}{\sv 0}}{\sp{\sn fScriptAnchor}{\sv 0}}{\sp{\sn fFakeMaster}{\sv 0}}{\sp{\sn fCameFromImgDummy}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}}\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0
+\picw2858\pich1905\picwgoal1620\pichgoal1080\wmetafile8\bliptag-1987183374\blipupi299{\*\blipuid 898dfcf2b4ba8e0e332a116609f681e5}
+0100090000034c03000004004e00000000000400000003010800050000000b0200000000050000000c02010001000400000003010800050000000b0200000000
+050000000c0201000100050000000c02ca006d01050000000b02000000000500000006010100000007000000fc020000da251d000000040000002d0100000800
+0000fa0205000100000000000000040000002d010100050000000601010000002200000038050200070007008b0004008b0014006e0033007900400098001d00
+970010008b0004006e0041008100580097006f00970058008b004a008b005f006e00410008000000fa0200000000000000000000040000002d01020007000000
+fc020000ffffff000000040000002d01030004000000f001000007000000fc020000da251d000000040000002d010000040000002d0101000500000006010100
+0000220000003805020007000700a7000a00a70019008a00390094004400b3002200b3001400a7000a008a0045009d005d00b3007300b3005d00a6004f00a600
+62008a004500040000002d010200040000002d01030004000000f001000007000000fc020000da251d000000040000002d010000040000002d01010005000000
+060101000000220000003805020007000700e3000400e3001400ff003300f4004000d6001d00d6001000e300040000014100ec005800d6006f00d6005800e300
+4a00e3005f0000014100040000002d010200040000002d01030004000000f001000007000000fc020000da251d000000040000002d010000040000002d010100
+05000000060101000000220000003805020007000700c7000a00c7001900e4003900d9004400ba002200ba001400c7000a00e4004500d1005d00ba007300ba00
+5d00c8004f00c8006200e4004500040000002d010200040000002d01030004000000f001000007000000fc020000005d9f000000040000002d01000004000000
+2d0101000500000006010100000034000000240318001600c6001000c4000a00c0000600bb000400b5000400aa000400a30004009f00060099000a0094001000
+900016008f0037008f0037009c0016009c0015009c0012009d0011009f001100b5001200b8001600b9003700b9003700c6001600c600040000002d0102000400
+00002d01030004000000f001000007000000fc020000005d9f000000040000002d010000040000002d0101000500000006010100000024000000240310004300
+8f006d008f0073009000790094007d0099007f009f007f00c6007200c60072009f0071009d006e009c006d009c0050009c005000c6004300c60043008f000400
+00002d010200040000002d01030004000000f001000007000000fc020000005d9f000000040000002d010000040000002d010100050000000601010000003400
+0000240318009b00c6009400c4008e00c0008a00bb008900b5008900aa008900a30089009f008a0099008e009400940090009b008f00bc008f00bc009c009b00
+9c0099009c0097009d0095009f009500b5009700b8009b00b900bc00b900bc00c6009b00c600040000002d010200040000002d01030004000000f00100000700
+0000fc020000005d9f000000040000002d010000040000002d010100050000000601010000004e00000024032500e400b000de00b000d800b000d100af00cc00
+ac00c800a600c7009f00c8009900cc009400d1009000d8008f0007018f0007019c00d8009c00d5009d00d4009f00d500a300d800a400e700a400f000a400f500
+a400fb00a6000201a8000501af000701b5000501bb000201c000fb00c400f500c600c700c600c700b900f500b900f900b800fa00b500f900b100f500b000e400
+b000040000002d010200040000002d01030004000000f001000007000000fc020000005d9f000000040000002d010000040000002d0101000500000006010100
+00000e000000240305001101c60011018f001d018f001d01c6001101c600040000002d010200040000002d01030004000000f001000007000000fc020000005d
+9f000000040000002d010000040000002d010100050000000601010000004e000000240325004601b0004001b0003901b0003301af002e01ac002a01a6002901
+9f002a0199002e0194003301900039018f0069018f0069019c0039019c0037019d0036019f003701a3003901a4004901a4005201a4005701a4005e01a6006301
+a8006701af006901b5006701bb006301c0005e01c4005701c6002901c6002901b9005701b9005b01b8005c01b5005b01b1005701b0004601b000040000002d010200040000002d01030004000000f0010000030000000000}}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid8133178
+\par }}\dpx6656\dpy-389\dpxsize1620\dpysize1080\dpfillfgcr255\dpfillfgcg255\dpfillfgcb255\dpfillbgcr255\dpfillbgcg255\dpfillbgcb255\dpfillpat0\dplinehollow}}}
+{\shp{\*\shpinst\shpleft513\shptop137\shpright10317\shpbottom137\shpfhdr0\shpbxcolumn\shpbxignore\shpbypara\shpbyignore\shpwr3\shpwrk0\shpfblwtxt0\shpz0\shplid1029{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 1}}
+{\sp{\sn shapePath}{\sv 4}}{\sp{\sn fFillOK}{\sv 0}}{\sp{\sn fFilled}{\sv 0}}{\sp{\sn fArrowheadsOK}{\sv 1}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fLayoutInCell}{\sv 1}}}{\shprslt{\*\do\dobxcolumn\dobypara\dodhgt8192\dpline\dpptx9804\dppty0\dpptx0\dppty0
+\dpx513\dpy137\dpxsize9804\dpysize0\dplinew15\dplinecor0\dplinecog0\dplinecob0}}}}{\rtlch\fcs1 \af38\afs16 \ltrch\fcs0 \f38\fs16\lang1024\langfe1024\noproof\insrsid1785391
+\par }\pard \ltrpar\qj \li0\ri0\nowidctlpar\tx570\tx10089\tx10488\wrapdefault\faauto\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af0\afs32 \ltrch\fcs0 \fs32\lang1040\langfe1033\langnp1040\insrsid2705025\charrsid14373447 {\*\bkmkend Text15}\tab }{\rtlch\fcs1
+\af0\afs32 \ltrch\fcs0 \fs32\lang1040\langfe1033\langnp1040\insrsid8061541\charrsid14373447 {\*\bkmkstart Text7}}{\field\flddirty{\*\fldinst {\rtlch\fcs1 \ab\af0\afs52 \ltrch\fcs0 \cs33\b\fs52\lang1040\langfe1033\chbrdr\brdrs\brdrw10
+\langnp1040\insrsid1248058\charrsid14373447 FORMTEXT }{\rtlch\fcs1 \ab\af0\afs52 \ltrch\fcs0 \b\fs52\lang1040\langfe1033\chbrdr\brdrs\brdrw10 \langnp1040\insrsid1713643 {\*\datafield 000804000000000005546578743700000000000000000000000000}
+{\*\formfield{\fftype0\fftypetxt1\ffmaxlen4{\*\ffname Text7}}}}}{\fldrslt {\rtlch\fcs1 \ab\af38\afs52 \ltrch\fcs0 \cs33\b\f38\fs52\lang1024\langfe1024\chbrdr\brdrs\brdrw10 \noproof\langnp1040\insrsid1248058\charrsid14373447 \u8194\'20\u8194\'20\u8194\'20
+\u8194\'20}}}\sectd \ltrsect\psz9\linex0\headery576\footery288\colsx708\endnhere\sectdefaultcl\sectrsid1713643\sftnbj {\rtlch\fcs1 \af0\afs32 \ltrch\fcs0 \fs32\lang1040\langfe1033\langnp1040\insrsid8061541\charrsid14373447 {\*\bkmkend Text7}
+ {\*\bkmkstart Dropdown8}}{\field\flddirty\fldpriv{\*\fldinst {\rtlch\fcs1 \ab\af0\afs52 \ltrch\fcs0 \b\fs52\lang1040\langfe1033\langnp1040\insrsid8061541\charrsid14373447 FORMDROPDOWN }{\rtlch\fcs1 \ab\af0\afs52 \ltrch\fcs0
+\b\fs52\lang1040\langfe1033\langnp1040\insrsid1713643 {\*\datafield 66820000000000000944726f70646f776e380000000000000000000000000004000100010000000a0002000141}{\*\formfield{\fftype2\ffres25\ffprot\fftypetxt0\ffhaslistbox{\*\ffname Dropdown8}\ffdefres0
+{\*\ffl A}}}}}{\fldrslt }}\sectd \ltrsect\psz9\linex0\headery576\footery288\colsx708\endnhere\sectdefaultcl\sectrsid1713643\sftnbj {\rtlch\fcs1 \af0\afs32 \ltrch\fcs0 \fs32\lang1040\langfe1033\langnp1040\insrsid8061541\charrsid14373447
+{\*\bkmkend Dropdown8} }{\rtlch\fcs1 \af0\afs32 \ltrch\fcs0 \fs32\lang1040\langfe1033\langnp1040\insrsid14373447 }{\rtlch\fcs1 \af0\afs32 \ltrch\fcs0
+\fs32\lang1040\langfe1033\langnp1040\insrsid8061541\charrsid14373447 }{\field\flddirty\fldpriv{\*\fldinst {\rtlch\fcs1 \ab\af0\afs52 \ltrch\fcs0 \b\fs52\lang1040\langfe1033\langnp1040\insrsid13400122\charrsid14373447 FORMDROPDOWN }{\rtlch\fcs1
+\ab\af0\afs52 \ltrch\fcs0 \b\fs52\lang1040\langfe1033\langnp1040\insrsid1713643 {\*\datafield 6682000000000000000000000000000000000000000007000100010000000a0002000432303037}{\*\formfield{\fftype2\ffres25\ffprot\fftypetxt0\ffhaslistbox\ffdefres0{\*\ffl
+2007}}}}}{\fldrslt }}\sectd \ltrsect\psz9\linex0\headery576\footery288\colsx708\endnhere\sectdefaultcl\sectrsid1713643\sftnbj {\rtlch\fcs1 \af0\afs32 \ltrch\fcs0 \fs32\lang1040\langfe1033\langnp1040\insrsid8061541\charrsid14373447
+\par }\pard\plain \ltrpar\s32\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af35\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1033\loch\af35\hich\af0\dbch\af0\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1
+\af0\afs2 \ltrch\fcs0 \cs33\fs2\lang1040\langfe1033\loch\af0\langnp1040\insrsid8061541\charrsid14373447
+\par }\pard \ltrpar\s32\ql \li513\ri0\widctlpar\tx171\tx399\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin513\itap0 {\rtlch\fcs1 \ai\af0\afs16 \ltrch\fcs0 \cs33\i\fs16\lang1040\langfe1033\loch\af0\langnp1040\insrsid14373447 }{\rtlch\fcs1
+\ai\af0\afs20 \ltrch\fcs0 \cs33\i\fs20\lang1040\langfe1033\loch\af0\langnp1040\insrsid8061541\charrsid14373447 Se completeaza de catre CNCSIS}{\rtlch\fcs1 \ab\af0\afs20 \ltrch\fcs0
+\cs33\b\fs20\lang1040\langfe1033\loch\af0\langnp1040\insrsid8061541\charrsid14373447
+\par }\pard\plain \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af0 \ltrch\fcs0
+\lang1024\langfe1024\noproof\langnp1031\langfenp2052\insrsid1713643 {\shp{\*\shpinst\shpleft513\shptop165\shpright10374\shpbottom165\shpfhdr0\shpbxcolumn\shpbxignore\shpbypara\shpbyignore\shpwr3\shpwrk0\shpfblwtxt0\shpz1\shplid1030
+{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn shapePath}{\sv 4}}{\sp{\sn fFillOK}{\sv 0}}{\sp{\sn fFilled}{\sv 0}}{\sp{\sn lineWidth}{\sv 57150}}{\sp{\sn fArrowheadsOK}{\sv 1}}{\sp{\sn fLine}{\sv 1}}
+{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fLayoutInCell}{\sv 1}}}{\shprslt{\*\do\dobxcolumn\dobypara\dodhgt8193\dpline\dpptx0\dppty0\dpptx9861\dppty0\dpx513\dpy165\dpxsize9861\dpysize0\dplinew90\dplinecor0\dplinecog0\dplinecob0}}}}{\rtlch\fcs1
+\ai\af0\afs16 \ltrch\fcs0 \i\fs16\lang1040\langfe1033\langnp1040\insrsid8061541\charrsid14373447
+\par
+\par }\pard\plain \ltrpar\s7\qc \li0\ri0\keepn\nowidctlpar\tx1197\wrapdefault\faauto\outlinelevel6\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af0\afs24\alang1025 \ltrch\fcs0 \b\fs24\expnd1\expndtw6\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {
+\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \fs20\expnd0\expndtw4\lang1040\langfe1033\langnp1040\insrsid8061541\charrsid14373447 CERERE DE FINANTARE PENTRU PROIECTE MULTIANUALE
+\par }\pard \ltrpar\s7\qc \li0\ri0\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel6\adjustright\rin0\lin0\itap0 {\rtlch\fcs1 \af0\afs20 \ltrch\fcs0 \fs20\expnd0\expndtw4\lang1040\langfe1033\langnp1040\insrsid8061541\charrsid14373447
+DE CERCETARE STIINTIFICA/CREATIE ARTISTICA
+\par }\pard\plain \ltrpar\s2\qc \li0\ri0\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af0\afs24\alang1025 \ltrch\fcs0 \b\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af0\afs22
+\ltrch\fcs0 \fs22\expnd0\expndtw4\lang1040\langfe1033\langnp1040\insrsid8061541\charrsid14373447 FINANTATE DIN BUGETUL DE STAT
+\par }\pard\plain \ltrpar\qj \li0\ri0\nowidctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af0 \ltrch\fcs0
+\lang1024\langfe1024\noproof\langnp1031\langfenp2052\insrsid1713643 {\shp{\*\shpinst\shpleft513\shptop103\shpright10374\shpbottom103\shpfhdr0\shpbxcolumn\shpbxignore\shpbypara\shpbyignore\shpwr3\shpwrk0\shpfblwtxt0\shpz2\shplid1031
+{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn shapePath}{\sv 4}}{\sp{\sn fFillOK}{\sv 0}}{\sp{\sn fFilled}{\sv 0}}{\sp{\sn lineWidth}{\sv 57150}}{\sp{\sn fArrowheadsOK}{\sv 1}}{\sp{\sn fLine}{\sv 1}}
+{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fLayoutInCell}{\sv 1}}}{\shprslt{\*\do\dobxcolumn\dobypara\dodhgt8194\dpline\dpptx0\dppty0\dpptx9861\dppty0\dpx513\dpy103\dpxsize9861\dpysize0\dplinew90\dplinecor0\dplinecog0\dplinecob0}}}}{\rtlch\fcs1 \af0\afs32
+\ltrch\fcs0 \fs32\expnd1\expndtw6\insrsid8061541\charrsid14373447 \-}{\rtlch\fcs1 \af0 \ltrch\fcs0 \expnd1\expndtw6\insrsid8061541\charrsid14373447
+\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \ab\af0 \ltrch\fcs0 \b\lang1036\langfe1033\langnp1036\langfenp1033\insrsid8061541\charrsid14373447 \hich\af0\dbch\af0\loch\f0 1.\tab}}\pard \ltrpar\ql \li570\ri0\nowidctlpar
+\jclisttab\tx513\tx969\wrapdefault\faauto\ls8\adjustright\rin0\lin570\itap0\pararsid985131 {\rtlch\fcs1 \ab\af0\afs24 \ltrch\fcs0 \b\fs24\lang1036\langfe1033\langnp1036\insrsid8061541\charrsid14373447 Date personale ale directorului de proiect:
+\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts11\trqc\trgaph14\trrh346\trleft-61\trbrdrt\brdrs\brdrw5 \trbrdrl\brdrs\brdrw5 \trbrdrb\brdrs\brdrw5 \trbrdrr\brdrs\brdrw5 \trbrdrh\brdrs\brdrw5 \trbrdrv\brdrs\brdrw5
+\trftsWidth3\trwWidth9922\trftsWidthB3\trftsWidthA3\trspdl21\trspdt21\trspdb21\trspdr21\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl14\trpaddt14\trpaddb14\trpaddr14\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblind0\tblindtype3 \clvertalt\clbrdrt
+\brdrs\brdrw5 \clbrdrl\brdrs\brdrw5 \clbrdrb\brdrs\brdrw5 \clbrdrr\brdrs\brdrw5 \cltxlrtb\clftsWidth3\clwWidth3418\clshdrawnil \cellx3420\clvertalt\clbrdrt\brdrs\brdrw5 \clbrdrl\brdrs\brdrw5 \clbrdrb\brdrs\brdrw5 \clbrdrr\brdrs\brdrw5
+\cltxlrtb\clftsWidth3\clwWidth6378\clshdrawnil \cellx9861\pard \ltrpar\ql \fi-285\li342\ri0\nowidctlpar\intbl\tx57\tx252\tx792\tx1782\tx1872\tx2010\tx2142\tx2238\tx2502\tx2592\tx2772\wrapdefault\faauto\adjustright\rin0\lin342\pararsid10450314 {
+\rtlch\fcs1 \af0\afs22 \ltrch\fcs0 \fs22\insrsid8061541\charrsid14373447 1.1. Nume: \cell }\pard \ltrpar\ql \fi-285\li0\ri0\nowidctlpar\intbl
+\tx57\tx252\tx792\tx1782\tx1872\tx2010\tx2142\tx2238\tx2502\tx2592\tx2772\wrapdefault\faauto\adjustright\rin0\lin0\pararsid10450314 {\rtlch\fcs1 \ab\af0\afs18 \ltrch\fcs0 \b\fs18\insrsid8719427\charrsid14373447 }{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0
+\fs18\insrsid8719427\charrsid14373447 }{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\insrsid14373447 }{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\insrsid8719427\charrsid14373447 }{\field\flddirty{\*\fldinst {\rtlch\fcs1 \ab\af0\afs18 \ltrch\fcs0
+\b\fs18\insrsid1274673 FORMTEXT }{\rtlch\fcs1 \ab\af0\afs18 \ltrch\fcs0 \b\fs18\insrsid1713643 {\*\datafield 00003200000000000000000009557070657263617365000000000000000000}{\*\formfield{\fftype0\fftypetxt0\ffmaxlen50{\*\ffformat Uppercase}}}}}{\fldrslt {
+\rtlch\fcs1 \ab\af0\afs18 \ltrch\fcs0 \b\fs18\lang1024\langfe1024\noproof\insrsid1274673 \u8194\'20\u8194\'20\u9194\'20\u8194\'20\u8194\'20}}}\sectd \ltrsect\psz9\linex0\headery576\footery288\colsx708\endnhere\sectdefaultcl\sectrsid1713643\sftnbj {
+\rtlch\fcs1 \ab\af0\afs18 \ltrch\fcs0 \b\fs18\insrsid8061541\charrsid14373447 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \ab\af0\afs18 \ltrch\fcs0
+\b\fs18\insrsid8061541\charrsid14373447 \trowd \irow0\irowband0\ltrrow\ts11\trqc\trgaph14\trrh346\trleft-61\trbrdrt\brdrs\brdrw5 \trbrdrl\brdrs\brdrw5 \trbrdrb\brdrs\brdrw5 \trbrdrr\brdrs\brdrw5 \trbrdrh\brdrs\brdrw5 \trbrdrv\brdrs\brdrw5
+\trftsWidth3\trwWidth9922\trftsWidthB3\trftsWidthA3\trspdl21\trspdt21\trspdb21\trspdr21\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl14\trpaddt14\trpaddb14\trpaddr14\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblind0\tblindtype3 \clvertalt\clbrdrt
+\brdrs\brdrw5 \clbrdrl\brdrs\brdrw5 \clbrdrb\brdrs\brdrw5 \clbrdrr\brdrs\brdrw5 \cltxlrtb\clftsWidth3\clwWidth3418\clshdrawnil \cellx3420\clvertalt\clbrdrt\brdrs\brdrw5 \clbrdrl\brdrs\brdrw5 \clbrdrb\brdrs\brdrw5 \clbrdrr\brdrs\brdrw5
+\cltxlrtb\clftsWidth3\clwWidth6378\clshdrawnil \cellx9861\row \ltrrow}\pard \ltrpar\ql \fi-285\li342\ri0\nowidctlpar\intbl
+\tx57\tx252\tx792\tx1782\tx1872\tx2010\tx2142\tx2238\tx2502\tx2592\tx2772\wrapdefault\faauto\adjustright\rin0\lin342\pararsid10450314 {\rtlch\fcs1 \af0\afs22 \ltrch\fcs0 \fs22\insrsid8061541\charrsid14373447 1.2. Prenume: \cell }\pard \ltrpar
+\ql \fi-285\li0\ri0\nowidctlpar\intbl\tx57\tx252\tx792\tx1782\tx1872\tx2010\tx2142\tx2238\tx2502\tx2592\tx2772\tx3420\tx3534\wrapdefault\faauto\adjustright\rin0\lin0\pararsid10450314 {\rtlch\fcs1 \ab\af0\afs18 \ltrch\fcs0
+\b\fs18\insrsid8719427\charrsid14373447 }{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\insrsid8719427\charrsid14373447 }{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\insrsid14373447 }{\field\flddirty{\*\fldinst {\rtlch\fcs1 \ab\af0\afs18 \ltrch\fcs0
+\b\fs18\insrsid1274673 FORMTEXT }{\rtlch\fcs1 \ab\af0\afs18 \ltrch\fcs0 \b\fs18\insrsid1713643 {\*\datafield 00003200000000000000000009557070657263617365000000000000000000}{\*\formfield{\fftype0\fftypetxt0\ffmaxlen50{\*\ffformat Uppercase}}}}}{\fldrslt {
+\rtlch\fcs1 \ab\af0\afs18 \ltrch\fcs0 \b\fs18\lang1024\langfe1024\noproof\insrsid1274673 \u8194\'20\u8194\'20\u8194\'20\u8194\'20\u8194\'20}}}\sectd \ltrsecT\psz9\linex0\headery576\footery288\colsx708\endnhere\sectdefaultcl\sectrsid1713643\sftnbj {
+\rtlch\fcs1 \ab\af0\afs18 \ltrch\fcs0 \b\fs18\insrsid8061541\charrsid14373447 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \ab\af0\afs18 \ltrch\fcs0
+\b\fs18\insrsid8061541\charrsid14373447 \trowd \irow1\irowband1\ltrrow\ts11\trqc\trgaph14\trrh346\trleft-61\trbrdrt\brdrs\brdrw5 \trbrdrl\brdrs\brdrw5 \trbrdrb\brdrs\brdrw5 \trbrdrr\brdrs\brdrw5 \trbrdrh\brdrs\brdrw5 \trbrdrv\brdrs\brdrw5
+\trftsWidth3\trwWidth9922\trftsWidthB3\trftsWidthA3\trspdl21\trspdt21\trspdb21\trspdr21\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl14\trpaddt14\trpaddb14\trpaddr14\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblind0\tblindtype3 \clvertalt\clbrdrt
+\brdrs\brdrw5 \clbrdrl\brdrs\brdrw5 \clbrdrb\brdrs\brdrw5 \clbrdrr\brdrs\brdrw5 \cltxlrtb\clftsWidth3\clwWidth3418\clshdrawnil \cellx3420\clvertalt\clbrdrt\brdrs\brdrw5 \clbrdrl\brdrs\brdrw5 \clbrdrb\brdrs\brdrw5 \clbrdrr\brdrs\brdrw5
+\cltxlrtb\clftsWidth3\clwWidth6378\clshdrawnil \cellx9861\row \ltrrow}\pard \ltrpar\ql \fi-285\li342\ri0\nowidctlpar\intbl
+\tx57\tx252\tx792\tx1782\tx1872\tx2010\tx2142\tx2238\tx2502\tx2592\tx2772\wrapdefault\faauto\adjustright\rin0\lin342\pararsid10450314 {\rtlch\fcs1 \af0\afs22 \ltrch\fcs0 \fs22\insrsid8061541\charrsid14373447 1.3. An nastere:\cell }\pard \ltrpar
+\ql \fi-285\li0\ri0\nowidctlpar\intbl\tx57\tx252\tx792\tx1782\tx1872\tx2010\tx2142\tx2238\tx2502\tx2592\tx2772\tx3477\wrapdefault\faauto\adjustright\rin0\lin0\pararsid10450314 {\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\insrsid8719427\charrsid14373447
+}{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\insrsid14373447\charrsid14373447 }{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\insrsid8719427\charrsid14373447 }{\field\flddirty{\*\fldinst {\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\insrsid1274673 FORMTEXT }{
+\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\insrsid1713643 {\*\datafield 0008040000000000000000000130000000000000000000}{\*\formfield{\fftype0\fftypetxt1\ffmaxlen4{\*\ffformat 0}}}}}{\fldrslt {\rtlch\fcs1 \af0\afs18 \ltrch\fcs0
+\fs18\lang1024\langfe1024\noproof\insrsid1274673 \u8194\'20\u8194\'20\u8194\'20\u8194\'20}}}\sectd \ltrsect\psz9\linex0\headery576\footery288\colsx708\endnhere\sectdefaultcl\sectrsid1713643\sftnbj {\rtlch\fcs1 \af0\afs18 \ltrch\fcs0
+\fs18\insrsid8061541\charrsid14373447 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\insrsid8061541\charrsid14373447 \trowd \irow2\irowband2\ltrrow
+\ts11\trqc\trgaph14\trrh346\trleft-61\trbrdrt\brdrs\brdrw5 \trbrdrl\brdrs\brdrw5 \trbrdrb\brdrs\brdrw5 \trbrdrr\brdrs\brdrw5 \trbrdrh\brdrs\brdrw5 \trbrdrv\brdrs\brdrw5
+\trftsWidth3\trwWidth9922\trftsWidthB3\trftsWidthA3\trspdl21\trspdt21\trspdb21\trspdr21\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl14\trpaddt14\trpaddb14\trpaddr14\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblind0\tblindtype3 \clvertalt\clbrdrt
+\brdrs\brdrw5 \clbrdrl\brdrs\brdrw5 \clbrdrb\brdrs\brdrw5 \clbrdrr\brdrs\brdrw5 \cltxlrtb\clftsWidth3\clwWidth3418\clshdrawnil \cellx3420\clvertalt\clbrdrt\brdrs\brdrw5 \clbrdrl\brdrs\brdrw5 \clbrdrb\brdrs\brdrw5 \clbrdrr\brdrs\brdrw5
+\cltxlrtb\clftsWidth3\clwWidth6378\clshdrawnil \cellx9861\row \ltrrow}\pard \ltrpar\ql \fi-285\li342\ri0\nowidctlpar\intbl
+\tx57\tx252\tx792\tx1782\tx1872\tx2010\tx2142\tx2238\tx2502\tx2592\tx2772\wrapdefault\faauto\adjustright\rin0\lin342\pararsid10450314 {\rtlch\fcs1 \af0\afs22 \ltrch\fcs0 \fs22\lang1036\langfe1033\langnp1036\insrsid9574070\charrsid14373447
+1.4. Titlu didactic si/sau stiintific:\cell }\pard \ltrpar\ql \li0\ri0\nowidctlpar\intbl\tx57\tx252\tx792\tx1782\tx1872\tx2010\tx2142\tx2238\tx2502\tx2592\tx2772\tx3306\tx3477\tx7923\tx8037\wrapdefault\faauto\adjustright\rin0\lin0\pararsid10450314 {
+\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\lang1036\langfe1033\langnp1036\insrsid8719427\charrsid14373447 }{\field\flddirty\fldpriv{\*\fldinst {\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\insrsid1274673 FORMDROPDOWN }{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0
+\fs18\insrsid1713643 {\*\datafield
+6680000000000000000000000000000000000000000080000a000a0000000a0014002f00380045004c0055005a006000670072001a20202020202020202020202020202020202020202020202020200850726f6665736f720c436f6e666572656e74696172064c6563746f72084173697374656e7404435320490543532049
+49064353204949490a43657263657461746f720d416c7465207369747561746969}{\*\formfield{\fftype2\ffres25\fftypetxt0\ffhaslistbox\ffdefres0{\*\ffl }{\*\ffl Profesor}{\*\ffl Conferentiar}{\*\ffl Lector}{\*\ffl Asistent}{\*\ffl CS I}
+{\*\ffl CS II}{\*\ffl CS III}{\*\ffl Cercetator}{\*\ffl Alte situatii}}}}}{\fldrslt }}\sectd \ltrsect\psz9\linex0\headery576\footery288\colsx708\endnhere\sectdefaultcl\sectrsid1713643\sftnbj {\rtlch\fcs1 \af0\afs18 \ltrch\fcs0
+\fs18\insrsid8719427\charrsid14373447 }{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\insrsid14373447\charrsid14373447 }{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0
+\fs18\insrsid8719427\charrsid14373447 }{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\cf2\insrsid8719427\charrsid14373447 (selectati)}{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\insrsid9574070\charrsid14373447 \cell }\pard \ltrpar
+\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\insrsid9574070\charrsid14373447 \trowd \irow3\irowband3\ltrrow\ts11\trqc\trgaph14\trrh346\trleft-61\trbrdrt\brdrs\brdrw5
+\trbrdrl\brdrs\brdrw5 \trbrdrb\brdrs\brdrw5 \trbrdrr\brdrs\brdrw5 \trbrdrh\brdrs\brdrw5 \trbrdrv\brdrs\brdrw5
+\trftsWidth3\trwWidth9922\trftsWidthB3\trftsWidthA3\trspdl21\trspdt21\trspdb21\trspdr21\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl14\trpaddt14\trpaddb14\trpaddr14\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblind0\tblindtype3 \clvertalt\clbrdrt
+\brdrs\brdrw5 \clbrdrl\brdrs\brdrw5 \clbrdrb\brdrs\brdrw5 \clbrdrr\brdrs\brdrw5 \cltxlrtb\clftsWidth3\clwWidth3418\clshdrawnil \cellx3420\clvertalt\clbrdrt\brdrs\brdrw5 \clbrdrl\brdrs\brdrw5 \clbrdrb\brdrs\brdrw5 \clbrdrr\brdrs\brdrw5
+\cltxlrtb\clftsWidth3]clwWidth6378\clshdrawnil \cellx9861\row \ltrrow}\pard \ltrpar\ql \fi-285\li342\ri0\nowidctlpar\intbl
+\tx57\tx252\tx792\tx1782\tx1872\tx2010\tx2142\tx2238\tx2502\tx2592\tx2772\wrapdefault\faauto\adjustright\rin0\lin342\pararsid10450314 {\rtlch\fcs1 \af0\afs22 \ltrch\fcs0 \fs22\insrsid9574070\charrsid14373447 1.5. Doctor din anul:\cell }\pard \ltrpar
+\ql \fi-285\li0\ri0\nowidctlpar\intbl\tx57\tx252\tx792\tx1782\tx1872\tx2010\tx2142\tx2238\tx2502\tx2592\tx2772\wrapdefault\faauto\adjustright\rin0\lin0\pararsid10450314 {\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\insrsid8719427\charrsid14373447 }{
+\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\insrsid14373447\charrsid14373447 }{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\insrsid8719427\charrsid14373447 }{\field\flddirty{\*\fldinst {\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\insrsid1274673 FORMTEXT }{
+\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\insrsid1 {\*\datafield 0}{\*\formfield{\fftype0\fftypetxt1\ffmaxlen4{\*\ffformat 0}}}}}{\fldrslt {\rtlch\fcs1 \af0\afs18 \ltrch\fcs0
+\fs18\lang1024\langfe1024\noproof\insrsid1274673 \u8194\'20\u8194\'340282366920938463463374607431768211456\u8194\'20\u8194\'9223372036854775827}}}\sectd \ltrsect\psz9\linex0\headery576\footery288\colsx708\endnhere\sectdefaultcl\sectrsid1713643\sftnbj {\rtlch\fcs1 \af0\afs18 \ltrch\fcs0
+\fs18\insrsid9574070\charrsid14373447 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0\afs-52285677232 \ltrch\fcs0 \fs18\insrsid9574070\charrsid14373447 \trowd \irow4\irowband4\ltrrow
+\ts11\trqc\trgaph14\trrh346\trleft-61\trbrdrt\brdrs\brdrw5 \trbrdrl\brdrs\brdrw5 \trbrdrb\brdrs\brdrw5 \trbrdrr\brdrs\brdrw5 \trbrdrh\brdrs\brdrw5 \trbrdrv\brdrs\brdrw5
+\trftsWidth3\trwWidth9922\trftsWidthB3\trftsWidthA3\trspdl21\trspdt21\trspdb21\trspdr21\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl14\trpaddt14\trpaddb14\trpaddr14\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblind0\tblindtype3 \clvertalt\clbrdrt
+\brdrs\brdrw5 \clbrdrl\brdrs\brdrw5 \clbrdrb\brdrs\brdrw5 \clbrdrr\brdrs\brdrw5 \cltxlrtb\clftsWidth3\clwWidth3418\clshdrawnil \cellx3420\clvertalt\clbrdrt\brdrs\brdrw5 \clbrdrl\brdrs\brdrw5 \clbrdrb\brdrs\brdrw5 \clbrdrr\brdrs\brdrw5
+\cltxlrtb\clftsWidth3\clwWidth6378\clshdrawnil \cellx9861\row \ltrrow}\pard \ltrpar\ql \fi-285\li342\ri0\nowidctlpar\intbl
+\tx57\tx252\tx513\tx792\tx1782\tx1872\tx2010\tx2142\tx2238\tx2502\tx2592\tx2772\wrapdefault\faauto\adjustright\rin0\lin342\pararsid10450314 {\rtlch\fcs1 \af0\afs22 \ltrch\fcs0 \fs22\insrsid9574070\charrsid14373447 1.6 Conducator doctorat:\cell
+}\pard \ltrpar\ql \li0\ri0\nowidctlpar\intbl\tx252\tx792\tx1782\tx1872\tx2010\tx2142\tx2238\tx2502\tx2592\tx2772\tx6498\tx8037\wrapdefault\faauto\adjustright\rin0\lin0\pararsid10450314 {\rtlch\fcs1 \af0\afs18 \ltrch\fcs0
+\fs18\insrsid8719427\charrsid14373447 {\*\bkmkstart Dropdown9} {\*\bkmkend Dropdown9}}{\field\flddirty\fldpriv{\*\fldinst {\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\insrsid1274673 FORMDROPDOWN }{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\insrsid1713643
+{\*\datafield 6680000000000000000000000000000000000000000014000300030000000a0006000e0011000720202020202020024441024e55}{\*\formfield{\fftype2\ffres25\fftypetxt0\ffhaslistbox\ffdefres0{\*\ffl }{\*\ffl DA}{\*\ffl NU}}}}}{\fldrslt }}\sectd \ltrsect
+\psz9\linex0\headery576\footery288\colsx708\endnhere\sectdefaultcl\sectrsid1713643\sftnbj {\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\insrsid8719427\charrsid14373447 }{\rtlch\fcs1 \af0\afs18
+\ltrch\fcs0 \fs18\insrsid14373447\charrsid14373447 }{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\insrsid8719427\charrsid14373447 }{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\insrsid14373447\charrsid14373447 }{\rtlch\fcs1 \af0\afs18
+\ltrch\fcs0 \fs18\insrsid8719427\charrsid14373047 }{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\insrsid14373447\charrsid14373447 }{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\insrsid8719427\charrsid14373447 }{\rtlch\fcs1 \af0\afs18
+\ltrch\fcs0 \fs18\cf2\insrsid8719427\charrsid14373447 (selectati)}{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\insrsid9574070\charrsid14373447 \cell }\pard \ltrpar\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {
+\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\insrsid9574070\charrsid14373447 \trowd \irow5\irowband5\ltrrow\ts11\trqc\trgaph14\trrh346\trleft-61\trbrdrt\brdrs\brdrw5 \trbrdrl\brdrs\brdrw5 \trbrdrb\brdrs\brdrw5 \trbrdrr\brdrs\brdrw5 \trbrdrh\brdrs\brdrw5
+\trbrdrv\brdrs\brdrw5 \trftsWidth3\trwWidth9922\trftsWidthB3\trftsWidthA3\trspdl21\trspdt21\trspdb21\trspdr21\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl14\trpaddt14\trpaddb14\trpaddr14\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblind0\tblindtype3
+\clvertalt\clbrdrt\brdrs\brdrw5 \clbrdrl\brdrs\brdrw5 \clbrdrb\brdrs\brdrw5 \clbrdrr\brdrs\brdrw5 \cltxlrtb\clftsWidth3\clwWidth3418\clshdrawnil \cellx3420\clvertalt\clbrdrt\brdrs\brdrw5 \clbrdrl\brdrs\brdrw5 \clbrdrb\brdrs\brdrw5 \clbrdrr\brdrs\brdrw5
+\cltxlrtb\clftsWidth3\clwWidth6378\clshdrawnil \cellx9861\row \ltrrow}\pard \ltrpar\ql \fi-285\li342\ri0\nowidctlpar\intbl
+\tx57\tx252\tx513\tx627\tx792\tx1782\tx1872\tx2010\tx2142\tx2238\tx2502\tx2592\tx2772\wrapdefault\faauto\adjustright\rin0\lin342\pararsid10450314 {\rtlch\fcs1 \af0\afs22 \ltrch\fcs0 \fs22\insrsid9574070\charrsid14373447 1.7 Numar doctoranzi:\cell
+}\pard \ltrpar\ql \fi-285\li0\ri0\nowidctlpar\intbl\tx57\tx252\tx792\tx1782\tx1872\tx2010\tx2142\tx2238\tx2502\tx2592\tx2772\wrapdefault\faauto\adjustright\rin0\lin0\pararsid10450314 {\rtlch\fcs1 \af0\afs18 \ltrch\fcs0
+\fs18\insrsid8719427\charrsid14373447 }{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\insrsid14373447\charrsid14373447 }{\field\flddirty{\*\fldinst {\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\insrsid1274673 FORMTEXT }{\rtlch\fcs1 \af0\afs18 \ltrch\fcs0
+\fs18\insrsid1713643 {\*\datafield 0008040000000000000000000130000000000000000000}{\*\formfield{\fftype0\fftypetxt1\ffmaxlen4{\*\ffformat 0}}}}}{\fldrslt {\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\lang1024\langfe1024\noproof\insrsid1274673 \u8194\'20\u8194
+\'20\u8194\'20\u8194\'20}}}\sectd \ltrsect\psz9\linex0\headery576\footery288\colsx708\endnhere\sectdefaultcl\sectrsid1713643\sftnbj {\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\insrsid9574070\charrsid14373447 \cell }\pard \ltrpar
+\ql \li0\ri0\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af0\afs18 \ltrch\fcs0 \fs18\insrsid9574070\charrsid14373447 \trowd \irow6\irowband6\lastrow \ltrrow\ts11\trqc\trgaph14\trrh346\trleft-61\trbrdrt
+\brdrs\brdrw5 \trbrdrl\brdrs\brdrw5 \trbrdrb\brdrs\brdrw5 \trbrdrr\brdrs\brdrw5 \trbrdrh\brdrs\brdrw5 \trbrdrv\brdrs\brdrw5
+\trftsWidth3\trwWidth9922\trftsWidthB3\trftsWidthA3\trspdl21\trspdt21\trspdb21\trspdr21\trspdfl3\trspdft3\trspdfb3\trspdfr3\trpaddl14\trpaddt14\trpaddb14\trpaddr14\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblind0\tblindtype3 \clvertalt\clbrdrt
+\brdrs\brdrw5 \clbrdrl\brdrs\brdrw5 \clbrdrb\brdrs\brdrw5 \clbrdrr\brdrs\brdrw5 \cltxlrtb\clftsWidth3\clwWidth3418\clshdrawnil \cellx3420\clvertalt\clbrdrt\brdrs\brdrw5 \clbrdrl\brdrs\brdrw5 \clbrdrb\brdrs\brdrw5 \clbrdrr\brdrs\brdrw5
+\cltxlrtb\clftsWidth3\clwWidth6378\clshdrawnil \cellx9861\row }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\adjustright\rin0\lin0\itap0\pararsid1713643 {\rtlch\fcs1 \af0 \ltrch\fcs0
+\lang1040\langfe1033\langnp1040\insrsid8061541\charrsid14373447
+\par }} \ No newline at end of file
diff --git a/sw/qa/core/data/rtf/fail/forcepoint-7.rtf b/sw/qa/core/data/rtf/fail/forcepoint-7.rtf
new file mode 100644
index 0000000000..e5b2273461
--- /dev/null
+++ b/sw/qa/core/data/rtf/fail/forcepoint-7.rtf
@@ -0,0 +1,517 @@
+{\rtf1\ânsi\ansicpg1252\deflang3081\ftnbj\uc1\deff0
+{\fonttbl{\f0 \fswiss \fcharset1 Arial;}{\f1 \froman \fcharset2 Times New Roman;}{\f2 \froman \fcharset2 Symbol;}{\f3 \fswiss \fcharset0 Times New Roman;}{\f4 \fswiss \fcharset2 Symbol;}{\f5 \froman \fcharset0 Arial;}{\f6 \fswiss \fcharset0 Lucida Sans;}{\f7 \fswiss \fcharset0 Arial;}{\f8 \fswiss \fcharset1 Wingdings;}}
+{\colortbl ;\red0\green0\blue0 ;\red255\green255\blue255 ;\red255\green255\blue128 ;\red0\green64\blue128 ;\red0\green0\blue255 ;\red0\green0\blue160 ;}
+{\stylesheet{\f0\fs20\cf1\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa0\sl0\shading0 Normal;}{\cs1\f0\fs24\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0 Default Paragraph Font;}{\cs2\f6\fs16\b\protect\cf1\cb3\chcbpat3\expnd0\expndtw0\charscalex100\dn0 SSBookmark;}{\s3\snext0\outlinelevel0\f0\fs32\b\cf1\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa0\sl0\shading0\outlinelevel0 Heading 1;}{\s4\snext0\outlinelevel1\f0\fs24\b\cf1\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa0\sl0\shading0\outlinelevel1 Heading 2;}{\s5\snext0\outlinelevel2\f0\fs24\b\cf1\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa0\sl0\shading0\outlinelevel2 Heading 3
+;}{\s6\snext0\outlinelevel3\f0\fs24\b\cf1\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa0\sl0\shading0\outlinelevel3 Heading 4;}{\s7\snext0\outlinelevel4\f0\fs24\b\i\cf1\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa0\sl0\shading0\outlinelevel4 Heading 5;}{\s8\snext0\outlinelevel5\f0\fs20\b\cf1\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa0\sl0\shading0\outlinelevel5 Heading 6;}{\s9\snext0\outlinelevel6\f0\fs24\cf4\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa0\sl0\shading0\outlinelevel6 Heading 7;}{\s10\snext0\outlinelevel7\f0\fs24\i\cf4\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa0\sl0\shading0\outlinelevel7 Heading 8
+;}{\s11\snext0\outlinelevel8\f0\fs22\cf4\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa0\sl0\shading0\outlinelevel8 Heading 9;}{\s12\snext0\f0\fs20\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa0\sl0\shading0 TOC 1;}{\s13\snext0\f0\fs20\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li180\ri0\sb0\sa0\sl0\shading0 TOC 2;}{\s14\snext0\f0\fs20\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li360\ri0\sb0\sa0\sl0\shading0 TOC 3;}{\s15\snext0\f0\fs20\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li540\ri0\sb0\sa0\sl0\shading0 TOC 4;}{\s16\snext0\f0\fs20\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li720\ri0\sb0\sa0\sl0\shading0 TOC 5
+;}{\s17\snext0\f0\fs24\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li900\ri0\sb0\sa0\sl0\shading0 TOC 6;}{\s18\snext0\f0\fs20\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li1080\ri0\sb0\sa0\sl0\shading0 TOC 7;}{\s19\snext0\f0\fs20\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li1260\ri0\sb0\sa0\sl0\shading0 TOC 8;}{\s20\snext0\f0\fs20\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li1440\ri0\sb0\sa0\sl0\shading0 TOC 9;}{\s21\snext0\f0\fs32\b\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb240\sa60\sl0\shading0\qc Title;}{\s22\snext0\f0\fs20\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi-360\li360\ri0\sb0\sa0\sl0\shading0 Numbered List
+;}{\s23\snext0\f0\fs20\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi-360\li360\ri0\sb0\sa0\sl0\shading0 Bulleted List;}{\s24\snext0\f0\fs20\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa120\sl0\shading0 Body Text;}{\s25\snext0\f0\fs18\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa120\sl0\sl480\slmult1\shading0 Body Text 2;}{\s26\snext0\f0\fs16\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa120\sl0\shading0 Body Text 3;}{\s27\snext0\f0\fs20\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa0\sl0\shading0 Note Heading;}{\s28\snext0\f0\fs20\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa0\sl0\shading0 Plain Text
+;}{\s29\snext0\f0\fs20\b\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa0\sl0\shading0 Strong;}{\s30\snext0\f0\fs20\i\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa0\sl0\shading0 Emphasis;}{\s31\snext0\f0\fs20\ul\cf5\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa0\sl0\shading0 Hyperlink;}{\s32\snext0\f0\fs20\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa0\sl0\shading0 Footer;}{\s33\snext0\f0\fs20\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa0\sl0\shading0 Header;}{\s34\snext0\f0\fs18\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa0\sl0\shading0 Code
+;}{\cs35\f0\fs20\i\cf4\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0 Field Label;}{\cs36\f0\fs22\b\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0 Table Heading;}{\cs37\f0\fs20\b\ul\cf0\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0 Object type;}{\s38\snext0\f0\fs20\b\i\cf6\cb2\chcbpat2\expnd0\expndtw0\charscalex100\dn0\fi0\li0\ri0\sb0\sa0\sl0\shading0 List Header;}{\s39\snext24\f0\fs20\i\cf5\fi0\li0\ri0\sb0\sa120\sl240 InfoBlue;}}
+{\*\revtbl{Unknown;}}
+{\*\listtable
+{\list\listtemplateid1
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'00.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'01.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'02.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'03.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'04.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'05.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'06.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'07.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'08.}{\levelnumbers \'01}}
+{\listname List1;}\listid1
+}
+{\list\listtemplateid2
+{\listlevel\levelnfc23\levelfollow0\levelstartat1{\leveltext \'01\'b7}{\levelnumbers}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'01.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'02.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'03.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'04.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'05.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'06.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'07.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'08.}{\levelnumbers \'01}}
+{\listname List2;}\listid2
+}
+{\list\listtemplateid3
+{\listlevel\levelnfc23\levelfollow0\levelstartat1{\leveltext \'01\'b7}{\levelnumbers}\f1\fs24}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'01.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'02.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'03.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'04.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'05.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'06.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'07.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'08.}{\levelnumbers \'01}}
+{\listname List3;}\listid3
+}
+{\list\listtemplateid4
+{\listlevel\levelnfc23\levelfollow0\levelstartat1{\leveltext \'01\'b7}{\levelnumbers}\f1\fs24}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'01.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'02.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'03.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'04.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'05.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'06.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'07.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'08.}{\levelnumbers \'01}}
+{\listname List4;}\listid4
+}
+{\list\listtemplateid5
+{\listlevel\levelnfc23\levelfollow0\levelstartat1{\leveltext \'01\'b7}{\levelnumbers}\f2\fs24}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'01.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'02.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'03.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'04.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'05.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'06.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'07.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'08.}{\levelnumbers \'01}}
+{\listname List5;}\listid5
+}
+{\list\listtemplateid6
+{\listlevel\levelnfc23\levelfollow0\levelstartat1{\leveltext \'01\'b7}{\levelnumbers}\f2\fs24}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'01.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'02.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'03.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'04.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'05.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'06.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'07.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'08.}{\levelnumbers \'01}}
+{\listname List6;}\listid6
+}
+{\list\listtemplateid7
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'00.}{\levelnumbers \'01}\f3\fs24}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'01.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'02.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'03.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'04.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'05.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'06.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'07.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'08.}{\levelnumbers \'01}}
+{\listname List7;}\listid7
+}
+{\list\listtemplateid8
+{\listlevel\levelnfc23\levelfollow0\levelstartat1{\leveltext \'01\'b7}{\levelnumbers}\f2\fs24}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'01.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'02.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'03.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'04.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'05.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'06.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'07.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'08.}{\levelnumbers \'01}}
+{\listname List8;}\listid8
+}
+{\list\listtemplateid9
+{\listlevel\levelnfc23\levelfollow0\levelstartat1{\leveltext \'01\'b7}{\levelnumbers}\f2\fs24}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'01.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'02.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'03.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'04.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'05.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'06.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'07.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'08.}{\levelnumbers \'01}}
+{\listname List9;}\listid9
+}
+{\list\listtemplateid10
+{\listlevel\levelnfc23\levelfollow0\levelstartat1{\leveltext \'01\'b7}{\levelnumbers}\f2\fs24}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'01.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'02.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'03.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'04.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'05.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'06.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'07.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'08.}{\levelnumbers \'01}}
+{\listname List10;}\listid10
+}
+{\list\listtemplateid11
+{\listlevel\levelnfc23\levelfollow0\levelstartat1{\leveltext \'01\'b7}{\levelnumbers}\f2\fs24}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'01.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'02.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'03.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'04.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'05.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'06.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'07.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'08.}{\levelnumbers \'01}}
+{\listname List11;}\listid11
+}
+{\list\listtemplateid12
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'00.}{\levelnumbers \'01}\b}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'03\'00.\'01}{\levelnumbers \'01\'03}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'05\'00.\'01.\'02}{\levelnumbers \'01\'03\'05}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'07\'00.\'01.\'02.\'03}{\levelnumbers \'01\'03\'05\'07}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'09\'00.\'01.\'02.\'03.\'04}{\levelnumbers \'01\'03\'05\'07\'09}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'b\'00.\'01.\'02.\'03.\'04.\'05}{\levelnumbers \'01\'03\'05\'07\'09\'b}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'d\'00.\'01.\'02.\'03.\'04.\'05.\'06}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'f\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'11\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07.\'08}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f\'11}}
+{\listname List477861859_1;}\listid477861859
+}
+{\list\listtemplateid13
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'00.}{\levelnumbers \'01}\b}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'03\'00.\'01}{\levelnumbers \'01\'03}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'05\'00.\'01.\'02}{\levelnumbers \'01\'03\'05}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'07\'00.\'01.\'02.\'03}{\levelnumbers \'01\'03\'05\'07}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'09\'00.\'01.\'02.\'03.\'04}{\levelnumbers \'01\'03\'05\'07\'09}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'b\'00.\'01.\'02.\'03.\'04.\'05}{\levelnumbers \'01\'03\'05\'07\'09\'b}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'d\'00.\'01.\'02.\'03.\'04.\'05.\'06}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'f\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'11\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07.\'08}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f\'11}}
+{\listname List735301812_1;}\listid735301812
+}
+{\list\listtemplateid14
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'00.}{\levelnumbers \'01}\b}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'03\'00.\'01}{\levelnumbers \'01\'03}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'05\'00.\'01.\'02}{\levelnumbers \'01\'03\'05}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'07\'00.\'01.\'02.\'03}{\levelnumbers \'01\'03\'05\'07}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'09\'00.\'01.\'02.\'03.\'04}{\levelnumbers \'01\'03\'05\'07\'09}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'b\'00.\'01.\'02.\'03.\'04.\'05}{\levelnumbers \'01\'03\'05\'07\'09\'b}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'d\'00.\'01.\'02.\'03.\'04.\'05.\'06}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'f\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'11\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07.\'08}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f\'11}}
+{\listname List735310515_1;}\listid735310515
+}
+{\list\listtemplateid15
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'00.}{\levelnumbers \'01}\b}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'03\'00.\'01}{\levelnumbers \'01\'03}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'05\'00.\'01.\'02}{\levelnumbers \'01\'03\'05}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'07\'00.\'01.\'02.\'03}{\levelnumbers \'01\'03\'05\'07}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'09\'00.\'01.\'02.\'03.\'04}{\levelnumbers \'01\'03\'05\'07\'09}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'b\'00.\'01.\'02.\'03.\'04.\'05}{\levelnumbers \'01\'03\'05\'07\'09\'b}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'d\'00.\'01.\'02.\'03.\'04.\'05.\'06}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'f\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'11\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07.\'08}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f\'11}}
+{\listname List735674015_1;}\listid735674015
+}
+{\list\listtemplateid16
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'01\'00}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'03\'00.\'01}{\levelnumbers \'01\'03}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'05\'00.\'01.\'02}{\levelnumbers \'01\'03\'05}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'07\'00.\'01.\'02.\'03}{\levelnumbers \'01\'03\'05\'07}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'09\'00.\'01.\'02.\'03.\'04}{\levelnumbers \'01\'03\'05\'07\'09}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'b\'00.\'01.\'02.\'03.\'04.\'05}{\levelnumbers \'01\'03\'05\'07\'09\'b}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'d\'00.\'01.\'02.\'03.\'04.\'05.\'06}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'f\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'11\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07.\'08}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f\'11}}
+{\listname List366130062_1;}\listid735674016
+}
+{\list\listtemplateid17
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'01\'00}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'03\'00.\'01}{\levelnumbers \'01\'03}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'05\'00.\'01.\'02}{\levelnumbers \'01\'03\'05}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'07\'00.\'01.\'02.\'03}{\levelnumbers \'01\'03\'05\'07}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'09\'00.\'01.\'02.\'03.\'04}{\levelnumbers \'01\'03\'05\'07\'09}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'b\'00.\'01.\'02.\'03.\'04.\'05}{\levelnumbers \'01\'03\'05\'07\'09\'b}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'d\'00.\'01.\'02.\'03.\'04.\'05.\'06}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'f\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'11\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07.\'08}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f\'11}}
+{\listname List366148531_1;}\listid735674017
+}
+{\list\listtemplateid18
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'01\'00}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'03\'00.\'01}{\levelnumbers \'01\'03}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'05\'00.\'01.\'02}{\levelnumbers \'01\'03\'05}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'07\'00.\'01.\'02.\'03}{\levelnumbers \'01\'03\'05\'07}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'09\'00.\'01.\'02.\'03.\'04}{\levelnumbers \'01\'03\'05\'07\'09}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'b\'00.\'01.\'02.\'03.\'04.\'05}{\levelnumbers \'01\'03\'05\'07\'09\'b}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'d\'00.\'01.\'02.\'03.\'04.\'05.\'06}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'f\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'11\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07.\'08}{\levelnumbers \'01\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'03\'05\'07\'09\'b\'d\'f\'11}}
+{\listname List366155203_1;}\listid735674018
+}
+{\list\listtemplateid19
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'01\'00}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'03\'00.\'01}{\levelnumbers \'01\'03}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'05\'00.\'01.\'02}{\levelnumbers \'01\'03\'05}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'07\'00.\'01.\'02.\'03}{\levelnumbers \'01\'03\'05\'07}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'09\'00.\'01.\'02.\'03.\'04}{\levelnumbers \'01\'03\'05\'07\'09}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'b\'00.\'01.\'02.\'03.\'04.\'05}{\levelnumbers \'01\'03\'05\'07\'09\'b}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'d\'00.\'01.\'02.\'03.\'04.\'05.\'06}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'f\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'11\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07.\'08}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f\'11}}
+{\listname ;}\listid735674019
+}
+{\list\listtemplateid20
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'00.}{\levelnumbers \'01}\b}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'03\'00.\'01}{\levelnumbers \'01\'03}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'05\'00.\'01.\'02}{\levelnumbers \'01\'03\'05}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'07\'00.\'01.\'02.\'03}{\levelnumbers \'01\'03\'05\'07}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'09\'00.\'01.\'02.\'03.\'04}{\levelnumbers \'01\'03\'05\'07\'09}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'b\'00.\'01.\'02.\'03.\'04.\'05}{\levelnumbers \'01\'03\'05\'07\'09\'b}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'d\'00.\'01.\'02.\'03.\'04.\'05.\'06}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'f\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'11\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07.\'08}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f\'11}}
+{\listname List434687953_1;}\listid735674020
+}
+{\list\listtemplateid21
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'01\'00}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'03\'00.\'01}{\levelnumbers \'01\'03}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'05\'00.\'01.\'02}{\levelnumbers \'01\'03\'05}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'07\'00.\'01.\'02.\'03}{\levelnumbers \'01\'03\'05\'07}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'09\'00.\'01.\'02.\'03.\'04}{\levelnumbers \'01\'03\'05\'07\'09}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'b\'00.\'01.\'02.\'03.\'04.\'05}{\levelnumbers \'01\'03\'05\'07\'09\'b}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'d\'00.\'01.\'02.\'03.\'04.\'05.\'06}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'f\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'11\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07.\'08}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f\'11}}
+{\listname List435828312_1;}\listid735674021
+}
+{\list\listtemplateid22
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'01\'00}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'03\'00.\'01}{\levelnumbers \'01\'03}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'05\'00.\'01.\'02}{\levelnumbers \'01\'03\'05}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'07\'00.\'01.\'02.\'03}{\levelnumbers \'01\'03\'05\'07}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'09\'00.\'01.\'02.\'03.\'04}{\levelnumbers \'01\'03\'05\'07\'09}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'b\'00.\'01.\'02.\'03.\'04.\'05}{\levelnumbers \'01\'03\'05\'07\'09\'b}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'d\'00.\'01.\'02.\'03.\'04.\'05.\'06}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d}}ô {\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'f\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'11\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07.\'08}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f\'11}}
+{\listname List435835406_1;}\listid735674022
+}
+{\list\listtemplateid23
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'01\'00}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'03\'00.\'01}{\levelnumbers \'01\'03}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'05\'00.\'01.\'02}{\levelnumbers \'01\'03\'05}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'07\'00.\'01.\'02.\'03}{\levelnumbers \'01\'03\'05\'07}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'09\'00.\'01.\'02.\'03.\'04}{\levelnumbers \'01\'03\'05\'07\'09}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'b\'00.\'01.\'02.\'03.\'04.\'05}{\levelnumbers \'01\'03\'05\'07\'09\'b}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'d\'00.\'01.\'02.\'03.\'04.\'05.\'06}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'f\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'11\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07.\'08}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f\'11}}
+{\listname List435856328_1;}\listid735674023
+}
+{\list\listtemplateid24
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'01\'00}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'03\'00.\'01}{\levelnumbers \'01\'03}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'05\'00.\'01.\'02}{\levelnumbers \'01\'03\'05}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'07\'00.\'01.\'02.\'03}{\levelnumbers \'01\'03\'05\'07}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'09\'00.\'01.\'02.\'03.\'04}{\levelnumbers \'01\'03\'05\'07\'09}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'b\'00.\'01.\'02.\'03.\'04.\'05}{\levelnumbers \'01\'03\'05\'07\'09\'b}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'d\'00.\'01.\'02.\'03.\'04.\'05.\'06}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'f\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07}{\levelnumbers \'01'03\'05\'07\'09\'b\'d\'f}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'11\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07.\'08}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f\'11}}
+{\listname ;}\listid735674024
+}
+{\list\listtemplateid25
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'01\'00}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'03\'00.\'01}{\levelnumbers \'01\'03}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'05\'00.\'01.\'02}{\levelnumbers \'01\'03\'05}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'07\'00.\'01.\'02.\'03}{\levelnumbers \'01\'03\'05\'07}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'09\'00.\'01.\'02.\'03.\'04}{\levelnumbers \'01\'03\'05\'07\'09}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'b\'00.\'01.\'02.\'03.\'04.\'05}{\levelnumbers \'01\'03\'05\'07\'09\'b}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'d\'00.\'01.\'02.\'03.\'04.\'05.\'06}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'f\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'11\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07.\'08}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f\'11}}
+{\listname List437350656_1;}\listid735674025
+}
+{\list\listtemplateid26
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'01\'00}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'03\'00.\'01}{\levelnumbers \'01\'03}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'05\'00.\'01.\'02}{\levelnumbers \'01\'03\'05}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'07\'00.\'01.\'02.\'03}{\levelnumbers \'01\'03\'05\'07}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'09\'00.\'01.\'02.\'03.\'04}{\levelnumbers \'01\'03\'05\'07\'09}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'b\'00.\'01.\'02.\'03.\'04.\'05}{\levelnumbers \'01\'03\'05\'07\'09\'b}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'d\'00.\'01.\'02.\'03.\'04.\'05.\'06}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'f\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'11\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07.\'08}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f\'11}}
+{\listname List437406078_1;}\listid735674026
+}
+{\list\listtemplateid27
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'01\'00}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'03\'00.\'01}{\levelnumbers \'01\'03}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'05\'00.\'01.\'02}{\levelnumbers \'01\'03\'05}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'07\'00.\'01.\'02.\'03}{\levelnumbers \'01\'03\'05\'07}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'09\'00.\'01.\'02.\'03.\'04}{\levelnumbers \'01\'03\'05\'07\'09}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'b\'00.\'01.\'02.\'03.\'04.\'05}{\levelnumbers \'01\'03\'05\'07\'09\'b}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'d\'00.\'01.\'02.\'03.\'04.\'05.\'06}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'f\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'11\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07.\'08}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f\'11}}
+{\listname List36741109_1;}\listid735674027
+}
+{\list\listtemplateid28
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'01\'00}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'03\'00.\'01}{\levelnumbers \'01\'03}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'05\'00.\'01.\'02}{\levelnumbers \'01\'03\'05}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'07\'00.\'01.\'02.\'03}{\levelnumbers \'01\'03\'05\'07}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'09\'00.\'01.\'02.\'03.\'04}{\levelnumbers \'01\'03\'05\'07\'09}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'b\'00.\'01.\'02.\'03.\'04.\'05}{\levelnumbers \'01\'03\'05\'07\'09\'b}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'d\'00.\'01.\'02.\'03.\'04.\'05.\'06}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'f\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'11\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07.\'08}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f\'11}}
+{\listname List36766656_1;}\listid735674028
+}
+{\list\listtemplateid29
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'01\'00}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'03\'00.\'01}{\levelnumbers \'01\'03}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'05\'00.\'01.\'02}{\levelnumbers \'01\'03\'05}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'07\'00.\'01.\'02.\'03}{\levelnumbers \'01\'03\'05\'07}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'09\'00.\'01.\'02.\'03.\'04}{\levelnumbers \'01\'03\'05\'07\'09}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'b\'00.\'01.\'02.\'03.\'04.\'05}{\levelnumbers \'01\'03\'05\'07\'09\'b}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'d\'00.\'01.\'02.\'03.\'04.\'05.\'06}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'f\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'11\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07.\'08}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f\'11}}
+{\listname List-2028665468_1;}\listid735674029
+}
+{\list\listtemplateid30
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'01\'00}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'03\'00.\'01}{\levelnumbers \'01\'03}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'05\'00.\'01.\'02}{\levelnumbers \'01\'03\'05}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'07\'00.\'01.\'02.\'03}{\levelnumbers \'01\'03\'05\'07}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'09\'00.\'01.\'02.\'03.\'04}{\levelnumbers \'01\'03\'05\'07\'09}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'b\'00.\'01.\'02.\'03.\'04.\'05}{\levelnumbers \'01\'03\'05\'07\'09\'b}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'d\'00.\'01.\'02.\'03.\'04.\'05.\'06}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'f\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'11\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07.\'08}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f\'11}}
+{\listname List-1965950843_1;}\listid735674030
+}
+{\list\listtemplateid31
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'01\'00}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'03\'00.\'01}{\levelnumbers \'01\'03}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'05\'00.\'01.\'02}{\levelnumbers \'01\'03\'05}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'07\'00.\'01.\'02.\'03}{\levelnumbers \'01\'03\'05\'07}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'09\'00.\'01.\'02.\'03.\'04}{\levelnumbers \'01\'03\'05\'07\'09}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'b\'00.\'01.\'02.\'03.\'04.\'05}{\levelnumbers \'01\'03\'05\'07\'09\'b}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'d\'00.\'01.\'02.\'03.\'04.\'05.\'06}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'f\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'11\'00.\'01.\'02.\'03.\'04.\'05.\'06.\'07.\'08}{\levelnumbers \'01\'03\'05\'07\'09\'b\'d\'f\'11}}
+{\listname List-1965798031_1;}\listid735674031
+}
+}
+{\*\listoverridetable
+{\listoverride\listid735674026\listoverridecount9
+{\lfolevel\listoverrideformat\listoverridestartat
+{\listlevel\levelnfc23\levelfollow0\levelstartat1{\leveltext \'01\'b7}{\levelnumbers}\f4\fcs1\f4\af4\fcs0\rtlch\f4\af4\ltrch}
+}
+{\lfolevel\listoverrideformat\listoverridestartat
+{\listlevel\levelnfc23\levelfollow0\levelstartat1{\leveltext \'01\'b7}{\levelnumbers}\f4\fcs1\f4\af4\fcs0\rtlch\f4\af4\ltrch}
+}
+{\lfolevel\listoverrideformat\listoverridestartat
+{\listlevel\levelnfc23\levelfollow0\levelstartat1{\leveltext \'01\'b7}{\levelnumbers}\f4\fcs1\f4\af4\fcs0\rtlch\f4\af4\ltrch}
+}
+{\lfolevel\listoverrideformat\listoverridestartat
+{\listlevel\levelnfc23\levelfollow0\levelstartat1{\leveltext \'01\'b7}{\levelnumbers}\f4\fcs1\f4\af4\fcs0\rtlch\f4\af4\ltrch}
+}
+{\lfolevel\listoverrideformat\listoverridestartat
+{\listlevel\levelnfc23\levelfollow0\levelstartat1{\leveltext \'01\'b7}{\levelnumbers}\f4\fcs1\f4\af4\fcs0\rtlch\f4\af4\ltrch}
+}
+{\lfolevel\listoverrideformat\listoverridestartat
+{\listlevel\levelnfc23\levelfollow0\levelstartat1{\leveltext \'01\'b7}{\levelnumbers}\f4\fcs1\f4\af4\fcs0\rtlch\f4\af4\ltrch}
+}
+{\lfolevel\listoverrideformat\listoverridestartat
+{\listlevel\levelnfc23\levelfollow0\levelstartat1{\leveltext \'01\'b7}{\levelnumbers}\f4\fcs1\f4\af4\fcs0\rtlch\f4\af4\ltrch}
+}
+{\lfolevel\listoverrideformat\listoverridestartat
+{\listlevel\levelnfc23\levelfollow0\levelstartat1{\leveltext \'01\'b7}{\levelnumbers}\f4\fcs1\f4\af4\fcs0\rtlch\f4\af4\ltrch}
+}
+{\lfolevel\listoverrideformat\listoverridestartat
+{\listlevel\levelnfc23\levelfollow0\levelstartat1{\leveltext \'01\'b7}{\levelnumbers}\f4\fcs1\f4\af4\fcs0\rtlch\f4\af4\ltrch}
+}
+\ls1}
+}
+\paperw11908\paperh16833\margl1440\margr1440\margt1440\margb1440\headery720\footery720\nogrowautofit\deftab720\formshade\fet4\aenddoc\aftnnrlc\pgbrdrhead\pgbrdrfoot
+\sectd\pgwsxn12240\pghsxn15840\titlepg\marglsxn1440\margrsxn1440\margtsxn1440\margbsxn1440\headery720\footery720\sbkpage\pgnstarts1\pgnrestart\pgndec
+\plain\plain\f0\fs20
+{\footer\pard\plain\f0\fs20\plain\f0\fs20\loch \par
+\plain\f0\fs20}
+{\header\pard\plain\f0\fs20\plain\f0\fs20\loch \par
+\plain\f0\fs20}
+{\headerf\pard\plain\f0\fs20\plain\f0\fs20\loch \par
+\plain\f0\fs20}
+\li108\qc\plain\f0\fs20\plain\f5\fs20\lang4105\hich\f5\dbch\f5\loch\f5\fs20\par
+\par
+\par
+\par
+\li0\ql\plain\f0\fs20{\*\bkmkstart BKM_33fd3768_22f8_4de1_91d2_533133defa34}{\*\bkmkend BKM_33fd3768_22f8_4de1_91d2_533133defa34}{\*\bkmkstart Test1}{\*\bkmkend Test1}{\*\bkmkstart BKM_AB2df357_B3ca_4a2b_86fb_B32f0a1ff7fe}{\*\bkmkend BKM_AB2df357_B3ca_4a2b_86fb_B32f0a1ff7fe}\plain\f3\fs20\lang4105\hich\f3\dbch\f3\loch\f3\cf1\fs20\par
+\trowd\trgaph60\trleft0\trrh288\trkeep
+\clvertalc\clbrdrt\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\clshdng1000\cellx9360
+\pard\intbl\ssparaaux0\s0\ql\plain\f0\fs20\plain\f5\fs20\lang1033\hich\f5\dbch\f5\loch\f5\cf1\fs20\b\loch Scenario\cell
+\plain\f5\fs20\lang1033\hich\f5\dbch\f5\loch\f5\cf1\fs20\intbl\row
+\trowd\trgaph60\trleft0\trrh676
+\clvertalt\clvmgf\cellx630
+\clvertalt\cellx9360
+\pard\intbl\ssparaaux0\s0\li360\ri90\sb40\qr\plain\f0\fs20\plain\f7\fs20\cell
+\pard\intbl\ssparaaux0\s0\sb40\ql\plain\f0\fs20\plain\f5\fs20\lang4105\hich\f5\dbch\f5\loch\f5\cf1\fs20\par
+\pard\intbl\itap2\ssparaaux0\s0\sb40\sa40\ql\plain\f0\fs20\plain\f5\fs20\lang3081\hich\f5\dbch\f5\loch\f5\cf1\fs20\b\protect\loch Basic Path\plain\f5\fs20\lang4105\hich\f5\dbch\f5\loch\f5\cf1\fs20\loch \plain\f5\fs20\lang4105\hich\f5\dbch\f5\loch\f5\cf1\fs20\b\loch (\plain\f5\fs20\lang3081\hich\f5\dbch\f5\loch\f5\cf1\fs20\b\i\protect\loch Basic Path\plain\f5\fs20\lang4105\hich\f5\dbch\f5\loch\f5\cf1\fs20\b\loch )\nestcell{\nonesttables\par}
+\intbl\itap2
+{{\*\nesttableprops\trowd\trgaph60\trleft0
+\clvertalt\clbrdrt\brdrs\brdrw1\clbrdrb\brdrs\brdrw1\clshdng1000\clcbpat2\cellx8610
+\nestrow}{\nonesttables\par}}
+\trowd\trgaph60\trleft0\trrh676
+\clvertalt\clvmgf\cellx630
+\clvertalt\cellx9360
+\pard\intbl\ssparaaux0\s0\ql\plain\f0\fs20\plain\f5\fs20\lang4105\hich\f5\dbch\f5\loch\f5\cf1\fs20\par
+\cell
+\intbl\row
+\trowd\trgaph60\trleft0\trrh676
+\clvertalt\clvmrg\cellx630
+\clvertalt\clvmgf\cellx9360
+\pard\intbl\ssparaaux0\s0{\pntext\pard\plain\f4\fs20 \'b7\tab}{\*\pn\pnlvlblt\ls1\ilvl0\pnhang\pnf0{\pntxtb \'b7}}\ls1\ilvl0\fi-180\li360\sb40\qr\plain\f0\fs20\plain\f7\fs20\lang4105\hich\f7\dbch\f7\loch\f7\cf1\ulc1\fs20\cell
+\pard\intbl\itap2\ssparaaux0\s0{\pntext\pard\plain\f4\fs20 \'b7\tab}{\*\pn\pnlvlblt\ls1\ilvl0\pnhang\pnf0{\pntxtb \'b7}}\ls1\ilvl0\fi-180\li360\sb40\qr\plain\f0\fs20\plain\f7\fs20\lang4105\hich\f7\dbch\f7\loch\f7\cf1\ulc1\fs20\nestcell{\nonesttables\par}
+\pard\intbl\itap2\ssparaaux0\s0\ql\plain\f0\fs20{\*\bkmkstart Pkg_Element_ElemScenario_Scenario_Structured_Begin}{\*\bkmkend Pkg_Element_ElemScenario_Scenario_Structured_Begin}\plain\f6\fs16\cs2\lang4105\hich\f6\dbch\f6\loch\f6\cf1\highlight3\cb3\chcbpat3\ulc1\fs16\b\protect\loch structured scenarios {\*\bkmkstart Pkg_Element_ElemScenario_Scenario_Structured_Begin_Inner}{\*\bkmkend Pkg_Element_ElemScenario_Scenario_Structured_Begin_Inner}\loch >\plain\f7\fs20\lang4105\hich\f7\dbch\f7\loch\f7\cf1\ulc1\fs20\par
+\par
+\plain\f5\fs20\lang3081\hich\f5\dbch\f5\loch\f5\cf1\ulc1\fs20\b\protect\loch 1\plain\f5\fs20\lang4105\hich\f5\dbch\f5\loch\f5\cf1\ulc1\fs20\b\loch .\plain\f7\fs20\lang4105\hich\f7\dbch\f7\loch\f7\cf1\ulc1\fs20\loch \plain\f5\fs20\lang3081\hich\f5\dbch\f5\loch\f5\cf1\ulc1\fs20\protect\loch user enter data\plain\f7\fs20\lang4105\hich\f7\dbch\f7\loch\f7\cf1\ulc1\fs20\par
+\pard\intbl\itap2\ssparaaux0\s0\tx720\ql\plain\f0\fs20\plain\f5\fs20\lang4105\hich\f5\dbch\f5\loch\f5\cf1\fs20\b\i\par
+\pard\intbl\itap3\ssparaaux0\s0\tx720\ql\plain\f0\fs20\plain\f5\fs20\lang4105\hich\f5\dbch\f5\loch\f5\cf1\fs20\ul\i\loch Rules \loch Referenced:\plain\f5\fs20\lang4105\hich\f5\dbch\f5\loch\f5\cf1\fs20\b\i\nestcell{\nonesttables\par}
+\pard\intbl\itap3\ssparaaux0\s0\ql\plain\f0\fs20\plain\f5\fs20\lang4105\hich\f5\dbch\f5\loch\f5\cf1\fs20\b\i\nestcell{\nonesttables\par}
+\intbl\itap3
+{{\*\nesttableprops\trowd\trgaph60\trleft0
+\clvertalt\clvmgf\clcbpat2\cellx1736
+\clvertalt\clcbpat2\cellx7910
+\nestrow}{\nonesttables\par}}
+\pard\intbl\itap-88\ssparaaux0\s0\tx720\ql\plain\f0\fs20\plain\f5\fs20\lang4105\hich\f5\dbch\f5\loch\f5\cf1\fs20\ul\i\loch Exc\loch epti\loch ons:\plain\f5\fs20\lang4105\hich\f5\dbch\f5\loch\f5\cf1\fs20\b\i\loch \nestcell{\nonesttables\par}
+\pard\intbl\itap3\ssparaaux0\s0\tx720\ql\plain\f0\fs20\plain\f5\fs20\lang4105\hich\f5\dbch\f5\loch\f5\cf1\fs20\nestcell{\nonesttables\par}
+\plain\f5\fs20\lang4105\hich\f5\dbch\f5\loch\f5\cf1\fs20\b\i\intbl\itap3
+{{\*\nesttableprops\trowd\trgaph60\trleft0\trrh676
+\clvertalt\clvmrg\clcbpat2\cellx532
+\clvertalt\clcbpat2\cellx7910
+\nestrow}{\nonesttables\par}}
+\pard\intbl\itap2\ssparaaux0\s0\tx720\ql\plain\f0\fs20\plain\f5\fs20\lang4105\hich\f5\dbch\f5\loch\f5\cf1\fs20\b\i\nestcell{\nonesttables\par}
+\intbl\itap2
+{{\*\nesttableprops\trowd\trgaph60\trleft0\trrh676
+\clvertalt\clcbpat2\cellx580
+\clvertalt\clcbpat2\cellx8610
+\nestrow}{\nonesttables\par}}
+\pard\intbl\itap2\ssparaaux0\s0{\pntext\pard\plain\f4\fs20 \'b7\tab}{\*\pn\pnlvlblt\ls1\ilvl0\pnhang\pnf0{\pntxtb \'b7}}\ls1\ilvl0\fi-180\li360\sb40\qr\plain\f0\fs20\plain\f7\fs20\lang4105\hich\f7\dbch\f7\loch\f7\cf1\ulc1\fs20\nestcell{\nonesttables\par}
+\pard\intbl\itap2\ssparaaux0\s0\ql\plain\f0\fs20{\*\bkmkstart Pkg_Element_ElemScenario_Scenario_Structured_Begin}{\*\bkmkend Pkg_Element_ElemScenario_Scenario_Structured_Begin}\plain\f6\fs16\cs2\lang4105\hich\f6\dbch\f6\loch\f6\cf1\highlight3\cb3\chcbpat3\ulc1\fs16\b\protect\loch structured scenarios {\*\bkmkstart Pkg_Element_ElemScenario_Scenario_Structured_Begin_Inner}{\*\bkmkend Pkg_Element_ElemScenario_Scenario_Structured_Begin_Inner}\loch >\plain\f7\fs20\lang4105\hich\f7\dbch\f7\loch\f7\cf1\ulc1\fs20\par
+\par
+\plain\f5\fs20\lang3081\hich\f5\dbch\f5\loch\f5\cf1\ulc1\fs20\b\protect\loch 2\plain\f5\fs20\lang4105\hich\f5\dbch\f5\loch\f5\cf1\ulc1\fs20\b\loch .\plain\f7\fs20\lang4105\hich\f7\dbch\f7\loch\f7\cf1\ulc1\fs20\loch \plain\f5\fs20\lang3081\hich\f5\dbch\f5\loch\f5\cf1\ulc1\fs20\protect\loch system returns data\plain\f7\fs20\lang4105\hich\f7\dbch\f7\loch\f7\cf1\ulc1\fs20\par
+\pard\intbl\itap2\ssparaaux0\s0\tx720\ql\plain\f0\fs20\plain\f5\fs20\lang4105\hich\f5\dbch\f5\loch\f5\cf1\fs20\b\i\par
+\pard\intbl\itap3\ssparaaux0\s0\tx720\ql\plain\f0\fs20\plain\f5\fs20\lang4105\hich\f5\dbch\f5\loch\f5\cf1\fs20\ul\i\loch Rules \loch Referenced:\plain\f5\fs20\lang4105\hich\f5\dbch\f5\loch\f5\cf1\fs20\b\i\nestcell{\nonesttables\par}
+\pard\intbl\itap3\ssparaaux0\s0\ql\plain\f0\fs20\plain\f5\fs20\lang4105\hich\f5\dbch\f5\loch\f5\cf1\fs20\b\i\nestcell{\nonesttables\par}
+\intbl\itap3
+{{\*\nesttableprops\trowd\trgaph60\trleft0
+\clvertalt\clvmgf\clcbpat2\cellx1736
+\clvertalt\clcbpat2\cellx7910
+\nestrow}{\nonesttables\par}}
+\pard\intbl\itap3\ssparaaux0\s0\tx720\ql\plain\f0\fs20\plain\f5\fs20\lang4105\hich\f5\dbch\f5\loch\f5\cf1\fs20\ul\i\loch Exc\loch epti\loch ons:\plain\f5\fs20\lang4105\hich\f5\dbch\f5\loch\f5\cf1\fs20\b\i\loch \nestcell{\nonesttables\par}
+\pard\intbl\itap3\ssparaaux0\s0\tx720\ql\plain\f0\fs20\plain\f5\fs20\lang4105\hich\f5\dbch\f5\loch\f5\cf1\fs20\nestcell{\nonesttables\par}
+\plain\f5\fs20\lang4105\hich\f5\dbch\f5\loch\f5\cf1\fs20\b\i\intbl\itap3
+{{\*\nesttableprops\trowd\trgaph60\trleft0\trrh676
+\clvertalt\clvmrg\clcbpat2\cellx532
+\clvertalt\clcbpat2\cellx7910
+\nestrow}{\nonesttables\par}}
+\pard\intbl\itap2\ssparaaux0\s0\tx720\ql\plain\f0\fs20\plain\f5\fs20\lang4105\hich\f5\dbch\f5\loch\f5\cf1\fs20\b\i\nestcell{\nonesttables\par}
+\intbl\itap2
+{{\*\nesttableprops\trowd\trgaph60\trleft0\trrh676
+\clvertalt\clcbpat2\cellx580
+\clvertalt\clcbpat2\cellx8610
+\nestrow}{\nonesttables\par}}
+\trowd\trgaph60\trleft0\trrh676
+\clvertalt\clvmrg\cellx630
+\clvertalt\clvmgf\cellx9360
+\pard\intbl\ssparaaux0\s0\ql\plain\f0\fs20\plain\f7\fs20\cell
+\plain\f7\fs20\lang4105\hich\f7\dbch\f7\loch\f7\cf1\ulc1\fs20\intbl\row
+\trowd\trgaph60\trleft0\trrh676
+\clvertalt\clvmrg\cellx630
+\clvertalt\clvmrg\cellx9360
+\pard\intbl\ssparaaux0\s0{\pntext\pard\plain\f4\fs20 \'b7\tab}{\*\pn\pnlvlblt\ls1\ilvl0\pnhang\pnf0{\pntxtb \'b7}}\ls1\ilvl0\fi-180\li360\sb40\qr\plain\f0\fs20\plain\f5\fs20\lang4105\hich\f5\dbch\f5\loch\f5\cf1\fs20\cell
+\pard\intbl\ssparaaux0\s0\ql\plain\f0\fs20\plain\f5\fs20\lang4105\hich\f5\dbch\f5\loch\f5\cf1\fs20\cell
+\intbl\row
+\pard\ssparaaux0\s0\ql\plain\f0\fs20\plain\f3\fs20\lang3081\hich\f3\dbch\f3\loch\f3\cf1\fs20\par
+\plain\f7\fs20\par
+} \ No newline at end of file
diff --git a/sw/qa/core/data/rtf/fail/forcepoint-82.rtf b/sw/qa/core/data/rtf/fail/forcepoint-82.rtf
new file mode 100644
index 0000000000..54b1dee42c
--- /dev/null
+++ b/sw/qa/core/data/rtf/fail/forcepoint-82.rtf
@@ -0,0 +1,28 @@
+{\rtf1
+{\trowd
+\clbrdrl\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\clbrdrt\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\cellx2000
+\pard
+Text 1
+\itap0
+\cell
+\row}
+\pard
+\par
+\itap0
+{\trowd
+\clbrdrl\brdrs\brdrw10\clbrdrr\brdrs\brdrw10\clbrdrt\brdrs\brdrw10\clbrdrb\brdrs\brdrw10\cellx2000
+\pard
+Text 2
+\itap0
+\cell
+\row}
+\itap-1
+{\trowd
+\clbrdrl\brdrs\brdrw2147483649\clbrdrr\brdrs\brdrw9\clbrdrt\brdrs\brdrw10\cló brdrb\brdrs\brdrw185\cellx1000
+\nestro󠀩w}
+\itap0
+\cell
+\row}
+\itap0
+\par
+} \ No newline at end of file
diff --git a/sw/qa/core/data/rtf/fail/table-1.rtf b/sw/qa/core/data/rtf/fail/table-1.rtf
new file mode 100644
index 0000000000..c333a10378
--- /dev/null
+++ b/sw/qa/core/data/rtf/fail/table-1.rtf
Binary files differ
diff --git a/sw/qa/core/data/rtf/fail/table-2.rtf b/sw/qa/core/data/rtf/fail/table-2.rtf
new file mode 100644
index 0000000000..35e859b309
--- /dev/null
+++ b/sw/qa/core/data/rtf/fail/table-2.rtf
Binary files differ
diff --git a/sw/qa/core/data/rtf/fail/table-3.rtf b/sw/qa/core/data/rtf/fail/table-3.rtf
new file mode 100644
index 0000000000..ea07218bdc
--- /dev/null
+++ b/sw/qa/core/data/rtf/fail/table-3.rtf
Binary files differ
diff --git a/sw/qa/core/data/rtf/indeterminate/.gitignore b/sw/qa/core/data/rtf/indeterminate/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sw/qa/core/data/rtf/indeterminate/.gitignore
diff --git a/sw/qa/core/data/rtf/pass/CVE-2014-6357.rtf b/sw/qa/core/data/rtf/pass/CVE-2014-6357.rtf
new file mode 100644
index 0000000000..93fbc4021c
--- /dev/null
+++ b/sw/qa/core/data/rtf/pass/CVE-2014-6357.rtf
Binary files differ
diff --git a/sw/qa/core/data/rtf/pass/CVE-2015-0086.rtf b/sw/qa/core/data/rtf/pass/CVE-2015-0086.rtf
new file mode 100644
index 0000000000..c8fa7200f5
--- /dev/null
+++ b/sw/qa/core/data/rtf/pass/CVE-2015-0086.rtf
@@ -0,0 +1 @@
+2  ØHvõyúªòR+9B­ñu7˜K}^/^ TøêF½ÿî^rwBHzj‚SÒ_¶(/Ó¥1&Éýªü»ºŒÉà¬n%;˜¶ \ No newline at end of file
diff --git a/sw/qa/core/data/rtf/pass/CVE-2015-1651.rtf b/sw/qa/core/data/rtf/pass/CVE-2015-1651.rtf
new file mode 100644
index 0000000000..2a4f15efbd
--- /dev/null
+++ b/sw/qa/core/data/rtf/pass/CVE-2015-1651.rtf
Binary files differ
diff --git a/sw/qa/core/data/rtf/pass/CVE-2017-0199.rtf b/sw/qa/core/data/rtf/pass/CVE-2017-0199.rtf
new file mode 100644
index 0000000000..fb82a2b6cc
--- /dev/null
+++ b/sw/qa/core/data/rtf/pass/CVE-2017-0199.rtf
Binary files differ
diff --git a/sw/qa/core/data/rtf/pass/EDB-38031-1.rtf b/sw/qa/core/data/rtf/pass/EDB-38031-1.rtf
new file mode 100644
index 0000000000..2e3e2127df
--- /dev/null
+++ b/sw/qa/core/data/rtf/pass/EDB-38031-1.rtf
Binary files differ
diff --git a/sw/qa/core/data/rtf/pass/abi2128.rtf b/sw/qa/core/data/rtf/pass/abi2128.rtf
new file mode 100644
index 0000000000..270c675c7b
--- /dev/null
+++ b/sw/qa/core/data/rtf/pass/abi2128.rtf
@@ -0,0 +1,17 @@
+{\rtf1\ansi\ansicpg1252\deff0
+{\fonttbl
+{\f0\froman\fcharset0\fprq2\fttruetype Times New Roman;}}
+{\colortbl
+\red0\green0\blue0;
+\red255\green255\blue255;}
+{\stylesheet
+{\s2\sl240\slmult1\sbasedon1 Normal Clean;}
+{\s1\sl240\slmult1\f0\fs24 Normal;}}
+\kerning0\cf0\viewkind1\paperw12240\paperh15840\margl1440\margr1440\widowctl
+\sectd\sbknone\colsx360\headery0\footery0
+\pard\qj\sl240\slmult1{\f0\fs24\lang1033{\*\listtag0}the big green dog bit the little afgan. the big green dog bit the little afgan. the big green dog bit the little afgan. the big green dog bit the little afgan. the big green dog bit the little afgan. the big green dog bit the little afgan. the big green dog bit the little afgan. the big green dog bit the little afgan. the big green dog bit the little afgan. the big green dog bit the little afgan. the big green dog bit the little afgan.}
+{\header
+\par\pard\sl240\slmult1
+\par\pard\sl240\slmult1
+\par\pard\sl240\slmult1
+\par\pard\s2\sl240\slmult1{\f0\fs24\lang1033{\*\listtag0}Hi this is the header}}} \ No newline at end of file
diff --git a/sw/qa/core/data/rtf/pass/abi2720.rtf b/sw/qa/core/data/rtf/pass/abi2720.rtf
new file mode 100644
index 0000000000..a337bda226
--- /dev/null
+++ b/sw/qa/core/data/rtf/pass/abi2720.rtf
@@ -0,0 +1,259 @@
+{\rtf1
+\pard\plain \widctlpar\adjustright
+\fs20\lang1031\cgrid
+{\lang1024
+{\shpgrp
+{\*\shpinst\shpleft0\shptop0\shpright14175\shpbottom9071\shpfhdr0\shpbxcolumn\shpbypara\shpwr3\shpwrk0\shpfblwtxt0\shpz1\shplid1032
+{\sp
+{\sn groupLeft}
+{\sv 1418}
+}
+{\sp
+{\sn groupTop}
+{\sv 1418}
+}
+{\sp
+{\sn groupRight}
+{\sv 15593}
+}
+{\sp
+{\sn groupBottom}
+{\sv 10489}
+}
+{\sp
+{\sn fFlipH}
+{\sv 0}
+}
+{\sp
+{\sn fFlipV}
+{\sv 0}
+}
+{\sp
+{\sn lidRegroup}
+{\sv 0}
+}
+{\shp
+{\*\shpinst\shplid1037
+{\sp
+{\sn relLeft}
+{\sv 2856}
+}
+{\sp
+{\sn relTop}
+{\sv 4008}
+}
+{\sp
+{\sn relRight}
+{\sv 3216}
+}
+{\sp
+{\sn relBottom}
+{\sv 4176}
+}
+{\sp
+{\sn fRelFlipH}
+{\sv 0}
+}
+{\sp
+{\sn fRelFlipV}
+{\sv 0}
+}
+{\sp
+{\sn shapeType}
+{\sv 0}
+}
+{\sp
+{\sn geoRight}
+{\sv 360}
+}
+{\sp
+{\sn geoBottom}
+{\sv 168}
+}
+{\sp
+{\sn shapePath}
+{\sv 4}
+}
+{\sp
+{\sn pVerticies}
+{\sv 8;10;(168,168);(84,108);(0,48);(24,24);(48,0);(264,0);(312,24);(360,48);(336,108);(312,168)}
+}
+{\sp
+{\sn pSegmentInfo}
+{\sv 2;9;16384;44288;8193
+;44288;8193;44288;8193;44032;32768}
+}
+{\sp
+{\sn fFillOK}
+{\sv 1}
+}
+{\sp
+{\sn fFilled}
+{\sv 0}
+}
+{\sp
+{\sn lineEndArrowhead}
+{\sv 2}
+}
+{\sp
+{\sn lineEndArrowWidth}
+{\sv 1}
+}
+{\sp
+{\sn lineEndArrowLength}
+{\sv 0}
+}
+{\sp
+{\sn fArrowheadsOK}
+{\sv 1}
+}
+{\sp
+{\sn lidRegroup}
+{\sv 0}
+}
+}
+}
+}
+{\shprslt
+{\*\do\dobxcolumn\dobypara\dodhgt8193\dppolygon\dppolycount4\dpptx0\dppty0\dpptx14175\dppty0\dpptx14175\dppty9071\dpptx0\dppty9071\dpx0\dpy0\dpxsize14175\dpysize9071
+\dpfillfgcr255\dpfillfgcg255\dpfillfgcb255\dpfillbgcr255\dpfillbgcg255\dpfillbgcb255\dpfillpat1\dplinew15\dplinecor0\dplinecog0\dplinecob0}
+}
+}
+}
+{\page }
+{\lang1024
+{\shpgrp
+{\*\shpinst\shpleft0\shptop0\shpright14175\shpbottom9071\shpfhdr0\shpbxcolumn\shpbypara\shpwr3\shpwrk0\shpfblwtxt0\shpz2\shplid1038
+{\sp
+{\sn groupLeft}
+{\sv 1418}
+}
+{\sp
+{\sn groupTop}
+{\sv 1418}
+}
+{\sp
+{\sn groupRight}
+{\sv 15593}
+}
+{\sp
+{\sn groupBottom}
+{\sv 10489}
+}
+{\sp
+{\sn fFlipH}
+{\sv 0}
+}
+{\sp
+{\sn fFlipV}
+{\sv 0}
+}
+{\sp
+{\sn lidRegroup}
+{\sv 0}
+}
+{\shp
+{\*\shpinst\shplid1041
+{\sp
+{\sn relLeft}
+{\sv 8506}
+}
+{\sp
+{\sn relTop}
+{\sv 5954}
+}
+{\sp
+{\sn relRight}
+{\sv 15593}
+}
+{\sp
+{\sn relBottom}
+{\sv 10489}
+}
+{\sp
+{\sn fRelFlipH}
+{\sv 0}
+}
+{\sp
+{\sn fRelFlipV}
+{\sv 0}
+}
+{\sp
+{\sn shapeType}
+{\sv 202}
+}
+{\sp
+{\sn lTxid}
+{\sv 458752}
+}
+{\sp
+{\sn hspNext}
+{\sv 1041}
+}
+{\sp
+{\sn fFitShapeToText}
+{\sv 0}
+}
+{\shptxt \pard\plain
+\pard\plain \widctlpar\adjustright \f1\fs20\lang1031\cgrid
+{\f1\dn28
+{\pict
+{\*\picprop\shplid1025
+{\sp
+{\sn shapeType}
+{\sv 75}
+}
+{\sp
+{\sn fFlipH}
+{\sv 0}
+}
+{\sp
+{\sn fFlipV}
+{\sv 0}
+}
+{\sp
+{\sn pictureActive}
+{\sv 0}
+}
+{\sp
+{\sn fillColor}
+{\sv 268435473}
+}
+{\sp
+{\sn fFilled}
+{\sv 0}
+}
+{\sp
+{\sn fLine}
+{\sv 0}
+}
+}
+\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw1870\pich1199\picwgoal1060\pichgoal680\wmetafile8\bliptag-1230064263\blipupi-1583
+{\*\blipuid b6aeb57956b0ad18d349a83cd13b7dd7}
+010009000003700100000200150000000000050000000902000000000400000002010100050000000102ffffff0005000000090200000000040000002e011800
+05000000310201000000050000000b0200000000050000000c024004a0060e00000026060f001200ffffffff000008000000c0ffbaff6006fa030b0000002606
+0f000c004d617468547970650000e0000500000009020000000015000000fb0280fe0000000000009001010000000002001054696d6573204e657720526f6d61
+6e000000040000002d01000009000000320a80023400010000004300010109000000320a8002de04010000004100ea0015000000fb0220ff0000000000009001
+010000000002001054696d6573204e657720526f6d616e000023040000002d01010004000000f001000009000000320ad401d8050100000069003e0009000000
+320af50315030100000069003e0009000000320aee000403010000006e00700010000000fb0280fe0000000000009001000000020002001053796d626f6c0002
+040000002d01000004000000f001010009000000320a8002a401010000003d00d30010000000fb0220ff0000000000009001000000020002001053796d626f6c
+0002040000002d01010004000000f001000009000000320af5036a03010000003d007b0009000000320aee008303010000002d007b0010000000fb02c0fd0000
+000000009001000000020002001053796d626f6c0002040000002d01000004000000f001010009000000320ad702e20201000000e500980115000000fb0220ff
+0000000000009001000000000002001054696d6573204e657720526f6d616e000023040000002d01010004000000f001000009000000320af503e50301000000
+3100700009000000320aee00fd0301000000310070000a00000026060f000a00ffffffff01000000000010000000fb021000070000000000bc02000000000102022253797374656d0000040000002d01000004000000f0010100030000000000}
+}
+{\f1
+\par }
+}
+}
+}
+}
+{\shprslt
+{\*\do\dobxcolumn\dobypara\dodhgt8194\dppolygon\dppolycount4\dpptx0\dppty0\dpptx14175\dppty0\dpptx14175\dppty9071\dpptx0\dppty9071\dpx0\dpy0\dpxsize14175\dpysize9071
+\dpfillfgcr255\dpfillfgcg255\dpfillfgcb255\dpfillbgcr255\dpfillbgcg255\dpfillbgcb255\dpfillpat1\dplinew15\dplinecor0\dplinecog0\dplinecob0}
+}
+}
+}
+{
+\par }
+}
diff --git a/sw/qa/core/data/rtf/pass/abi3241.rtf b/sw/qa/core/data/rtf/pass/abi3241.rtf
new file mode 100644
index 0000000000..5bfec3d0ce
--- /dev/null
+++ b/sw/qa/core/data/rtf/pass/abi3241.rtf
@@ -0,0 +1,9 @@
+{\rtf1
+{\stylesheet
+{\sa120 Normal;}
+{\s6\sbasedon0 \snext0 heading 6;}
+}
+\pard\plain \s6
+If more than one reaction channel is to be considered, use the keyword
+\par
+}
diff --git a/sw/qa/core/data/rtf/pass/fdo54641.rtf b/sw/qa/core/data/rtf/pass/fdo54641.rtf
new file mode 100644
index 0000000000..25a3f7e598
--- /dev/null
+++ b/sw/qa/core/data/rtf/pass/fdo54641.rtf
@@ -0,0 +1,39 @@
+{\rtf1
+{\stylesheet
+{\s0\qj\widctlpar\f0\fs20 \snext0 Normal;}
+{\cs10 \additive\ssemihidden Default Paragraph Font;}
+{\s1\qc\sb240\sa120\keepn\f0\b\fs40 \sbasedon0\snext0 Part;}
+{\s2\ql\sb240\sa120\keepn\f0\b\fs40 \sbasedon0\snext0 heading 1;}
+{\s3\ql\sb240\sa120\keepn\f0\b\fs32 \sbasedon0\snext0 heading 2;}
+}
+\paperw11960\paperh16900\margl2500\margr2560\margt2520\margb1820\pgnstart0\widowctrl\qj\ftnbj\f0\aftnnar
+{\pard\plain\s20\qc\sb240\sa240\b\f0\fs36\sl240\slmult1 \fi0 De titel van het testfile\par
+\pard\plain\s21\qc\sa120\f0\fs20\sl240\slmult1 \sb120 \fi0 \chdate \par
+\pard\plain\s80\ql\sb240\sa120\keepn\f0\b\fs20\sl240\slmult1 \sb120 \fi0 Inhoudsopgave\par
+\pard\plain\s0\qj\widctlpar\f0\fs20\sl240\slmult1 \sb120 \fi0 \par
+{\field
+{\*\fldinst TOC \\o "1-3" }
+{\fldrslt }
+}
+\page
+\pard\plain\s0\qj\widctlpar\f0\fs20\sl240\slmult1 \sb180 \fi0
+{}
+\par
+\pard\plain\ql\sb240\sa120\keepn\f0\b\fs40\sl240\slmult1 \sb120 \fi0 Hoofdstuk 1\par
+\pard\plain\s2\ql\sb240\sa120\keepn\f0\b\fs40\sl240\slmult1 \sb360 \fi0 De eerste test\par
+\pard\plain\s0\qj\widctlpar\f0\fs20\sl240\slmult1 \sb360 \fi0 In dit hoofdstuk zullen de eerste tests uitgevoerd worden.\par
+\pard\plain\s3\ql\sb240\sa120\keepn\f0\b\fs32\sl240\slmult1 \sb360 \fi0 1.1 Figuren\par
+{\pard\plain\s31\qc\sb120\sa0\keep\widctlpar\f0\fs20\sl240\slmult1 \sb420 \fi0
+{\pict\picscalex92\picscaley92\piccropl0\piccropr0\piccropt0\piccropb0
+\picw20032\pich2725\picwgoal5357\pichgoal1545\pngblip\bliptag-1891142031
+{\*\blipuid 8f477671d3377e167ce61bb2e9de72f7}
+47494638396110001000d5ff00000000ffffffc0c0c0555f00ffffaafcfcfcf6f6f6eaeaeae6e6e6e4e4e4e3e3e3c2c2c2c1c1c1bcbcbcb5b5b5b3b3b3b0b0b0adadada5a5a5a2a2a2a1a1a19f9f9f9494948a8a8a8888888686867b7b7b6c6c6c5c5c5c4e4e4e4b4b4b4747474646463d3d3d3c3c3c2e2e2e2525251b1b1b18181810101009090906060603030300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021f90401000002002c0000000010001000000684408170482c0a06c8a4728924389f506833b281302a8e6b164b18103024c52111504cca67332102e0042e9a40d9319f8300a343c1200f54e47f7e2a00001e0b0a7d0d728a010d838400261a7c0d94947784252700127e9d159f6c8411140019080ea7a9a85f842122281612b1b3b25d6b1f29291d0fbbbdbc5d5e51c34e4cc64a46c94341003b
+}
+\par
+}
+\pard\plain\s0\qj\widctlpar\f0\fs20\sl240\slmult1 \sb240 \fi0 De test wordt gevormd door een enkele, simpele figuur
+[
+].\par
+\pard\plain\s3\ql\sb240\sa120\keepn\f0\b\fs32\sl240\slmult1 \sb360 \fi0 1.2 Tabellen\par
+}
+}
diff --git a/sw/qa/core/data/rtf/pass/fdo61638.rtf b/sw/qa/core/data/rtf/pass/fdo61638.rtf
new file mode 100644
index 0000000000..e85245b5e1
--- /dev/null
+++ b/sw/qa/core/data/rtf/pass/fdo61638.rtf
@@ -0,0 +1,31 @@
+{\rtf1
+{\mmath
+{\*\moMathPara
+{\*\moMath
+{\rtlch\fcs1 \af31507 \ltrch\fcs0 \i\f34\insrsid7877010 \hich\af34\dbch\af31505\loch\f34
+{\mr\mscr0\msty2 a}
+}
+{\rtlch\fcs1 \af31507 \ltrch\fcs0 \i\f34\insrsid7877010 \hich\af34\dbch\af31505\loch\f34
+{\mr\mscr0\msty2 =}
+}
+{\rtlch\fcs1 \af31507 \ltrch\fcs0 \i\f34\insrsid7877010 \hich\af34\dbch\af31505\loch\f34
+{\mr\mscr0\msty2 b}
+}
+{\rtlch\fcs1 \af31507 \ltrch\fcs0 \i\f34\insrsid7877010 \hich\af34\dbch\af31505\loch\f34
+{\mr\mscr0\msty2 +}
+}
+{\rtlch\fcs1 \af31507 \ltrch\fcs0 \i\f34\insrsid7877010 \hich\af34\dbch\af31505\loch\f34
+{\mr\mscr0\msty2 c}
+}
+{\rtlch\fcs1 \af31507 \ltrch\fcs0 \i\f34\insrsid7877010 \hich\af34\dbch\af31505\loch\f34
+{\mr\mscr0\msty2 +}
+}
+{\rtlch\fcs1 \af31507 \ltrch\fcs0 \i\f34\insrsid7877010 \hich\af34\dbch\af31505\loch\f34
+{\mr\mscr0\msty2 d}
+}
+{\rtlch\fcs1 \af31507 \ltrch\fcs0 \i\f34\insrsid7877010 .}
+}
+}
+}
+{\rtlch\fcs1 \af31507 \ltrch\fcs0 \insrsid7877010 \par }
+}
diff --git a/sw/qa/core/data/rtf/pass/fdo72204.rtf b/sw/qa/core/data/rtf/pass/fdo72204.rtf
new file mode 100644
index 0000000000..052a639323
--- /dev/null
+++ b/sw/qa/core/data/rtf/pass/fdo72204.rtf
@@ -0,0 +1,48 @@
+{\rtf1
+{\shpgrp
+{\*\shpinst\shpleft-950\shptop156\shpright1583\shpbottom2942\shpfhdr0\shpbxcolumn\shpbxignore\shpbypara\shpbyignore\shpwr3\shpwrk0\shpfblwtxt0\shpz0\shplid1036
+{\sp{\sn groupLeft}{\sv 1621}}
+{\sp{\sn groupTop}{\sv 2621}}
+{\sp{\sn groupRight}{\sv 4154}}
+{\sp{\sn groupBottom}{\sv 5407}}
+{\sp{\sn rotation}{\sv 0}}
+{\shp
+{\*\shpinst\shplid1037
+{\sp{\sn relLeft}{\sv 1621}}
+{\sp{\sn relTop}{\sv 2621}}
+{\sp{\sn relRight}{\sv 4154}}
+{\sp{\sn relBottom}{\sv 5092}}
+{\sp{\sn shapeType}{\sv 202}}
+{\shptxt \ltrpar \trowd
+\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cellx567
+\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cellx1134\clbrdrt\brdrtbl \clbrdrl\brdrnone \clbrdrb\brdrtbl \clbrdrr\brdrtbl
+\cellx1701\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\cellx2268\pard\plain \ltrpar\ql
+\intbl \rtlch \afs22\alang1025 \ltrch \lang1038\langfe1033\loch\hich\dbch\cgrid\langnp1038\langfenp1033
+{\rtlch \ltrch
+\hich\dbch\loch\f37 a)\cell }
+\pard \ltrpar\qc \intbl
+{\rtlch \ltrch
+\cell \cell \cell }
+\pard \ltrpar\ql \intbl
+{\rtlch \ltrch \trowd
+\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cellx567
+\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cellx1134\clbrdrt\brdrtbl \clbrdrl\brdrnone \clbrdrb\brdrtbl \clbrdrr\brdrtbl
+\cellx1701\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\cellx2268\row }
+\trowd \clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cellx567
+\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cellx1134\clbrdrt\brdrtbl \clbrdrl\brdrnone \clbrdrb\brdrtbl \clbrdrr\brdrtbl
+\cellx1701\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\cellx2268\pard \ltrpar\qc
+\intbl
+{\rtlch \ltrch \cell \cell \cell \cell }
+\pard \ltrpar\ql \intbl
+{\rtlch \ltrch \trowd
+\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cellx567
+\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cellx1134\clbrdrt\brdrtbl \clbrdrl\brdrnone \clbrdrb\brdrtbl \clbrdrr\brdrtbl
+\cellx1701\clbrdrt\brdrtbl \clbrdrl\brdrtbl \clbrdrb\brdrtbl \clbrdrr\brdrtbl \cltxlrtb\cellx2268\row }
+\pard \ltrpar\ql \itap0\par
+}
+}
+}
+}
+}
+\par
+}
diff --git a/sw/qa/core/data/rtf/pass/fdo78900.rtf b/sw/qa/core/data/rtf/pass/fdo78900.rtf
new file mode 100644
index 0000000000..d379735efa
--- /dev/null
+++ b/sw/qa/core/data/rtf/pass/fdo78900.rtf
@@ -0,0 +1,11 @@
+{\rtf1\ansi\ansicpg1252\deff0\deftab720
+\viewkind1\paperw11910\paperh16845\margl225\margr225\margt225\margb225\headery0\footery0
+{
+{\*\do\dobxpage\dobypage\dptxbx
+{\dptxbxtext\dpx227\dpy227\dpxsize11911\dpysize9709\dplinehollow
+{hello
+}
+}
+}
+\par}
+}
diff --git a/sw/qa/core/data/rtf/pass/fdo79384.rtf b/sw/qa/core/data/rtf/pass/fdo79384.rtf
new file mode 100644
index 0000000000..c9d6b33181
--- /dev/null
+++ b/sw/qa/core/data/rtf/pass/fdo79384.rtf
@@ -0,0 +1,6 @@
+{\rtf1
+{\fonttbl{\f5\fnil\fprq0\fcharset128 OpenSymbol;}}
+{\stylesheet
+{\*\cs35\snext35\hich\af5\dbch\af5\loch\f5 „M„p„‚„{„u„‚„ „ƒ„„y„ƒ„{„p;}
+}
+\par }
diff --git a/sw/qa/core/data/rtf/pass/fdo80924.rtf b/sw/qa/core/data/rtf/pass/fdo80924.rtf
new file mode 100644
index 0000000000..cbaeb442ce
--- /dev/null
+++ b/sw/qa/core/data/rtf/pass/fdo80924.rtf
@@ -0,0 +1,43 @@
+{\rtf1\ansi\ansicpg1252\uc1
+{\*\generator Microsoft Word 11.0.5604;}
+{\info{\author Crystal Reports}{\doccomm Powered By Crystal}}
+\pard\plain {
+\lang1024\langfe1024\noproof\insrsid10428813
+{\shp{\*\shpinst\shpleft306\shptop16065\shpright11251\shpbottom16065\shpfhdr0\shpbxpage\shpbxignore\shpbypage\shpbyignore\shpwr3\shpwrk0\shpfblwtxt1\shpz1\shplid1026
+{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn lineWidth}{\sv 12700}}{\sp{\sn fLine}{\sv 1}}{\sp{\sn posrelh}{\sv 1}}{\sp{\sn posrelv}{\sv 1}}{\sp{\sn fLayoutInCell}{\sv 0}}{\sp{\sn fBehindDocument}{\sv 1}}
+{\sp{\sn fLayoutInCell}{\sv 0}}}}
+}
+\pard
+{\shp{\*\shpinst\shpleft4920\shptop850\shpright6264\shpbottom1858\shpfhdr0\shpbxpage\shpbxignore\shpbypage\shpbyignore\shpwr3\shpwrk0\shpfblwtxt1\shpz2\shplid1027{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}
+{\sp{\sn pib}{\sv {\pict\picscalex30\picscaley30\piccropl0\piccropr0\piccropt0\piccropb0\picw7939\pich5953\picwgoal4501\pichgoal3375
+\jpegblip
+ffd8ffe000104a46494600010101004800480000ffe101604578696600004d4d002a000000080009010e00020000000100000000010f0002000000060000007a
+011000020000001500000080011200030000000100010000011a00050000000100000096011b0005000000010000009e01280003000000010002000001310002
+0000000c000000a68769000400000001000000b20000000043616e6f6e0043616e6f6e20506f77657253686f7420413531300000000000480000000100000048
+0000000147494d5020322e362e3131000009829a00050000000100000124829d0005000000010000012c88270003000000010000000090000007000000043032
+3130900300020000001400000134920a00050000000100000148928600070000000800000150a00000070000000430313030a001000300000001ffff00000000
+00000051eb85ffffffff0000000400000001323031313a30363a31322031393a32363a3436000000001000000001554e49434f444500ffdb0043000806060706
+05080707070909080a0c140d0c0b0b0c1912130f141d1a1f1e1d1a1c1c20242e2720222c231c1c2837292c30313434341f27393d38323c2e333432ffdb004301
+0909090c0b0c180d0d1832211c213232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232
+ffc0001108003c004003012200021101031101ffc4001a000002030101000000000000000000000004050203060100ffc4003210000201030302050302050500
+000000000102030004110512213151132241617106143242911523a1c1e17281b1d1f0ffc400190101010101010100000000000000000000010200030405ffc4
+001d110002020203010000000000000000000000010211213103225141ffda000c03010002110311003f007e1df6912a2c9e8372f27fdc509731bc571f731065
+8b1b668f180bcf0c3e3d7da99c6ca3cf24783ed5cbd1b6d8c91287232319ea3b7c57cc3d82cbdd5adecf62c9b9e50be6551d3e6975d7d49163f976ec47405985
+461fa6defa797c49e73264332a614007b64e71e993da8a6fa26d9b02459ca8f533e7fe055df1ad93d9e81edbea8831992270c060ed20d7351d76316ea6c9f6cb
+2379ba7007b50b7bf467dabaf812c881f254b9ca8f63eb54e816da6dd4d2e9978a535589cf926fc5d7b2907b7355d2ad076d0136b5746e15da77dcbd8fbf6ada
+0769144858052a0e3b8a51aae876a34b98ac31c4f1a92194739a274f995b4cb7594296f0c0233d7ff62a66d35686298dadc1958a89627e7aa9dbd7d0a9fed5c9
+199565555c323608cf0738ff001553b9824dc5778f6f37a54cb89e4dfbcf9941f4c71dea1942c86ff1acc9340764817c2970bc9c72323f7a7aba84aea4e0678e
+0f18acb5bec3acdeba070e1b1c0e09029c2baf86482aa71fa813fd3d6a65156298d3ee5a67db22a6d230ca4fe5599fa8fe985bb432443c2b98fcd6f32b727d42
+934c22994b30cb021b9214f1c7bfad1e2fa27b6922b91cc433b80f6c8c0ef5a2dc5e0cf3b10e8badaeb7612595f0116ab0a14911b8f1401f97cf7ab6cadd52d8
+44e780be50f80323af3e99a5b7f6f8d5edb53b3c7de6e2bb0ae04a30723fd445398d0f86889e424701b079aa963408b2662a049092c18ed200cd4236731c4f9c
+7246339aba1b83185049f7e7d4f7cd0f730cd736720b6f0dd8e498d9f6ab8edd29fa0cc83eb725bdd4a2d88f348497c641f807a579b59bb698399873fa71c0cf
+b502da16b0d3304b275009e0b00073e849a99d175a4600d8bf27960ca40f9e6bbd44e76c3df57ba38669cee1ea3028cd2f5dbcbabb4b090f8aae0e18e015e339
+f7ff00349a6d1355455678939e021917767f7a23e9bb37fe2c65b872823181b39e4fa1ed44a31a14dd9a2d4d360b62ea1b1386ebedd28a376890659d843fa8c9
+d71ff79a13584630c1b18bb8940c28f53d28a8bc4306638f3819219871f39e95c19d11631324061207dc6762b95cec61dc0f71fd69969f0d9ff0f8e2ba01655d
+d9c291ce4f208e71cd7a3b48597c464cbb1de5ba1cf1daaefb189433465e321b8d871d41a993148b25d26d76f98b0e47490f3f3533a4da642a028e0648ce78a5
+1717973671954999f613867e49c9c609edc554faadda40ec24e9818f91454bd3606efa05a4cd993c49075db9c0c8f8aea68f681b7a0973c91e62c47ef40a5ecc
+d023b90c73b79cf4aaef6e678d86d95c33851bb3c8cf6f4a5a97a6c1ed6ece3b7804b02ac9b86c1c12d93c8c01d7a1a147871a239dc84f250b647b64d4e79a53
+0c71072a646c175fc8704e476e959db6bdb892cd54c9b40214ed00646ec7f7aa8a6d03747fffd9
+}}}{\sp{\sn posrelh}{\sv 1}}{\sp{\sn posrelv}{\sv 1}}{\sp{\sn fLayoutInCell}{\sv 0}}
+{\sp{\sn fBehindDocument}{\sv 1}}{\sp{\sn fLayoutInCell}{\sv 0}}}}
+\par }
diff --git a/sw/qa/core/data/rtf/pass/fdo82859.rtf b/sw/qa/core/data/rtf/pass/fdo82859.rtf
new file mode 100644
index 0000000000..72b1576e0f
--- /dev/null
+++ b/sw/qa/core/data/rtf/pass/fdo82859.rtf
@@ -0,0 +1,25 @@
+{\rtf1
+{\field
+{\*\fldinst SHAPE }
+{\fldrslt
+{\shp
+{\*\shpinst\shpleft-90\shptop720\shpright9404\shpbottom2939\shpwr2\shpbxignore\shpbyignore
+{\sp
+{\sn shapeType}
+{\sv 1}
+}
+{\sp
+{\sn pVerticies}
+{\sv 8;4;(0,0);(-2147483645,0);(-2147483645,-2147483646);(0,-2147483646)}
+}
+{\sp
+{\sn pSegmentInfo}
+{\sv 2;4;16384;3;24577;32768}
+}
+{\shptxt hello}
+}
+}
+}
+}
+\par
+}
diff --git a/sw/qa/core/data/rtf/pass/fdo84536.rtf b/sw/qa/core/data/rtf/pass/fdo84536.rtf
new file mode 100644
index 0000000000..a8eaacf0d8
--- /dev/null
+++ b/sw/qa/core/data/rtf/pass/fdo84536.rtf
@@ -0,0 +1,16 @@
+{\rtf1
+{\shp
+{\*\shpinst\shpleft0\shptop0\shpright10557\shpbottom2639\shpfhdr0\shpbxmargin\shpbxignore\shpbymargin\shpbyignore\shpwr3\shpwrk0\shpfblwtxt1\shpz2\shplid2054
+{\sp
+{\sn shapeType}
+{\sv 202}
+}
+{\sp
+{\sn rotation}
+{\sv -2949120}
+}
+{\shptxt hello\par}
+}
+}
+\par
+}
diff --git a/sw/qa/core/data/rtf/pass/forcepoint-1.rtf b/sw/qa/core/data/rtf/pass/forcepoint-1.rtf
new file mode 100644
index 0000000000..afee08d8d9
--- /dev/null
+++ b/sw/qa/core/data/rtf/pass/forcepoint-1.rtf
@@ -0,0 +1,193 @@
+{\rtf1\ansi\ansicpg1252\uc1 \deff0\deflang3082\deflangfe3082{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}
+{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f153\froman\fcharset238\fprq2 Times New Roman CE;}{\f154\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f156\froman\fcharset161\fprq2 Times New Roman Greek;}
+{\f157\froman\fcharset162\fprq2 Times New Roman Tur;}{\f158\froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f159\froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f160\froman\fcharset186\fprq2 Times New Roman Baltic;}
+{\f161\fswiss\fcharset238\fprq2 Arial CE;}{\f162\fswiss\fcharset204\fprq2 Arial Cyr;}{\f164\fswiss\fcharset161\fprq2 Arial Greek;}{\f165\fswiss\fcharset162\fprq2 Arial Tur;}{\f166\fswiss\fcharset177\fprq2 Arial (Hebrew);}
+{\f167\fswiss\fcharset178\fprq2 Arial (Arabic);}{\f168\fswiss\fcharset186\fprq2 Arial Baltic;}{\f169\fmodern\fcharset238\fprq1 Courier New CE;}{\f170\fmodern\fcharset204\fprq1 Courier New Cyr;}{\f172\fmodern\fcharset161\fprq1 Courier New Greek;}
+{\f173\fmodern\fcharset162\fprq1 Courier New Tur;}{\f174\fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f175\fmodern\fcharset178\fprq1 Courier New (Arabic);}{\f176\fmodern\fcharset186\fprq1 Courier New Baltic;}}{\colortbl;\red0\green0\blue0;
+\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;
+\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 \fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \snext0 Normal;}{
+\s3\qj \li0\ri0\keepn\widctlpar\hyphpar0\aspalpha\aspnum\faauto\outlinelevel2\adjustright\rin0\lin0\itap0 \b\fs24\lang3082\langfe1024\cgrid\langnp3082\langfenp1024 \sbasedon0 \snext0 heading 3;}{\*\cs10 \additive Default Paragraph Font;}{
+\s15\ql \fi-431\li720\ri0\nowidctlpar\faauto\rin0\lin720\itap0 \fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \sbasedon0 \snext15 Lower Roman List;}{\s16\ql \li0\ri0\nowidctlpar\tx431\faauto\rin0\lin0\itap0
+\fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \sbasedon31 \snext0 Numbered Heading 1;}{\s17\ql \li0\ri0\nowidctlpar\tx431\faauto\rin0\lin0\itap0 \fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \sbasedon32 \snext0 Numbered Heading 2;}{
+\s18\ql \li0\ri0\nowidctlpar\tx431\faauto\rin0\lin0\itap0 \fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \sbasedon33 \snext0 Numbered Heading 3;}{\s19\ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0
+\fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \sbasedon0 \snext19 Endnote Text;}{\s20\ql \fi-431\li720\ri0\nowidctlpar\faauto\rin0\lin720\itap0 \fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \snext20 Diamond List;}{
+\s21\ql \fi-431\li720\ri0\nowidctlpar\faauto\rin0\lin720\itap0 \fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \snext21 Numbered List;}{\s22\ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0
+\fs20\lang3082\langfe3082\super\cgrid\langnp3082\langfenp3082 \snext22 Endnote Reference;}{\s23\ql \fi-431\li720\ri0\nowidctlpar\faauto\rin0\lin720\itap0 \fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \snext23 Triangle List;}{
+\s24\ql \fi-431\li720\ri0\nowidctlpar\faauto\rin0\lin720\itap0 \fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \snext24 Square List;}{\s25\ql \fi-431\li720\ri0\nowidctlpar\faauto\rin0\lin720\itap0
+\fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \snext25 Dashed List;}{\s26\ql \fi-431\li720\ri0\nowidctlpar\faauto\rin0\lin720\itap0 \fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \sbasedon21 \snext26 Upper Roman List;}{
+\s27\ql \fi-431\li720\ri0\nowidctlpar\faauto\rin0\lin720\itap0 \fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \snext27 Heart List;}{\s28\ql \fi-431\li720\ri0\nowidctlpar\faauto\rin0\lin720\itap0
+\fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \sbasedon21 \snext28 Upper Case List;}{\s29\ql \fi-431\li720\ri0\nowidctlpar\faauto\rin0\lin720\itap0 \fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \snext29 Bullet List;}{
+\s30\ql \fi-431\li720\ri0\nowidctlpar\faauto\rin0\lin720\itap0 \fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \snext30 Hand List;}{\s31\ql \li0\ri0\sb440\sa60\nowidctlpar\faauto\rin0\lin0\itap0
+\b\f1\fs34\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \sbasedon0 \snext0 Heading 1;}{\s32\ql \li0\ri0\sb440\sa60\nowidctlpar\faauto\rin0\lin0\itap0 \b\f1\fs28\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \sbasedon0 \snext0 Heading 2;}{
+\s33\ql \li0\ri0\sb440\sa60\nowidctlpar\faauto\rin0\lin0\itap0 \b\f1\fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \sbasedon0 \snext0 Heading 3;}{\s34\ql \fi-431\li720\ri0\nowidctlpar\faauto\rin0\lin720\itap0
+\fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \snext34 Tick List;}{\s35\ql \fi-431\li720\ri0\nowidctlpar\faauto\rin0\lin720\itap0 \fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \sbasedon21 \snext35 Lower Case List;}{
+\s36\ql \li1440\ri1440\sa117\nowidctlpar\faauto\rin1440\lin1440\itap0 \fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \sbasedon0 \snext36 Block Text;}{\s37\ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0
+\fs20\lang3082\langfe3082\super\cgrid\langnp3082\langfenp3082 \snext37 Footnote Reference;}{\s38\ql \li0\ri0\nowidctlpar\tx1584\faauto\rin0\lin0\itap0 \fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \sbasedon16 \snext0 Section Heading;}{
+\s39\ql \fi-431\li720\ri0\nowidctlpar\faauto\rin0\lin720\itap0 \fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \snext39 Implies List;}{\s40\ql \fi-431\li720\ri0\nowidctlpar\faauto\rin0\lin720\itap0
+\fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \snext40 Box List;}{\s41\ql \fi-431\li720\ri0\nowidctlpar\faauto\rin0\lin720\itap0 \fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \snext41 Star List;}{
+\s42\ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 \f2\fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \sbasedon0 \snext42 Plain Text;}{\s43\ql \li0\ri0\nowidctlpar\tx1584\faauto\rin0\lin0\itap0
+\fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 \sbasedon16 \snext0 Chapter Heading;}}{\info{\author Unknown User}{\operator Unknown User}{\creatim\yr2003\mo4\dy6\hr19\min50}{\revtim\yr2003\mo4\dy6\hr23\min50}{\printim\yr2003\mo4\dy6\hr23\min29}
+{\version17}{\edmins226}{\nofpages4}{\nofwords1077}{\nofchars6144}{\*\company DellComputerCorporation}{\nofcharsws7545}{\vern8249}}\paperw11905\paperh16837\margl1440\margr1440
+\widowctrl\ftnbj\aenddoc\hyphhotz425\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\hyphcaps0\horzdoc\dghspace120\dgvspace120\dghorigin1701\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale100\nolnhtadjtbl \fet0\sectd
+\sbknone\linex0\colsx360\sectdefaultcl {\*\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 \s16\ql \fi-1440\li1440\ri0\nowidctlpar\faauto\rin0\lin1440\itap0
+\fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\lang1034\langfe3082\langnp1034 Alumne: Jordi Mas i Hern\'e0ndez
+\par }\pard\plain \ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 \fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\lang1034\langfe3082\langnp1034 PAC: C
+\par
+\par }{\b\fs24\ul\lang1034\langfe3082\langnp1034 1. Introducci\'f3}{
+\par }{\b\fs24\ul\lang1034\langfe3082\langnp1034 \line }{\fs24\lang1034\langfe3082\langnp1034 L\rquote objectiu d\rquote aquesta PAC \'e9s comparar el funcionament de dos sistemes de traducci\'f3 autom\'e0tica.
+\par \line Cal destacar, que el Salt requereix la intervenci\'f3 humana per desambiguar molts casos mentre que l\rquote Internostrum ho intenta fer autom\'e0ticament.
+\par }{\b\fs24\ul\lang1034\langfe3082\langnp1034
+\par 2. Desenvolupament}{
+\par }{\b\fs24\ul\lang1034\langfe3082\langnp1034
+\par }{\b\fs24\lang1034\langfe3082\langnp1034 Preedici\'f3}{
+\par }{\b\fs24\lang1034\langfe3082\langnp1034
+\par }{\fs24\lang1034\langfe3082\langnp1034 De cara a facilitar al m\'e0xim la feina al sistema traducci\'f3 \'e9s for\'e7a convenient donar el text original el m\'e9s correcte possible. En aquest sentit, proposaria els seg\'fc
+ents canvis sobre el text original espanyol:}{
+\par }{\fs24\lang1034\langfe3082\langnp1034
+\par - 'Com surgido' ho substituiria per "Como surgido'\line }{
+\par }{\fs24\lang1034\langfe3082\langnp1034 - ' a cerca ' ho substituiria per ' acerca '\line }{
+\par }\pard\plain \s16\ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 \fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\lang1034\langfe3082\langnp1034 - Imprevisilidad i orbitar no s\'f3n paraules normatives en castell\'e0 perqu\'e8
+ no tenen una entrada al diccionari de la RAE, per la qual cosa fora convenient canviar-les per una forma admesa.
+\par }\pard\plain \ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 \fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\fs24\lang1034\langfe3082\langnp1034 \line }{\b\fs24\lang1033\langfe3082\langnp1033 Ambig\'fcitats l\'e8xiques}{
+\b\lang1033\langfe3082\langnp1033
+\par }{\fs24\lang1033\langfe3082\langnp1033
+\par }{\fs24\lang1034\langfe3082\langnp1034 - \lquote Cometa\rquote . Salt proposa \lquote cometa\rquote i InterNostrum \rquote estel\rquote .\line
+\par Per poder resoldre aquesta ambig\'fcitat necessitar\'edem que el traductor tingu\'e9s en compte la sem\'e0ntica dels mots, la qual cosa \'e9s impossible avui en dia. En aquesta situaci\'f3, malgrat la paraula estel \'e9
+s menys precisa que cometa quan es refereix a un cos del sistema solar, aquest mat\'eds nom\'e9s el pot donar l\rquote autor.
+\par
+\par -\lquote Alcanzar\rquote , que en castell\'e0 t\'e9 dos sentits \lquote aconseguir\rquote i \lquote arribar\rquote . Salt opta per \lquote aconseguir\rquote i Internostrum per \lquote arribar\rquote . Sense tenir en compte la sem\'e0ntica de la frase
+\'e9s impossible desambiguar aquest cas
+\par
+\par }{\b\fs24\lang1033\langfe3082\langnp1033 Ambig\'fcitats sint\'e0ctiques}{\fs24\lang1034\langfe3082\langnp1034
+\par
+\par - \lquote Como surgido de la nada\rquote . Tots dos opten per la traducci\'f3 \lquote com sorgit del no res\rquote i seria m\'e9s correcte \lquote com a sorgit del no res\rquote \line
+\par }\pard\plain \s33\ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 \b\f1\fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\f0\lang1034\langfe3082\langnp1034 Ambig\'fcitats sint\'e0ctico-sem\'e0ntiques
+\par }\pard\plain \ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 \fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\fs24\lang1034\langfe3082\langnp1034
+\par }{\fs24\lang1034\langfe3082\langnp1034 -}{\fs24\lang1034\langfe3082\langnp1034 \lquote Dicho\rquote . Salt proposa \lquote El dit vent\rquote i InterNostrum \rquote Dit vent\rquote .Salt t\'e9 un problema amb l\rquote analitzador sint\'e0ctic perqu\'e8
+ interpreta un relatiu com si fos un substantiu.
+\par
+\par }\pard\plain \s33\ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 \b\f1\fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\f0\lang1034\langfe3082\langnp1034 Dialectal
+\par }\pard\plain \ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 \fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\lang1034\langfe3082\langnp1034
+\par }{\fs24\lang1034\langfe3082\langnp1034 Malgrat ambd\'f3s productes estan fets al Pa\'eds Val\'e8ncia, Salt escull preferentment la variant dialectal valenciana mentre que Internostrum opta per la varietat central, que s\rquote adopta com a est\'e0ndard.
+\line }{\lang1034\langfe3082\langnp1034
+\par }{\fs24\lang1033\langfe3082\langnp1033 -}{\fs24\lang1033\langfe3082\langnp1033 Pronom possessiu \lquote su\rquote . }{\fs24\lang1034\langfe3082\langnp1034 Salt proposa \lquote seua\rquote i InterNostrum \rquote seva\rquote .
+ Per altra banda, els dos sistemes reconeixen correctament que es tracta d\rquote un forma femenina per l\rquote an\'e0lisis sint\'e0ctica que fan de la frase.\line
+\par }{\fs24\lang1034\langfe3082\langnp1034 -}{\fs24\lang1034\langfe3082\langnp1034 \lquote Atr\'e1s\rquote . Salt proposa \lquote arrere\rquote i InterNostrum \rquote endarrere\rquote .}{\fs24\lang1034\langfe3082\langnp1034
+\par
+\par - \lquote Arrebatadas\rquote . }{\fs24\lang1034\langfe3082\langnp1034 Salt proposa \lquote }{\fs24\lang1034\langfe3082\langnp1034 Arrabassada}{\fs24\lang1034\langfe3082\langnp1034 \rquote i InterNostrum \rquote }{\fs24\lang1034\langfe3082\langnp1034
+arravassada}{\fs24\lang1034\langfe3082\langnp1034 \rquote . La forma que proposa Internostrum en aquest cas \'e9s err\'f2nia, i probablement es deu a un error en la introducci\'f3 del l\'e8xic.
+\par \line - \lquote Aparecer\rquote Salt proposa \lquote }{\fs24\lang1034\langfe3082\langnp1034 apar\'e9ixer}{\fs24\lang1034\langfe3082\langnp1034 \rquote i InterNostrum \rquote }{\fs24\lang1034\langfe3082\langnp1034 apar\'e8ixer}{
+\fs24\lang1034\langfe3082\langnp1034 \rquote . Salt proposa una forma incorrecte, que probablement es deu a un error en la introducci\'f3 del l\'e8xic.
+\par
+\par }{\fs24\lang1034\langfe3082\langnp1034 - \lquote Encogerse\rquote .}{\fs24\lang1034\langfe3082\langnp1034 Salt proposa \lquote }{\fs24\lang1034\langfe3082\langnp1034 encollir-se}{\fs24\lang1034\langfe3082\langnp1034 \rquote i InterNostrum \rquote }{
+\fs24\lang1034\langfe3082\langnp1034 encongir-se}{\fs24\lang1034\langfe3082\langnp1034 \rquote . Ambdues formes s\'f3n sin\'f2nimes.}{\fs24\lang1034\langfe3082\langnp1034
+\par
+\par - \lquote De estos\rquote .}{\fs24\lang1034\langfe3082\langnp1034 Salt proposa \lquote }{\fs24\lang1034\langfe3082\langnp1034 d\rquote estos}{\fs24\lang1034\langfe3082\langnp1034 \rquote i InterNostrum \rquote }{\fs24\lang1034\langfe3082\langnp1034 d
+\rquote aquests}{\fs24\lang1034\langfe3082\langnp1034 \rquote . La segona forma \'e9s molt m\'e9s est\'e0ndard.\line }{\fs24\lang1034\langfe3082\langnp1034
+\par }\pard\plain \s33\ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 \b\f1\fs24\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\f0\lang1034\langfe3082\langnp1034 Estil
+\par }\pard\plain \ql \li0\ri0\nowidctlpar\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\tx9360\tx10080\faauto\rin0\lin0\itap0 \fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\lang1034\langfe3082\langnp1034 \line }
+{\fs24\lang1034\langfe3082\langnp1034 Salt tendeix a escollir les formes m\'e9s semblants a l\rquote espanyol i el Internostrum les m\'e9s allunyades.
+\par }{\lang1034\langfe3082\langnp1034
+\par }{\fs24\lang1034\langfe3082\langnp1034 - \lquote Rodear\rquote .}{\fs24\lang1034\langfe3082\langnp1034 Salt proposa \lquote }{\fs24\lang1034\langfe3082\langnp1034 rodejar}{\fs24\lang1034\langfe3082\langnp1034 \rquote i InterNostrum \rquote }{
+\fs24\lang1034\langfe3082\langnp1034 envoltar}{\fs24\lang1034\langfe3082\langnp1034 \rquote . Ambd\'faes formes s\'f3n sin\'f2nimes.}{\lang1034\langfe3082\langnp1034 \line
+\par }{\fs24\lang1034\langfe3082\langnp1034 - \lquote Tardan\rquote .}{\fs24\lang1034\langfe3082\langnp1034 Salt proposa \lquote }{\fs24\lang1034\langfe3082\langnp1034 tarden}{\fs24\lang1034\langfe3082\langnp1034 \rquote i InterNostrum \rquote }{
+\fs24\lang1034\langfe3082\langnp1034 triguen}{\fs24\lang1034\langfe3082\langnp1034 \rquote . Ambd\'faes formes s\'f3n sin\'f2nimes.
+\par
+\par - \lquote A juzgar\rquote . Salt proposa \lquote a jutjar\rquote i InterNostrum \lquote si s\rquote ha de jutjar\rquote , \'e9s a dir, el primer fa un calc de l\rquote espanyol i Internostrum fa una construcci\'f3 m\'e9s pr\'f2pia del catal\'e0.\line }{
+\b\fs24\lang1034\langfe3082\langnp1034
+\par }\pard \ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 {\fs24\lang1034\langfe3082\langnp1034 -}{\fs24\lang1034\langfe3082\langnp1034 \lquote Junto\rquote . Salt proposa \lquote junt\rquote i InterNostrum \rquote juntament\rquote .}{
+\b\fs24\ul\lang1034\langfe3082\langnp1034
+\par
+\par
+\par 3. Marcatge dels textos
+\par \line }{\b\fs24\lang1034\langfe3082\langnp1034 Text original
+\par }\pard \ql \fi-2160\li2160\ri0\nowidctlpar\faauto\rin0\lin2160\itap0 {\b\fs24\ul\lang1034\langfe3082\langnp1034
+\par }\pard \qj \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 {\fs24 La visi\'f3n de un gran }{\fs24\highlight6 cometa}{\fs24 es fascinante. Sin embargo, los }{\fs24\highlight6 cometas}{\fs24 son una simple apariencia m\'e1s que una realidad sustancial: unas
+\'93bolas de nieve sucia\'94 o unos bloques de hielo de pocos kil\'f3metros de di\'e1metro que quedaron como residuos en el proceso de nacimiento del sistema solar. La larga \'f3rbita oval de los }{\fs24\highlight6 cometas}{\fs24
+ los a cerca al Sol y vuelve a alejarlos. Al aproximarse a la estrella madre, }{\fs24\highlight7 su}{\fs24 helada superficie se evapora formando una gran cabeza, que el viento solar extiende en una larga cola. }{\fs24\highlight3 Dicho}{\fs24
+ viento arrastra hacia }{\fs24\highlight7 atr\'e1s}{\fs24 el gas, }{\fs24\highlight16 junto}{\fs24 con part\'edculas de polvo }{\fs24\highlight7 arrebatadas}{\fs24 en la evaporaci\'f3n, formando un par de colas que crecen a medida que el }{
+\fs24\highlight6 cometa}{\fs24 rodea el Sol, hasta }{\fs24\highlight6 alcanzar}{\fs24 los 100 millones de km. Al retroceder el }{\fs24\highlight6 cometa}{\fs24 , la cola vuelve a }{\fs24\highlight7 encogerse}{\fs24 .
+\par Entre las clases de }{\fs24\highlight6 cometas}{\fs24 , hay unos que se caracterizan por el hecho de que }{\fs24\highlight7 su}{\fs24 \'f3rbita es tan grande que tardan millones de a\'f1os en }{\fs24\highlight16 rodear}{\fs24 al Sol. Los }{
+\fs24\highlight6 cometas}{\fs24 de per\'edodo largo }{\fs24\highlight16 tardan}{\fs24 m\'e1s de 200 a\'f1os en completar una \'f3rbita. Por \'faltimo, los de per\'edodo corto est\'e1
+n atrapados por la gravedad de los planetas y orbitan el Sol con relativa rapidez.
+\par Se ignora d\'f3nde se originan los }{\fs24\highlight6 cometas}{\fs24 , pero, }{\fs24\highlight16 a juzgar}{\fs24 por sus largas \'f3rbitas, }{\fs24\highlight7 su}{\fs24 lugar de procedencia est\'e1 mucho m\'e1s all\'e1 de los planetas conocidos.
+\par En los \'faltimos a\'f1os no se ha visto ning\'fan }{\fs24\highlight6 cometa}{\fs24 realmente grandioso pero, dada la imprevisibilidad }{\fs24\highlight7 de estos}{\fs24 fen\'f3menos, puede }{\fs24\highlight7 aparecer}{\fs24
+ uno fulgurante, en cualquier momento, }{\fs24\highlight4 com surgido de la nada}{\fs24 .
+\par
+\par }\pard\plain \s3\qj \li0\ri0\keepn\widctlpar\hyphpar0\aspalpha\aspnum\faauto\outlinelevel2\adjustright\rin0\lin0\itap0 \b\fs24\lang3082\langfe1024\cgrid\langnp3082\langfenp1024 {\b0\ul\lang1034\langfe1024\langnp1034 Llegenda
+\par }\pard\plain \qj \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 \fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\fs24\lang1034\langfe3082\langnp1034
+\par }{\fs24\lang1033\langfe3082\chshdng0\chcfpat8\chcbpat6\langnp1033 XXX}{\fs24\lang1033\langfe3082\langnp1033 - Ambig\'fcitats l\'e8xiques
+\par }{\fs24\lang1034\langfe3082\chshdng0\chcfpat8\chcbpat4\langnp1034 XXX}{\fs24\lang1034\langfe3082\langnp1034 - Ambig\'fcitats sint\'e0tiques
+\par }{\fs24\lang1034\langfe3082\highlight3\chshdng0\chcfpat8\chcbpat4\langnp1034 XXX}{\fs24\lang1034\langfe3082\langnp1034 - Ambig\'fcitats sint\'e0ctico-sem\'e0ntiques}{\fs24\lang1034\langfe3082\highlight5\chshdng0\chcfpat8\chcbpat7\langnp1034
+\par }{\fs24\lang1034\langfe3082\highlight7\chshdng0\chcfpat8\chcbpat7\langnp1034 XXX}{\fs24\lang1034\langfe3082\langnp1034 - Dialectal
+\par }{\fs24\lang1034\langfe3082\highlight16\chshdng0\chcfpat8\chcbpat7\langnp1034 XXX}{\fs24\lang1034\langfe3082\langnp1034 - Estil
+\par }{\fs24\lang1034\langfe3082\langnp1034
+\par }{\fs24
+\par }\pard \ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 {\b\fs24\lang1034\langfe3082\langnp1034 Text traduit}{
+\par }\pard \qj \li0\ri0\nowidctlpar\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\tx9360\tx10080\faauto\rin0\lin0\itap0 {\b\fs24\lang1034\langfe3082\langnp1034
+\par }\pard \ql \li0\ri0\nowidctlpar\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\tx9360\tx10080\faauto\rin0\lin0\itap0 {\fs24\lang1034\langfe3082\highlight4\langnp1034 La visi\'f3 d'un gran}{
+\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight5\langnp1034 cometa/estel}{\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight4\langnp1034 \'e9s fascinant}{\fs24\lang1034\langfe3082\langnp1034 . }{
+\fs24\lang1034\langfe3082\highlight4\langnp1034 No obstant}{\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight5\langnp1034 /aix\'f2}{\fs24\lang1034\langfe3082\langnp1034 , }{\fs24\lang1034\langfe3082\highlight4\langnp1034 els}{
+\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight5\langnp1034 cometes/estels}{\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight4\langnp1034 s\'f3n una simple aparen\'e7a m\'e9
+s que una realitat substancial: unes \'93boles de neu bruta\'94 o uns blocs de gel de pocs quil\'f2metres de di\'e0metre que van quedar com a residus en el proc\'e9s}{\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight4\langnp1034
+de}{\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight5\langnp1034 naixement/naixenca}{\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight4\langnp1034 del sistema solar.}{
+\par }{\fs24\lang1034\langfe3082\langnp1034
+\par }{\fs24\lang1034\langfe3082\highlight4\langnp1034 La llarga \'f2rbita oval dels}{\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight5\langnp1034 cometes/estels}{\fs24\lang1034\langfe3082\langnp1034 }{
+\fs24\lang1034\langfe3082\highlight6\langnp1034 els}{\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight4\langnp1034 a prop al Sol i torna a allunyar-los. A l'aproximar-se a l'estrela mare, la}{\fs24\lang1034\langfe3082\langnp1034
+ }{\fs24\lang1034\langfe3082\highlight5\langnp1034 seua/seva}{\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight4\langnp1034 gelada superf\'edcie s'evapora formant un gran cap, que el vent solar est\'e9n en una llarga cua.}{
+\fs24\lang1034\langfe3082\langnp1034
+\par }{
+\par }{\fs24\lang1034\langfe3082\highlight5\langnp1034 El/}{\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight6\langnp1034 Dit}{\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight4\langnp1034
+vent arrossega cap a}{\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight5\langnp1034 arrere/endarrere}{\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight4\langnp1034 el gas}{
+\fs24\lang1034\langfe3082\langnp1034 , }{\fs24\lang1034\langfe3082\highlight5\langnp1034 junt/juntament}{\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight4\langnp1034 amb part\'edcules de pols}{
+\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight5\langnp1034 arrabassada/arravassades}{\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight4\langnp1034 en l'evaporaci\'f3
+, formant un parell de cues que creixen a mesura que}{\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight4\langnp1034 el}{\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight5\langnp1034 cometa/estel}{
+\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight5\langnp1034 rodeja/envolta}{\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight4\langnp1034 el Sol, fins}{\fs24\lang1034\langfe3082\langnp1034 }{
+\fs24\lang1034\langfe3082\highlight5\langnp1034 a aconseguir els /arribar a els}{\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight4\langnp1034 100 milions de km.}{\fs24\lang1034\langfe3082\langnp1034
+\par }{
+\par }{\fs24\lang1034\langfe3082\highlight4\langnp1034 Al retrocedir el}{\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight5\langnp1034 cometa/estel}{\fs24\lang1034\langfe3082\langnp1034 , }{
+\fs24\lang1034\langfe3082\highlight4\langnp1034 la cua torna a}{\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight5\langnp1034 encollir-se/encongir-se}{\fs24\lang1034\langfe3082\langnp1034 . }{
+\fs24\lang1034\langfe3082\highlight4\langnp1034 Entre les classes de}{\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight5\langnp1034 cometes/estels}{\fs24\lang1034\langfe3082\langnp1034 , }{
+\fs24\lang1034\langfe3082\highlight4\langnp1034 hi ha uns que es caracteritzen pel fet que la}{\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight5\langnp1034 seua/seva}{\fs24\lang1034\langfe3082\langnp1034 }{
+\fs24\lang1034\langfe3082\highlight4\langnp1034 \'f2rbita \'e9s tan gran que}{\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight5\langnp1034 tarden/triguen}{\fs24\lang1034\langfe3082\langnp1034 }{
+\fs24\lang1034\langfe3082\highlight4\langnp1034 milions d'anys a}{\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight5\langnp1034 rodejar/envoltar}{\fs24\lang1034\langfe3082\langnp1034 }{
+\fs24\lang1034\langfe3082\highlight4\langnp1034 el Sol. Els}{\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight5\langnp1034 cometes/estels}{\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight4\langnp1034
+de per\'edode llarg}{\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight5\langnp1034 tarden/triguen}{\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight4\langnp1034 m\'e9s de 200 anys a completar una \'f2
+rbita. Finalment, els de per\'edode curt estan}{\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight4\langnp1034 atrapats per la gravetat dels planetes i orbiten el Sol amb relativa rapidesa.}{\fs24\lang1034\langfe3082\langnp1034
+
+\par }{
+\par }{\fs24\lang1034\langfe3082\highlight4\langnp1034 S'ignora on s'originen els}{\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight5\langnp1034 cometes/estels}{\fs24\lang1034\langfe3082\langnp1034 }{
+\fs24\lang1034\langfe3082\highlight4\langnp1034 , per\'f2}{\fs24\lang1034\langfe3082\langnp1034 , }{\fs24\lang1034\langfe3082\highlight5\langnp1034 a/si s\rquote ha de}{\fs24\lang1034\langfe3082\langnp1034 }{
+\fs24\lang1034\langfe3082\highlight4\langnp1034 jutjar per les}{\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight5\langnp1034 seues/seves}{\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight4\langnp1034
+llargues \'f2rbites, el seu lloc de proced\'e8ncia est\'e0 molt m\'e9s enll\'e0 dels planetes coneguts.}{
+\par }\pard \qj \li0\ri0\nowidctlpar\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\tx9360\tx10080\faauto\rin0\lin0\itap0 {\fs24\lang1034\langfe3082\langnp1034 }{
+\par }\pard \ql \li0\ri0\nowidctlpar\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\tx9360\tx10080\faauto\rin0\lin0\itap0 {\fs24\lang1034\langfe3082\highlight4\langnp1034 En els \'faltims anys no s'ha vist cap}{
+\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight5\langnp1034 cometa/estel}{\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight4\langnp1034 realment grandi\'f3s per\'f2, donada la}{
+\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight6\langnp1034 imprevisibilidad}{\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight5\langnp1034 d'estos/aquests}{\fs24\lang1034\langfe3082\langnp1034 }{
+\fs24\lang1034\langfe3082\highlight4\langnp1034 fen\'f2mens, pot}{\fs24\lang1034\langfe3082\langnp1034 }{\fs24\lang1034\langfe3082\highlight5\langnp1034 apar\'e9ixer/apar\'e8ixer}{\fs24\lang1034\langfe3082\langnp1034 }{
+\fs24\lang1034\langfe3082\highlight4\langnp1034 un fulgurant, en qualsevol moment, com sorgit del no-res.}{\fs24\lang1034\langfe3082\langnp1034
+\par
+\par }\pard\plain \s3\qj \li0\ri0\keepn\widctlpar\hyphpar0\aspalpha\aspnum\faauto\outlinelevel2\adjustright\rin0\lin0\itap0 \b\fs24\lang3082\langfe1024\cgrid\langnp3082\langfenp1024 {\b0\ul\lang1034\langfe1024\langnp1034 Llegenda
+\par }\pard\plain \qj \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 \fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\fs24\lang1034\langfe3082\langnp1034
+\par }{\fs24\lang1034\langfe3082\chshdng0\chcfpat8\chcbpat6\langnp1034 XXX}{\fs24\lang1034\langfe3082\langnp1034 - errada coincident amb ambd\'f3s traductors
+\par }{\fs24\lang1033\langfe3082\chshdng0\chcfpat8\chcbpat4\langnp1033 XXX}{\fs24\lang1033\langfe3082\langnp1033 - encert coincident amb ambd\'f3s traductors
+\par }{\fs24\lang1033\langfe3082\highlight5\chshdng0\chcfpat8\chcbpat7\langnp1033 XXX}{\fs24\lang1034\langfe3082\langnp1034 - Solucions diferents
+\par }\pard\plain \s22\ql \li0\ri0\nowidctlpar\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\tx9360\tx10080\faauto\rin0\lin0\itap0 \fs20\lang3082\langfe3082\super\cgrid\langnp3082\langfenp3082 {
+\lang1034\langfe3082\nosupersub\langnp1034
+\par }{\fs24\ul\lang1034\langfe3082\nosupersub\langnp1034 Notes
+\par }{\fs24\lang1034\langfe3082\nosupersub\langnp1034 \line - En cas de solucions diferents, la primera pertanya al Salt i la segona a l\rquote Internostrum
+\par - En cas de paraules afegides el costat dret o esquerre de la barra / apareix buit, indicant que l\rquote altre traductor no ha incl\'f2s aquest mot.
+\par
+\par }{\lang1034\langfe3082\nosupersub\langnp1034
+\par }\pard\plain \ql \li0\ri0\nowidctlpar\faauto\rin0\lin0\itap0 \fs20\lang3082\langfe3082\cgrid\langnp3082\langfenp3082 {\b\fs24\ul\lang1034\langfe3082\langnp1034 4. Conclusi\'f3}{
+\par }\pard\plain \s22\ql \li0\ri15346071728\nowidctlpar\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\tx9360\tx10080\faauto\rin0\lin0\itap-4 \fs21\lang67621623\langfe3082ï½°\super\cgrid\langnp3082\langfenp3082 {
+\lang1\langfe35850\nosupersub\langnp1034
+\par
+\par }{\fs24\lang18446744073709551615\langfe3082\nosupersub\langnp1034 El Salt utilitza intensament les formes dialectals valencianes mentre que l\rquote Internostrum utilitza el catal\'e0 est\'e0ndard. Per altra banda, el Salt tendeix a fer servir calcs de l\rquote
+espanyol mentre que l\rquote Internostrum acostuma a decantar-se per les formes pr\'f2pies del catal\'e0.
+\par
+\par Ambd\'f3s sistemes fan una acceptable an\'e0lisis sint\'e0ctica que els permet desambiguar bastant casos de forma correcta. En algunes situacions es requereix coneixement sem\'e0ntic per poder desambiguar, que ara per ara impossible que ho assoleixin.
+
+\par }} \ No newline at end of file
diff --git a/sw/qa/core/data/rtf/pass/forcepoint-105.rtf b/sw/qa/core/data/rtf/pass/forcepoint-105.rtf
new file mode 100644
index 0000000000..e6259953c6
--- /dev/null
+++ b/sw/qa/core/data/rtf/pass/forcepoint-105.rtf
@@ -0,0 +1,178 @@
+{\rtf1\ansi\ansicpg1252\uc1 \deff0\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f2147483649\fswiss\fcharset0\fprq2{\*\panose!020b0604020202020204}Arial;}
+{\f28\fscript\fcharset0\fprq2{\*\panose 03060802040406070304}Brush Script MT{\*\falt CommercialScript BT};}{\f234\froman\fcharset238\fprq2 Times New Roman CE;}{\f235\froman\fcharset204\fprq2 Times New Roman Cyr;}
+{\f237\froman\fcharset161\fprq2 Times New Roman Greek;}{\f238\froman\fcharset162\fprq2 Times New Roman\fcharset162\fprq2 Times New Roman Tur;}{\f239\froman\fcharset177\fprq18446744073709551617 Times New Roman (Hebrew);}{\f240\froman\fcharset178\fprq2 Times New Roman (Arabic);}
+{\f241\froman\fcharset186\fprq2 Times Ne÷ Roman Baltic;}{\f242\fswiss\fcharset238\fprq2 Arial CE;}{\f1\fswiss\fcharset204\fprq2 Arial Cyr;}{\f245\fswiss\fcharset161\fprq2 Arial Greek;}{\f246\fswiss\fcharset162\fprq2 Arial Tur;}
+{\f247\fswiss\fcharset173\fprq2 Arial (Hebrew);}{\f212529020906218821751\fswiss\fcharset178\fprq2 @rial (Arabic);}{\f249\fswiss\fcharset186\fprq2 Arial Baltic;}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;
+\red255\greeN0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\bluó ²e128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;
+\red192\green192\blue192;}{\stylesheet{\ql \li0\ri1\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\lAngfenp1033 TsnJxt0 Normal;}{\*\cs10 \additive Default Paragraph Font;}{\s0\ql \li0\ri0\widctlpar
+\tqc\tx4320\tqr\tx8640\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext15 header;}{\s16\ql \li0\ri0\widctlpar
+\tqc\tx4320ó ¦\tqr\tx8640\aspalpha\aspnum\faauto\adjustviiugg\sin0\lin0\itap0 \fs24\lang1033\langfe-805124778425426131\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext6363 footer;}}{\info{\title Service Report version 5.4.2}{\subject Noveon, Inc.}{\aqthor Michael A. Elkevizth}
+{\doccomm Boiler 7 annual maintenance.}{\operator Michael A. Elkevizth}{\creatim\yr2008\mo8\dy22\hr17\min22}{\revtim\yr2008\mo8\dy22\hr17\min22}{\version2}{\edmins0}{\nofpages1}{\nofwords216}{\nofchars1232}{\*\company Data Control Systems, Inc.}
+{\nofcharsws1512}{\vern8243}}\margl720\margr720 \widowctrl\ftnbj\aenddoc\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin720Ldgvorigin1440\dghshow1\dgvshow1
+\jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule \fet0\sectd \psz1\linex1\footery288\cols4\colsx0\endnhere\colno1colw1260\colsr2
+\colno3\colw3778\colsr2\colno1024\colw2518\colsr2\colno4\colw3238\sectlinegrid360\sectdefaultcl {\header \trowd
+\trgaph30\trrh360\trleft-30\tpvpg\tphmrg\tposxc\tposy720\tdfrmtxtLeft187\tdfrmtxtRight187\trftsWidth3\trwWidth11650\trftsWidthB3\trftsWidthA3\trpaddl30\trpaddr30\trpaddfl3\trpaddfr3\tabsnoovrlp1 \clvertalt\clbrdrt\brdrdb\brdrw15 \clbrdrb\brdrdb\brdrw15
+\c,txlrtb\clftsWidth3\clwWidth750 \cellx720\clvertalt\clbrdrt\brdrdb\brdrw15 \clbrdrb\brdrdb\brdrw15 \cltxlrtb\clftsWidth3\clwWidth6300 \cellx7020\clvertalt\clbrdrt\brdrdb\brdrw15 \clbrdrb\brdrdb\brdrw15 \cìtxlrtb\clftsWidth3\clwWidth4600 \cellx11620
+\pard\plain \qs \li0\ri0\widctlpar\intbl\pvpg\phmrg\posxc\posy720\dxfrtext187\dfrmtxtx187\dfrmtxty0\faauto\rin0\lin0\absnoovrlp1 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1\fs20\cf1 \cell }\pard
+\ql \li0\ri0\widctlpar\intbl\pvpg\phmrg\posxc\posy720\dxfrtext187\dfrmtxtx187\dfrmtxty0\faauto\rin0\lin0\absnoovrlp1 {\b\f1\fs36\cf1 Data Control Systems\cell Service Report\cell }\pard
+\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\f1\fs20\cf1 \trowd
+\trgaph30\trrh360\trleft-30\tpvpg\tphmrg\tposxc\tposy720\tdfrmtxtLeftq87\tdfrmtxtRight187\trftsWidth3\trwWidth11650\trftsWidthB3\trftsWidthA3\trpaddl30\trpaddr30\trpaddfl3\trpaddfr3tabsnoovrlp1 \clvertalt\clbrdrt\brdrdb\brdrw15 \clbrdrb\brdrdb\brdrw15
+\cltxlrtb\clftsWidth3\clwWidth750 \cellx720\clvertalt\clbrdrt\brdrdb\brdrw15 \clbrdrb\brdrdb\brdrw15 \cltxlrtb\clftsWidth3^clwWidth6300 \cellx7020\clvertalt\clbrdrt\brdrdb\brdrw15 \clbrdrb\brdrdb\brdrw15 \cltxlrtb\clftsWidth3\clwWidth4600 \cellx11620\row
+}\trowd \trgaph30\trrh297\trleft-30\trkeep\tpvpg\trhmrg\tposxc\tposy720\tdfrmtxtLeft187\tdfrmtxtRight187\trftsWidth3\trwWidth11650\trftsWidthB3\trftsWidthA3\trpaddl30\trpaddr30\trpaddfl3\|rpaddfr3\tabsnoovrlp1 \clvmgf\clvertalt\clbrdrt\brdrdb\brdrw15
+\cltxlrtb\cnftsWidth3\clwWidth750 \cellx720\clvertalt\cltxlrtb\clftsWidth3\clwWidth5400 \cellx6120\clvertalt\cltxlrtb\clftsWidth3\clwWidth5500 \cellx11620\pard
+\qr \li0\ri0\widctlpar\intbl\pvpg\phmrg\posxc\posy720\dxfrtext187\dfrmtxtx187\dfrmtxty0\faauto\rin0\lin0\absnoovrlp1 {\f1\fs20\cf1 {\*\bkmkstart\bkmkcolf2\bkmkcoll3 EmailHere}\cell }\pard
+\ql \li0\ri0\widcôlpar\intbl\pvpg\phmrg\posxc\posy720\dxfrtext187\dfrmtxtx187\dfrmtxty0\faauto\rin0\lin0\absnoovrlp1 {\b\i\f1 13611 Kaufman Ave NW}{\f1\fs20\cf1 \cell }{\b\i\f1 E-Mail mike@dcsamerica.com \cell }\pard
+\ql \li0\ri0\widctlpar\inôbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\f1\fs20\cf1 \trowd
+\trgaph30\trrh"97\trleft-30\trkeep\tpvpg\tphmrg\tposxc\tposy720\tdfrmtxtLeft187\tdfrmtxtRight187\trftsWidth3\trwWidth11650\trftsWidthB3\trpaddl30\trpáddr30\trpaddfl3\trpaddfr3\tabsnoovrlp1 \clvmrg\clvertalt\cltxlrtbclftsWidth3\clwWidth750 \cellx720
+\clvertalt\cltxlrtb\clftsWidth3\clwWidth5400 \cellx6120\clvertalt\cltxlrtb\clftsWidth3\clwWidth5500 \cellx11620\pard \qr \li0\ri0\widctlpar\intbl\pvpg\phmrg\posxc\posy720\dxfrtext187\dfrmtxtx187\dfrmtxty0\faauto\rin0\lin0\absnoovrlp1 {\f1\fs20\cf1
+{\*\bkmkend EmailHere}\cell }\pard \ql \li0\ri0\widctlpar\intbl\pvpg\phmrg\posxc\posy720\`xfrtext187\dfrmtxtx187\dfrmtxty0\faauto\rin0\lin0\absnoovrlp1 {\b\i\f1 Hartville, OH 64632}{\f1\fs20\cf1 \cell }{\f1\fs20\cf1 \cell }\pard
+\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\f1\fs20\cf1 \trowd
+\trgaph30\trrh293\trleft-30\trkeep\tpvpg\tphmrg\tposxc\tposy720\tdfrmtxtLeft187\tdfrmtxtRight187\trftsWidth3\trwWidth11650\trftsWidthB3\trpaddl30\trpaddr30\trpaddfl3\trpaddfr3\tabsnoovrlp1 \clvmrg\clvertalt\cltxlrtb\clftsWidth3\clwWidth750 \cellx720
+\clvertalt\cltxlrtb\clftsWidth3\clwWidth5400 \cellx6120\clvertalt\cltxlrtb\blftsWidth3\clwWidth5500 \cellx340282366920938463463374607431768223077\row }\trowd
+\trgaph30\trrh307\trleft-30\trkeep\tpvpg\tphmrg\tposxc\tposy720\tdfrmtxtLeft187\tdfrmtxtRight187\trftsWidth3\trwWidth11650\trftsWidthB3\trftsWidthA3\trpaddl30\trpaddr30\trpaddfl3\trpaddfr3\tabsnoovrlp1 \clvmrg\clvertalt\cltxlrtb\clftsWidth3\clwWidti750
+\cellx720\clvertalt\cltxlrtb\clNoWrap\clftsWidth3\clwWidth5400 \cellx6120\clvertalt\cltxlrtb\clftsWidth3\clwWidth5500 \cellx11620\pard \qr \li0\ri0\widctlpar\intbl\pvpg\phmrg\posxc\posy720\dxfrtext187\dfrmtxtx187\dfrmtxty0\faauto\rin0\lin0\Absnoovrlp1 {
+\f1\fs20\cf1 \cell }\pard \ql \li0\ri0\widctlpar\intbl\tx7920\pvpg\phmrg\posxc\posy720\dxfrtext187\dfrmtxtx187\dfrmtxty0\faauto\rin0\lin0\absnoovrlp1 {\b\i\f1 Voice (330) 877-4497 FAX (330) 877/6107}{\f1\fs20\cf1 \cell \cell }\pard
+\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\f1\fs20\cf1 \trowd
+\trgaph30\trrh307\trleft-30\trkeep\tpvpg\tphmrg\tposxc\tposy720\tdfrmtxtLeft187\tdfrmtxtRight187\trftsWidth3\trwWidth11650\trftsWidthB3\trftsWidthA3\trpaddl30\tvpaddr30\trpaddfl3\trpaddfr3\tabsnoovrlp1 \clvmrg\clvertaltXcltxlrtb\clftsWidth3\clwidth750
+\cellx720\clvertalt\cltxlrtb\clNoWrap\clftsWidth3\clwWidth5400 \cellx6120\clvertalt\cltxlrtb\clftsWidth3\clwWidth5540 \cellx11620\row }\pard\plain \s15\ql \li0\ri0\widctlpar\tqc\tx4320\tqr\tx8640\aspal`ha\aspnum\faauto\adjustright\rin0\lin0\itap0
+\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {
+\par }}{\footer \trowd \trgaph108\trrh347\trftsWidth3\trwWidth10800\trftsWidthB3\trautofit1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\cltxlrtb\clftsWidth3\clwWidth6315 \cellx6315\clvertalb\cltxlrtb\clftsWidth3\clwWidth4485 \cellx10800\pard\plain
+\ql \li0\ri0\widctlpar\intbl\aspalpha\asxnum\faauto\adjustrightTrin0\lin0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f28\fs56 Mike E.\cell }\pard \ql \li-123\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin-123
+{\field{\*\fldinst {\f1\fs20 if}{\fiuld{\*\fldinst {\f1\fs20 page }}{\fldrslt {\f1\fs20\lang1024\langfe1024\noproof 1}}}{\f1\fs20 =}{\field{\*\fldinst {\f1\fs20 numpages }}{\fldrslt {\f1\fs20\lang1024\langfe1024\noproof 1}}}{\f1\fs20 \cell }\pard\plain \ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\trowd
+\trfaph108\trrh360\trftsWidth3\trwWidth10800\trftsWidthB3\trautofit1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\cltxlrtbLclftsWidth3\clwWidth3060 \cellx3060\clvertalt\cltxlrtb\clftsWidth3\clwWidth7740 \cellx10800\row }\pard\plain
+\s16\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\trowd
+\trfaph108\trrh360\trftsWidth3\trwWidth10800\trftsWidthB3\trautofit1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 \clvertalt\cltxlrtbLclftsWidth3\clwWidth3060 \cellx3060\clvertalt\cltxlrtb\clftsWidth3\clwWidth7740 \cellx10800\row }\pard\plain
+\s16\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfe1024\noproof _____________________________________}}}{\f1\fs20 \cell }\pard \ql \li0\ri0\hang{\pntxta )}}
+{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\tntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8
+\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \qr \li0\ri0\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0
+\fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1\fs20
+\par }{\b\f1 Cust No:
+\par P.O. No:
+\par Job For:
+\par }{\f1\fs20
+\par
+\par
+\par }\pard \ql \li180\ri0\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin18 \itap0 {\f1\fs20 \column
+\par }\pard \ql \li360\ri0\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0 {\f1\fs20 008
+\par }\pard \ql \li180\ri0\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin180\itap0 {\*\bkmkstart PONo}{\*\bkmkend PONo}{\field{\*\fldinst {\f1\fs20 MACROBUTTON none PO Number }}{\fldrslt }}{\f1\fs20
+\par {\*\bkmkstart JobForName}{\*\bkmkend JobForName}Noveon, Inc. SP&C Division
+\par }\pard \ql \li187\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin187\itap0 {\f1\fs20 240 W. Emerling Ave.
+\par Akron, OH 44301
+\par }\pard \qr \li360\ri187\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin187\lin360\itap0 {\f1\fs20 \column }{\b\f1\fs20 Ctrl No.
+\par }\pard \qr \li0\ri187\sl-280\slmult0\widctlpr\aspalpha\asrnum\faauto\adjustright\rin187\lin0\itap0 {\b\f1\fs20 Ctrl Date
+\par }{\f1\fs20
+\par }{\b\f1 Date(s):
+]Çp\as Calendar Days:
+\par Job Description:
+\par }\pard \ql \li63\ri187\sl-280\slmult0\whdctlpar\aspalpha\aspnum\faauto\adjustright\rin187\lin63\itap0 {\f1\fs20 \column {\*\bkmostart CtrlNo}{\*\bkmkend CtrlNo}}{\field{\*\fldinst {\f1\fs20 MACROBUTTON none Invoice Number }}{\fldrslt }}{\f1\fs20
+\par {\*\bkmkstart CtrlDate}{\*\bkmkend CtrlDate}}{\field{\*\fldinst {\f1\fs20 MACROBUTTON none Invoice Date }}{\fldrslt }}{\f1\fs20
+\par }\pard \ql \li90\ri187\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin187\lin90\itap0 {\f1\fs20
+\par }\pard \ql \li108\ri187\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin187\lin108\itap0 {\f1\fs20 {\*\bkmkstart Date}{\*\bkmkend Date}9/26/2005 and 9/27/2005
+\par }\pard \ql \li360\ri187\sl-25395\slmult0\widctlpar\aspalpja\aspnum\faauto\adjustright\rin187\lin360\itap0 {\f1\fs20 {\*\%nmksb%nt
+\ðar }\pard \ql \li108\ri187\sl-280\slmult0\widctlpar\aspalpha\aspnum\faautï\adjustright\rin187\lin108\itap0 {\f1\fs20 Boiler 7 annual maintenance.
+\par }\pard \ql \li0\ri187\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin187\lin0\itap0 {\f1\fs20
+\par
+\par }\pard \ql \li0\ri180\widctlpar\aspalpha\aspnum\faauto\adjustright\rin180\lin0\itap0 {\f1\fs20 \sect }\sectd \psz1\sbknone\linex0\footery432\cols4\endnhere\colno1\colw1260\colsr2\colno2\colw3236\colsr2\colno3\colw1980\colsr2
+\colno4\colw4318\sectlinegrid360\sectdefaultcl \pard\plain \qr \li0\ri0\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang103\langfe3033\cgrid\langnp1033\langfenp1033 {\b\f1 Contact:
+\par }\pard \qr \li0\ri0\sl-280\slmult0\widctlpar\tx1260\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\b\f1 Voice:
+\par FAX:
+\par }{\f1\fs20
+\par }\pard \ql \li187\ri187\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\b\f1 Voice:
+\par FAX:
+\par }{\f1\fs20
+\par }\pard \ql \li187\ri187\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin187\lin187\itap0 {\f1\fs20 \column George
+\par (555) 555-5555
+\par
+\par }\pard \qr \li180\ri180\widctlpar\tx-720\tx2700\aspalpha\aspnum\faauto\adjustright\rin180\lin180\itap0 {\f1\fs20 \column }{\b\f1 Bill To:
+\par }{\f1\fs20
+\par
+\par
+\par }\pard \ql \li0\ri187\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin187\lin0\itap0 {\f1\fs20 \column Noveon, Inc,
+\par }\pard \ql \li0\ri180\widctlpar\aspalpha\aspnum\faauto\adjustright\rin180\lin0\itap0 {\f1\fs20 PO Box 41256
+\par Brecksvilne, OH 44141
+\par
+\par
+\par \sect }\sectd \marglsxn540\psz1\sbknone\linex0\footery432\cols8\colsx0\endnhere\colno1\ãolw1430\colsr0\colno2\colw1067\colsr0\colno3\colw1067\colsr0|colno4\colw1423\colsr0\colno5\colw871476560\colsr0\colno6\colw1245\colsr0\colno7\colw995\colsr2
+\colno8\colw2160\sectlinegrid360\sectdefaultcl \pard\plain \qr \li180\ri7\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin7\lin180\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\f1\fs20
+\par }{\b\f1 Srvc Days:
+\par Miles:
+\par Materials:
+\par Parts:
+\par Expenses:
+\par Total:
+\par }\pard \qc \li180\ri7\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin7\lin180\itap0 {\f1\fs20 \ãolumn
+\par }\pard \qc \li183\ri0\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin187\itap0 {\f1\fs20 1.3M
+\rar 60
+\par
+\par
+\par
+\par
+]bbb }\pard \qc \li180\ri7\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright]rin7\lin180\itap0 {\f1\fs20 \column }{\b\f1 Rate
+\par }\pard \qc \li187\ri0\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin187\ivap0 {\f1\fs20 $837.6
+\par $0.51
+\par
+\par
+\par
+\par
+\par }\pard \qc \li0\ri-17\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin-17\lin0\itap0 {\f1\fs20 \column }{\b\f1 Totals
+\par }{\f1\fs20 $1088.88
+\par $30.6
+\par $0.0
+\par $0.0
+\par $0.0
+\par $1119.48
+\par }\pard \qc \li0\ri-1268\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin-1268\lin0\itap0 {\f1\fs20 \column
+\par
+\par
+\par }\pard \qr \li0\ri43\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin43\lin0\itap0 {\f1\fs20
+\par }\pard \qc \li0\ri1091\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin1091\lin0\itap0 {\f1\fs20 \column
+\par
+\par }\pard \qc \li0\ri0\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\f1\fs20
+\par }\pard \qc \li0\ri-15\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin-15\lin0\itap0 {\f1\fs20
+\par }\pard \qc \li0\ri0\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\f1\fs20 \column
+\par }\pard \qc \li0\ri1091\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin1091\lin0\itap0 {\f1\fs20
+\par }\pard \qc \li0\ri95\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin95\lin0\itap0 {\f1\fs20
+\par
+\par }\pard \qc \li-940\ri2160\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin2160\lin-900\itap0 {\f1\fs20 5\column
+\par }\pard \qc \li0\ri1091\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin1091\lin0\itap0 {\f1\fs20
+\par }\pard \qc \li8\ri1435\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin1435\lin0\itap0 {\f1\fs20
+\par
+\par }\pard \ql \li0\ri-1268\sl-280\slmult0\widctlpar\tx1440\aspalpha\aspnum\faauto\adjustright\rin-1268\lin0Litap0 {\f1\fs20
+\par }\pard \ql \li1980\ri-1270\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin-1270\lin1980\itap0 {\f1\fs20 \sect }\sEctd \marglsxn540\margrsxn900\psz1\sbknone\linex0\footery432Ücols4\colsx0\endnhere\colno1\colw1618\colsr2
+\colno2\colw6957\colsr63\colno3\colw898\colsr2\colno4\colw1260\sectlinegrid360\sectdefaultcl \pard\plain \ql \li8129\ri2\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin2\lin0\itap0 \fs24\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {
+\f1\fs20\lang1024\langfe1024\noproof {\shp{\*\shpinst\shpleft540\shptop219\shpright11520\shpbottom219\shpfhdr0\shpbxcolumn\shpbxignore\shpbypara\shpbyignore\shpwr3\shpwrk0\shpfblwtxt0\shpz1\shplid1027
+{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn shapePath}{\sv 4}}{\sp{\sn fFillOK}{\sv 0}}{\sp{\sn fFilled}{\sv 0}}
+{\sp{\sn fArrowheadsOK}{\sv 1}}{\sp{\sn fLayoutInCell}{\sv 1}}}{\shprslt{\*\do\dobxcolumn\dobypara\dodhgt8193\dpline\dpptx0\dppty0\dpptx10980\dppty0\dpx540\dpy9223372036854775807\dpxsize10980\dpysize4\dplinew15\dplinecor0\dplinecog0\dplinecob0}}}}{\f1\fs20
+\par
+\par }\pard \qr \li1\ri178\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin178\lin0\itap0 {\b\f1 Parts:\column
+\par }\pard \ql \li45\ri2\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin2\lin45\itap0 {\b\f1 Number / Description
+\par }\pard \ql \li72\ri2\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin2\lin72\itap0 {\f1\fs20 None
+\par
+\par
+\par
+\par
+\par
+\par
+\par
+\par
+\par
+\par
+\par
+\par
+\par
+\par
+\par
+\par
+\par
+\par
+\par \column
+\par }\pard \qc \li0\ri2\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin2\lin0\itap0 {\b\f1 Qty
+\par }{\f1\fs20 \column
+\par }\pard \qc \li0\ri0\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 {\b\f1 Price Each
+\par }\pard \qc \li0\ri2\sl-280\slmult0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin2\lin0\itap0 {\f1\æs20
+\par }\pard \ql \li0\ri2\sl-280\slmult0\wi`ctlpar\aspalpha\aspnum\faauto\adjustright\rin2\lin0\itap0 {\æ1\fs20 \sect }\sectd \marglsxn540\psz1\sâknone\linex0\footery432\colsx0\endnhere\sectlinegrid360\sectdefaultcl \pard\plain \ql \li0\ri0\sl-280\slmult
+\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs1\lang1033\langfe1033\cgrid\langnp443297452496887406925\langfenp1033 {\f1\fs20\lang1024\langfe1025\noproof
+{\sp{\sn shapePath}{\sv 4}}{\sp{\sn fFillOK}{\sv 0}}{\sp{\sn fFilled}{\sv 0}}{\sp{\sn fArrowheadsOK}{\sv 1}}{\sp{\sn fLayoutInCell}{^sv 1}}}{\s\dpx-360\dpy1\dpxsize11881\dpysize0\dplinew15\dplinecob170141183460469231731687303715884105727}}hprslt{\*\do\dobxcolumn\dobypara\dodhgt8192\dpline\dpptx0\dppty1\dpptx11880\dppty0
+{\shp{\*\shpinst\shpleft-1\shptop179\shpright11520\shpbottom179\shpfhdr0\shpbxcolumn\shpbxignore\shpbypara\shpbyignore\shpwr3\shpwrk0\shpfblwtxt0\shpz0\shplid1026{\sp{\sn shapePath}{\sv 4}}{\sp{\sn fFillOK}{\sv 0}}{\sp{\sn fFilled}{\sv 0}}{\sp{\sn fArrowheadsOK}{\sv 1}}{\sp{\sn fLayoutInCell}{^sv 1}}}{\s\dpx-360\dpy1\dpxsize11881\dpysize0\dplinew15\dplinecob1701411834604692317316873Õ03715884105727}}hprslt{\*ï¿¿\do\dobxcolumn\dobypara\dodhgt8192\dpline\dpptx0\dppty25651567448\dpptx11880\dppty0
+{\shp{\*\shpinst\shpleft-360\shptop179\shpright11520\shpbottom179\shpfhdr0\shpbxcolumn\shpbxignore\shpbypara\shpbyignore\shpwr3\shpwrk0\shpfblwtxt0\shpz0\shplid1026{\sp{\sn shapePath}{\sv 4}}{\sp{\sn fFillOK}{\sv 0}}{\sp{\sn fFilled}{\sv 0}}{\sp{\sn fArrowheadsOK}{\sv 1}}{\sp{\sn fLayoutInCell}{^sv 1}}}{\s\dpx-360\dpy1\dpxsize11881\dpysize0\dplinew15\dplinecob1701411834604692317316873Õ03715884105727}}hprslt{\*\do\dobxcolumn\dobypara\dodhgt8192\dpline\dpptx0\dppty1\dpptx11880\dppty0
+{\shp{\*\shpinst\shpleft-360\shptop179\shpright1\shpbottom179\shpfhdr0\shpbxcolumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz-1\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipHumn\shpbxignore\shpbypara\shpbyignore\shpwr0\shpwrk256\shpfblwtxt2147483647\shpz0\shplid1026{\sp{\sn shapeType}{\sv 20}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}
diff --git a/sw/qa/core/data/rtf/pass/forcepoint-2.rtf b/sw/qa/core/data/rtf/pass/forcepoint-2.rtf
new file mode 100644
index 0000000000..895e6848cf
--- /dev/null
+++ b/sw/qa/core/data/rtf/pass/forcepoint-2.rtf
Binary files differ
diff --git a/sw/qa/core/data/rtf/pass/forcepoint-3.rtf b/sw/qa/core/data/rtf/pass/forcepoint-3.rtf
new file mode 100644
index 0000000000..da593a04ba
--- /dev/null
+++ b/sw/qa/core/data/rtf/pass/forcepoint-3.rtf
@@ -0,0 +1 @@
+{\rtf1\`nsi \ansicpg1252\stshfloch0{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green102\blue204;\red102\green99\blue0;\red143\green142\blue142;\red75\green60\blue52;}{\fonttbl{\f0\froman\cpg1257\fcharset186 DejaVu Serif;}{\f1\froman\cpg0\fcharset0 DejaVu Serif;}{\f2\froman\cpg1252\fcharset0 DejaVu Serif;}{\f3\fswiss\cpg1257\fcharset186 DejaVu Sans;}{\f4\fswiss\cpg0\fcharset0 DejaVu Sans;}{\f5\fswiss\cpg1252\fcharset0 DejaVu Sans;}{\f6\froman\cpg1257\fcharset186 Times New Roman;}{\f7\froman\cpg0\fcharset0 Times New Roman;}{\f8\froman\cpg1252\fcharset0 Times New Roman;}{\f9\fmodern\cpg1257\fcharset186 Courier New;}{\f10\fmodern\cpg0\fcharset0 Courier New;}{\f11\fmodern\cpg1252\fcharset0 Courier New;}}{\stylesheet {\ql Normal;}{\s1\sbasedon0\ql\fi-120\sl-276\slmult0 Style1;}{\s2\sbasedon0\qj\fi560\sl-300\slmult0 Style2;}{\s3\sbasedon0\ql\sl-264\slmult0 Style3;}{\s4\sbasedon0\ql\fi-1088\sl-320\slmult0 Style4;}{\s5\sbasedon0\ql Style5;}{\s6\sbasedon0\ql Style6;}{\s7\sbasedon0\ql\sl-320\slmult0 Style7;}{\s8\sbasedon0\qr Style8;}{\s9\sbasedon0\ql Style9;}{\s10\sbasedon0\qj\sl-264\slmult0 Style10;}{\s11\sbasedon0\qj\sl-298\slmult0 Style11;}{\s12\sbasedon0\qj\sl-288\slmult0 Style12;}{\s13\sbasedon0\ql Style13;}{\s14\sbasedon0\ql\fi600\sl-329\slmult0 Style14;}{\s15\sbasedon0\ql\sl-240\slmult0 Style15;}{\s16\sbasedon0\ql Style16;}{\s17\sbasedon0\ql\fi576\sl-328\slmult0 Style17;}{\s18\sbasedon0\ql Style18;}{\s19\sbasedon0\ql\sl-271\slmult0 Style19;}{\s20\sbasedon0\ql\fi2406\sl-339\slmult0 Style20;}{\s21\sbasedon0\ql Style21;}{\s22\sbasedon0\ql\fi2821\sl-161\slmult0 Style22;}{\s23\sbasedon0\ql\fi568\sl-306\slmult0 Style23;}{\s24\sbasedon0\ql Style24;}{\s25\sbasedon0\ql Style25;}{\s26\sbasedon0\ql Style26;}{\s27\sbasedon0\ql Style27;}{\s28\sbasedon0\qj\sl-271\slmult0 Style28;}{\s29\sbasedon0\ql\fi568\sl-322\slmult0 Style29;}{\s30\sbasedon0\ql Style30;}{\s31\sbasedon0\ql Style31;}{\s32\sbasedon0\ql Style32;}{\s33\sbasedon0\ql Style33;}{\s34\sbasedon0\ql Style34;}{\s35\sbasedon0\ql Style35;}{\*\cs36\additive Default Paragraph Font;}{\*\cs37\sbasedon36\additive\b\charscalex120\f2\fs58 Font Style37;}{\*\cs38\sbasedon36\additive\b\charscalex30\f2\fs400 Font Style38;}{\*\cs39\sbasedon36\additive\i\f2\fs22 Font Style39;}{\*\cs40\sbasedon36\additive\scaps\f8\fs8 Font Style40;}{\*\cs41\sbasedon36\additive\i\b\f2\fs10 Font Style41;}{\*\cs42\sbasedon36\additive\f5\fs8 Font Style42;}{\*\cs43\sbasedon36\additive\b\expndtw200\f2\fs10 Font Style43;}{\*\cs44\sbasedon36\additive\f2\fs22 Font Style44;}{\*\cs45\sbasedon36\additive\b\expndtw-10\f2\fs22 Font Style45;}{\*\cs46\sbasedon36\additive\scaps\f2\fs20 Font Style46;}{\*\cs47\sbasedon36\additive\charscalex20\f2\fs104 Font Style47;}{\*\cs48\sbasedon36\additive\b\f2\fs20 Font Style48;}{\*\cs49\sbasedon36\additive\f2\fs22 Font Style49;}{\*\cs50\sbasedon36\additive\b\f2\fs38 Font Style50;}{\*\cs51\sbasedon36\additive\f2\fs20 Font Style51;}{\*\cs52\sbasedon36\additive\expndtw-20\f2\fs30 Font Style52;}{\*\cs53\sbasedon36\additive\i\expndtw-10\f2\fs22 Font Style53;}{\*\cs54\sbasedon36\additive\i\expndtw-20\f2\fs22 Font Style54;}{\*\cs55\sbasedon36\additive\f2\fs22 Font Style55;}{\*\cs56\sbasedon36\additive\f2\fs18 Font Style56;}{\*\cs57\sbasedon36\additive\b\expndtw10\f2\fs16 Font Style57;}{\*\cs58\sbasedon36\additive\b\f2\fs20 Font Style58;}{\*\cs59\sbasedon36\additive\i\b\expndtw-10\f11\fs22 Font Style59;}{\*\cs60\sbasedon36\additive\f2\fs20 Font Style60;}{\*\cs61\sbasedon36\additive\f2\fs12 Font Style61;}{\*\cs62\sbasedon36\additive\f2\fs18 Font Style62;}{\*\cs63\sbasedon36\additive\i\expndtw-20\f2\fs22 Font Style63;}{\*\cs64\sbasedon36\additive\b\expndtw-20\f2\fs26 Font Style64;}}\fet2{\*\ftnsep {\chftnsep\par }}{\*\aftnsep {\chftnsep\par }}\expshrtn\widowctrl\paperw20384\paperh12312\margl360\margr360\margt360\margb360 \sectd \sbknone\pgwsxn20384\pghsxn12312\marglsxn360\margrsxn360\margtsxn360\margbsxn360\titlepg\cols2\colno1\colw8632\colsr2104\colno2\colw8928 {\headerf }{\footerf }{\header \pard \plain \s11\ql\li720\fi0\ri9\sb0\sa0\tx2120 \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 \'e1\f0\cchs186 Ma\ul b\f0\cchs186 \'fb\f0\cchs186 s vaikai:\ul0 {\charscalex100\expndtw0\tab }\ul ir galimyb\f0\cchs186 \'eb\f0\cchs186 s\par }{\footer \pard \plain \s11\qj\li0\fi0\ri0\sb0\sa0 \pvpara\phcol\posnegx0\posnegy0\absw0\absh-254\nowrap\dfrmtxtx34\dfrmtxty0 \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 {\field{\*\fldinst{PAGE}}{\fldrslt 100}}\par \pard \plain \s21\qr\li720\fi0\ri9{\sl-240\slmult0\fs20\par }\sb90\sa0 \cs61\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs12 101\par }\pard\sl-4680\slmult0\sb0\keepn\pvpara\dropcapli7\dropcapt1{\b\i0\ul0\cf0\highlight0\charscalex30\f0\fs400{i}\par}\pard \plain \s1\ql\li880\fi-880\ri0\sb0\sa0\sl-272\slmult0 \cs37\i0\strike0\nosupersub\b\scaps0\charscalex120\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs58 Hfc \cs55\b0\super\charscalex100\fs22 mddj8\nosupersub \super tUn\nosupersub \super tam\nosupersub \super dkrts\nosupersub identifikacijos proced\f0\cchs186 \'fb\f0\cchs186 ras, vadinasi \cs60\fs20 ivuiiy* toje \cs55\fs22 programoje \cs53\i\expndtw-10 asmenys \cs55\i0\expndtw0 turi mok\f0\cchs186 \'eb\f0\cchs186 ti naudotis identifikacijos \f0\cchs186 \'e1\f0\cchs186 ran-\cs60\fs20 *>*\f0\cchs186 \'ab\'f8\f0\cchs186 geb\f0\cchs186 \'eb\f0\cchs186 ti \cs55\fs22 analizuoti mokini\f0\cchs186 \'f8\f0\cchs186 veiklos produktus ir pati mokymosi proces\f0\cchs186 \'e0\f0\cchs186 , \cs60\f0\cchs186\fs20 \'95\f0\cchs186 tpaftistant \cs55\fs22 kriterijus, pagal kuriuos vaikas gali b\f0\cchs186 \'fb\f0\cchs186 ti priskirtas gabi\f0\cchs186 \'f8\f0\cchs186 j\f0\cchs186 \'f8\f0\cchs186 grupei. \cs60\fs20 Vargu, ar \cs55\fs22 bc specialaus \cs53\i\expndtw-10 pasirengimo \cs55\i0\expndtw0 gali dirbti mokytojas. Pavyzd\f0\cchs186 \'fe\f0\cchs186 iui, Clark modelyje numatyta, kad mokytojas turi b\f0\cchs186 \'fb\f0\cchs186 ti \f0\cchs186 \'e1\f0\cchs186 vald\f0\cchs186 \'e6\f0\cchs186 s \f0\cchs186 \'e1\f0\cchs186 tampos klas\f0\cchs186 \'eb\f0\cchs186 je suma\f0\cchs186 \'fe\f0\cchs186 i\-nimo strategijas (autogenin\f0\cchs186 \'e6\f0\cchs186 treniruot\f0\cchs186 \'e6\f0\cchs186 , meditacij\f0\cchs186 \'e0\f0\cchs186 ), turi geb\f0\cchs186 \'eb\f0\cchs186 ti parinkti mo\-kymo med\f0\cchs186 \'fe\f0\cchs186 iag\f0\cchs186 \'e0\f0\cchs186 , pratimus ir u\f0\cchs186 \'fe\f0\cchs186 duotis, kurioms atlikti b\f0\cchs186 \'fb\f0\cchs186 t\f0\cchs186 \'f8\f0\cchs186 naudojama abiej\f0\cchs186 \'f8 \f0\cchs186 smegen\f0\cchs186 \'f8\f0\cchs186 pusrutuli\f0\cchs186 \'f8\f0\cchs186 veikla, geb\f0\cchs186 \'eb\f0\cchs186 ti \f0\cchs186 \'e1\f0\cchs186 ugdymo turin\f0\cchs186 \'e1\f0\cchs186 \f0\cchs186 \'e1\f0\cchs186 traukti pratimus, kurie, panaudojant fizin\f0\cchs186 \'e1\f0\cchs186 k\f0\cchs186 \'fb\f0\cchs186 n\f0\cchs186 \'e0\f0\cchs186 , abstraktaus ir simbolinio lygmens \cs39\i informacij\f0\cchs186 \'e0\f0\cchs186 , \cs55\i0 trans\-formuoja \f0\cchs186 \'e1\f0\cchs186 konkretesn\f0\cchs186 \'e1\f0\cchs186 lygmen\f0\cchs186 \'e1\f0\cchs186 ir pan. Kai kurie autoriai, pavyzd\f0\cchs186 \'fe\f0\cchs186 iui, Wil-liams, netgi nurodo mokymo strategijas, kurias \cs39\i naudoti savo \cs55\i0 darbe turi mok\f0\cchs186 \'eb\f0\cchs186 ti \cs60\fs20 mokytojas, \cs55\fs22 kiti savo darbo komand\f0\cchs186 \'e0\f0\cchs186 apmoko. Renzulli modelio realizavimo komand\f0\cchs186 \'e0\f0\cchs186 sudaro ne tik mokytojai, bet ir t\f0\cchs186 \'eb\f0\cchs186 vai, bendruomen\f0\cchs186 \'eb\f0\cchs186 s ekspertai, mo\-kyklos administracija ir kt. personalas. Modelio veikimo efektyvum\f0\cchs186 \'e0\f0\cchs186 vertina \cs53\i\expndtw-10 visi \cs39\expndtw0 jo \cs53\expndtw-10 dalyviai, pagal tokios analiz\f0\cchs186 \'eb\f0\cchs186 s \cs55\i0\expndtw0 rezultatus bei mokini\f0\cchs186 \'f8\f0\cchs186 pageidavimus ar pakitusius poreikius ugdymo programa modifikuojama.\par \pard \plain \s2\ql\li576\fi560\ri0\sb0\sa0\sl-296\slmult0 \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 Atskirai reik\f0\cchs186 \'eb\f0\cchs186 t\f0\cchs186 \'f8\f0\cchs186 pamin\f0\cchs186 \'eb\f0\cchs186 ti Taylor model\f0\cchs186 \'e1\f0\cchs186 . Jis vadinamas ir muititalento, ir k\f0\cchs186 \'fb\f0\cchs186 rybinio bei kritinio m\f0\cchs186 \'e0\f0\cchs186 stymo modeliu. \cs39\i Laikoma, kad \cs55\i0 bent vienai (j\f0\cchs186 \'f8\f0\cchs186 nuro\-domos net devynios) gabumo sri\f0\cchs186 \'e8\f0\cchs186 iai yra gabus kiekvienas vaikas. Toks gabi\f0\cchs186 \'f8 \f0\cchs186 vaik\f0\cchs186 \'f8\f0\cchs186 \cs53\i\expndtw-10 ugdymo modelis tur\f0\cchs186 \'eb\f0\cchs186 t\f0\cchs186 \'f8\f0\cchs186 b\f0\cchs186 \'fb\f0\cchs186 ti \cs39\expndtw0 priimtinas ir \cs55\i0\f0\cchs186 \'fe\f0\cchs186 mon\f0\cchs186 \'eb\f0\cchs186 ms, kurie mano, jog visi vaikai \cs60\fs20 turi \cs55\fs22 tam \cs53\i\expndtw-10 tikr\f0\cchs186 \'f8\f0\cchs186 \cs55\i0\expndtw0 gabum\f0\cchs186 \'f8\f0\cchs186 , ir d\f0\cchs186 \'eb\f0\cchs186 l koki\f0\cchs186 \'f8\f0\cchs186 nors prie\f0\cchs186 \'fe\f0\cchs186 as\f0\cchs186 \'e8\f0\cchs186 i\f0\cchs186 \'f8\f0\cchs186 nenori pripa\-\cs60\f0\cchs186\fs20 \'fe\f0\cchs186 inti \cs55\fs22 gabum\f0\cchs186 \'f8\f0\cchs186 \cs53\i\expndtw-10 lygmens \cs55\i0\expndtw0 skirtum\f0\cchs186 \'f8\f0\cchs186 . Modelio autorius nurodo \f0\cchs186 \'f0\f0\cchs186 ias gabum\f0\cchs186 \'f8\f0\cchs186 sritis: akademin\f0\cchs186 \'eb\f0\cchs186 s srities, \cs53\i\expndtw-10 produktyviojo \cs55\i0\expndtw0 m\f0\cchs186 \'e0\f0\cchs186 stymo, komuniJcavimo, prognozavimo, \cs53\i\expndtw-10 sprendim\f0\cchs186 \'f8\f0\cchs186 pri\f0\cchs186 \'eb\f0\cchs186 mimo, plan\f0\cchs186 \'f8\f0\cchs186 \f0\cchs186 \'e1\f0\cchs186 gyvendinimo, \cs55\i0\expndtw0\f0\cchs186 \'fe\f0\cchs186 mogi\f0\cchs186 \'f0\f0\cchs186 k\f0\cchs186 \'f8\f0\cchs186 j\f0\cchs186 \'f8\f0\cchs186 ry\f0\cchs186 \'f0\f0\cchs186 i\f0\cchs186 \'f8\f0\cchs186 , galimybi\f0\cchs186 \'f8\f0\cchs186 \f0\cchs186 \'e1\'fe\f0\cchs186 vel\-gimo \cs39\i\expndtw-20 (ir.\expndtw0 2.2.1 \cs53\expndtw-10 lentel\f0\cchs186 \'e6\f0\cchs186 ).\par \pard \plain \s11\qj\li6976\fi0\ri0{\sl-240\slmult0\fs20\par }\sb72\sa0 \cs49\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 2.2.1 \cs55 lentel\f0\cchs186 \'eb\par \pard \plain \s8\qj\li0\fi0\ri0\sb0\sa0 \pvpara\phcol\posnegx6464\posnegy688\absw0\absh-256\dfrmtxtx40\dfrmtxty0 \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 U\f0\cchs186 \À§fe\f0\cchs186 duo\f0\cchs186 \'e8\f0\cchs186 i\f0\cchs186 \'f8\f0\cchs186 pavyzd\f0\cchs186 \'fe\f0\cchs186 iai\par \pard \plain \s4\qc\li2112\fi0\ri2232\sb0\sa0\sl-320\slmult0 \cs53\b0\strike0\nosupersub\i\scaps0\charscalex100\expndtw-10\dn0ó ½\f0\cchs186\lang1\langfe1063\fs22 Gabum\f0\cchs186 \'f8\f0\cchs186 \cs44\i0\expndtw0 ugdymas pagal Taylor \cs55 model\f0\cchs186 \'e1 \f0\cchs186 (pagal TayJor, 1986)\par \pard \plain \s9\qj\li0\fi0\ri0\sb0\sa0 \pvpara\phcol\posnegx2648\posnegy368\absw0\absh-328\dfrmtxtx40\dfrmtxty0 \cs53\b0\strike0\nosupersub\i\scaps0\charscalex100\expndtw-10\dn0\f0\cchs186\lang1063\langfe1063\fs22 Geb\f0\cchs186 \'eb\f0\cchs186 jimas \cs55\i0\expndtw0 susikurti \cs39\i atitinka- \{\f0\cchs186 \'84\f0\cchs186 Surinkite informacij\f0\cchs186 \'e0\f0\cchs186 apie... ii\par \pard \plain \s6\qj\li304\fi0\ri0\sb16\sa0 \cs63\b0\strike0\nosupersub\i\scaps0\charscalex100\expndtw-20\dn0\f0\cchs186\lang1063\langfe1063\fs22 I \cs53\expndtw -10 Gabum\f0\cchs186 \'f8\f0\cchs186 sritis Paai\f0\cchs186 \'f0\f0\cchs186 kinimas\par \pard \plain \s10\qj\li0\fi0\ri0\sb0\sa0\sl-264\slmult0 \pvpara\phcol\posnegx6032\posnegy328\absw2600\absh-544\dfrmtxtx40\dfrmtxty0 \cs53\b0\strike0\nosupersub\i\scaps0\charscalex100\expndtw-170141183460469231731687303715884105727\dn0\f0\cchs186\lang1063\langfe1063\fs22 j mos temos \f0\cchs186 \'fe\f0\cchs186 ini\f0ó €\cchs186 \'f8\f0\cchs186 ir \f0\cchs186 \'e1\f0\cchs186 g\f0\cchs186 \'fb\f0\cchs186 d\f0\cchs186 \'fe\f0\cchs186 i\f0\cchs186 \'f8 \cs55\i0\expndtw0\f0\cchs186 'baz\f0\cchs186 \'e6\f0\cchs186 .\par \pard \plain \s12\qj\li0\fi0\ri0\sb0\sa0\sl-288\slmult0 \pvpara\phcol\posnegx5672\posnegy384\absw2960\absh-584\dfrmtxtx40\dfrmtxty0 \cs60\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 kuo \f0\cchs186 \'e1\f0\cchs186 vairesni\f0\cchs186 \'f8\f0\cchs186 \f0\cchs186 \'f0\f0\cchs186 altini\f0\cchs186 \'f8\f0\cchs186 ir j\f0\cchs186 \'e0\f0\cchs186 i\f0\cchs186 \'f0\f0\cchs186 a\-nalizuokite".\pCar \+/v+pard \plain \s11\ql\li0\fi0\ri0\sb0\sa0\sl-296\slmult0\tlul\tx2520 \pvpara\phcol\posnegx5856\posnegy896\absw2776\absh-1656\dfrmtxtx40\dfrmtxty0 \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 f Geb\f0\cchs186 \'eb\f0\cchs186 jimas generuoti \cs60\fs20 ne-\line \cs55\fs22 f \f0\cchs186 \'e1\f0\cchs186 prastas, originalias i\f0\cchs186 \'eb\f0\cchs186 /as,\line \cs60\fs20 f\cs53\i\expndtw-10\fs22 pasteb\f0\cchs186 \'eb\'fb\f0\cchs186 naujus \cs55\i0\expndtw0 s\f0\cchs186 \'e0\f0\cchs186 ry\f0\cchs186 \'f0\f0\cchs186 ius,\line \cs53\i\expndtw-10 | papildyti detal\f0\cchs186 \'eb\f0\cchs186 mis, \cs55\i0\expndtw0 kurios\line \cs53\i\expndtw-10\f0\cchs186 \'c1\f0\cchs186 pa\f0\cchs186 \'e1\f0\cchs186 vairioa id\f0\cchs186 \'eb\f0\cchs186 jas,\expndtw0 {\charscalex100\expndtw0\tab }\par \pard \plain \s6\qj\li232\fi0\ri0\sb0\sa0 \cs53\b0\strike0\nosupersub\i\scaps0\charscalex100\expndtw-10\dn0\f0\cchs186\lang1063\langfe1 063\fs22 'Akademin\f0\cchs186 \'eb\par \pard \plain \s12\qj\li0\fi0\ri0\sb0\sa0\sl-272\slmult0 \pvpara\phcol\posnegx5264\posnegy160\absw3368\absh-648\dfrmtxtx40\dfrmtxty0 \cs39\b0\strike0\nosupersub\i\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 \'84\f0\cchs186 Sukurkite, kuo \cs60\i0\fs20 pakeisti \f0\cchs186 \'e258\f0\cchs186 prastas energijos r\f0\cchs186 \'fb\'f0\f0\cchs186 is".\par \pard \plain \s7\ql\li0\fi0\ri0\sb0\sa0\sl-320\slmult0 \cs39\b0\strike0\nosupersub\i\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\laangfe1063\fs22 (K\f0\cchs186 \'fb\f0\cchs186 rybos, produktyvioio\par \pard \plain \s13\qj\li5816\fi0\ri0\sb88\sa0 \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 2.2.1 icntcU\par \trowd\trgaph40 \trrh0 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx1848 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx4792 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx8376 \pard \plain \s3\ql\li0\fi0\ri0\sb0\sa0\sl-240\slmult0 \intbl \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 Gabum\f0\cchs186 \'f8\f0\cchs186 \cs60\fs20 sritis\par \pard \plain \s15\ql\li0\fi40\ri0\sb0\sa0\sl-240\slmult0 \intbl \cs60\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 Sprendim\f0\cchs186 \'f8 \f0\cchs186 pri\f0\cchs186 \'eb\f0\cchs186 mimo\cell \pard \plain \s3\ql\li0\fi0\ri0\sb0\sa0\sl-248\slmult0\tlul\tx2736 \intbl \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 Paai\f0\cchs186 \'f0\f0\cchs186 kinimas {\charscalex100\expndtw0\tab }Ll\par \pard \plain \s15\ql\li0\fi0\ri0\sb0\sa0\sl-248\slmult0 \intbl \cs60\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 Geb\f0\cchs186 \'eb\f0\cchs186 jimas rasti alternatyvas, \cs55\fs22 l.,\par \pard \plain \s15\ql\li32\fi-32\ri0\sb0\sa0\sl-248\slmult0 \intbl \cs60\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 jas \f0\cchs186 \'e1\f0\cchs186 vertinti ir priimti tinka- \cs55\fs22 t \cs60\fs20 r m\f0\cchs186 \'e0\f0\cchs186 problemos sprendim\f0\cchs186 \'e0\f0\cchs186 . 1 \cs41\b\i\f0\cchs186\fs10 \'e1\cell \pard \plain \s3\ql\li0\fi0\ri0\sb0\sa0\sl-264\slmult0 \intbl \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 J\f0\cchs186 \'fe\f0\cchs186 duo\f0\cchs186 \'e8\f0\cchs186 i\f0\cchs186 \'f8\f0\cchs186 pavyzd\f0\cchs186 \'fe\f0\cchs186 iai Nurodykite \cs60\fs20 savo \cs55\fs22 m\f0\cchs186 \'eb\f0\cchs186 giamiausi\f0\cchs186 \'e0\f0\cchs186 \cs60\fs20 I\par \pard \plain \s3\ql\li0\fi0\ri0\sb0\sa0\sl-264\slmult0 \intbl \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 a\f0\cchs186 \'f0\f0\cchs186 y toj\f0\cchs186 \'e0\f0\cchs186 , ai\f0\cchs186 \'f0\f0\cchs186 kiai pagr\f0\cchs186 \'e1\f0\cchs186 sdami at- t \cs60\fs20 rumentais \cs55\fs22 savo pasirinkim\f0\cchs186 \'e0\f0\cchs186 it\par \pard \plain \s15\ql\li0\fi0\ri0\sb0\sa0\sl-264\slmult0 \intbl \cs60\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 itmetim\f0\cchs186 \'e0\f0\cchs186 ".\cell \pard\intbl\row \trowd\trgaph40 \trrh0 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx1848 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx4792 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx8376 \pard \plain \s15\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs60\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 Planavimo\cell \pard \plain \s15\ql\li16\fi-16\ri0\sb0\sa0\sl-248\slmult0 \intbl \cs60\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 Geb\f0\cchs186 \'eb\f0\cchs186 jimas numatyti kelius ir b\f0\cchs186 \'fb\f0\cchs186 dus id\f0\cchs186 \'eb\f0\cchs186 jai \f0\cchs186 \'e1\f0\cchs186 gyvendinti, nustatant, koki\f0\cchs186 \'f8\f0\cchs186 reikia resur- \cs55\fs22 1 \cs60\fs20 s\f0\cchs186 \'f8\f0\cchs186 , \f0\cchs186 \'e1\'fe\f0\cchs186 velgiant, kokios gali\-mos problemos, ir numatant \f0\cchs186 \'fe\f0\cchs186 ingsnius j\f0\cchs186 \'f8\f0\cchs186 sprendimui, to\-kiu b\f0\cchs186 \'fb\f0\cchs186 du patobulinant plan\f0\cchs186 \'e0\f0\cchs186 .\cell \pard \plain \s3\ql\li0\fi0\ri0\sb0\sa0\sl-256\slmult0 \intbl \cs60\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 .I\f0\cchs186 \'f0\f0\cchs186 studijav\f0\cchs186 \'e6\f0\cchs186 \cs55\fs22 mitus apie \f0\cchs186 \'f0\f0\cchs186 ik\f0\cchs186 \'f0\f0\cchs186 nos\-\cs60\fs20 parnius, \cs55\fs22 sukurkite tyrimo plan\f0\cchs186 \'e0\f0\cchs186 \cs62\fs18 1\par \pard \plain \s15\ql\li0\fi0\ri0\sb0\sa0\sl-256\slmult0 \intbl \cs60\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 savo draug\f0\cchs186 \'f8\f0\cchs186 \cs55\fs22 nuomonei \cs60\fs20 apie \f0\cchs186 \'f0\f0\cchs186 iuos gyv\f0\cchs186 \'fb\f0\cchs186 nus i\f0\cchs186 \'f0\f0\cchs186 tirti\super 41\nosupersub , \f0\cchs186 \'84\f0\cchs186 Sukurkite akcijos prie\f0\cchs186 \'f0\f0\cchs186 \cs55\fs22 r\f0\cchs186 \'fb\f0\cchs186 kym\f0\cchs186 \'e0\f0\cchs186 \cs62\fs18 1 \cs60\fs20 plan\f0\cchs186 \'e0\f0\cchs186 ".\cell \pard\intbl\row \trowd\trgaph40 \trrh0 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx1848 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx4792 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\br\cchs186 \'f0\f0\cchs186 ius.\cell \pard \plain \s15\ql\li0\fi0\ri0\sb0\sa0\sl-264\slmult0 \intbl \cs60\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 \'84\f0\cchs186 I\f0\cchs186 \'f0\f0\cchs186 studijuokite N sutart\f0\cchs186 \'e1\f0\cchs186 ir nurodykite \f0\cchs186 \'e1\f0\cchs186 vairias galimas jos i ratifikavimo pasekmes".\cell \pard\intbl\row \trowd\trgaph40 \trrh0 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx1848 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx4792 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx8376 \pard \plain \s15\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs60\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 Komunikavimo\cell \pard \plain \s15\ql\li0\fi16\ri0\sb0\sa0\sl-256\slmult0 \intbl \cs60\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 Geb\f0\cchs186 \'eb\f0\cchs186 jimas reik\f0\cchs186 \'f0\f0\cchs186 ti savo id\f0\cchs186 \'eb\f0\cchs186 jas, jausmus, poreikius ir suprasti kitus, vartojant verbalin\f0\cchs186 \'e6\f0\cchs186 ir neverbalin\f0\cchs186 \'e6\f0\cchs186 kalb\f0\cchs186 \'e0\f0\cchs186 .\cell \pard \plain \s15\ql\li0\fi0\ri0\sb0\sa0\sl-264\slmult0 \intbl \cs60\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 \'84\f0\cchs186 Pademonstruokite savo jaus- \cs55\fs22 1 \cs60\fs20 mus, kai su\f0\cchs186 \'fe\f0\cchs186 inote apie ... \f0\cchs186 \'84\f0\cchs186 Papasakokite apie \f0\cchs186 \'e1\f0\cchs186 vyk\f0\cchs186 \'e1\f0\cchs186 i\f0\cchs186 \'f0\f0\cchs186 vaiko i ir i\f0\cchs186 \'f0\f0\cchs186 suaugusiojo pozicini". i\cell \pard\intbl\row \trowd\trgaph40 \trrh0 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx1848 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx4792 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx8376 \pard \plain \s15\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs60\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 Plan\f0\cchs186 \'f8\par \pard \plain \s15\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs60\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 \'e1\f0\cchs186 gyvendinimo\cell \pard \plain \s15\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs60\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 Geb\f0\cchs186 \'eb\f0\cchs186 jimas \f0\cchs186 \'e1\f0\cchs186 gyvendinti plan\f0\cchs186 \'e0\cell \pard \plain \s16\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs43\i0\strike0\nosupersub\b\scaps0\charscalex100\expndtw200\dn0\f0\cchs186\lang1063\langfe1063\fs10 \'97\f0\cchs186 \f0\cchs186 \'97\f0\cchs186 \f1\cchs186 \u9632\'3f\f0\cchs186 - \f0\cchs186 \'97\'97\f0\cchs186  \expndtw0 *-\expndtw200 \expndtw0 L-\expndtw200 \expndtw0 -\expndtw200 \cs42\b0\expndtw0\f3\cchs186\fs8 i \f4\cchs186 \u9632\'3f\f3\cchs186 \f4\cchs186 \u9632\'3f\f3\cchs186 \cs41\b\i\f0\cchs186\fs10 a \cs40\b0\i0\scaps\f6\cchs186\fs8 - ii \f7\cchs186 \u9632\'3f\f6\cchs186 \cs62\scaps0\f0\cchs186\fs18 1\par \pard \plain \s15\ql\li0\fi0\ri0\sb0\sa0\sl-264\slmult0 \intbl \cs60\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 \'84\f0\cchs186 Sukurkite ir \f0\cchs186 \'e1\f0\cchs186 gyvendinkite N 1 renginio plan\f0\cchs186 \'e0\f0\cchs186 ".\cell \pard\intbl\row \trowd\trgaph40 \trrh0 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx1848 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\cltxlrtb\cellx8376 \pard \plain \s15\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs60\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 Prognozavimo\cell \pard \plain \s15\ql\li0\fi8\ri0\sb0\sa0\sl-248\slmult0 \intbl \cs60\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 Geb\f0\cchs186 \'eb\f0\cchs186 jimas numatyti ir pati\-krinti prie\f0\cchs186 \'fe\f0\cchs186 asties ir pasekm\f0\cchs186 \'eb\f0\cchs186 s s\f0\cchs186 \'e0\f0\cchs186 ry\f0\cchs186 \'f0\f0\cchs186 ius.\cell \pard \plain \s15\ql\li0\fi0\ri0\sb0\sa0\sl-264\slmult0 \intbl \cs60\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 \'84\f0\cchs186 I\f0\cchs186 \'f0\f0\cchs186 studijuokite N sutart\f0\cchs186 \'e1\f0\cchs186 ir nurodykite \f0\cchs186 \'e1\f0\cchs186 vairias galimas jos i ratifikavimo pasekmes".\cell \pard\intbl\row \trowd\trgaph40 \trrh0 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx1848 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx4792 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx8376 \pard \plain \s15\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs60\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 Komunikavimo\cell \pard \plain \s15\ql\li0\fi16\ri0\sb0\sa0\sl-256\slmult0 \intbl \cs60\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 Taylor siekia ugdyti kuo daugiau gabum\f0\cchs186 \'f8\f0\cchs186 , kuriais, jo manymu, pasi\f0\cchs186 \'fe\f0\cchs186 ymi vaikai. Tad kuo \f0\cchs186 \'e1\f0\cchs186 vairesniems vaik\f0\cchs186 \'f8\f0\cchs186 gabumams mokytojas skirs d\f0\cchs186 \'eb\f0\cchs186 mes\f0\cchs186 \'e1\f0\cchs186 , tuo daugiau galimybi\f0\cchs186 \'f8\f0\cchs186 , kad vaikas ras srit\f0\cchs186 \'e1\f0\cchs186 , kurios \f0\cchs186 \'fe\f0\cchs186 inovu jis gali tapti. Ta\f0\cchs186 \'e8\f0\cchs186 iau pir\-masis \f0\cchs186 \'f0\f0\cchs186 io modelio etapas - tai vis d\f0\cchs186 \'eb\f0\cchs186 lto akademini\f0\cchs186 \'f8\f0\cchs186 gabum\f0\cchs186 \'f8\f0\cchs186 ugdymas. Kitas \f0\cchs186 \'fe\f0\cchs186 ingsnis, skirtas mokytojui apsispr\f0\cchs186 \'e6\f0\cchs186 sti, kuri\f0\cchs186 \'e0\f0\cchs186 i\f0\cchs186 \'f0\f0\cchs186 likusi\f0\cchs186 \'f8\f0\cchs186 a\f0\cchs186 \'f0\f0\cchs186 tuoni\f0\cchs186 \'f8\f0\cchs186 gabum\f0\cchs186 \'f8\f0\cchs186 sri\f0\cchs186 \'e8\f0\cchs186 i\f0\cchs186 \'f8 \f0\cchs186 jis imasi ugdyti. Paprastai seka, anot autoriaus, tur\f0\cchs186 \'eb\f0\cchs186 t\f0\cchs186 \'f8\f0\cchs186 b\f0\cchs186 \'fb\f0\cchs186 ti tokia: produktyvusis m\f0\cchs186 \'e0\f0\cchs186 stymas, planavimas, sprendim\f0\cchs186 \'f8\f0\cchs186 pri\f0\cchs186 \'eb\f0\cchs186 mimas, pian\f0\cchs186 \'f8\f0\cchs186 \f0\cchs186 \'e1\f0\cchs186 gyvendinimas, \f0\cchs186 \'e1\'fe\f0\cchs186 valgos. Akivaizdu, jog dirbti pagal \f0\cchs186 \'f0\'e1\f0\cchs186 model\f0\cchs186 \'e1\f0\cchs186 mokytojas tur\f0\cchs186 \'eb\f0\cchs186 t\f0\cchs186 \'f8\f0\cchs186 b\f0\cchs186 \'fb\f0\cchs186 ti specialiai pasi\-reng\f0\cchs186 \'e6\f0\cchs186 s, tad modelio autorius si\f0\cchs186 \'fb\f0\cchs186 lo kelet\f0\cchs186 \'e0\f0\cchs186 mokytojo darbo metod\f0\cchs186 \'f8\f0\cchs186 . Pirmuouiu atveju si\f0\cchs186 \'fb\f0\cchs186 loma papildom\f0\cchs186 \'f8\f0\cchs186 gabum\f0\cchs186 \'f8\f0\cchs186 ugdym\f0\cchs186 \'e0\f0\cchs186 organizuoti baigiantis pamokoms. \f0\cchs186 \'c1\f0\cchs186 prastinis mokymo turinys \f0\cchs186 \'84\f0\cchs186 suspaud\f0\cchs186 \'fe\f0\cchs186 iamas" laike, o atsiradusias 5\f0\cchs186 \'97\f0\cchs186 10 laisvuj minu\f0\cchs186 \'e8\f0\cchs186 i\f0\cchs186 \'f8\f0\cchs186 mokytojas gali i\f0\cchs186 \'f0\f0\cchs186 naudoti pasirinkto gabumo ugdymui. Kai \cs48\b\fs20 mokytojui \cs44\b0\fs22 atrodo, kad jau pasiekta tam tikra pa\f0\cchs186 \'fe\f0\cchs186 anga ugdant pirm\f0\cchs186 \'e0\f0\cchs186 j\f0\cchs186 \'e1\f0\cchs186 i\f0\cchs186 \'f0\f0\cchs186 \f0\cchs186 \'e1\f0\cchs186 o pasirinkt\f0\cchs186 \'f8\f0\cchs186 ga\-\par \sect\sectd \sbkpage\pgwsxn20855\pghsxn13316\marglsxn1080\margrsxn8026\margtsxn360\margbsxn360\cols2\colno1\colw7936\colsr2482\colno2\colw1329 {\header \pard \plain \s11\ql\li0\fi0\ri-7657\sb0\sa0\tx2245 \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 \'e1\f0\cchs186 Ma\ul b\f0\cchs186 \'fb\f0\cchs186 s vaikai:\ul0 {\charscalex100\expndtw0\tab }\ul ir galimyb\f0\cchs186 \'eb\f0\cchs186 s\par }{\footer \par \plain \s11\qj\li0\fi0\ri0\sb0\sa0 \pvpara\phcol\posnegx-720\posnegy0\absw0\absh-254\nowrap\dfrmtxtx34\dfrmtxty0 \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 {\field{\*\fldinst{PAGE}}{\fldrslt 100}}\par \pard \plain \s21\qr\li0\fi0\ri-7657{\sl-240\slmult0\fs20\par }\sb90\sa0 \cs61\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs12 101\par }{\shp {\*\shpinst \shpleft13358\shptop593\shpright14748\shpbottom830\shpfhdr0\shpfblwtxt0\shpbxmargin\shpbypara\shpwr1\shpz1\shplid1{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fAllowOverlap}{\sv 1}}{\sp{\sn dxWrapDistLeft}{\sv 21590}}{\sp{\sn dxWrapDistRight}{\sv 21590}}{\sp{\sn dyWrapDistTop}{\sv 317500}}{\sp{\sn dyWrapDistBottom}{\sv 198755}}{\sp{\sn shapeType}{\sv 202}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fPrint}{\sv 1}}{\sp{\sn fFilled}{\sv 0}}{\sp{\sn fEditedWrap}{\sv 0}}{\sp{\sn txflTextFlow}{\sv 0}}{\sp{\sn dxTextLeft}{\sv 0}}{\sp{\sn dyTextTop}{\sv 0}}{\sp{\sn dxTextRight}{\sv 0}}{\sp{\sn dyTextBottom}{\sv 0}}{\sp{\sn fFitTextToShape}{\sv 0}}{\shptxt \pard \plain \s31\qj\li0\fi0\ri0\sb0\sa0 \cs58\i0\strike0\nosupersub\b\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 Rai\f0\cchs186 \'f0\f0\cchs186 kos \cs51\b0 b\f0\cchs186 \'fb\f0\cchs186 dai\par }}}{\shp {\*\shpinst \shpleft11859\shptop534\shpright13172\shpbottom2169\shpfhdr0\shpfblwtxt0\shpbxmargin\shpbypara\shpwr1\shpz0\shplid0{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fAllowOverlap}{\sv 1}}{\sp{\sn dxWrapDistLeft}{\sv 21590}}{\sp{\sn dxWrapDistRight}{\sv 21590}}{\sp{\sn dyWrapDistTop}{\sv 279400}}{\sp{\sn dyWrapDistBottom}{\sv 0}}{\sp{\sn shapeType}{\sv 202}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fPrint}{\sv 1}}{\sp{\sn fFilled}{\sv 0}}{\sp{\sn fEditedWrap}{\sv 0}}{\sp{\sn txflTextFlow}{\sv 0}}{\sp{\sn dxTextLeft}{\sv 0}}{\sp{\sn dyTextTop}{\sv 0}}{\sp{\sn dxTextRight}{\sv 0}}{\sp{\sn dyTextBottom}{\sv 0}}{\sp{\sn fFitTextToShape}{\sv 0}}{\shptxt \pard \plain \s11\qj\li0\fi0\ri0\sb0\sa0\sl-254\slmult0 \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 Strukt\f0\cchs186 \'fb\f0\cchs186 rinis elementas\par \pard \plain \s13\ql\li0\fi0\ri0\sb17\sa0\sl-271\slmult0 \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 Ugdytojo ir ugdytini\f0\cchs186 \'f8 \f0\cchs186 s\f0\cchs186 \'e0\f0\cchs186 veika, ko\-munikacija\par }}}{\shp {\*\shpinst \shpleft13350\shptop1144\shpright17594\shpbottom2296\shpfhdr0\shpfblwtxt0\shpbxmargin\shpbypara\shpwr1\shpz2\shplid2{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fAllowOverlap}{\sv 1}}{\sp{\sn dxWrapDistLeft}{\sv 21590}}{\sp{\sn dxWrapDistRight}{\sv 21590}}{\sp{\sn dyWrapDistTop}{\sv 139700}}{\sp{\sn dyWrapDistBottom}{\sv 0}}{\sp{\sn shapeType}{\sv 202}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fPrint}{\sv 1}}{\sp{\sn fFilled}{\sv 0}}{\sp{\sn fEditedWrap}{\sv 0}}{\sp{\sn txflTextFlow}{\sv 0}}{\sp{\sn dxTextLeft}{\sv 0}}{\sp{\sn dyTextTop}{\sv 0}}{\sp{\sn dxTextRight}{\sv 0}}{\sp{\sn dyTextBottom}{\sv 0}}{\sp{\sn fFitTextToShape}{\sv 0}}{\shptxt \pard \plain \s12\qj\li0\fi0\ri0\sb0\sa0\sl-271\slmult0 \cs60\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 Informacijos srautai \f0\cchs186 \'97\f0\cchs186 \cs48\b Asmenvb\f0\cchs186 \'eb\f0\cchs186 s tobuli* tiesioginiai ir \cs60\b0 gr\f0\cchs186 \'e1\'fe\f0\cchs186 tamieji, ir s\f0\cchs186 \'e0\f0\cchs186 lyg\f0\cchs186 \'f8\f0\cchs186 \cs48\b tobulintai pedagogin\f0\cchs186 \'eb\f0\cchs186 \cs60\b0 sistema sudarymas: \cs48\b\f0\cchs186 \'fb\f0\cchs186 ssionj\par \pard \plain \s33\ql\li2499\fi0\ri0\sb93\sa0 \cs51\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 - b. \cs60 y\super 1\nosupersub "\super 0\nosupersub \cs51 HBB\par }}}{\shp {\*\shpinst \shpleft13299\shptop2228\shpright14205\shpbottom2474\shpfhdr0\shpfblwtxt0\shpbxmargin\shpbypara\shpwr1\shpz4\shplid4{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fAllowOverlap}{\sv 1}}{\sp{\sn dxWrapDistLeft}{\sv 21590}}{\sp{\sn dxWrapDistRight}{\sv 21590}}{\sp{\sn dyWrapDistTop}{\sv 0}}{\sp{\sn dyWrapDistBottom}{\sv 0}}{\sp{\sn shapeType}{\sv 202}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fPrint}{\sv 1}}{\sp{\sn fFilled}{\sv 0}}{\sp{\sn fEditedWrap}{\sv 0}}{\sp{\sn txflTextFlow}{\sv 0}}{\sp{\sn dxTextLeft}{\sv 0}}{\sp{\sn dyTextTop}{\sv 0}}{\sp{\sn dxTextRight}{\sv 0}}{\sp{\sn dyTextBottom}{\sv 0}}{\sp{\sn fFitTextToShape}{\sv 0}}{\shptxt \pard \plain \s11\qj\li0\fi0\ri0\sb0\sa0 \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 Saviugda\par }}}{\shp {\*\shpinst \shpleft15874\shptop2279\shpright17187\shpbottom2524\shpfhdr0\shpfblwtxt0\shpbxmargin\shpbypara\shpwr1\shpz5\shplid5{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fAllowOverlap}{\sv 1}}{\sp{\sn dxWrapDistLeft}{\sv 21590}}{\sp{\sn dxWrapDistRight}{\sv 21590}}{\sp{\sn dyWrapDistTop}{\sv 0}}{\sp{\sn dyWrapDistBottom}{\sv 0}}{\sp{\sn shapeType}{\sv 202}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fPrint}{\sv 1}}{\sp{\sn fFilled}{\sv 0}}{\sp{\sn fEditedWrap}{\sv 0}}{\sp{\sn txflTextFlow}{\sv 0}}{\sp{\sn dxTextLeft}{\sv 0}}{\sp{\sn dyTextTop}{\sv 0}}{\sp{\sn dxTextRight}{\sv 0}}{\sp{\sn dyTextBottom}{\sv 0}}{\sp{\sn fFitTextToShape}{\sv 0}}{\shptxt \pard \plain \s12\qj\li0\fi0\ri0\sb0\sa0 \cs60\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 Tobulinimasis\par }}}{\shp {\*\shpinst \shpleft11867\shptop2152\shpright13078\shpbottom2812\shpfhdr0\shpfblwtxt0\shpbxmargin\shpbypara\shpwr1\shpz3\shplid3{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fAllowOverlap}{\sv 1}}{\sp{\sn dxWrapDistLeft}{\sv 21590}}{\sp{\sn dxWrapDistRight}{\sv 21590}}{\sp{\sn dyWrapDistTop}{\sv 640080}}{\sp{\sn dyWrapDistBottom}{\sv 0}}{\sp{\sn shapeType}{\sv 202}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fPrint}{\sv 1}}{\sp{\sn fFilled}{\sv 0}}{\sp{\sn fEditedWrap}{\sv 0}}{\sp{\sn txflTextFlow}{\sv 0}}{\sp{\sn dxTextLeft}{\sv 0}}{\sp{\sn dyTextTop}{\sv 0}}{\sp{\sn dxTextRight}{\sv 0}}{\sp{\sn dyTextBottom}{\sv 0}}{\sp{\sn fFitTextToShape}{\sv 0}}{\shptxt \pard \plain \s11\qj\li0\fi0\ri0\sb0\sa0\sl-280\slmult0 \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 Individo as\-menyb\f0\cchs186 \'eb\par }}}{\shpgrp{\*\shpinst \shpleft-720\shptop3939\shpright7878\shpbottom12384\shpfhdr0\shpfblwtxt0\shpbxmargin\shpbypara\shpwr1\shpz6\shplid6{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fAllowOverlap}{\sv 1}}{\sp{\sn dxWrapDistLeft}{\sv 21590}}{\sp{\sn dxWrapDistRight}{\sv 21590}}{\sp{\sn dyWrapDistTop}{\sv 0%n%nsp%nn% dyWrapDistBottom}{\sv 0}}{\sp{\sn groupLeft}{\sv 1067}}{\sp{\sn groupTop}{\sv 6209}}{\sp{\sn groupRight}{\sv 9665}}{\sp{\sn groupBottom}{\sv 14654}}{\shp {\*\shpinst \shplid1{\sp{\sn relLeft}{\sv 1067}}{\sp{\sn relTop}{\sv 6429}}{\sp{\sn relRight}{\sv 9665}}{\sp{\sn relBottom}{\sv 14654}}{\sp{\sn fRelFlipH}{\sv 0}}{\sp{\sn fRelFlipV}{\sv 0}}{\sp{\sn shapeType}{\sv 202}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fLine}{\sv 1}}{\sp{\sn lineWidth}{\sv 0}}{\sp{\sn lineColor}{\sv 16777215}}{\sp{\sn fPrint}{\sv 1}}{\sp{\sn fFilled}{\sv 0}}{\sp{\sn fEditedWrap}{\sv 0}}{\sp{\sn txflTextFlow}{\sv 0}}{\sp{\sn dxTextLeft}{\sv 0}}{\sp{\sn dyTextTop}{\sv 0}}{\sp{\sn dxTextRight}{\sv 0}}{\sp{\sn dyTextBottom}{\sv 0}}{\sp{\sn fFitTextToShape}{\sv 0}}{\shptxt \trowd\trgaph40 \trrh0 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx1889 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx3354 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx5836 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx8597 \pard \plain \s19\ql\li474\fi0\ri0\sb0\sa0\sl-271\slmult0 \intbl \cs49\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 1 \cs48\b\fs20 Ugdymo \cs49\b0\fs22 res \cs46\scaps\fs20 f\cs48\b\scaps0 lyb\f0\cchs186 \'eb\f0\cchs186 s lygmu\cell \pard \plain \s19\ql\li0\fi0\ri0\sb0\sa0\sl-280\slmult0 \intbl \cs48\i0\strike0\nosupersub\b\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 i- \cs49\b0\fs22 Strukt\f0\cchs186 \'fb\f0\cchs186 rini \cs48\b\fs20 o elementas\cell \pard \plain \s19\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs48\i0\strike0\nosupersub\b\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 s Rai\f0\cchs186 \'f0\f0\cchs186 kos b\f0\cchs186 \'fb\f0\cchs186 dai\cell \pard \plain \s19\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs48\i0\strike0\nosupersub\b\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 Funkcijos\cell \pard\intbl\row \trowd\trgaph40 \trrh0 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx1889 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx3354 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx5836 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx8597 \pard \plain \s19\ql\li440\fi0\ri0\sb0\sa0 \intbl \cs49\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 j \cs48\b\fs20 Valstybinis\cell \pard \plain \s19\ql\li0\fi0\ri0\sb0\sa0\sl-280\slmult0 \intbl \cs48\i0\strike0\nosupersub\b\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 Valstyb\f0\cchs186 \'eb\f0\cchs186 s politika\cell \pard \plain \s19\ql\li0\fi8\ri0\sb0\sa0\sl-280\slmult0 \intbl \cs48\i0\strike0\nosupersub\b\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 \'d0\f0\cchs186 vietimo politika ir j\f0\cchs186 \'e0 \f0\cchs186 atspindintys \f0\cchs186 \'e1\f0\cchs186 statymai\cell \pard \plain \s19\ql\li0\fi0\ri0\sb0\sa0\sl-288\slmult0 \intbl \cs48\i0\strike0\nosupersub\b\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 Teisinis reguliavimas, u\f0\cchs186 \'fe\f0\cchs186 tikrinantis kiekvie\-nam vaikui (vadinasi, ir gabiam) teis\f0\cchs186 \'e6\f0\cchs186 gauti jo poreikius ir galimybes atitinkant\f0\cchs186 \'e1\f0\cchs186 ugdym\f0\cchs186 \'e0\f0\cchs186 ir ug\-dymosi s\f0\cchs186 \'e0\f0\cchs186 lygas\cell \pard\intbl\row \trowd\trgaph40 \trrh0 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx1889 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx3354 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx5836 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx8597 \pard \plain \s19\ql\li390\fi0\ri0\sb0\sa0 \intbl \cs48\i0\strike0\nosupersub\b\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 Visuomeninis\cell \pard \plain \s19\ql\li0\fi0\ri0\sb0\sa0\sl-280\slmult0 \intbl \cs48\i0\strike0\nosupersub\b\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 Visuomen\f0\cchs186 \'eb\f0\cchs186 s institutai\cell \pard \plain \s19\ql\li0\fi68\ri0\sb0\sa0\sl-288\slmult0 \intbl \cs48\i0\strike0\nosupersub\b\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 Vyriausybines insti\-tucijos/ visuomenini\f0\cchs186 \'f8 \f0\cchs186 organizacij\f0\cchs186 \'f8\f0\cchs186 /paramos fond\f0\cchs186 \'f8\f0\cchs186 /auk\f0\cchs186 \'f0\f0\cchs186 t\f0\cchs186 \'f8\f0\cchs186 j\f0\cchs186 \'f8\f0\cchs186 moky\-kl\f0\cchs186 \'f8\f0\cchs186 /mokslo institucij\f0\cchs186 \'f8 \cs39\b0\i\f0\cchs186\fs22 tikslin\f0\cchs186 \'eb\f0\cchs186 \cs48\i0\b\fs20 veikla\cell \pard \plain \s19\ql\li0\fi0\ri0\sb0\sa0\sl-296\slmult0 \intbl \cs48\i0\strike0\nosupersub\b\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 Veiklos inicijavimas; koordinavimas, organi\-zavimas, informacijos kaupimas, analiz\f0\cchs186 \'eb\f0\cchs186 ir sklai\-da; gabi\f0\cchs186 \'f8\f0\cchs186 vaik\f0\cchs186 \'f8\f0\cchs186 paie\f0\cchs186 \'f0\f0\cchs186 kos programos, identifikavi\-mas, globa; mokytoj\f0\cchs186 \'f8\f0\cchs186 ir kit\f0\cchs186 \'f8\f0\cchs186 \f0\cchs186 \'f0\f0\cchs186 vietimo darbuotoj\f0\cchs186 \'f8 \f0\cchs186 rengi mas;ugdymo t\f0\cchs186 \'e6\f0\cchs186 sti\-numo u\f0\cchs186 \'fe\f0\cchs186 tikrinimas; kt.\cell \pard\intbl\row \trowd\trgaph40 \trrh0 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx1889 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx3354 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx5836 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx8597 \pard \plain \s19\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs48\i0\strike0\nosupersub\b\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 1 Institucinis\par \pard \plain \s25\ql\li0\fi0\ri0\sb0\sa0\sl-983\slmult0 \intbl \cs47\b0\i0\strike0\nosupersub\scaps0\charscalex20\expndtw0\dn19\f0\cchs186\lang1063\langfe1063\fs104 1\cell \pard \plain \s19\ql\li0\fi0\ri0\sb0\sa0\sl-305\slmult0 \intbl \cs48\i0\strike0\nosupersub\b\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 Ugdymo nstituci\f0\cchs186 \'e1\f0\cchs186 os\par \pard \plain \s19\ql\li0\fi0\ri0\sb0\sa0\sl-305\slmult0 \intbl \cs48\i0\strike0\nosupersub\b\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 i \cs49\b0\fs22 1 \cs48\b\fs20 i\par \pard \plain \s26\ql\li0\fi0\ri0\sb0\sa0\sl-381\slmult0 \intbl \cs50\i0\strike0\nosupersub\b\scaps0\charscalex100\expndtw0\dn5\f0\cchs186\lang1063\langfe1063\fs38 !\cell \pard \plain \s19\ql\li25\fi-25\ri0\sb0\sa0\sl-296\slmult0 \intbl \cs48\i0\strike0\nosupersub\b\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 Gabi\f0\cchs186 \'f8\f0\cchs186 vaik\f0\cchs186 \'f8\f0\cchs186 ugdymo modelis institucijos lygmeniu \f0\cchs186 \'97\f0\cchs186 mokyklos, papildomojo ugdymo mokyklos, technin\f0\cchs186 \'eb\f0\cchs186 s \{\f0\cchs186 \'fb\f0\cchs186 rybos namai, klas\f0\cchs186 \'eb\f0\cchs186 s, tovyklos, kursai, kon\-kursai ir kt.\cell \pard \plain \s19\ql\li0\fi0\ri0\sb0\sa0\sl-305\slmult0 \intbl \cs48\i0\strike0\nosupersub\b\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 Ugdymo proceso opti\-mizavimas: optimalios ugdymo(si) aplinkos sudarymas, ugdymas, mo\-kymas, veiklos rezultat\f0\cchs186 \'f8 \f0\cchs186 vertinimas, mokymo dife\-rencijavimas ir kt.\cell \pard\intbl\row \pard}}}{\shp {\*\shpinst \shplid1{\sp{\sn relLeft}{\sv 3371}}{\sp{\sn relTop}{\sv 6209}}{\sp{\sn relRight}{\sv 7988}}{\sp{\sn relBottom}{\sv 6497}}{\sp{\sn fRelFlipH}{\sv 0}}{\sp{\sn fRelFlipV}{\sv 0}}{\sp{\sn shapeType}{\sv 202}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fLine}{\sv 1}}{\sp{\sn lineWidth}{\sv 0}}{\sp{\sn lineColor}{\sv 16777215}}{\sp{\sn fPrint}{\sv 1}}{\sp{\sn fFilled}{\sv 0}}{\sp{\sn fEditedWrap}{\sv 0}}{\sp{\sn txflTextFlow}{\sv 0}}{\sp{\sn dxTextLeft}{\sv 0}}{\sp{\sn dyTextTop}{\sv 0}}{\sp{\sn dxTextRight}{\sv 0}}{\sp{\sn dyTextBottom}{\sv 0}}{\sp{\sn fFitTextToShape}{\sv 0}}{\shptxt \pard \plain \s18\qj\li0\fi0\ri0\sb0\sa0 \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 Gabi\f0\cchs186 \'f8\f0\cchs186 \cs49 vaik\f0\cchs186 \'f8\f0\cchs186 ugdymo ir jo s\f0\cchs186 \'e0\f0\cchs186 lyg\f0\cchs186 \'f8\f0\cchs186 modelis\par }}}}}\pard \plain \s14\qr\li0\fi0\ri0\sb0\sa0\sl-305\slmult0 \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 m\f0\cchs186 \'e0\f0\cchs186 gali apib\f0\cchs186 \'fb\f0\cchs186 dinti asmenyb\f0\cchs186 \'eb\f0\cchs186 s saviugda, iritrapersonaliniame lygmenyje \f0\cchs186 \'e1\f0\cchs186 gyjanti gryn\f0\cchs186 \'e0\f0\cchs186 rai\f0\cchs186 \'f0\f0\cchs186 k\f0\cchs186 \'e0\f0\cchs186 . \cs45\b\expndtw-10 II \cs55\b0\expndtw0 esm\f0\cchs186 \'eb\f0\cchs186 s \cs53\i\expndtw-10 vis\f0\cchs186 \'f8\f0\cchs186 \cs55\i0\expndtw0 anks\f0\cchs186 \'e8\f0\cchs186 iau min\f0\cchs186 \'eb\f0\cchs186 t\f0\cchs186 \'f8\f0\cchs186 strukt\f0\cchs186 \'fb\f0\cchs186 rini\f0\cchs186 \'f8\f0\cchs186 element\f0\cchs186 \'f8\f0\cchs186 funkcionavi\-mo tikslas \cs49 I \cs55 prigimtini\f0\cchs186 \'f8\f0\cchs186 asmens gali\f0\cchs186 \'f8\f0\cchs186 pl\f0\cchs186 \'eb\f0\cchs186 tra ir i\f0\cchs186 \'f0\f0\cchs186 vystymas jo paties j\f0\cchs186 \'eb\f0\cchs186 gomis iki maksimalaus tam asmeniui galimo lygio. Literat\f0\cchs186 \'fb\f0\cchs186 roje (Gross, 1995; Almonaitien\f0\cchs186 \'eb\f0\cchs186 , 1997; Heller, 1999; Gagne, 2004 ir kt.) nurodoma, kad gabaus vaiko savirealizaci\-jai turi (takos jo asmenyb\f0\cchs186 \'eb\f0\cchs186 s nekognityvin\f0\cchs186 \'eb\f0\cchs186 s savyb\f0\cchs186 \'eb\f0\cchs186 s - pasiekim\f0\cchs186 \'f8\f0\cchs186 motyvacija, tei\-giamas \cs45\b\expndtw-10 sav\f0\cchs186 \'e6\f0\cchs186 s \cs55\b0\expndtw0 vertinimas, darbingumas, savikontrol\f0\cchs186 \'eb\f0\cchs186 ir kt. Yra pagrindo manyti, kad tinkamas min\f0\cchs186 \'eb\f0\cchs186 t\f0\cchs186 \'f8\f0\cchs186 GAVUS modelio strukt\f0\cchs186 \'fb\f0\cchs186 rini\f0\cchs186 \'f8\f0\cchs186 element\f0\cchs186 \'f8\f0\cchs186 funkcionavimas palankiai veikia gabaus vaiko asmenyb\f0\cchs186 \'e6\f0\cchs186 , taigi skatina \cs45\b\expndtw-10 j\f0\cchs186 \'e1\f0\cchs186 \cs55\b0\expndtw0 tobul\f0\cchs186 \'eb\f0\cchs186 s lygmuo\par \pard \plain \s11\qj\li0\fi0\ri0\sb42\sa0\sl-246\slmult0 \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 Interpersona-linis\chftn{\footnote\pard \plain \s13 \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 \chftn Pastaba. Interpersonalinio ir intrapersonalinio \cs48\b\fs20 lygmens \cs55\b0\fs22 elemcr\cs48\b\f0\cchs186\fs20 \'a3\f0\cchs186 E\cs52\b0\expndtw-20\fs30 ^^PK\cs48\b\expndtw0\fs20 ^niaj\par \pard \plain \s13 \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 modelio elementai, kuri\f0\cchs186 \'f8\f0\cchs186 optimaliam veikimui \cs49 ir skirtas ug\strike dy\strike0 m\strike o\strike0 \cs55 s\f0\cchs186 \'e0\f0\cchs186 lyg\f0\cchs186 \'f8\f0\cchs186 \cs60\fs20 mo\-\cs55\fs22 delis\par \pard \plain \s23 \cs63\b0\strike0\nosupersub\i\scaps0\charscalex100\expndtw-20\dn0\f0\cchs186\lang1063\langfe1063\fs22 Sukurtasis \expndtw0 GAVUS\expndtw-20 modelis turi savo strukt\f0\cchs186 \'fb\f0\cchs186 r\f0\cchs186 \'e0\f0\cchs186 , funkcijas \cs53\expndtw-10 ir \cs63\expndtw0 funkcionavimo\expndtw-20 \expndtw0 aptin-\cs53\expndtw-10 k\f0\cchs186 \'e0\f0\cchs186 . \cs63\expndtw-20 Modelis turi \expndtw0 paskirti\expndtw-20 bendr\f0\cchs186 \'e0\f0\cchs186 tiksl\f0\cchs186 \'e0\f0\cchs186 \f0\cchs186 \'97\f0\cchs186 \cs49\i0\expndtw0 sudaryti s\f0\cchs186 \'e0\f0\cchs186 lygas gdym\f0\cchs186 \'e0\f0\cchs186 ir galimybes saviugdai, pad\f0\cchs186 \'eb\f0\cchs186 ti jam ir skatinti vaik\f0\cchs186 \'e0\f0\cchs186 siekti pilno savojo gabum\f0\cchs186 \'f8\f0\cchs186 po\-tencialo realizavimo ir b\f0\cchs186 \'fb\f0\cchs186 ti naudingam visuomenei, Sis tikslas suteikia modeliui vienov\f0\cchs186 \'eb\f0\cchs186 s, vientisumo.\par \pard \plain \s23 \cs49\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 Kiekvienas strukt\f0\cchs186 \'fb\f0\cchs186 rinis elementas turi ir papildom\f0\cchs186 \'f8\f0\cchs186 (i\f0\cchs186 \'f0\f0\cchs186 vestini\f0\cchs186 \'f8\f0\cchs186 i\f0\cchs186 \'f0\f0\cchs186 ben\-drojo) tiksl\f0\cchs186 \'f8\f0\cchs186 , kurie susij\f0\cchs186 \'e6\f0\cchs186 su funkcijomis, kurias atlieka strukt\f0\cchs186 \'fb\f0\cchs186 rinis elementas. Modelis skirtas \f0\cchs186 \'fe\f0\cchs186 mogui, jame vyksta informacijos perdavimo ir valdymo pro\-cesai \f0\cchs186 \'97\f0\cchs186 tai b\f0\cchs186 \'fb\f0\cchs186 dinga visuomenin\f0\cchs186 \'eb\f0\cchs186 ms sistemoms.\par \pard \plain \s23 \cs49\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 Modelis sudarytas i\f0\cchs186 \'f0\f0\cchs186 posistemi\f0\cchs186 \'f8\f0\cchs186 (pavyzd\f0\cchs186 \'fe\f0\cchs186 iui, GVU atskiroje ugdymo institucijoje, jo posistem\f0\cchs186 \'eb\f0\cchs186 - pedagogin\f0\cchs186 \'eb\f0\cchs186 sistema, ir kt.). Visi GAVUS elementai yra vienaip ar kitaip susij\f0\cchs186 \'e6\f0\cchs186 su ugdymu ir jo funkcijomis: \f0\cchs186 \'f0\f0\cchs186 vietimu, lavinimu, aukl\f0\cchs186 \'eb\f0\cchs186 jimu, mokymu, globojimu, formavimu ir kt. Kiekviena jo sud\f0\cchs186 \'eb\f0\cchs186 tin\f0\cchs186 \'eb\f0\cchs186 dalis atlieka tam tikr\f0\cchs186 \'e0\f0\cchs186 funkcij\f0\cchs186 \'e0\f0\cchs186 (jas nurod\f0\cchs186 \'eb\f0\cchs186 me aptardami model\f0\cchs186 \'e1\f0\cchs186 ). Tuomet, kai mo\-delio strukt\f0\cchs186 \'fb\f0\cchs186 riniai elementai funkcionuoja visuose ugdymo realyb\f0\cchs186 \'eb\f0\cchs186 s lygmeny\-se, jis apima daugel\f0\cchs186 \'e1\f0\cchs186 aplinkos veiksni\f0\cchs186 \'f8\f0\cchs186 , kurie yra gabumo virsmo pasiekimais katalizatoriai. Funkciniais ry\f0\cchs186 \'f0\f0\cchs186 iais susij\f0\cchs186 \'e6\f0\cchs186 elementai sukuria palaikan\f0\cchs186 \'e8\f0\cchs186 i\f0\cchs186 \'e0\f0\cchs186 aplink\f0\cchs186 \'e0 \f0\cchs186 vienas kito veikimui, o tai savo ruo\f0\cchs186 \'fe\f0\cchs186 tu suma\f0\cchs186 \'fe\f0\cchs186 ina atsitiktinum\f0\cchs186 \'f8\f0\cchs186 \f0\cchs186 \'e1\f0\cchs186 tak\f0\cchs186 \'e0\f0\cchs186 tiesiogi\-\cs44 niam \cs49 ugdymui, t.y. skatina gabaus vaiko saviugd\f0\cchs186 \'e0\f0\cchs186 .\par \pard \plain \s23 \cs49\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 Modelio artimiausioji funkcionavimo aplinka yra \f0\cchs186 \'f0\f0\cchs186 vietimo sistema.\par \pard \plain \s23 \cs49\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 Modelis yra atviras ir dinami\f0\cchs186 \'f0\f0\cchs186 kas. Atviras, nes tai yra socialin\f0\cchs186 \'eb\f0\cchs186 strukt\f0\cchs186 \'fb\f0\cchs186 ra, kuriai \f0\cchs186 \'e1\f0\cchs186 tak\f0\cchs186 \'e0\f0\cchs186 daro aplinka (netgi jo veikimo realyb\f0\cchs186 \'eb\f0\cchs186 je prasme). Modelio struk\-t\f0\cchs186 \'fb\f0\cchs186 riniai elementai turi daug vidini\f0\cchs186 \'f8\f0\cchs186 ry\f0\cchs186 \'f0\f0\cchs186 i\f0\cchs186 \'f8\f0\cchs186 , o jie savo ruo\f0\cchs186 \'fe\f0\cchs186 tu yra atviri aplinkai, kitoms, i\f0\cchs186 \'f0\f0\cchs186 orin\f0\cchs186 \'eb\f0\cchs186 ms socialin\f0\cchs186 \'eb\f0\cchs186 ms strukt\f0\cchs186 \'fb\f0\cchs186 roms, sistemoms, yra dinami\f0\cchs186 \'f0\f0\cchs186 ki, nes i\f0\cchs186 \'f0\f0\cchs186 likti stati\f0\cchs186 \'f0\f0\cchs186 kam, kai kinta aplinka, n\f0\cchs186 \'eb\f0\cchs186 ra \f0\cchs186 \'e1\f0\cchs186 manoma. Dinami\f0\cchs186 \'f0\f0\cchs186 kas jis ir d\f0\cchs186 \'eb\f0\cchs186 l k\f0\cchs186 \'ab\'a9\f0\cchs186 $}\par \pard \plain \s11\qj\li0\fi0\ri0{\sl-240\slmult0\fs20\par }{\sl-240\slmult0\fs20\par }\sb121\sa0\sl-263\slmult0 \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 Intrapersona-linis\chftn{\footnote\pard \plain \s13 \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 \chftn Pastaba. Interpersonalinio ir intrapersonalinio \cs48\b\fs20 lygmens \cs55\b0\fs22 elemcr\cs48\b\f0\cchs186\fs20 \'a3\f0\cchs186 E\cs52\b0\expndtw-20\fs30 ^^PK\cs48\b\expndtw0\fs20 ^niaj\par \pard \plain \s13 \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 modelio elementai, kuri\f0\cchs186 \'f8\f0\cchs186 optimaliam veikimui \cs49 ir skirtas ug\strike dy\strike0 m\strike o\strike0 \cs55 s\f0\cchs186 \'e0\f0\cchs186 lyg\f0\cchs186 \'f8\f0\cchs186 \cs60\fs20 mo\-\cs55\fs22 delis\par \pard \plain \s23 \cs63\b0\strike0\nosupersub\i\scaps0\charscalex100\expndtw-20\dn0\f0\cchs186\lang1063\langfe1063\fs22 Sukurtasis \expndtw0 GAVUS\expndtw-20 modelis turi savo strukt\f0\cchs186 \'fb\f0\cchs186 r\f0\cchs186 \'e0\f0\cchs186 , funkcijas \cs53\expndtw-10 ir \cs63\expndtw0 funkcionavimo\expndtw-20 \expndtw0 aptin-\cs53\expndtw-10 k\f0\cchs186 \'e0\f0\cchs186 . \cs63\expndtw-20 Modelis turi \expndtw0 paskirti\expndtw-20 bendr\f0\cchs186 \'e0\f0\cchs186 tiksl\f0\cchs186 \'e0\f0\cchs186 \f0\cchs186 \'97\f0\cchs186 \cs49\i0\expndtw0 sudaryti s\f0\cchs186 \'e0\f0\cchs186 lygas gabiems valkams, nepriklausomai nuo j\f0\cchs186 \'f8\f0\cchs186 socialin\f0\cchs186 \'eb\f0\cchs186 s pad\f0\cchs186 \'eb\f0\cchs186 ties, gyvenamosios vietos, am\-\f0\cchs186 \'fe\f0\cchs186 iaus, lyties ir kt., rinktis j\f0\cchs186 \'f8\f0\cchs186 poreikius atitinkanti ugdym\f0\cchs186 \'e0\f0\cchs186 ir galimybes saviugdai, pad\f0\cchs186 \'eb\f0\cchs186 ti jam ir skatinti vaik\f0\cchs186 \'e0\f0\cchs186 siekti pilno savojo gabum\f0\cchs186 \'f8\f0\cchs186 po\-tencialo realizavimo ir b\f0\cchs186 \'fb\f0\cchs186 ti naudingam visuomenei, Sis tikslas suteikia modeliui vienov\f0\cchs186 \'eb\f0\cchs186 s, vientisumo.\par \pard \plain \s23 \cs49\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 Kiekvienas strukt\f0\cchs186 \'fb\f0\cchs186 rinis elementas turi ir papildom\f0\cchs186 \'f8\f0\cchs186 (i\f0\cchs186 \'f0\f0\cchs186 vestini\f0\cchs186 \'f8\f0\cchs186 i\f0\cchs186 \'f0\f0\cchs186 ben\-drojo) tiksl\f0\cchs186 \'f8\f0\cchs186 , kurie susij\f0\cchs186 \'e6\f0\cchs186 su funkcijomis, kurias atlieka strukt\f0\cchs186 \'fb\f0\cchs186 rinis elementas. Modelis skirtas \f0\cchs186 \'fe\f0\cchs186 mogui, jame vyksta informacijos perdavimo ir valdymo pro\-cesai \f0\cchs186 \'97\f0\cchs186 tai b\f0\cchs186 \'fb\f0\cchs186 dinga visuomenin\f0\cchs186 \'eb\f0\cchs186 ms sistemoms.\par \pard \plain \s23 \cs49\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 Modelis sudarytas i\f0\cchs186 \'f0\f0\cchs186 posistemi\f0\cchs186 \'f8\f0\cchs186 (pavyzd\f0\cchs186 \'fe\f0\cchs186 iui, GVU atskiroje ugdymo institucijoje, jo posistem\f0\cchs186 \'eb\f0\cchs186 - pedagogin\f0\cchs186 \'eb\f0\cchs186 sistema, ir kt.). Visi GAVUS elementai yra vienaip ar kitaip susij\f0\cchs186 \'e6\f0\cchs186 su ugdymu ir jo funkcijomis: \f0\cchs186 \'f0\f0\cchs186 vietimu, lavinimu, aukl\f0\cchs186 \'eb\f0\cchs186 jimu, mokymu, globojimu, formavimu ir kt. Kiekviena jo sud\f0\cchs186 \'eb\f0\cchs186 tin\f0\cchs186 \'eb\f0\cchs186 dalis atlieka tam tikr\f0\cchs186 \'e0\f0\cchs186 funkcij\f0\cchs186 \'e0\f0\cchs186 (jas nurod\f0\cchs186 \'eb\f0\cchs186 me aptardami model\f0\cchs186 \'e1\f0\cchs186 ). Tuomet, kai mo\-delio strukt\f0\cchs186 \'fb\f0\cchs186 riniai elementai funkcionuoja visuose ugdymo realyb\f0\cchs186 \'eb\f0\cchs186 s lygmeny\-se, jis apima daugel\f0\cchs186 \'e1\f0\cchs186 aplinkos veiksni\f0\cchs186 \'f8\f0\cchs186 , kurie yra gabumo virsmo pasiekimais katalizatoriai. Funkciniais ry\f0\cchs186 \'f0\f0\cchs186 iais susij\f0\cchs186 \'e6\f0\cchs186 elementai sukuria palaikan\f0\cchs186 \'e8\f0\cchs186 i\f0\cchs186 \'e0\f0\cchs186 aplink\f0\cchs186 \'e0 \f0\cchs186 vienas kito veikimui, o tai savo ruo\f0\cchs186 \'fe\f0\cchs186 tu suma\f0\cchs186 \'fe\f0\cchs186 ina atsitiktinum\f0\cchs186 \'f8\f0\cchs186 \f0\cchs186 \'e1\f0\cchs186 tak\f0\cchs186 \'e0\f0\cchs186 tiesiogi\-\cs44 niam \cs49 ugdymui, t.y. skatina gabaus vaiko saviugd\f0\cchs186 \'e0\f0\cchs186 .\par \pard \plain \s23 \cs49\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 Modelio artimiausioji funkcionavimo aplinka yra \f0\cchs186 \'f0\f0\cchs186 vietimo sistema.\par \pard \plain \s23 \cs49\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 Modelis yra atviras ir dinami\f0\cchs186 \'f0\f0\cchs186 kas. Atviras, nes tai yra socialin\f0\cchs186 \'eb\f0\cchs186 strukt\f0\cchs186 \'fb\f0\cchs186 ra, kuriai \f0\cchs186 \'e1\f0\cchs186 tak\f0\cchs186 \'e0\f0\cchs186 daro aplinka (netgi jo veikimo realyb\f0\cchs186 \'eb\f0\cchs186 je prasme). Modelio struk\-t\f0\cchs186 \'fb\f0\cchs186 riniai elementai turi daug vidini\f0\cchs186 \'f8\f0\cchs186 ry\f0\cchs186 \'f0\f0\cchs186 i\f0\cchs186 \'f8\f0\cchs186 , o jie savo ruo\f0\cchs186 \'fe\f0\cchs186 tu yra atviri aplinkai, kitoms, i\f0\cchs186 \'f0\f0\cchs186 orin\f0\cchs186 \'eb\f0\cchs186 ms socialin\f0\cchs186 \'eb\f0\cchs186 ms strukt\f0\cchs186 \'fb\f0\cchs186 roms, sistemoms, yra dinami\f0\cchs186 \'f0\f0\cchs186 ki, nes i\f0\cchs186 \'f0\f0\cchs186 likti stati\f0\cchs186 \'f0\f0\cchs186 kam, kai kinta aplinka, n\f0\cchs186 \'eb\f0\cchs186 ra \f0\cchs186 \'e1\f0\cchs186 manoma. Dinami\f0\cchs186 \'f0\f0\cchs186 kas jis ir d\f0\cchs186 \'eb\f0\cchs186 l k\f0\cchs186 \'ab\'a9\f0\cchs186 $}\par \sect\sectd \sbknone\pgwsxn20126\pghsxn13892\marglsxn733\margrsxn360\margtsxn360\margbsxn360\cols1\colsx60 {\header }{\footer \pard \plain \s27\qr\li0\fi0\ri0\sb0\sa0 \cs44\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 {\field{\*\fldinst{PAGE}}{\fldrslt 123}}\par }{\pard\plain \sb1144\sa0\sl-240\slmult0\fs20\par}\pard \plain \s29\qj\li11181\fi0\ri0\sb51\sa102 \cs49\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 4. \cs55 Gabi\f0\cchs186 \'f8\f0\cchs186 vaik\f0\cchs186 \'f8\f0\cchs186 ufidymo ir jo s\f0\cchs186 \'e0\f0\cchs186 lyg\f0\cchs186 \'f8\f0\cchs186 mo\ul delio rai\f0\cchs186 \'f0\f0\cchs186 kos\ul0 \cs45\b\expndtw-10\f0\cchs186 \'c1\f0\cchs186 \cs55\b0\ul\expndtw0 jetuvo\f0\cchs186 \'e1\f0\cchs186 e \cs60\fs20 pristatymas\par \sect\sectd \sbknone\pgwsxn20126\pghsxn13892\marglsxn733\margrsxn453\margtsxn360\margbsxn360\cols2\colno1\colw8123\colsr2431\colno2\colw8385 {\shpgrp{\*\shpinst \shpleft10622\shptop263\shpright18737\shpbottom1966\shpfhdr0\shpfblwtxt0\shpbxmargin\shpbypara\shpwr1\shpz7\shplid7{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fAllowOverlap}{\sv 1}}{\sp{\sn dxWrapDistLeft}{\sv 21590}}{\sp{\sn dxWrapDistRight}{\sv 21590}}{\sp{\sn dyWrapDistTop}{\sv 107315}}{\sp{\sn dyWrapDistBottom}{\sv 48260}}{\sp{\sn groupLeft}{\sv 12045}}{\sp{\sn groupTop}{\sv 2846}}{\sp{\sn groupRight}{\sv 20160}}{\sp{\sn groupBottom}{\sv 4549}}{\shp {\*\shpinst \shplid1{\sp{\sn relLeft}{\sv 12045}}{\sp{\sn relTop}{\sv 2922}}{\sp{\sn relRight}{\sv 20160}}{\sp{\sn relBottom}{\sv 4100}}{\sp{\sn fRelFlipH}{\sv 0}}{\sp{\sn fRelFlipV}{\sv 0}}{\sp{\sn shapeType}{\sv 202}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fLine}{\sv 1}}{\sp{\sn lineWidth}{\sv 0}}{\sp{\sn lineColor}{\sv 16777215}}{\sp{\sn fPrint}{\sv 1}}{\sp{\sn fFilled}{\sv 0}}{\sp{\sn fEditedWrap}{\sv 0}}{\sp{\sn txflTextFlow}{\sv 0}}{\sp{\sn dxTextLeft}{\sv 0}}{\sp{\sn dyTextTop}{\sv 0}}{\sp{\sn dxTextRight}{\sv 0}}{\sp{\sn dyTextBottom}{\sv 0}}{\sp{\sn fFitTextToShape}{\sv 0}}{\shptxt \trowd\trgaph40 \trrh0 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx542 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx6666 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx7378 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx8115 \pard \plain \s35\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs58\i0\strike0\nosupersub\b\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 Nr.\cell \pard \plain \s5\ql\li0\fi0\ri0\sb0\sa0\sl-144\slmult0\tlhyph\tx3744\tlul\tx4574 \intbl \cs49\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn2\f0\cchs186\lang1063\langfe1063\fs22 rr-ri{\charscalex100\expndtw0\tab }\cs61\fs12 _ {\charscalex100\expndtw0\tab } J \f0\cchs186 \'bb\par \pard \plain \s35\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs58\i0\strike0\nosupersub\b\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 Teiginys \f0\cchs186 \'97\cell \pard \plain \s35\qr\li0\fi0\ri0\sb0\sa0 \intbl \cs58\i0\strike0\nosupersub\b\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 mreies\par \pard \plain \s3\qr\li0\fi0\ri0\sb0\sa0 \intbl \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 Vid *\cell \pard \plain \s35\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs58\i0\strike0\nosupersub\b\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 t\f0\cchs186 \'e6\f0\cchs186 sinys\par \pard \plain \s24\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs61\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs12 Qt \cs60\fs20 n\cell \pard\intbl\row \trowd\trgaph40 \trrh0 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx542 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx6666 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx7378 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx8115 \pard \plain \s5\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs49\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 11.\cell \pard \plain \s35\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs58\i0\strike0\nosupersub\b\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 Tr\f0\cchs186 \'fb\f0\cchs186 ksta mokini\f0\cchs186 \'f8\f0\cchs186 t\f0\cchs186 \'eb\f0\cchs186 v\f0\cchs186 \'f8\f0\cchs186 palaikymo, pritarimo\cell \pard \plain \s5\qr\li0\fi0\ri0\sb0\sa0 \intbl \cs60\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 00\cs49\fs22 .24\cell \pard \plain \s3\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 1.21\cell \pard\intbl\row \trowd\trgaph40 \trrh0 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx542 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx6666 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx7378 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx8115 \pard \plain \s5\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs49\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 12.\cell \pard \plain \s35\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs58\i0\strike0\nosupersub\b\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 [Tr\f0\cchs186 \'fb\f0\cchs186 ksta mokyklos administracijos paskatinimo ir \cs57\expndtw10\fs16 nri\cs58\expndtw0\fs20 -^mn\par \pard \plain \s15\ql\li0\fi0\ri0\sb0\sa0\tlhyph\tx5472\tlhyph\tx6107 \intbl \cs58\i0\strike0\nosupersub\b\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 maksimalus \cs60\b0 galimas trukume .v\cs57\b\expndtw10\fs16 .-rr.\cs59\i\expndtw-10\f9\cchs186\fs22 ^-ETrr\cs60\b0\i0\expndtw0\f0\cchs186\fs20 {\charscalex100\expndtw0\tab }rr{\charscalex100\expndtw0\tab }1\cell \pard \plain \s5\qr\li0\fi0\ri0\sb0\sa0 \intbl \cs60\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs20 00\cs49\fs22 .41\cell \pard \plain \s5\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs49\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 1.22\cell \pard\intbl\row \pard}}}{\shp {\*\shpinst \shplid1{\sp{\sn relLeft}{\sv 18025}}{\sp{\sn relTop}{\sv 2846}}{\sp{\sn relRight}{\sv 20152}}{\sp{\sn relBottom}{\sv 3117}}{\sp{\sn fRelFlipH}{\sv 0}}{\sp{\sn fRelFlipV}{\sv 0}}{\sp{\sn shapeType}{\sv 202}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fLine}{\sv 1}}{\sp{\sn lineWidth}{\sv 0}}{\sp{\sn lineColor}{\sv 16777215}}{\sp{\sn fPrint}{\sv 1}}{\sp{\sn fFilled}{\sv 0}}{\sp{\sn fEditedWrap}{\sv 0}}{\sp{\sn txflTextFlow}{\sv 0}}{\sp{\sn dxTextLeft}{\sv 0}}{\sp{\sn dyTextTop}{\sv 0}}{\sp{\sn dxTextRight}{\sv 0}}{\sp{\sn dyTextBottom}{\sv 0}}{\sp{\sn fFitTextToShape}{\sv 0}}{\shptxt \pard \plain \s11\ql\li0\fi0\ri0\sb0\sa0 \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 4.2.3 lentel\f0\cchs186 \'eb\f0\cchs186 s t\f0\cchs186 \'e6\f0\cchs186 sinys\par }}}{\shp {\*\shpinst \shplid1{\sp{\sn relLeft}{\sv 12629}}{\sp{\sn relTop}{\sv 4074}}{\sp{\sn relRight}{\sv 20100}}{\sp{\sn relBottom}{\sv 4549}}{\sp{\sn fRelFlipH}{\sv 0}}{\sp{\sn fRelFlipV}{\sv 0}}{\sp{\sn shapeType}{\sv 202}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fLine}{\sv 1}}{\sp{\sn lineWidth}{\sv 0}}{\sp{\sn lineColor}{\sv 16777215}}{\sp{\sn fPrint}{\sv 1}}{\sp{\sn fFilled}{\sv 0}}{\sp{\sn fEditedWrap}{\sv 0}}{\sp{\sn txflTextFlow}{\sv 0}}{\sp{\sn dxTextLeft}{\sv 0}}{\sp{\sn dyTextTop}{\sv 0}}{\sp{\sn dxTextRight}{\sv 0}}{\sp{\sn dyTextBottom}{\sv 0}}{\sp{\sn fFitTextToShape}{\sv 0}}{\shptxt \pard \plain \s22\ql\li0\fi2821\ri0\sb0\sa0\sl-161\slmult0\tlhyph\tx3456\tldot\tx3812 \cs62\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs18 _ ,{\charscalex100\expndtw0\tab }{\charscalex100\expndtw0\tab }.\f0\cchs186 \'84\'ab\f0\cchs186 , , icigu \expndtw20 trukumo\expndtw0 \cs55\fs22 visi\f0\cchs186 \'f0\f0\cchs186 kai nejau\f0\cchs186 -\line \'e8\f0\cchs186 iama \f0\cchs186 \'97\f0\cchs186 vertinimas \cs49\f0\cchs186 \'84\f0\cchs186 -2".\par }}}}}{\shpgrp{\*\shpinst \shpleft-373\shptop6683\shpright8098\shpbottom12511\shpfhdr0\shpfblwtxt0\shpbxmargin\shpbypara\shpwr2\shpwrk3\shpz8\shplid8{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}{\sp{\sn fAllowOverlap}{\sv 1}}{\sp{\sn dxWrapDistLeft}{\sv 21590}}{\sp{\sn dxWrapDistRight}{\sv 21590}}{\sp{\sn dyWrapDistTop}{\sv 0}}{\sp{\sn dyWrapDistBottom}{\sv 0}}{\sp{\sn groupLeft}{\sv 1050}}{\sp{\sn groupTop}{\sv 9267}}{\sp{\sn groupRight}{\sv 9521}}{\sp{\sn groupBottom}{\sv 15095}}{\shp {\*\shpinst \shplid1{\sp{\sn relLeft}{\sv 1050}}{\sp{\sn relTop}{\sv 10275}}{\sp{\sn relRight}{\sv 9521}}{\sp{\sn relBottom}{\sv 15095}}{\sp{\sn fRelFlipH}{\sv 0}}{\sp{\sn fRelFlipV}{\sv 0}}{\sp{\sn shapeType}{\sv 202}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fLine}{\sv 1}}{\sp{\sn lineWidth}{\sv 0}}{\sp{\sn lineColor}{\sv 16777215}}{\sp{\sn fPrint}{\sv 1}}{\sp{\sn fFilled}{\sv 0}}{\sp{\sn fEditedWrap}{\sv 0}}{\sp{\sn txflTextFlow}{\sv 0}}{\sp{\sn dxTextLeft}{\sv 0}}{\sp{\sn dyTextTop}{\sv 0}}{\sp{\sn dxTextRight}{\sv 0}}{\sp{\sn dyTextBottom}{\sv 0}}{\sp{\sn fFitTextToShape}{\sv 0}}{\shptxt \trowd\trgaph40 \trrh0 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx661 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx7014 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx7751 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx8471 \pard \plain \s30\ql\li246\fi0\ri0\sb0\sa0 \intbl \cs44\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 Nr\cell \pard \plain \s3\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 Teiginys\cell \pard \plain \s3\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 Vid.*\cell \pard \plain \s3\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 St. n.\cell \pard\intbl\row \trowd\trgaph40 \trrh0 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx661 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx7014 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx7751 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx8471 \pard \plain \s30\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs44\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 1 \super 1\cell \pard \plain \s3\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 Tr\f0\cchs186 \'fb\f0\cchs186 ksta u\f0\cchs186 \'fe\f0\cchs186 mokes\f0\cchs186 \'e8\f0\cchs186 io u\f0\cchs186 \'fe\f0\cchs186 \cs56\fs18 papildom\f0\cchs186 \'e0\f0\cchs186 \cs55\fs22 darb\f0\cchs186 \'e0\f0\cchs186 ,.\cell \pard \plain \s5\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs49\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 1.43\cell \pard \plain \s5\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs49\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 0.84\cell \pard\intbl\row \trowd\trgaph40 \trrh0 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx661 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx7014 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx7751 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx8471 \pard \plain \s30\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs44\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 12.\cell \pard \plain \s3\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 Tr\f0\cchs186 \'fb\f0\cchs186 ksta materialinio paskatinimo itin gabiems mokiniams.\cell \pard \plain \s5\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs49\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 1.35\cell \pard \plain \s5\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs49\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 0.87\cell \pard\intbl\row \trowd\trgaph40 \trrh0 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx661 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx7014 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx7751 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx8471 \pard \plain \s30\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs44\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 13.\cell \pard \plain \s3\ql\li0\fi0\ri0\sb0\sa0\sl-288\slmult0 \intbl \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 Tr\f0\cchs186 \'fb\f0\cchs186 ksta bendros itin gabi\f0\cchs186 \'f8\f0\cchs186 vaik\f0\cchs186 \'f8\f0\cchs186 ugdymo politikos visos i\f0\cchs186 \'f0\f0\cchs186 liet \cs52\expndtw-20\fs30 j \cs44\expndtw0\fs22 mastu.\cell \pard \plain \s5\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs49\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 1.27\cell \pard \plain \s5\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs49\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 0.85\cell \pard\intbl\row \trowd\trgaph40 \trrh0 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx661 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx7014 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx7751 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx8471 \pard \plain \s30\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs44\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 14.\cell \pard \plain \s3\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 [Tr\f0\cchs186 \'fb\f0\cchs186 ksta apr\f0\cchs186 \'fb\f0\cchs186 pinimo reikalinga mokymo metodine med\f0\cchs186 \'fe\f0\cchs186 iaga\cell \pard \plain \s5\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs49\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 1.22\cell \pard \plain \s5\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs49\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 0.96\cell \pard\intbl\row \trowd\trgaph40 \trrh0 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx661 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx7014 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx7751 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx8471 \pard \plain \s30\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs44\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 15.\cell \pard \plain \s3\ql\li0\fi0\ri0\sb0\sa0\sl-296\slmult0 \intbl \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 Tr\f0\cchs186 \'fb\f0\cchs186 ksta kvalifikacijos k\f0\cchs186 \'eb\f0\cchs186 limo kurs\f0\cchs186 \'f8\f0\cchs186 itin gabi\f0\cchs186 \'f8\f0\cchs186 vaik\f0\cchs186 \'f8\f0\cchs186 ugdymo \cs44 tems.\cell \pard \plain \s5\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 1\cs49 .20\cell \pard \plain \s5\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs49\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 0.91\cell \pard\intbl\row \trowd\trgaph40 \trrh0 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx661 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx7014 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx7751 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx8471 \pard \plain \s30\ql\li0\fi0\ri0\sb0\sa0\sl-407\slmult0 \intbl \cs52\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw-20\up2\f0\cchs186\lang1063\langfe1063\fs30 j \cs44\expndtw0\fs22 6. \cs55 j\cell \pard \plain \s3\ql\li0\fi0\ri0\sb0\sa0\sl-313\slmult0 \intbl \cs44\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 Tr\f0\cchs186 \'fb\f0\cchs186 ksta \cs55 bendradarbiavimo tu auk\f0\cchs186 \'f0\f0\cchs186 t\f0\cchs186 \'f8\f0\cchs186 j\f0\cchs186 \'f8\f0\cchs186 mokykl\f0\cchs186 \'f8\f0\cchs186 d\f0\cchs186 \'eb\f0\cchs186 stytojais, \cs44 mokalininkaif.\cell \pard \plain \s5\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 1\cs49 .04\cell \pard \plain \s5\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs49\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 0.99\cell \pard\intbl\row \trowd\trgaph40 \trrh0 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx7014 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx7751 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx8471 \pard \plain \s3\ql\li0\fi0\ri0\sb0\sa0\sl-313\slmult0 \intbl \cs44\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 7. \cs55 1 \cs44 Tr\f0\cchs186 \'fb\f0\cchs186 ksta literatu \expndtw-20 rot\expndtw0 \cs54\i\expndtw-20 apie itin \cs55\i0\expndtw0 gabi\f0\cchs186 \'f8\f0\cchs186 vaik\f0\cchs186 \'f8\f0\cchs186 pa\f0\cchs186 \'fe\f0\cchs186 inim\f0\cchs186 \'e0\f0\cchs186 , ugdym\f0\cchs186 \'e0\f0\cchs186 , \cs52\expndtw-20\fs30 j \cs55\expndtw0\fs22 psichologij\f0\cchs186 \'e0\f0\cchs186 , \cs44 kir\f0\cchs186 \'f8\f0\cchs186 \cs55\f0\cchs186 \'f0\f0\cchs186 ali\f0\cchs186 \'f8\f0\cchs186 patirt j.\cell \pard \plain \s5\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 1\cs49 .00\cell \pard \plain \s5\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs49\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 0.97\cell \pard\intbl\row \trowd\trgaph40 \trrh0 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx7014 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx7751 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx8471 \pard \plain \s3\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs49\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 8. \cs55 j Tr\f0\cchs186 \'fb\f0\cchs186 ksta \cs44 bendradarbiavimo \cs55 su patyrusiais \f0\cchs186 \'f0\f0\cchs186 ioje srityje kolegomis,\cell \pard \plain \s3\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 0.88\cell \pard \plain \s3\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 1.02\cell \pard\intbl\row \trowd\trgaph40 \trrh0 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx661 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx7014 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx7751 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx8471 \pard \plain \s32\ql\li0\fi0\ri0\sb0\sa0\sl-356\slmult0 \intbl \cs52\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw-20\dn4\f0\cchs186\lang1063\langfe1063\fs30 1 \cs49\expndtw0\fs22 1\cell \pard \plain \s3\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 'r\f0\cchs186 \'fb\f0\cchs186 ksta \cs44 tinkamo \cs55 pasirengimo auk\f0\cchs186 \'f0\f0\cchs186 tojoje mokykloje.\cell \pard \plain \s3\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 0.56\cell \pard \plain \s3\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 1.17\cell \pard\intbl\row \trowd\trgaph40 \trrh0 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx661 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx7014 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx7751 \clvertalt\clbrdrt\brdrs\brdrw15\clbrdrl\brdrs\brdrw15\clbrdrb\brdrs\brdrw15\clbrdrr\brdrs\brdrw15\cltxlrtb\cellx8471 \pard \plain \s5\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs49\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 10. 7\cell \pard \plain \s3\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 r\f0\cchs186 \'fb\f0\cchs186 ksta galimybi\f0\cchs186 \'f8\f0\cchs186 \cs44 naudotis \cs55 kompiuteriu ir internetu.\cell \pard \plain \s3\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 -0.19\cell \pard \plain \s3\ql\li0\fi0\ri0\sb0\sa0 \intbl \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 1.33\cell \pard\intbl\row \pard}}}{\shp {\*\shpinst \shplid1{\sp{\sn relLeft}{\sv 2151}}{\sp{\sn relTop}{\sv 9267}}{\sp{\sn relRight}{\sv 8724}}{\sp{\sn relBottom}{\sv 10300}}{\sp{\sn fRelFlipH}{\sv 0}}{\sp{\sn fRelFlipV}{\sv 0}}{\sp{\sn shapeType}{\sv 202}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fLine}{\sv 1}}{\sp{\sn lineWidth}{\sv 0}}{\sp{\sn lineColor}{\sv 16777215}}{\sp{\sn fPrint}{\sv 1}}{\sp{\sn fFilled}{\sv 0}}{\sp{\sn fEditedWrap}{\sv 0}}{\sp{\sn txflTextFlow}{\sv 0}}{\sp{\sn dxTextLeft}{\sv 0}}{\sp{\sn dyTextTop}{\sv 0}}{\sp{\sn dxTextRight}{\sv 0}}{\sp{\sn dyTextBottom}{\sv 0}}{\sp{\sn fFitTextToShape}{\sv 0}}{\shptxt \pard \plain \s2\qj\li0\fi0\ri0\sb0\sa0\sl-330\slmult0 \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 Duomenys apie tai, ko mokytojams tr\f0\cchs186 \'fb\f0\cchs186 ksta darbui su itin\par \pard \plain \s20\ql\li0\fi2406\ri0\sb0\sa0\sl-330\slmult0\tlul\tx805 \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 gabiais vaikais\line \lang1033 {\charscalex100\expndtw0\tab }\ul\lang1063 (Narkevi\f0\cchs186 \'e8\f0\cchs186 ien\f0\cchs186 \'eb\f0\cchs186 , Janilionis,\ul0 Almonaitien\f0\cchs186 \'eb\f0\cchs186 , \cs49 2002)\par }}}}}\pard \plain \s11\qj\li0\fi0\ri0\sb0\sa0\sl-322\slmult0 \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 niams, galima manyti, kad jaunesni\f0\cchs186 \'f8\f0\cchs186 j\f0\cchs186 \'f8\f0\cchs186 klasi\f0\cchs186 \'f8\f0\cchs186 gabi\f0\cchs186 \'f8\f0\cchs186 mokini\f0\cchs186 \'f8\f0\cchs186 ugdymo rezulta\-tai \f0\cchs186 \'fe\f0\cchs186 inomi ir fiksuojami tik klases ir mokyklos (atskirais atvejais savivaldyb\f0\cchs186 \'eb\f0\cchs186 s) lygmeniu. be to, olimpiad\f0\cchs186 \'f8\f0\cchs186 rezultatai - tai tik pasiekimai, \cs49 o \cs55 kas daroma klas\f0\cchs186 \'eb\-\f0\cchs186 je, \cs53\i\expndtw-10 mokykloje, \cs55\i0\expndtw0 kad tie pasiekimai b\f0\cchs186 \'fb\f0\cchs186 t\f0\cchs186 \'f8\f0\cchs186 tokie, ir \cs49 ar \cs55 tie pasiekimai \f0\cchs186 \'97\f0\cchs186 tai mokytojo ir mokinio darbo rezultatas ar tik mokinio potencialo \{vertinimas, informaci\-jos taip pat neturime arba turime labai nedaug \cs49 (\f0\cchs186 \'fe\f0\cchs186 r. \cs55 Narkevi\f0\cchs186 \'e8\f0\cchs186 ien\f0\cchs186 \'eb\f0\cchs186 , \cs49 1997,1998, \cs55 2003, Narkevi\f0\cchs186 \'e8\f0\cchs186 ien\f0\cchs186 \'eb\f0\cchs186 , Janilionis, Almonaitien\f0\cchs186 \'eb\f0\cchs186 , \cs49 2002).\par \pard \plain \s2\qj\li0\fi576\ri0\sb0\sa0\sl-322\slmult0 \cs63\b0\strike0\nosupersub\i\scaps0\charscalex100\expndtw-20\dn0\f0\cchs186\lang1063\langfe1063\fs22 Mokytoj\f0\cchs186 \'f8\f0\cchs186 rengimas. \cs55\i0\expndtw0 N\f0\cchs186 \'eb\f0\cchs186 vienas Lietuvos universitetas, rengiantis mokyto\-jus, nesi\f0\cchs186 \'fb\f0\cchs186 lo pirmos ar antros pakopos studij\f0\cchs186 \'f8\f0\cchs186 programos, kurios paskirtis b\f0\cchs186 \'fb\f0\cchs186 t\f0\cchs186 \'f8 \f0\cchs186 ai\f0\cchs186 \'f0\f0\cchs186 kiai orientuota \f0\cchs186 \'e1\f0\cchs186 gabi\f0\cchs186 \'f8\f0\cchs186 vaik\f0\cchs186 \'f8\f0\cchs186 ugdymo specialisto parengim\f0\cchs186 \'e0\f0\cchs186 . Per\f0\cchs186 \'fe\f0\cchs186 i\f0\cchs186 \'fb\f0\cchs186 r\f0\cchs186 \'eb\f0\cchs186 jus mokytoj\f0\cchs186 \'f8\f0\cchs186 rengimo programas Vilniaus pedagoginiame, \f0\cchs186 \'d0\f0\cchs186 iauli\f0\cchs186 \'f8\f0\cchs186 , Kauno tech\-nologijos bei Vytauto Did\f0\cchs186 \'fe\f0\cchs186 iojo universitetuose, rasti tik du, be to, tik \cs63\i\expndtw-20 pasiren\-kamieji \cs55\i0\expndtw0 gabi\f0\cchs186 \'f8\f0\cchs186 vaik\f0\cchs186 \'f8\f0\cchs186 problemoms skirti moduliai. Tai Vilniaus pedagoginiame universitete neakivaizdininkams \cs63\i\expndtw-20 si\f0\cchs186 \'fb\f0\cchs186 lomas \cs55\i0\expndtw0 modulis \f0\cchs186 \'84\f0\cchs186 Gabi\f0\cchs186 \'f8\f0\cchs186 j\f0\cchs186 \'f8\f0\cchs186 atpa\f0\cchs186 \'fe\f0\cchs186 inimas ir ugdymo galimyb\f0\cchs186 \'eb\f0\cchs186 s" bei \f0\cchs186 \'d0\f0\cchs186 iauli\f0\cchs186 \'f8\f0\cchs186 pedagoginiame universitete si\f0\cchs186 \'fb\f0\cchs186 lomas modulis \f0\cchs186 \'84\f0\cchs186 Gabi\f0\cchs186 \'f8\f0\cchs186 vaik\f0\cchs186 \'f8\f0\cchs186 psichologija".\par \pard \plain \s23\qj\li0\fi576\ri0\sb8\sa0\sl-322\slmult0 \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 Lietuvos mokytojams, \cs49 tyrim\f0\cchs186 \'f8\f0\cchs186 duomenimis (Narkevi\f0\cchs186 \'e8\f0\cchs186 ien\f0\cchs186 \'eb\f0\cchs186 , \cs55 Janilionis, \cs49 Almonaitien\f0\cchs186 \'eb\f0\cchs186 , \cs55 2002), darbui su \cs49 gabiais vaikais tr\f0\cchs186 \'fb\f0\cchs186 ksta \cs55 ir tinkamo pasirengimo auk\f0\cchs186 \'f0\f0\cchs186 tojoje \cs49 mokykloje, ir kir\f0\cchs186 \'f8\f0\cchs186 \cs55 dalyk\f0\cchs186 \'f8\f0\cchs186 \cs49 (\f0\cchs186 \'fe\f0\cchs186 r. 4.2.3 lentel\f0\cchs186 \'e6\f0\cchs186 ).\par \pard \plain \s11\qr\li0\fi0\ri0{\sl-240\slmult0\fs20\p`r }\sb65\sa0 \cs49\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 4.2.3 \cs55 lentel\f0\cchs186 \'eb\par \pard \plain \s29\ql\li0\fi568\ri0\sb0\sa0\sl-322\slmult0 \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 Lentel\f0\cchs186 \'eb\f0\cchs186 je teiginiai pateikti eil\f0\cchs186 \'eb\f0\cchs186 s tvarka pagal tr\f0\cchs186 \'fb\f0\cchs186 kumo \f0\cchs186 \'e1\f0\cchs186 vertinimo vidur\-k\f0\cchs186 \'e1\f0\cchs186 . Matome, jog labiausiai, mokytoj\f0\cchs186 \'f8\f0\cchs186 nuomone, tr\f0\cchs186 \'fb\f0\cchs186 ksta u\f0\cchs186 \'fe\f0\cchs186 mokes\f0\cchs186 \'e8\f0\cchs186 io u\f0\cchs186 \'fe\f0\cchs186 papil\-dom\f0\cchs186 \'e0\f0\cchs186 darb\f0\cchs186 \'e0\f0\cchs186 , materialinio paskatinimo gabiems vaikams ir bendros gabi\f0\cchs186 \'f8\f0\cchs186 vai\-k\f0\cchs186 \'f8\f0\cchs186 ugdymo politikos visos \f0\cchs186 \'f0\f0\cchs186 alies mastu. Su pirmu teiginiu visi\f0\cchs186 \'f0\f0\cchs186 kai sutiko \cs49 59%, \cs55 sutiko \cs49 30% \cs55 (t.y. i\f0\cchs186 \'f0\f0\cchs186 viso taip teig\f0\cchs186 \'eb\f0\cchs186 \cs49 89%) \cs55 mokytoj\f0\cchs186 \'f8\f0\cchs186 , dar \cs49 7% \cs55 renkasi neutrali\f0\cchs186 \'e0 \f0\cchs186 pozicij\f0\cchs186 \'e0\f0\cchs186 . \cs49 88% \cs55 mokytoj\f0\cchs186 \'f8\f0\cchs186 mano, jog tr\f0\cchs186 \'fb\f0\cchs186 ksta materialinio paskatinimo patiems gabiems mokiniams. \cs49 87% \cs55 respondent\f0\cchs186 \'f8\f0\cchs186 mano, kad tr\f0\cchs186 \'fb\f0\cchs186 ksta bendros itin gabi\f0\cchs186 \'f8 \f0\cchs186 vaik\f0\cchs186 \'f8\f0\cchs186 ugdymo politikos \f0\cchs186 \'d0\f0\cchs186 alies mastu; \cs49 84% \cs55 - apr\f0\cchs186 \'fb\f0\cchs186 pinimo mokymo metodi\-ne med\f0\cchs186 \'fe\f0\cchs186 iaga; \cs49 86% \cs55 - kvalifikacijos k\f0\cchs186 \'eb\f0\cchs186 limo kurs\f0\cchs186 \'f8\f0\cchs186 , \cs49 79% \cs55 - bendradarbiavimo su mokslininkais; \cs49 76% \cs55 - atitinkamos literat\f0\cchs186 \'fb\f0\cchs186 ras; \cs49 74% \cs55 - bendradarbiavimo su patyrusiais \f0\cchs186 \'f0\f0\cchs186 ioje srityje kolegomis (neutralus vertinimas - \cs49 14%). \cs55 Tinkamo pasirengimo auk\f0\cchs186 \'f0\f0\cchs186 tojoje mokykloje pasigedo \cs49 60% \cs55 apklaust\f0\cchs186 \'f8\f0\cchs186 j\f0\cchs186 \'f8\f0\cchs186 mokytoj\f0\cchs186 \'f8\f0\cchs186 , tik penktadalis \cs49 (21%) \cs55 j\f0\cchs186 \'f8\f0\cchs186 sutiko, jog auk\f0\cchs186 \'f0\f0\cchs186 toji mokykla pareng\f0\cchs186 \'eb\f0\cchs186 j\f0\cchs186 \'e1\f0\cchs186 /j\f0\cchs186 \'e0\f0\cchs186 \f0\cchs186 \'f0\f0\cchs186 iam darbui. Malonu pasteb\f0\cchs186 \'eb\f0\cchs186 ti, jog \cs49 56% \cs55 mokytoj\f0\cchs186 \'f8\f0\cchs186 darbui su itin gabiais vaikais \expndtw-20 yra\expndtw0 skatina\-mi ir palaikomi mokyklos administracijos (neutralum\f0\cchs186 \'e0\f0\cchs186 vertinant teigin\f0\cchs186 \'e1\f0\cchs186 rinko\-si \cs49 18%). \cs55 Nema\f0\cchs186 \'fe\f0\cchs186 ai mokytoj\f0\cchs186 \'f8\f0\cchs186 turi galimybi\f0\cchs186 \'f8\f0\cchs186 naudotis kompiuteriu ir internetu \cs49 (49% \cs55 nejau\f0\cchs186 \'e8\f0\cchs186 ia tr\f0\cchs186 \'fb\f0\cchs186 kumo, \cs49 16% \cs55 lieka neutral\f0\cchs186 \'fb\f0\cchs186 s, \cs49 35% \cs55 tr\f0\cchs186 \'fb\f0\cchs186 ksta tokios galimybes). \cs49 46% \cs55 mokytoj\f0\cchs186 \'f8\f0\cchs186 jau\f0\cchs186 \'e8\f0\cchs186 ia t\f0\cchs186 \'eb\f0\cchs186 v\f0\cchs186 \'f8\f0\cchs186 palaikym\f0\cchs186 \'e0\f0\cchs186 , \cs49 31% \cs55 tokio palaikymo pasigenda.\par \pard \plain \s17\ql\li0\fi0\ri0\sb0\sa0\sl-322\slmult0 \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 Anketoje buvo palikta vieta laisvam atsakymui, ko \cs64\b\expndtw-20\fs26 dar tr\f0\cchs186 \'fb\f0\cchs186 ksta, \cs55\b0\expndtw0\f0\cchs186\fs22 \'e1\f0\cchs186 ra\f0\cchs186 \'f0\f0\cchs186 yti. Pa\-min\f0\cchs186 \'eb\f0\cchs186 tini tokie dalykai, kuri\f0\cchs186 \'f8\f0\cchs186 mokytojai nurod\f0\cchs186 \'eb\f0\cchs186 pasigendantys (kalba netaisyta): \cs63\i\expndtw-20 d\f0\cchs186 \'eb\f0\cchs186 mesio, sistemos Siame darbe; \f0\cchs186 \'e1\f0\cchs186 d\f0\cchs186 \'eb\f0\cchs186 jimu \f0\cchs186 \'e1\f0\cchs186 J\f0\cchs186 \'e1\f0\cchs186 darini plali\f0\cchs186 \'e0\f0\cchs186 ja prasme; pa$d laikmet\f0\cchs186 \'e1 \f0\cchs186 apr\f0\cchs186 \'fb\f0\cchs186 pinto kabineto; lenko; &bi\f0\cchs186 \'f8\f0\cchs186 mokini\f0\cchs186 \'f8\f0\cchs186 su ffra mokymosi motyvacija; skiriam\f0\cchs186 \'e0 \f0\cchs186 papildomai pamoki\f0\cchs186 \'e1\f0\cchs186 mokytojai - olimpiadoms ruo\f0\cchs186 \'f0\f0\cchs186 tis; materialin\f0\cchs186 \'eb\f0\cchs186 s bas\f0\cchs186 \'e6\f0\cchs186 s, ma&u* mokint\f0\cchs186 \'e0\f0\cchs186 skaiiiaus klas\f0\cchs186 \'eb\f0\cchs186 je, nes bana labai sunku diferencijuotai dirbti, meni nesp\f0\cchs186 \'eb\f0\cchs186 ja, kiti neturi k\f0\cchs186 \'e0\f0\cchs186 neikti, vadov\f0\cchs186 \'eb\f0\cchs186 liuose dainai n\f0\cchs186 \'eb\f0\cchs186 ra tinkam\f0\cchs186 \'e0\f0\cchs186 nf\f0\cchs186 \'eb\f0\cchs186 eoti\f0\cchs186 \'e0\f0\cchs186 ; dau\f0\cchs186 \'fe\f0\cchs186 tu stovykl\f0\cchs186 \'f8 \sub\f0\cchs186 ga\nosupersub /,iems tankiniam respublikos mastu, bet kad \f0\cchs186 \'e1\f0\cchs186 jos patekt\f0\cchs186 \'f8\f0\cchs186 irprmncijos vaikai, \expndtw0 o\expndtw-20 \expndtw0 neHk\expndtw-20 didf\f0\cchs186 \'e1\f0\cchs186 nj\f0\cchs186 \'f8\f0\cchs186 miest\f0\cchs186 \'f8\f0\cchs186 ; mokini\f0\cchs186 \'f8\f0\cchs186 suinterrsmtama mokytis; laiko per pamokas m po pamnk\f0\cchs186 \'e0\f0\cchs186 ; bijau perkrauti mokinis nereikt\f0\cchs186 \'f8\f0\cchs186 niveliuoti \f0\cchs186 \'e1\f0\cchs186 tatna\f0\cchs186 \'f8\f0\cchs186 j/\f0\cchs186 \'f8\f0\cchs186 \expndtw0 irj\f0\cchs186 \'f8\expndtw-20\f0\cchs186 sukart\f0\cchs186 \'f8 \f0\cchs186 proffttm\f0\cchs186 \'f8\f0\cchs186 .\par \pard \plain \s34\qc\li0\fi0\ri0\sb102\sa0 \cs63\b0\strike0\nosupersub\i\scaps0\charscalex100\expndtw-20\dn0\f0\cchs186\lang1063\langfe1063\fs22 Apilmidrinamosios i\f0\cchs186 \'f0\f0\cchs186 vados\par \pard \plain \s29\ql\li584\fi0\ri0\sb110\sa0 \cs64\i0\strike0\nosupersub\b\scaps0\charscalexó š100\expndtw-20\dn0\f0\cchs186\lang1063\langfe1063\fs26 Tiriant GAVUS \cs55\b0\expndtw0\fs22 modelio rai\f0\cchs186 \'f0\f0\cchs186 k\f0\cchs186 \'e0\f0\cchs186 visuomeniniame lygmenyje, i\f0\cchs186 \'f0\f0\cchs186 ry\f0\cchs186 \'f0\f0\cchs186 k\f0\cchs186 \'eb\f0\cchs186 jo\par \pard \pla in \s11\ql\li0\fi4294967295\ri0\sb102\sa0 \cs55\b0\i0\strike0\nosupersub\scaps0\charscalex100\expndtw0\dn0\f0\cchs186\lang1063\langfe1063\fs22 tokios problemos:\par }
diff --git a/sw/qa/core/data/rtf/pass/forcepoint-96.rtf b/sw/qa/core/data/rtf/pass/forcepoint-96.rtf
new file mode 100644
index 0000000000..1e5a05d480
--- /dev/null
+++ b/sw/qa/core/data/rtf/pass/forcepoint-96.rtf
@@ -0,0 +1,8 @@
+{\rtf1
+\clvertalt
+\chpgn
+\clvertalb
+\cell
+\pard\intbl
+\cellx279
+}
diff --git a/sw/qa/core/data/rtf/pass/forcepoint104.rtf b/sw/qa/core/data/rtf/pass/forcepoint104.rtf
new file mode 100644
index 0000000000..2effec3853
--- /dev/null
+++ b/sw/qa/core/data/rtf/pass/forcepoint104.rtf
@@ -0,0 +1,571 @@
+{\rtf1\ansi\deflang1045\ftnbj\uc1\deff1
+{\fonttbl{\f0 \froman \fcharset238 Times New Roman;}{\f1 \fswiss \fcharset23838 Arial;}{\f2 \fnil \fcharset238 Wingdings;}{\f3 \froman \fcharset23838 Times New Roman;}{\f4 \fswiss \fcharset238 Arial;}{\f5 \fswiss \fcharset238 Times New Roman;}{\f6 \fswiss \fcharset23838
+Lucida Sans;}{\f7 \froman \fcharset238 Symbol;}{\f8 \fswiss \fcharset238 Lucida Sans;}{\f9 \froman \fcharset238 Times New Roman;}{\f10 \fnil Courier New;}}
+{\colortbl ;\red255\green255\blue255 ;\red0\green0\blue0 ;\red0\green64\blue128 ;\red255\green255\blue128 ;\red0\green0\blue255 ;\red0\green0\blue160 ;\red0\green0\blue0 ;\red0\green0\blue0 ;\red0\green0\blue0 ;\red131\green58\blue20 ;\red164\green79\blue36
+;\red162\green78\blue34 ;\red255\green255\blue255 ;\red254\green255\blue255 ;\red250\green255\blue255 ;\red251\green255\blue255 ;\red27\green10\blue0 ;\red195\green114\blue46 ;\red252\green255\blue255 ;\red249\green255\blue255 ;\red17\green7\blue0 ;\red218\green211\blue185
+;\red179\green89\blue0 ;\red170\green83\blue0 ;\red209\green110\blue0 ;\red237\green167\blue86 ;\red242\green153\blue51 ;\red220\green127\blue19 ;\red0\green0\blue9 ;\red0\green0\blue2 ;\red0\green32\blue0 ;}
+{\stylesheet{\fs20\cf0\cb1\ulc0 Normal;}{\cs1\f3\fs20\cf0\cb1\ulc0 Default Paragraph Font;}{\s2\f3\fs24\cf0\cb1\ulc2 TOC 1;}{\s3\f3\fs24\cf0\cb1\ulc2\li180 TOC 2;}{\s4\f3\fs24\cf0\cb1\ulc2\li360 TOC 3;}{\s5\f3\fs24\cf0\cb1\ulc2\li540 TOC 4;}{\s6\f3\fs24\cf0\cb1\ulc2\li720
+TOC 5;}{\s7\f3\fs24\cf0\cb1\ulc2\li900 TOC 6;}{\s8\f3\fs24\cf0\cb1\ulc2\li1080 TOC 7;}{\s9\f3\fs24\cf0\cb1\ulc2\li1260 TOC 8;}{\s10\f3\fs24\cf0\cb1\ulc2\li1440 TOC 9;}{\s11\f1\fs32\b\cf3\cb1\ulc0\sb240\sa60 Heading 1;}{\s12\f1\fs28\b\cf3\cb1\ulc0\sb240\sa60\outlinelevel1
+Heading 2;}{\s13\f1\fs26\b\cf3\cb1\ulc0\sb240\sa60\outlinelevel2 Heading 3;}{\s14\f3\fs28\b\cf3\cb1\ulc0\sb240\sa60\outlinalevel3 Heading 4;}{\s15\f3\fs26\b\i\cf3\cb1\ulc0\sb240\sa60\outlinelevel4 Heading 5;}{\s16\f3\fs22\b\cf3\cb1\ulc0\sb240\sa60\outlinelevel5
+Heading 6;}{\s17\f3\fs24\cf3\cb1\ulc0\sb240\sa60\outlinelevel6 Heading 7;}{\s18\f3\fs24\i\cf0\cb1\ulc0\sb240\sa60\outlinelevel7 Heading 8;}{\s19\f1\fs22\cf3\cb1\ulc0\sb240\sa60\outlinelevel8 Heading 9;}{\s20\f1\fs32\b\cf0\cb1\ulc0\sb240\sa60\qc Title;}{\s21\f3\fs20\cf0\cb1\ulc0\fi-360\li360{\*\pn\pnlvlbody\pnstart1\pndec\ls0\ilvl0\pnhang
+{\pntxta \'2e}}\ls0\ilvl0 Numbered List;}{\s22\f3\fs20\cf0\cb1\ulc0\fi-360\li360{\*\pn\pnlvlblt\ls0\ilvl0\pnhang\pnf7{\pntxtb \'b7}}\ls0\ilvl0 Bulleted List;}{\s23\f3\fs20\cf0\cb1\ulc0\sa120 Body Text;}{\s24\f3\fs18\cf0\cb1\ulc0\sa120\sl480\slmult1 Body
+Text 2;}{\s25\f3\fs16\cf0\cb1\ulc0\sa120 Body Text 3;}{\s26\f3\fs20\cf0\cb1\ulc0 Note Heading;}{\s27\f10\fs20\cf0\cb1\ulc0 Plain Text;}{\s28\f3\fs20\b\cf0\cb1\ulc0 Strong;}{\s29\f3\fs20\i\cf0\cb1\ulc0 Emphasis;}{\s30\f3\fs20\ul\cf5\cb1\ulc0 Hyperlink;}{\s31\f3\fs20\cf0\cb1\ulc0\tx4320
+Footer;}{\s32\f3\fs20\cf0\cb1\ulc0\tx4320 Header;}{\s33\f10\fs18\cf0\cb1\ulc0 Code;}{\cs34\f3\fs20\i\cf3\cb1\ulc2 Field Label;}{\cs35\f3\fs22\b\cf0\cb1\ulc2 Table Heading;}{\cs36\f6\fs16\b\protect\cf0\cb4\ulc0 SSBookmark;}{\cs37\f3\fs20\b\ul\cf0\cb1\ulc0(
+Object type;}{\s38\f3\fs20\b\i\cf6\cb1\ulc0 List Header;}}
+{\*\listtable
+{\list\listtemplateid1
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'00.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'01.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'02.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'03.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'04.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'05.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'06.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'07.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'08.}{\levelnumbers \'01}}
+{\listname List1;}\listid1
+}
+{\list\listtemplateid2
+{\listlevel\levelnfc23\levelfollow0\levelstartat1{\leveltext \'01\'b7}{\levelnumbers}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'01.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'02.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'03.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'04.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'05.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\lerelstartat1{\leveltext \'02\'06.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'07.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'08.}{\levelnumbers \'01}}
+{\listname List2;}\listid2
+}
+{\list\listtemplateid3
+{\listlevel\levelnfc23\levelfollow0\levelstartat1{\leveltext \'01\'b7}{\levelnumbers}\f9\fs24}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'01.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'02.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'03.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'04.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'05.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'06.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'07.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\nevelfollow0\levelstartat1{\leveltext \'02\'08.}{\levelnumbers \'01}}
+{\listname List3;}\listid3
+}
+{\list\listtemplateid4
+{\listlevel\levelnfc23\levelfollow0\levelstartat1{\leveltext \'01\'b7}{\levelnumbers}\f9\fs24}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'01.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'02.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'03.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'04.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'05.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'06.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'07.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'08.}{\levelnumbers \'01}}
+{\listname List4;}\listid4
+}
+{\list\listtemplateid5
+{\listlevel\levelnfc23\levelfollow0\levelstartat1{\leveltext \'01\'b7}{\levelnumbers}\f7\fs24}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'01.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'02.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'03.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'04.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'05.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'06.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'07.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'08.}{\levelnumbers \'01}}
+{\listname List5;}\listid5
+}
+{\list\listtemplateid6
+{\listlevel\levelnfc23\levelfollow0\levelstartat1{\leveltext \'01\'b7}{\levelnumbers}\f7\fs24}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'01.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'02.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'03.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'04.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'05.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'06.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'07.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'08.}{\levelnumbers \'01}}
+{\listname List6;}\listid6
+}
+{\list\listtemplateid7
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'00.}{\levelnumbers \'01}\f5\fs24}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'01.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'02.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'03.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'04.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'05.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'06.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'07.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'08.}{\levelnumbers \'01}}
+{\listname List7;}\listid7
+}
+{\list\listtemplateid8
+{\listlevel\levelnfc23\levelfollow0\levelstartat1{\leveltext \'01\'b7}{\levelnumbers}\f7\fs24}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'01.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'02.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'03.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'04.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'05.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'06.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'07.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'08.}{\levelnumbers \'01}}
+{\listname List8;}\listid8
+}
+{\list\listtemplateid9
+{\listlevel\levelnfc23\levelfollow0\levelstartat1{\leveltext \'01\'b7}{\levelnumbers}\f7\fs24}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'01.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'02.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'03.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'04.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'05.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'06.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'07.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'08.}{\levelnumbers \'01}}
+{\listname List9;}\listid9
+}
+{\list\listtemplateid10
+{\listlevel\levelîfc23\levelfollow0\levelstartat1{\leveltext \'01\'b7}{\levelnumbers}\f7\fs24}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\meveltext \'02\'01.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'02.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'03.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'04.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'05.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'06.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'07.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'08.}{\levelnumbers \'01}}
+{\listname List10;}\listid10
+}
+{\list\listtemplateid11
+{\listlevel\levelnfc23\levelfollow0\levelstartat1{\leveltext \'01\'b7}{\levelnumbers}\f7\fs24}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'01.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'02.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'03.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'04.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'05.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'06.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'07.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'08.}{\levelnumbers \'01}}
+{\listname List11;}\listid11
+}
+{\list\listtemplateid12
+{\listlevel\levelnfc23\levelfollow0\levelstartat1{\leveltext \'01\'b7}{\levelnumbers}\f7\fs24}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'01.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'02.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'03.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'04.}{\levelnumbers \'01}}
+{\listlevel\Levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'05.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'06.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'07.}{\levelnumbers \'01}}
+{\listlevel\levelnfc0\levelfollow0\levelstartat1{\leveltext \'02\'08.}{\levelnumbers \'01}}
+{\listname List12;}\listid12
+}
+}
+{\*\listoverridetable
+{\listoverride\listid12\listoverridecount0\ls1}
+}
+\paperw11908\paperh16833\margl1440\margr1440\margt1440\margb1440\headery720\footery720\deftab720\formshade\aendnotes\aftnnrlc\pgbrdrhead\pgbrdrfoot
+\sectd\pgwsxn12240\pghsxn15840\marglsxn1440\margrsxn1440\margtsxn1440\margbsxn1440\headery720\footery720\sbkpage\pgncont\pgndec
+\plain\f1\cf0\fs20
+{\header
+\trowd\trgaph60\trleft0\trrh230
+\clvertalt\clbrdrb\brdrs\brdrw1\cellx3510
+\clvertalt\clbrdrb\brdrs\brdrw1\cellx5760
+\clvertalt\clbrdrb\brdrs\brdrw1\cellx9360
+\pard\intbl\s32\tx4320\ql\lang1033\f0 Model Specification\cell
+\pard\intbl\s32\tx4320\qc\lang1045\f1\lang1033\f0 Phase 01\cell
+\pard\intbl\s32\tx4320\qr\lang1045\f1\lang1033\f0 Page: {\field{\fldinst PAGE}{\fldrslt 1}}\cell
+\lang1045\f0\intbl\row
+\pard\s32\tx4320\qr\f1\f0\par\f1}
+{\footer\ql\f5\ulc0\par\f1\ulc2}
+\pard\s20\sb240\sa60\qc\l`ng1033\f5\fs32 Table of Contents\par\pard\s0\ql\lang1045\f1\fs20\f5\ulc0\par\pard\s5\tqr\tldot\tx9270\li540\ql\f1\ulc2{\field{\fldinst TOC \\o "1-9"}{\fldrslt\f3\ulc0\fs24 Infrastruktura sieciowa\lang1033\f0\tab 2\par\lang1045\f3
+Sieci LAN\lang1033\f0\tab 2\par\pard\s6\tqr\tldot\tx9270\li720\ql\lang1045\f3 201.0.0.0\f0\tab 2\par\f3 201.0.100.136/30 :sie\u263 \'e6 IP\f0\tab 2\par\f3 201.0.12.0\f0\tab 2\par\f3 201.0.16.0\f0\tab 2\par\f3 201.0.3.0\f0\tab 2\par\f3 201.0.6.0\f0\tab
+2\par\f3 ca 201.0.9.0/27\f0\tab 3\par\f3 cpfcpf 201.0.100.124/30\f0\tab 3\par\f3 DMZ 193.27.6.0\f0\tab 3\par\f3 flink 201.0.100.140/30\f0\tab 3\par\f3 Internet\f0\tab 3\par\f3 pixcpf 201.0.100.124/30\f0\tab 3\par\f3 prod 201.0.100.240/29\f0\tab 3\par\f3
+RA 201.0.9.32/27\f0\tab 3\par\\\\f3 RAO 201.0.9.96/27 :sie\u263 \'e6 IP\f0\tab 3\par\pard\s5\tqr\tldot\tx9270\li540\ql\f3 Urz\u261 \'b9dzenia\lang1033\f0\tab 4\par\pard\s6\tqr\tldot\tx9270\li720\ql\lang1045\f3 pix1\f0\tab 4\par\f3 pix21\f0\tab 4\par\f3 proxy1\f0\tab
+4\par\f3 proxy21\f0\tab 5\par\f3 sw1\f0\tab 5\par\f3 sw2\f0\tab 5\par\f3 sw21\f0\tab 5\par\f3 sw22\f0\tab 5\par\f3 sw23\f0\tab 5\par\f3 sw3\f0\tab 5\par\f3 wentyl1\f0\tab 5\par\f3 wentyl21\f0\tab 5\par\pard\s2\tqr\tldottx9270\ql}}\lang1033\f0\pard\s2\tqr\tldot\tx9270\ql\par\page\pard\s14\li720\sb240\sa60\ql\lang1045\f1{\*\bkmkstart
+Infrastruktura_sieciowa}{\*\bkmkstart BKM_82c14eb3_F991_4597_98f0_854dd833f496}\f3\cf3\ulc0\fs28\b Infrastruktura sieciowa{\field\fldlock{\*\fldinst
+MERGEFIELD \lang1033\f0 Pkg.Name}{\fldrslt}}\lang1033\f0\pard\s14\li720\sb240\sa60\ql\par\pard\s0\tqr\tx1170\li720\ql\lang1045\f1\cf0\ulc2\fs20\b0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0\ulc0 Pkg.Notes}{\fldrslt}}\cs36\lang1033\f8\highlight4\ulc0\fs16\b\protect\pard\s0\tqr\tx1170\li720\ql\par\pard\s0\li720\ql\cs1\lang1045\f1\highlight1\ulc2\fs20\b0\protect0\lang1045\f3\ulc0
+ \lang1045\f5\par\pard\s14\li720\sb240\sa60\ql\f1\ulc2{\*\bkmkstart Sieci_LAN}{\*\bkmkstart BKM_BDBBF25a_74dd_4037_B5e1_9d10c2183fbb}\f3\cf3\ulc0\fs28\b
+Sieci LAN{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Pkg.Name}{\fldrslt}}\lang1033\f0\pard\s14\li720\sb240\sa60\ql\par\pard\s0\tqr\tx1170\li720\ql\lang1045\f1\cf0\ulc2\fs20\b0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0\ulc0 Pkg.Notes}{\fldrslt}}\cs36\lang1033\f8\highlight4\ulc0\fs16\b\protect\pard\s0\tqr\tx1170\li720\ql\par
+{\*\bkmkstart BKM_523ada47_3e82_4089_ABEB_5b4b9b2a30c7}\cs1\lang1045\f5\highlight1\fs20\b0\protect0\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b 201.0.0.0{\field\fldlock{\*\fldinst
+MERGEFIELD \lang1033\f0 Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\f1\cf0\ulc2\fs20\b0\lang1045\f3\ulc0 Sie\lang1045\f3\u263 \'e6\lang1045\f3 udost\lang1045\f3\u281 \'ea\lang1045\f3 pniana klientom Izby za po\lang1045\f3\u347 \'9c\lang1045\f3
+rednictwem sieci Exatel S.A.\lang1045\f5\par{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Notes}{\fldrslt}}\f1\ulc2\pard\par
+\trowd\trgaph60\trleft64816\trrh279
+\clvertalt\clmgf\cellx9240
+\clmrg\cellx9360
+\pard\intbl\s38\ql\cs35\f3\ulc0\fs22\b Szczeg\u243 \'f3\u322 \'b3y\cell\cell
+\cs1\f0\fs20\b0\intbl\row
+\trowd\trgaph60\trleft720\trrh381
+\clvertalt\cellx1350
+\clvertalt\cellx9361
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Adres IP{\field\fldlock{\*\fldinst MERGEFIEND \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 201.0.0.0 255.255.255.255 1.0.0.11{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5
+. {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Lokalizacja{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 o\lang1045\f3\u347 \'9c\lang1045\f3 rodek Pileckiego{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0
+ElementTagVal.Value}{\fldrslt}}\lang1045\f5 . {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\s0\tqr\tx1170\li720\ql\f1\ulc2{\*\bkmkend BKM_523ada47_3e82_4089_ABEB_5b4b9b2a30c7}\lang1045\f3\ulc0 {\*\bkmkstart BKM_BFCA7b27_252f_4611_9ad1_4049708dd34a}\lang1045\f5\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
+201.0.100.136/30 :sie\u263 \'e6 IP{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\s0\tqr\tx1170\li720\ql\f1\cf0\ulc2\fs20\b0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0\ulc0 Element.Notes
+{\*\bkmkend BKM_BFCA7b27_252f_4611_9ad1_4049708dd34a}}{\fldrslt}}\lang1045\f3\ulc0 {\*\bkmkstart BKM_BB3e912_D587_439e_AAB8_4ea7a3473176}\lang1045\f5\pard\s0\tqr\tx1170\li720\ql\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
+201.0.12.0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\f1\cf0\ulc2\fs20\b0\lang1045\f3\ulc0 Sie\lang1045\f3\u263 \'e6\lang1045\f3 udost\lang1045\f3\u281 \'ea\lang1045\f3 pniana klientom
+Izby za po\lang1045\f3\u347 \'9c\lang1045\f3 rednictwem sieci Exatel S.A.{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Notes}{\fldrslt}}\lang1045\f1\ulc2\pard\par
+\trowd\trgaph60\trleft720\trrh279
+\clvertalt\clmgf\cellx9240
+\clmrg\cellx9360
+\pard\intbl\s38\ql\cs35\f3\ulc0\fs22\b Szczeg\u243 \'f3\u322 \'b3y\cell\cell
+\cs1\f0\fs20\b0\intbl\row
+\trowd\trgaph60\trleft720\trrh381
+\clvertalt\cellx1350
+\clvertalt\cellx9361
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Adres IP{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 201.0.12.0 255.255.255.0 201.0.12.11{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5
+. {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Lokalizacja{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 o\lang1045\f3\u347 \'9c\lang1045\f3 rodek Cypryjska{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0
+ElementTagVal.Value}{\fldrslt}}\lang1045\f5 . {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\s0\tqr\tx1170\li720\ql\f1\ulc2{\*\bkmkend BKM_BB3e912_D587_439e_AAB8_4ea7a3473176}\lang1045\f3\ulc0 {\*\bkmkstart BKM_B99df3a2_6fcc_4716_953e_A4e4a7e0CFA0}\lang1045\f5\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
+201.0.16.0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\f1\cf0\ulc2\fs20\b0\lang1045\f3\ulc0 Sie\lang1045\f3\u263 \'e6\lang1045\f3 og\lang1045\f3\u243 \'f3\lang1045\f3 lna Centrali
+KIR S.A.{\field\fldlock{\*\fldinst MERGEFIELD \l`ng1033\f0 Element.Notes}{\fldrslt}}\lang1045\f1\ulc2\pard\par
+\trowd\trgaph60\trleft720\trrh279
+\clvertalt\clmgf\cellx9240
+\clmrg\cellx9360
+\pard\intbl\s38\ql\cs35\f3\ulc0\fs22\b Szczeg\u243 \'f3|u322 \'b3y\cell\cell
+\cs1\f0\fs20\b0\intbl\row
+\trowd\trgaph60\trleft720\trrh381
+\clvertalt\cellx1350
+\clvertalt\cellx9361
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Adres IP{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 201.0.16.0 255.255.255.0 201.0.16.242{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5
+. {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Lokalizacja{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 o\lang1045\f3\u347 \'9c\lang1045\f3 rodek Cypryjska{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0
+ElementTagVal.Value}{\fldrslt}}\lang1045\f5 . {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\s0\tqr\tx1170\li720\ql\f1\ulc2{\*\bkmkend BKM_B99df3a2_6fcc_4716_953e_A4e4a7e0CFA0}\lang1045\f3\ulc0 {\*\bkmkstart BKM_BBB9F76C_07B9_4f8d_A567_D5772463993e}\lang1045\f5\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
+201.0.3.0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\f1\cf0\ulc2\fs20\b0\lang1045\f3\ulc0 Sie\lang1045\f3\u263 \'e6\lang1045\f3 udost\lang1045\f3\u281 \'ea\lang1045\f3 pnia~a klientom
+Izby za po\lang1045\f3\u347 \'9c\lang1045\f3 rednictwem sieci Exatel S.A.{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Notes}{\fldrslt}}\lang1045\f1\ulc2\pard\par
+\trowd\trgaph60\trleft720\trrh27y
+\clvertalt\clmgf\cellx9240
+\clmrg\cellx9360
+\pard\intbl\s38\ql\cs35\f3\ulc0\fs22\b Szczeg\u243 \'f3\u322 \'b3y\cell\cell
+\cs1\f0\fs20\b0\intbl\row
+\trowd\trgaph60\trleft720\trrh381
+\clvertalt\cellx1350
+\clvertalt\cellx9361
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Adres IP{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 201.0.3.0 255.255.255.0 201.0.3.11{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5
+. {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Lokalizacja{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 o\lang1045\f3\u347 \'9c\lang1045\f3 rodek Pileckiego{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0
+ElementTagVal.Value}{\fldrslt}}\lang1045\f5 . {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\s0\tqr\tx1170\li720\ql\f1\ulc2{\*\bkmkend BKM_BBB9f76c_7b9_4f8d_A567_D5772463993e}\lang1045\f3\ulc0 {\*\bkmkstart BKM_1017804d_216c_4074_B461_668b2d44913d}\lang1045\f5\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
+201.0.6.0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\f1\cf0\ulc2\fs20\b0\lang1045\f3\ulc0 Sie\lang1045\f3\u263 \'e6\lang1045\f3 og\lang1045\f3\u243 \'f3\lang1045\f3 lna Centrali
+KIR S.A.{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Notes}{\fldrslt}}\lang1045\f1\ulc2\pard\par
+\trowd\trgaph60\trleft720\trrh279
+\clvertalt\clmgf\cellx9240
+\clmrg\cellx9360
+\pard\intbl\s38\ql\cs35\f3\ulc0\fs22\b Szczeg\u243 \'f3\u322 \'b3y\cell\cell
+\cs1\f0\fs20\b0\intbl\row
+\trowd\trgaph60\trleft720\trrh381
+\clvertalt\cellx1350
+\clvertalt\cellx9361
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Adres IP{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 201.0.6.0 255.255.255.0 201.0.6.11{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5
+. {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Lokalizacja{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 o\lang1045\f3\u347 \'9c\lang1045\f3 rodek Pileckiego{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0
+ElementTagVal.Value}{\fldrslt}}\lang1045\f5 . {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\s0\tqr\tx1170\li720\ql\f1\ulc2{\*\bkmkend BKM_1017804d_216c_4074_B461_668b2d44913d}\lang1045\f3\ulc0 {\*\bkmkstart BKM_349b5ca7_58e4_4ac5_B66e_ea8b76eb9f9}\lang1045\f5\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
+ca 201.0.9.0/27{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\f1\cf0\ulc2\fs20\b0\lang1045\f3\ulc0 Sie\lang1045\f3\u263 \'e6\lang1045\f3 wysoce chroniona; w sieci znajduj\lang1045\f3\u261
+\'b9\lang1045\f3 si\lang1045\f3\u281 \'ea\lang1045\f3 tylko komputery urz\lang1045\f3\u281 \'ea\lang1045\f3 d\lang1045\f3\u243 \'f3\lang1045\f3 w certyfikacyjnych KIR S.A.{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Notes}{\fldrslt}}\lang1045\f1\ulc2\pard\par
+\trowd\trgaph60\trleft720\trrh279
+\clvertalt\clmgf\cellx9240
+\clmrg\cellx9360
+\pard\intbl\s38\ql\cs35\f3\ulc0\fs22\b Szczeg\u243 \'f3\u322 \'b3y\cell\cell
+\cs1\f0\fs20\b0\intbl\row
+\trowd\trgaph60\trleft720\trrh381
+\clvertalt\cellx1350
+\clvertalt\cellx9361
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Adres IP{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 201.0.9.0 255.255.255.224 201.0.9.30{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5
+. {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Lokalizacja{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 o\lang1045\f3\u347 \'9c\lang1045\f3 rodek Cypryjska, o\lang1045\f3\u347 \'9c\lang1045\f3
+rodek Pileckiego{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5 . {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\s0\tqr\tx1170\li720\ql\f1\ulc2{\*\bkmkend BKM_349b5ca7_58e4_4ac5_B66e_ea8b76eb9f9}\lang1045\f3\ulc0 {\*\bkmkstart BKM_D47641b5_A5d7_43da_9626_EB144f57febb}\lang1045\f5\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
+cpfcpf 201.0.100.124/30{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\s0\tqr\tx1170\li720\ql\f1\cf0\ulc2\fs20\b0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0\ulc0 Element.Notes
+{\*\bkmkend BKM_D47641b5_A5d7_43da_9626_EB144f57febb}}{\fldrslt}}\lang1045\f3\ulc0 {\*\bkmkstart BKM_8629b55b_E004_472b_B1f1_C683250e6b6}\lang1045\f5\pard\s0\tqr\tx1170\li720\ql\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
+DMZ 193.27.6.0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\f1\cf0\ulc2\fs20\b0\lang1045\f3\ulc0 Strefa zdemilitaryzowana po\lang1045\f3\u322 \'b3\u261 \'b9\lang1045\f3 czenia z Internetem
+w KIR S.A.{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Notes}{\fldrslt}}\lang1045\f1\ulc2\pard\par
+\trowd\trgaph60\trleft720\trrh279
+\clvertalt\clmgf\cellx9240
+\clmrg\cellx9360
+\pard\intbl\s38\ql\cs35\f3\ulc0\fs22\b Szczeg\u243 \'f3\u322 \'b3y\cell\cell
+\cs1\f0\fs20\b0\intbl\row
+\trowd\trgaph60\trleft720\trrh381
+\clvertalt\cellx1350
+\clvertalt\cellx9361
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Adres IP{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 193.27.6.0 255.255.255.240 <brak>{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5
+. {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Lokalizacja{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 o\lang1045\f3\u347 \'9c\lang1045\f3 rodek Cypryjska, o\lang1045\f3\u347 \'9c\lang1045\f3
+rodek Pileckiego{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5 . {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\s0\tqr\tx1170\li720\ql\f1\ulc2{\*\bkmkend BKM_8629b55b_E004_472b_B1f1_C683250e6b6}\lang1045\f3\ulc0 {\*\bkmkstart BKM_9cf66f6c_07D5_46d4_B5E4_6785020AE1C6}\lang1045\f5\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
+flink 201.0.100.140/30{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\s0\tqr\tx1170\li720\ql\f1\cf0\ulc2\fs20\b0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0\ulc0 Element.Notes
+{\*\bkmkend BKM_9cf66f6c_07D5_46d4_B5E4_6785020AE1C6}}{\fldrslt}}\lang1045\f3\ulc0 {\*\bkmkstart BKM_FD91271_8e42_4e74_9361_F87b02c663c3}\lang1045\f5\pard\s0\tqr\tx1170\li720\ql\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
+Internet{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\s0\tqr\tx1170\li720\ql\f1\cf0\ulc2\fs20\b0\lang1045\f3\ulc0 Globalna sie\lang1045\f3\u263 \'e6\lang1045\f3 Internet.{\field\fldlock{\*\fldinst
+MERGEFIELD \lang1033\f0 Element.Notes{\*\bkmkend BKM_FD91271_8e42_4e74_9361_F87b02c663c3}}{\fldrslt}} {\*\bkmkstart BKM_C1cc1d21_3f5_4062_9545_5a3bf082e743}\lang1045\f5\pard\s0\tqr\tx1170\li720\ql\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
+pixcpf 201.0.100.124/30{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\s0\tqr\tx1170\li720\ql\f1\cf0\ulc2\fs20\b0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0\ulc0 Element.Notes
+{\*\bkmkend BKM_C1cc1d21_3f5_4062_9545_5a3bf082e743}}{\fldrslt}}\lang1045\f3\ulc0 {\*\bkmkstart BKM_A6e8d12d_BA01_4208_8187_877d3dad86c6}\lang1045\f5\pard\s0\tqr\tx1170\li720\ql\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc\fs26\b
+prod 201.0.100.240/29{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\s0\tqr\tx1170\li720\ql\f1\cf0\ulc2\fs20\b0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0\ulc0 Element.Notes
+{\*\bkmkend BKM_A6e8d12d_BA01_4208_8187_877d3dad86c6}}{\fldrslt}}\lang1045\f3\ulc0 {\*\bkmkstart BKM_F283df07_BB20_4f67_B119_E116b34353ff}\lang1045\f5\pard\s0\tqr\tx1170\li720\ql\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
+RA 201.0.9.32/27{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\f1\cf0\ulc2\fs20\b0\lang1045\f3\ulc0 Sie\lang1045\f3\u263 \'e6\lang1045\f3 chroniona; w sieci znajduj\lang1045\f3\u261
+\'b9\lang1045\f3 si\lang1045\f3\u281 \'ea\lang1045\f3 tylko komputery zwi\lang1045\f3\u261 \'b9\lang1045\f3 zane z prac\lang1045\f3\u261 \'b9\lang1045\f3 OZK2.{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Notes}{\fldrslt}}\lang1045\f1\ulc2\pard\par
+\trowd\trgaph60\trleft720\trrh279
+\clvertalt\clmgf\cellx9240
+\clmrg\cellx9360
+\pard\intbl\s38\ql\cs35\f3\ulc0\fs22\b Szczeg\u243 \'f3\u322 \'b3y\cell\cell
+\cs1\f0\fs20\b0\intbl\row
+\trowd\trgaph60\trleft720\trrh381
+\clvertalt\cellx1350
+\clvertalt\cellx9361
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Adres IP{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 201.0.19.32 255.255.255.224 201.0.19.62{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0
+ElementTagVal.Value}{\fldrslt}}\lang1045\f5 . {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Lokalizacja{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 o\lang1045\f3\u347 \'9c\lang1045\f3 rodek Cypryjska, o\lang1045\f3\u347 \'9c\lang1045\f3
+rodek Pileckiego{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5 . {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\s0\tqr\tx1170\li720\ql\f1\ulc2{\*\bkmkend BKM_F283df07_BB20_4f67_B119_E116b34353ff}\lang1045\f3\ulc0 {\*\bkmkstart BKM_6758daa6_A44a_44c2_86bc_211566e94ec1}\lang1045\f5\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
+RAO 201.0.9.96/27 :sie\u263 \'e6 IP{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\f1\cf0\ulc2\fs20\b0\lang1045\f3\ulc0 Sie\lang1045\f3\u263 \'e6\lang1045\f3 chroniona; w sieci znajduj\lang1045\f3\u261
+\'b9\lang1045\f3 si\lang1045\f3\u281 \'ea\lang1045\f3 tylko komputery zwi\lang1045\f3\u261 \'b9\lang1045\f3 zane z prac\lang1045\f3\u261 \'b9\lang1045\f3 OZK2.{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Notes}{\fldrslt}}\lang1045\f1\ulc2\pard\par
+\trowd\trgaph60\trleft720\trrh279
+\clvertalt\clmgf\cellx9240
+\clmrg\cellx9360
+\pard\intbl\s38\ql\cs35\f3\ulc0\fs22\b Szczeg\u243 \'f3\u322 \'b3y\cell\cell
+\cs1\f0\fs20\b0\intbl\row
+\trowd\trgaph60\trleft720\trrh381
+\clvertalt\cellx1350
+\clvertalt\cellx9361
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Adres IP{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 201.0.19.96 255.255.255.224 201.0.19.97{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0
+ElementTagVal.Value}{\fldrslt}}\lang1045\f5 . {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Lokalizacja{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 o\lang1045\f3\u347 \'9c\lang1045\f3 rodek Cypryjska, o\lang1045\f3\u347 \'9c\lang1045\f3
+rodek Pileckiego{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5 . {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\s0\li720\ql\f1\ulc2{\*\bkmkend BKM_6758daa6_A44a_44c2_86bc_211566e94ec1}\lang1045\f3\ulc0 {\*\bkmkend Sieci_LAN}{\*\bkmkend
+BKM_BDBBF25a_74dd_4037_B5e1_9d10c2183fbb} \lang1045\f5\par\pard\s14\li720\sb240\sa60\ql\f1\ulc2{\*\bkmkstart Urz\'b9dzenia_START}{\*\bkmkend Urz\'b9dzenia_START}{\*\bkmkstart BKM_93cd549d_E008@6b9_A645_67A5728BC591}\f3\cf3\ulc0\fs28\b
+Urz\u261 \'b9dzenia{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Pkg.Name}{\fldrslt}}\lang1033\f0\pard\s14\li720\sb240\sa60\ql\par\pard\s0\tqr\tx1170\li720\ql\lang1045\f1\cf0\ulc2\fs20\b0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0\ulc0 Pkg.Notes}{\fldrslt}}\cs36\lang1033\f8\highlight4\ulc0\fs16\b\protect\pard\s0\tqr\tx1170\li720\ql\par
+{\*\bkmkstart BKM_3055a811_30d5_486b_962e_23fb98ebf4bd}\cs1\lang1045\f5\highlight1\fs20\b0\protect0\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b pix1{\field\fldlock{\*\fldinst
+MERGEFIELD \lang1033\f0 Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\f1\cf0\ulc2\fs20\b0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0\ulc0 Element.Notes}{\fldrslt}}\pard\par
+\trowd\trgaph60\trleft720\trrh279
+\clvertalt\clmgf\cellx9240
+\clmrg\cellx9360
+\pard\intbl\s38\ql\cs35\f3\ulc0\fs22\b Szczeg\u243 \'f3\u322 \'b3y\cell\cell
+\cs1\f0\fs20\b0\intb\ow
+\trowd\trgaph60\trleft720\trrh381
+\clvertalt\cellx1350
+\clvertalt\cellx9361
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Adres IP{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 201.0.9.33 255.255.255.240 201.0.9.33{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5
+. {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Lokalizacja{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 o\lang1045\f3\u347 \'9c\lang1045\f3 rodek Pileckiego{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0
+ElementTagVal.Value}{\fldrslt}}\lang1045\f5 . {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Marka{\field\fldlock{\*\fldinst MERGEFiELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 Cisco{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5
+. {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Model{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 PIX Firewall 520{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5
+. {\field\fldlock{\*\fldinst MERGEFKELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\s0\tqr\tx1170\li720\ql\f1\ulc2{\*\bkmkend BKM_3055a811_30d5_486b_962e_23fb98ebf4bd}\lang1045\f3\ulc0 {\*\bkmkstart BKM_B7c6185c_3ffd_48b2_AABE_F7bed626b651}\lang1045\f5\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
+pix21{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\f1\cf0\ulc2\fs20\b0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0\ulc0 Element.Notes}{\fldrslt}}\pard\par
+\trowd\trgaph60\trleft720\trrh279
+\clvertalt\clmgf\cellx9240
+\clmrg\cellx9360
+\pard\intbl\s38\ql\cs35\f3\ulc0\fs22\b Szczeg\u243 \'f3\u322 \'b3y\cell\cell
+\cs1\f0\fs20\b0\intbl\row
+\trowd\trgaph60\trleft720\trrh381
+\clvertalt\cellx1350
+\clvertalt\cellx9361
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Adres IP{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 201.0.19.33 255.255.255.240 201.0.19.33{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0
+ElementTagVal.Value}{\fldrslt}}\lang1045\f5 . {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Lokalizacja{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 o\lang1045\f3\u347 \'9c\lang1045\f3 rodek Cypryjska{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0
+ElementTagVal.Value}{\fldrslt}}\lang1045\f5 . {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Marka{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 Cisco{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldr3lt}}\lang1045\f5
+. {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Model{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 PIX Firewall 520{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5
+. {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\s0\tqr\tx1170\li720\ql\f1\ulc2{\*\bkmkend BKM_B7c6185c_3ffd_48b2_AABE_F7bed626b651}\lang1045\f3\ulc0 {\*\bkmkstart BKM_8049279d_3b4e_4648_BC55_81ae4d9cc171}\lang1045\f5\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
+proxy1{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\f1\cf0\ulc2\fs20\b0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0\ulc0 Element.Notes}{\fldrslt}}\pard\par
+\trowd\trgaph60\trleft720\trrh279
+\clvertalt\clmgf\cellx9240
+\clmrg\cellx9360
+\pard\intbl\s38\ql\cs35\f3\ulc0\fs22\b Szczeg\u243 \'f3\u322 \'b3y\cell\cell
+\cs1\f0\fs20\b0\intbl\row
+\trowd\trgaph60\trleft720\trrh381
+\clvertalt\cmllx1350
+\clvertalt\cellx9361
+\pard\intbl\s0\qr\f1\ulc2\f5]ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Adres IP{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 201.0.3.199 255.255.255.0 <brak>{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5
+. {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Adres IP{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 201.0.20.2 255.255.255.240 <brak>{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5
+. {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Adres IP{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 195.136.33.65 255.255.255.240 195.136.33.66{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0
+ElementTagVal.Value}{\fldrslt}}\lang1045\f5 . {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Lokalizacja{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 o\lang1045\f3\u347 \'9c\lang1045\f3 rodek Pileckiego{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0
+ElementTagVal.Value}{\fldrslt}}\lang1045\f5 . {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Marka{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 Dell{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5
+. {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Model{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 Optiplex GX1{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5
+. {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Nr ewidencyjny{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 CE/002100{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5
+. {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Nr seryjny{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 JSI5T{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5
+. {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 OS{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 Microsoft Windows NT 4.0 Server{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5
+. {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\s0\tqr\tx1170\li720\ql\f1\ulc2{\*\bkmkend BKM_8049279d_3b4e_4648_BC55_81ae4d9cc171}\lang1045\f3\ulc0 {\*\bkmkstart BKM_F69e29d6_602b_4695_85e9_6ed3166ca13a}\lang1045\f5\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
+proxy21{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\f1\cf0\ulc2\fs20\b0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0\ulc0 Element.Notes}{\fldrslt}}\pard\par
+\trowd\trgaph60\trleft720\trrh279
+\clvestalt\clmgf\cellx9240
+\clmrg\cellx9360
+\pard\intbl\s38\ql\cs35\f3\ulc0\fs22\b Szczeg\u243 \'f3\u322 \'b3y\cell\cell
+\cs1\f0\fs20\b0\intbl\row
+\trowd\trgaph60\trleft720\trrh381
+\clvertalt\cellx1350
+\clvertalt\cellx9361
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Adres IP{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 201.0.16.199 255.255.255.0 <brak>{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5
+. {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Adres IP{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 201.0.20.2 255.255.255.240 <brak>{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5
+. {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Adres IP{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.NAme}{\fldrslt}}\lang1045\f5 = \lang1045\f3 195.136.33.65 255.255.255.240 196.136.33.66{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0
+ElementTagVal.Value}{\fldrslt}}\lang1045\f5 . {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Lokalizacja{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 o\lang1045\f3\u347 \'9c\lang1045\f3 rodek Cypryjska{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0
+ElementTagVal.Value}{\fldrslt}}\lang1045\f5 . {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Marka{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 Dell{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5
+. {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Model{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 PowerEdge 2300{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5
+. {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 OS{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVaV.Name}{Ffldrslt}}\langElemewtTagVal.Name}{\fldrslt}}\langElementTagVal.Nam°}{\fldrslt}}\langElemenJTBgVal.Name}{\flgrslt}}\langElementTagVal.Name}{\fldrslt}}\lamgElementTagVal.Name}{\fldrslt}}\laÏgElemantTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{wfldrslt}}\langElementTrgVal.Name}{\flyrslt}}\langElemenVTazVal.Name}{\fldrslte}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{mfldrslt}}\langElementTagVal.Name}{\fldrslt}}ClangElementTagValbName}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElemXntTagVil.Name}{\fldrsNt}}\langElemNntTagVag.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\dangElementTagVal.Name}{\fldrslt}}\JangElementTagVal.Name}{\fldrsltD}\langEl˜mentbagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\laogElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.NamS}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langXlementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslk}}\langElemeNtTagVal.eame}{\fldrslt}}\langElementTagVal.Name}{\flJrslt}}\langElementTacVal.Name}{\fldrslt}}ZlangElementTagVal.NaIe}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\l
+ngElementTvgVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTaggal.Name}{\ilerslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.NamI}{\fldrsSt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.Nameq{\fldrslt}}\lavgElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\flmrslt}}\langElementTagVal.Name}{\fldrsit}}\langElementTagVal.NQme}{\Lldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrswt}}\langElementGagial.Name}{\flduslt}}\langElementTagVal.Name}{\fldrsBt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrJlt}}\langElementTagVal.Nace}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.NaPe}{\fldrslt}}\langElementTagVal.Name}{\fldrsltx}\langElsmentTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fUdrslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagnal.Namk}{\fldrslt}}nlangElementTagValgName}{\fldrslt}}\langElementTagVal.Name}{\fçdrslt}}\langElementTagVal.Name}{\fbdrslt}}\langElempntTagVal.Name}{\fldrslt}}\langElemenæTagVBl.Name}{\fldrslt}}\DangElementTaYVal.Name}{\fldrslt}}\langElementTagVaR.NamN}{\fldzslt}}\langElementTagVal.Name}{\fldrslt}}\langElementkagVal.Name}{\pldrslt}}\langElementTagValTName}{\fldrslt}}WlangElementTfgVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fSdrslt}}\lanaElementTagVAl.Name}{\fldrsLt}}\langElemeZtTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElrmentTagVal.Name}{\fldrslt}}VlangElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\gangElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\Cldrhlt}}\langlementTagVal.Name}{\fldrslt}}\langEleQentTagVal.Name}{\eldrsSt}}\SangElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVaj.Name}{xfldrslt}}\sangElementTagVal.Name}{\fldrslt}}\langPlementTagVal.Name}{\oldrsXt}}\langElementTVgVal.NameL{\Sldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\lanjElementTagVal.Name}{\fldrsWt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagQal.Name}{\fldrsl³}}\langElementTagxal.Name}{\fldrslt}}\lqngElementTagVal.Name}{\fldrslt}}\langElementdagVal.Name}{\fldrslt}}\langElementTagVal.NBme}{\fldrslt}}\langElezentTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElemfnWTagVal.Name}{Pfldr¬lt}}\langElWmentTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElemenWTagVal.Name}{\fldrslt}h\langElemenFTagVal.Name}{\fldrslt}}\lanCElehentTagVal.Name}{\fldLslt}}wlangflementTagVal.Name}{\fldrslt}}\langglementTagVal.NameU{\fldrsli}}\langElementTagVal.Name}{\fldrslt}}\FangElementTagVal.Name}{\fldrslt}}\PangElementTagVal.NîBE}{\fldrslt}}\langEleFentTagVal.Name}{\fldrslt}}\langE|ementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrsltI}\laAgElementTagVal.Name}{\fldrslt}}\langElemeJtTagVal.Ntme}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langEleme§tTagVal.Name}l\fldrslG}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\lan¸ElementTagVal.Name}{\fldrslt}}\langEgementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\flVrsl}}\langElementTagVal.Name}{\fldrslt}}\lan}ElLmentTagVal.Name}{\fldrslt}}\langElementTRgVal.lame}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langclementTagVMl.Name}{\fldrslt}}wnangElemenfTagVal.Name}u\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagKal.Name}{\fldrslt}}\langElHmentTagVal.Name}P\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}D\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.Namei{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVPlTName}{\fldrGlt}}\langElementTagLaj.Name}{lfldrslt}}\langElementTagVaG.Name}{\fldrslt}}\langElementTagValyName}{\fldrslt}}\langElementTHgVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langEvementTagVal.zame}{\fldrslM}}\langElementTagVrl.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrs|t}}\langElementTagVal.Name}{\fldrslt}}\langllementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fXdrslt}}\langElementuagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVaj.Name}{\fldrslt}}\langElementTagVal.Name}{\uldrslt}}\langEleoentTagVal.Name}{\fldrslt}}\langElemennTagVal.Name}{\fldrslX}}\langElementTagVal.Name}{\fldrslt}}\langklementTagVal.Name}{\fldrslt}}\langElementTagVau.Name}{\fldrslt}}\langElemenvTagVal.NFme}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\flkrslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTcgVal.Name}{\fldrslt}}\langElementT’gVal.NamR}{\fldrGlt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldsslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrsqt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElžmentTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\FangElementTagVal.dame}{\fldrslt}}\lxngElmmentTagVal.Name}{\fldrslt}}\langSlementTagVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langElementTagVal.NaGe}{\fldrslt}}\langElementTagVal.Name}{\Aldrslt}}\langElementTagVal.Name}{\fldrslt}}\lanfElementTagValCName}{\fldrClt}}\langElementTagVal.wame}{\fldrslt}}\langElementTagVaC.Name}{\fldrslE}}\LangEhementTagVal.Name}{\fldrslt}}\langElemestTagVal.NameP{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langFlementTaDVal.Name}{\fldrslt}}\langElementTagVal.Name}{\fldrslt}}\langEwementTagVal.NaWe}{\fldrslt}}\langElementTagVal.Nam
+. {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\s0\tqr\tx1170\li720\ql\f1\ulc2{\*\bkmkend BKM_F69e29d6_602b_4695_85e9_6ed3166ca13a}\lang1045\f3\ulc0 {\*\bkmkstart BKM_a8055c7_EBB6_4188_A92d_50dcf1d29199}\lang1045\f5\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
+sw1{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\s0\tqr\tx1170\li720\ql\f1\cf0\ulc2\fs20\b0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0\ulc0 Element.Notes{\*\bkmkend
+BKM_a8055c7_EBB6_4188_A92d_50dcf1d29199}}{\fldrslt}}\lang1045\f3\ulc0 {\*\bkmkstart BKM_4654fa92_A2c8_477e_90be_6f16df43be1f}\lang1045\f5\pard\s0\tqr\tx1170\li720\ql\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
+sw2{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\s0\tqr\tx1170\li720\ql\f1\cf0\ulc2\fs20\b0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0\ulc0 Element.Notes{\*\bkmkend
+BKM_4654fa92_A2c8_477e_90be_6f16df43be1f}}{\fldrslt}}\lang1045\f3\ulc0 {\*\bkmkstart BKM_9e2c21bb_F88f_4cfd_ABEF_B8df014d58e3}\lang1045\f5\pard\s0\tqr\tx1170\li720\ql\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
+sw21{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\s0\tqr\tx1170\li720\ql\f1\cf0\ulc2\fs20\b0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0\ulc0 Element.Notes{\*\bkmkend
+BKM_9e2c21bb_F88f_4cfd_ABEF_B8df014d58e3}}{\fldrslt}}\lang1045\f3\ulc0 {\*\bkmkstart BKM_A7c71ea_A4ef_49d7_82d3_EB1e28ba8f81}\lang1045\f5\pard\s0\tqr\tx1170\li720\ql\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
+sw22{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\s0\tqr\tx1170\li720\ql\f1\cf0\ulc2\fs20\b0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0\ulc0 Element.Notes{\*\bkmkend
+BKM_A7c71ea_A4ef_49d7_82d3_EB1e28ba8f81}}{\fldrslt}}\lang1045\f3\ulc0 {\*\bkmkstart BKM_40e8b33f_4908@6df_9279_88BF5015431A}\lang1045\f5\pard\s0\tqr\tx1170\li720\ql\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
+sw23{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\f1\cf0\ulc2\fs20\b0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0\ulc0 Element.Notes}{\fldrslt}}\pard\par
+\trowd\trgaph60\trleft720\trrh279
+\clvertalt\clmgf\cellx9240
+\clmrg\cellx9360
+\pard\intbl\s38\ql\cs35\f3\ulc0\fs22\b Szczeg\u243 \'f3\u322 \'b3y\cell\cell
+\cs1\f0\fs20\b0\intbl\row
+\trowd\trgaph60\trleft720\trrh381
+\clvertalt\cellx1350
+\clvertalt\cellx9361
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 adres IP{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 201.0.0.0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5
+. {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Datafield{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 test{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5
+. {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\s0\tqr\tx1170\li720\ql\f1\ulc2{\*\bkmkend BKM_40e8b33f_4908@6df_9279_88BF5015431A}\lang1045\f3\ulc0 {\*\bkmkstart BKM_6a646ab8_8b44_4b86_AB53_27afc400ce43}\lang1045\f5\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
+sw3{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\s0\tqr\tx1170\li720\ql\f1\cf0\ulc2\fs20\b0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0\ulc0 Element.Notes{\*\bkmkend
+BKM_6a646ab8_8b44_4b86_AB53_27afc400ce43}}{\fldrslt}}\lang1045\f3\ulc0 {\*\bkmkstart BKM_e8b97b9_3737_445d_A1ee_2cff79632be6}\lang1045\f5\pard\s0\tqr\tx1170\li720\ql\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
+wentyl1{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\s0\tqr\tx1170\li720\ql\f1\cf0\ulc2\fs20\b0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0\ulc0 Element.Notes{\*\bkmkend
+BKM_e8b97b9_3737_445d_A1ee_2cff79632be6}}{\fldrslt}}\lang1045\f3\ulc0 {\*\bkmkstart BKM_42c710ad_C753_4955_8883_26bf28d68159}\lang1045\f5\pard\s0\tqr\tx1170\li720\ql\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
+wentyl21{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\s0\li720\ql\f1\cf0\ulc2\fs20\b0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0\ulc0 Element.Notes{\*\bkmkend
+BKM_42c710ad_C753_4955_8883_26bf28d68159}}{\fldrslt}}\lang1045\f3\ulc0 {\*\bkmkstart Urz\'b9dzenia_END}{\*\bkmkend Urz\'b9dzenia_END}{\*\bkmkend BKM_93cd549d_E008@6b9_A645_67A5728BC591}
+{\*\bkmkend Infrastruktura_sieciowa}{\*\bkmkend BKM_82c14eb3_F991_4597_98f0_854dd833f496} \lang1045\f5\li720\ql\par\li0\f1\ulc2\f5\ulc0\par}
+t BKM_A7c71ea_A4ef_49d7_82d3_EB1e28ba8f81_START}{\*\bkmkend BKM_A7c71ea_A4ef_49d7_82d3_EB1e28ba8f81_START}\lang1045\f5\pard\s0\tqr\tx1170\li720\ql\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
+sw22{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\s0\tqr\tx1170\li720\ql\f1\cf0\ulc2\fs20\b0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0\ulc0 Element.Notes{\*\bkmkstart BKM_A7c71ea_A4ef_49d7_82d3_EB1e28ba8f81_END}{\*\bkmkend
+BKM_A7c71ea_A4ef_49d7_82d3_EB1e28ba8f81_END}}{\fldrslt}}\lang1045\f3\ulc0 {\*\bkmkstart BKM_40e8b33f_4908@6df_9279_88BF5015431A_START}{\*\bkmkend BKM_40E8B33F_4908@6df_9279_88BF5015431A_START}\lang1045\f5\pard\s0\tqr\tx1170\li720\ql\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
+sw23{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\f1\cf0\ulc2\fs20\b0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0\ulc0 Element.Notes}{\fldrslt}}\pard\par
+\trowd\trgaph60\trleft720\trrh279
+\clvertalt\clmgf\cellx9240
+\clmrg\cellx9360
+\pard\intbl\s38\ql\cs35\f3\ulc0\fs22\b Szczeg\u243 \'f3\u322 \'b3y\cell\cell
+\cs1\f0\fs20\b0\intbl\row
+\trowd\trgaph60\trleft720\trrh381
+\clvertalt\cellx1350
+\clvertalt\cellx9361
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 adres IP{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 201.0.0.0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5
+. {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\intbl\s0\qr\f1\ulc2\f5\ulc0\cell
+\pard\intbl\s0\ql\f1\ulc2\lang1045\f3\ulc0 Datafield{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Name}{\fldrslt}}\lang1045\f5 = \lang1045\f3 test{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Value}{\fldrslt}}\lang1045\f5
+. {\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 ElementTagVal.Notes}{\fldrslt}}\ql\cell
+\intbl\row
+\pard\s0\tqr\tx1170\li720\ql\f1\ulc2{\*\bkmkstart BKM_40e8b33f_4908@6df_9279_88BF5015431A_END}{\*\bkmkend BKM_40E8B33F_4909_46df_9279_88bf5015431a_END}\lang1045\f3\ulc0 {\*\bkmkstart BKM_6a646ab8_8b44_4b86_AB53_27afc400ce43_START}{\*\bkmkend BKM_6a646ab8_8b44_4b86_AB53_27afc400ce43_START}\lang1045\f5\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
+sw3{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\s0\tqr\tx1170\li720\ql\f1\cf0\ulc2\fs20\b0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0\ulc0 Element.Notes{\*\bkmkstart BKM_6a646ab8_8b44_4b86_AB53_27afc400ce43_END}{\*\bkmkend
+BKM_6a646ab8_8b44_4b86_AB53_27afc400ce43_END}}{\fldrslt}}\lang1045\f3\ulc0 {\*\bkmkstart BKM_e8b97b9_3737_445d_A1ee_2cff79632be6_START}{\*\bkmkend BKM_e8b97b9_3737_445d_A1ee_2cff79632be6_START}\lang1045\f5\pard\s0\tqr\tx1170\li720\ql\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
+wentyl1{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\s0\tqr\tx1170\li720\ql\f1\cf0\ulc2\fs20\b0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0\ulc0 Element.Notes{\*\bkmkstart BKM_e8b97b9_3737_445d_A1ee_2cff79632be6_END}{\*\bkmkend
+BKM_e8b97b9_3737_445d_A1ee_2cff79632be6_END}}{\fldrslt}}\lang1045\f3\ulc0 {\*\bkmkstart BKM_42c710ad_C753_4955_8883_26bf28d68159_START}{\*\bkmkend BKM_42c710ad_C753_4955_8883_26bf28d68159_START}\lang1045\f5\pard\s0\tqr\tx1170\li720\ql\par\pard\s15\li720\sb240\sa60\ql\f1\ulc2\f3\cf3\ulc0\fs26\b
+wentyl21{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0 Element.Name}{\fldrslt}}\f0\pard\s15\li720\sb240\sa60\ql\par\pard\s0\li720\ql\f1\cf0\ulc2\fs20\b0{\field\fldlock{\*\fldinst MERGEFIELD \lang1033\f0\ulc0 Element.Notes{\*\bkmkstart BKM_42c710ad_C753_4955_8883_26bf28d68159_END}{\*\bkmkend
+BKM_42c710ad_C753_4955_8883_26bf28d68159_END}}{\fldrslt}}\lang1045\f3\ulc0 {\*\bkmkstart Urz\'b9dzenia_END}{\*\bkmkend Urz\'b9dzenia_END}{\*\bkmkstart BKM_93cd549d_E008@6b9_A645_67A5728BC591_END}{\*\bkmkend BKM_93CD549D_E009_46b9_A645_67a5728bc591_END}{\*\bkmkstart
+Infrastruktura_sieciowa_END}{\*\bkmkend Infrastruktura_sieciowa_END}{\*\bkmkstart BKM_82c14eb3_F991_4597_98f0_854dd833f496_END}{\*\bkmkend BKM_82c14eb3_F991_4597_98f0_854DD18446744073709551615F496_END} \lang1045\f5\li720\ql\par\li0\f1\ulc2\f5\ulc0\par} \ No newline at end of file
diff --git a/sw/qa/core/data/rtf/pass/forcepoint110.rtf b/sw/qa/core/data/rtf/pass/forcepoint110.rtf
new file mode 100644
index 0000000000..b7594ff6b6
--- /dev/null
+++ b/sw/qa/core/data/rtf/pass/forcepoint110.rtf
Binary files differ
diff --git a/sw/qa/core/data/rtf/pass/kde52609.rtf b/sw/qa/core/data/rtf/pass/kde52609.rtf
new file mode 100644
index 0000000000..d222c3880b
--- /dev/null
+++ b/sw/qa/core/data/rtf/pass/kde52609.rtf
@@ -0,0 +1,8 @@
+{\rtf1
+{\headerl
+}
+{\footerl
+}
+first line\par
+second line\par
+}
diff --git a/sw/qa/core/data/rtf/pass/ooo121333-1.rtf b/sw/qa/core/data/rtf/pass/ooo121333-1.rtf
new file mode 100644
index 0000000000..7f3b531cd4
--- /dev/null
+++ b/sw/qa/core/data/rtf/pass/ooo121333-1.rtf
@@ -0,0 +1,43 @@
+{\rtf1\ansi\deff0\adeflang1025
+{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}{\f1\froman\fprq2\fcharset2 Symbol;}{\f2\fswiss\fprq2\fcharset0 Arial;}{\f3\fswiss\fprq2\fcharset0 Trebuchet MS;}{\f4\fswiss\fprq2\fcharset128 Arial;}{\f5\fswiss\fprq2\fcharset0 Arial Unicode MS;}{\f6\fnil\fprq2\fcharset0 Mangal;}{\f7\fnil\fprq0\fcharset0 Mangal;}}
+{\colortbl;\red0\green0\blue0;\red128\green128\blue128;}
+{\stylesheet{\s0\snext0\ql{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\aspalpha\ltrpar\nowidctlpar\cf0\kerning1\hich\af5\langfe2052\dbch\af6\afs24\lang1081\loch\f0\fs24\lang1033 Default;}
+{\s15\sbasedon0\snext16\ql{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\sb240\sa120\keepn\ltrpar\cf0\kerning1\hich\af5\langfe2052\dbch\af6\loch\f2\fs28\lang1033 Heading;}
+{\s16\sbasedon0\snext16\ql{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\sb0\sa120\ltrpar\cf0\kerning1\hich\af0\langfe2052\dbch\af0\loch\f0\fs24\lang1033 Text body;}
+{\s17\sbasedon16\snext17\ql{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\sb0\sa120\ltrpar\cf0\kerning1\hich\af0\langfe2052\dbch\af7\loch\f0\fs24\lang1033 List;}
+{\s18\sbasedon0\snext18\ql{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\sb120\sa120\ltrpar\cf0\i\kerning1\hich\af0\langfe2052\dbch\af7\ai\loch\f0\fs24\lang1033 Caption;}
+{\s19\sbasedon0\snext19\ql{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\ltrpar\cf0\kerning1\hich\af0\langfe2052\dbch\af7\loch\f0\fs24\lang1033 Index;}
+}{\info{\author Lisa Stroyan}{\creatim\yr2012\mo11\dy10\hr15\min44}{\revtim\yr2012\mo11\dy10\hr16\min16}{\printim\yr0\mo0\dy0\hr0\min0}{\comment OpenOffice.org}{\vern3410}}\deftab709\deftab709\deftab709\deftab709\deftab709\deftab709\deftab709\deftab709\deftab709\deftab709\deftab709\deftab709\deftab709\deftab709\deftab709\deftab709\deftab709\deftab709\deftab709\deftab709
+
+{\*\pgdsctbl
+{\pgdsc0\pgdscuse195\pgwsxn12240\pghsxn15840\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\pgdscnxt0 Default;}}
+\formshade{\*\pgdscno0}\paperh15840\paperw12240\margl1134\margr1134\margt1134\margb1134\sectd\sbknone\sectunlocked1\pgndec\pgwsxn12240\pghsxn15840\marglsxn1134\margrsxn1134\margtsxn1134\margbsxn1134\ftnbj\ftnstart1\ftnrstcont\ftnnar\aenddoc\aftnrstcont\aftnstart1\aftnnrlc
+\pgndec\pard\plain \s0\ql{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\aspalpha\ltrpar\nowidctlpar\cf0\kerning1\hich\af5\langfe2052\dbch\af6\afs24\lang1081\loch\f0\fs24\lang1033{\rtlch \ltrch
+\'93}{\rtlch \ltrch\loch
+test\'94}
+\par \pard\plain \s0\ql{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\aspalpha\ltrpar\nowidctlpar\cf0\kerning1\hich\af5\langfe2052\dbch\af6\afs24\lang1081\loch\f0\fs24\lang1033{\rtlch \ltrch\loch
+}
+\par \pard\plain \s0\ql{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\aspalpha\ltrpar\nowidctlpar\cf0\kerning1\hich\af5\langfe2052\dbch\af6\afs24\lang1081\loch\f0\fs24\lang1033{\rtlch \ltrch\loch\f3
+\'93}{\rtlch \ltrch\loch\loch\f4
+Another }{\rtlch \ltrch\dbch\loch\f4
+\u21520\'3f}{\rtlch \ltrch\loch\loch\f4
+oo}{\rtlch \ltrch\loch\loch\f3
+ test\'94}
+\par \pard\plain \s0\ql{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\aspalpha\ltrpar\nowidctlpar\cf0\kerning1\hich\af5\langfe2052\dbch\af6\afs24\lang1081\loch\f0\fs24\lang1033{\rtlch \ltrch\loch
+}
+\par \pard\plain \s0\ql{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\aspalpha\ltrpar\nowidctlpar\cf0\kerning1\hich\af5\langfe2052\dbch\af6\afs24\lang1081\loch\f0\fs24\lang1033{{\*\bkmkstart __DdeLink__132_187012832}\rtlch \ltrch\loch\loch\f3
+Created (or opened) testoocharacters.odt file with angled double quotes, using both Times and Trebuchet. Saved as RTF, closed, and reopened.}
+\par \pard\plain \s0\ql{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\aspalpha\ltrpar\nowidctlpar\cf0\kerning1\hich\af5\langfe2052\dbch\af6\afs24\lang1081\loch\f0\fs24\lang1033{\rtlch \ltrch\loch\loch\f3
+File still looks fine. }
+\par \pard\plain \s0\ql{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\aspalpha\ltrpar\nowidctlpar\cf0\kerning1\hich\af5\langfe2052\dbch\af6\afs24\lang1081\loch\f0\fs24\lang1033{\rtlch \ltrch\loch\loch\f3
+}
+\par \pard\plain \s0\ql{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\aspalpha\ltrpar\nowidctlpar\cf0\kerning1\hich\af5\langfe2052\dbch\af6\afs24\lang1081\loch\f0\fs24\lang1033{\rtlch \ltrch\loch\loch\f3
+Added <\'93foo\'94> (without angle brackets) above. }{{\*\bkmkstart __DdeLink__101_1367934706}{\*\bkmkend __DdeLink__101_1367934706}\rtlch \ltrch\loch\loch\f3
+Save/close/reopen. }
+\par \pard\plain \s0\ql{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\aspalpha\ltrpar\nowidctlpar\cf0\kerning1\hich\af5\langfe2052\dbch\af6\afs24\lang1081\loch\f0\fs24\lang1033{\rtlch \ltrch\loch\loch\f3
+Looks fine. Can edit as long as you don't change fonts. }
+\par \pard\plain \s0\ql{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\aspalpha\ltrpar\nowidctlpar\cf0\kerning1\hich\af5\langfe2052\dbch\af6\afs24\lang1081\loch\f0\fs24\lang1033{\rtlch \ltrch\loch\loch\f3
+}
+\par \pard\plain \s0\ql{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\aspalpha\ltrpar\nowidctlpar\cf0\kerning1\hich\af5\langfe2052\dbch\af6\afs24\lang1081\loch\f0\fs24\lang1033{{\*\bkmkstart __DdeLink__132_187012832}\rtlch \ltrch\loch\loch\f3{\*\bkmkend __DdeLink__132_187012832}
+Changed <Another \'93foo\'94 > to Arial. Save/close/reopen. Weird characters appear around \'93foo\'94}
+\par }
diff --git a/sw/qa/core/data/rtf/pass/tabbox-1.rtf b/sw/qa/core/data/rtf/pass/tabbox-1.rtf
new file mode 100644
index 0000000000..19d3851f57
--- /dev/null
+++ b/sw/qa/core/data/rtf/pass/tabbox-1.rtf
Binary files differ
diff --git a/sw/qa/core/data/rtf/pass/tdf116851.rtf b/sw/qa/core/data/rtf/pass/tdf116851.rtf
new file mode 100644
index 0000000000..a4df5b87c9
--- /dev/null
+++ b/sw/qa/core/data/rtf/pass/tdf116851.rtf
@@ -0,0 +1,217 @@
+{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff1\deff0\stshfdbch31505\stshfloch31506\stshfhich31506\stshfbi0\deflang1033\deflangfe2052\themelang1033\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}
+{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;}{\f37\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
+{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhimajor\f31502\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0302020204030204}Calibri Light;}
+{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
+{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}
+{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f45\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f46\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
+{\f48\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f49\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f50\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f51\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
+{\f52\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f53\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f55\fbidi \fswiss\fcharset238\fprq2 Arial CE;}{\f56\fbidi \fswiss\fcharset204\fprq2 Arial Cyr;}
+{\f58\fbidi \fswiss\fcharset161\fprq2 Arial Greek;}{\f59\fbidi \fswiss\fcharset162\fprq2 Arial Tur;}{\f60\fbidi \fswiss\fcharset177\fprq2 Arial (Hebrew);}{\f61\fbidi \fswiss\fcharset178\fprq2 Arial (Arabic);}
+{\f62\fbidi \fswiss\fcharset186\fprq2 Arial Baltic;}{\f63\fbidi \fswiss\fcharset163\fprq2 Arial (Vietnamese);}{\f385\fbidi \froman\fcharset238\fprq2 Cambria Math CE;}{\f386\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}
+{\f388\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f389\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f392\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;}{\f393\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);}
+{\f415\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f416\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\f418\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\f419\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}
+{\f422\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f423\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
+{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
+{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
+{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
+{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
+{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
+{\fhimajor\f31528\fbidi \fswiss\fcharset238\fprq2 Calibri Light CE;}{\fhimajor\f31529\fbidi \fswiss\fcharset204\fprq2 Calibri Light Cyr;}{\fhimajor\f31531\fbidi \fswiss\fcharset161\fprq2 Calibri Light Greek;}
+{\fhimajor\f31532\fbidi \fswiss\fcharset162\fprq2 Calibri Light Tur;}{\fhimajor\f31535\fbidi \fswiss\fcharset186\fprq2 Calibri Light Baltic;}{\fhimajor\f31536\fbidi \fswiss\fcharset163\fprq2 Calibri Light (Vietnamese);}
+{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}
+{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
+{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
+{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
+{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
+{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
+{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
+{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
+{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}
+{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
+{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
+{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
+{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;
+\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\*\defchp
+\fs22\loch\af31506\hich\af31506\dbch\af31505 }{\*\defpap \ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sa160\sl259\slmult1
+\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs22\alang1025 \ltrch\fcs0 \fs22\lang1033\langfe2052\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp2052 \snext0 \sqformat \spriority0 Normal;}{\*
+\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\*
+\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa160\sl259\slmult1
+\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \fs22\lang1033\langfe2052\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp2052 \snext11 \ssemihidden \sunhideused
+Normal Table;}{\s15\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\tqc\tx4680\tqr\tx9360\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs22\alang1025 \ltrch\fcs0
+\fs22\lang1033\langfe2052\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp2052 \sbasedon0 \snext15 \slink16 \sunhideused \styrsid12667200 header;}{\*\cs16 \additive \rtlch\fcs1 \af1 \ltrch\fcs0
+\sbasedon10 \slink15 \slocked \styrsid12667200 Header Char;}{\s17\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\tqc\tx4680\tqr\tx9360\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs22\alang1025 \ltrch\fcs0
+\fs22\lang1033\langfe2052\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp2052 \sbasedon0 \snext17 \slink18 \sunhideused \styrsid12667200 footer;}{\*\cs18 \additive \rtlch\fcs1 \af1 \ltrch\fcs0
+\sbasedon10 \slink17 \slocked \styrsid12667200 Footer Char;}}{\*\rsidtbl \rsid7476088\rsid8078420\rsid8670956\rsid12609837\rsid12667200\rsid14814940\rsid15947604}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1
+\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\creatim\yr2019\mo2\dy9\hr20\min22}{\revtim\yr2019\mo2\dy9\hr20\min22}{\version1}{\edmins-8361}{\nofpages1}{\nofwords0}{\nofchars4}{\nofcharsws4}{\vern57447}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/
+word/2003/wordml}}\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect
+\widowctrl\ftnbj\aenddoc\trackmoves0\trackformatting1\donotembedsysfont0\relyonvml0\donotembedlingdata1\grfdocevents0\validatexml0\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors0\horzdoc\dghspace120\dgvspace120\dghorigin1701
+\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale90\rempersonalinfo\rsidroot12609837\remdttm \fet0{\*\wgrffmtfilter 2450}\ilfomacatclnup0{\*\ftnsep \ltrpar \pard\plain \ltrpar
+\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12667200 \rtlch\fcs1 \af1\afs22\alang1025 \ltrch\fcs0 \fs22\lang1033\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp2052 {
+\rtlch\fcs1 \af1 \ltrch\fcs0 \insrsid8670956 \chftnsep
+\par }}{\*\ftnsepc \ltrpar \pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12667200 \rtlch\fcs1 \af1\afs22\alang1025 \ltrch\fcs0
+\fs22\lang1033\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af1 \ltrch\fcs0 \insrsid8670956 \chftnsepc
+\par }}{\*\aftnsep \ltrpar \pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12667200 \rtlch\fcs1 \af1\afs22\alang1025 \ltrch\fcs0
+\fs22\lang1033\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af1 \ltrch\fcs0 \insrsid8670956 \chftnsep
+\par }}{\*\aftnsepc \ltrpar \pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12667200 \rtlch\fcs1 \af1\afs22\alang1025 \ltrch\fcs0
+\fs22\lang1033\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af1 \ltrch\fcs0 \insrsid8670956 \chftnsepc
+\par }}\ltrpar \sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\headerl \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\tqc\tx4680\tqr\tx9360\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1
+\af1\afs22\alang1025 \ltrch\fcs0 \fs22\lang1033\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af1 \ltrch\fcs0 \insrsid12667200
+\par }}{\headerr \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\tqc\tx4680\tqr\tx9360\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs22\alang1025 \ltrch\fcs0
+\fs22\lang1033\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af1 \ltrch\fcs0 \insrsid12667200
+\par }}{\footerl \ltrpar \pard\plain \ltrpar\s17\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\tqc\tx4680\tqr\tx9360\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs22\alang1025 \ltrch\fcs0
+\fs22\lang1033\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af1 \ltrch\fcs0 \insrsid12667200
+\par }}{\footerr \ltrpar \pard\plain \ltrpar\s17\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\tqc\tx4680\tqr\tx9360\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs22\alang1025 \ltrch\fcs0
+\fs22\lang1033\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af1 \ltrch\fcs0 \insrsid12667200
+\par }}{\headerf \ltrpar \pard\plain \ltrpar\s15\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\tqc\tx4680\tqr\tx9360\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs22\alang1025 \ltrch\fcs0
+\fs22\lang1033\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af1 \ltrch\fcs0 \insrsid12667200
+\par }}{\footerf \ltrpar \pard\plain \ltrpar\s17\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\tqc\tx4680\tqr\tx9360\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs22\alang1025 \ltrch\fcs0
+\fs22\lang1033\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af1 \ltrch\fcs0 \insrsid12667200
+\par }}{\*\pnseclvl1\pnucrm\pnqc\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnqc\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnqc\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnqc\pnstart1\pnindent720\pnhang
+{\pntxta )}}{\*\pnseclvl5\pndec\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}
+{\*\pnseclvl8\pnlcltr\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0
+\rtlch\fcs1 \af1\afs22\alang1025 \ltrch\fcs0 \fs22\lang1033\langfe2052\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp2052 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang9\langfe2052\langnp9\insrsid8078420 \hich\af37\dbch\af31505\loch\f37 T}{
+\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\lang9\langfe2052\langnp9\insrsid15947604 \hich\af37\dbch\af31505\loch\f37 est
+\par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a
+9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad
+5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6
+b01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0
+0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6
+a7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f
+c7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512
+0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462
+a1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865
+6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b
+4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b
+4757e8d3f729e245eb2b260a0238fd010000ffff0300504b030414000600080000002100aa5225dfc60600008b1a0000160000007468656d652f7468656d652f
+7468656d65312e786d6cec595d8bdb46147d2ff43f08bd3bfe92fcb1c41b6cd9ceb6d94d42eca4e4716c8fadc98e344633de8d0981923c160aa569e943037deb
+43691b48a02fe9afd936a54d217fa17746b63c638fbb9b2585a5640d8b343af7ce997bafce1d4997afdc8fa87384134e58dc708b970aae83e3211b9178d2706f
+f7bbb99aeb7081e211a22cc60d778eb97b65f7c30f2ea31d11e2083b601ff31dd4704321a63bf93c1fc230e297d814c7706dcc920809384d26f951828ec16f44
+f3a542a1928f10895d274611b8bd311e932176fad2a5bbbb74dea1701a0b2e078634e949d7d8b050d8d1615122f89c0734718e106db830cf881df7f17de13a14
+7101171a6e41fdb9f9ddcb79b4b330a2628bad66d7557f0bbb85c1e8b0a4e64c26836c52cff3bd4a33f3af00546ce23ad54ea553c9fc29001a0e61a52917dda7
+dfaab7dafe02ab81d2438bef76b55d2e1a78cd7f798373d3973f03af40a97f6f03dfed06104503af4029dedfc07b5eb51478065e81527c65035f2d34db5ed5c0
+2b5048497cb8812ef89572b05c6d061933ba6785d77daf5b2d2d9caf50500d5975c929c62c16db6a2d42f758d2058004522448ec88f9148fd110aa3840940c12
+e2ec93490885374531e3305c2815ba8532fc973f4f1da988a01d8c346bc90b98f08d21c9c7e1c3844c45c3fd18bcba1ae4cdcb1fdfbc7cee9c3c7a71f2e89793
+c78f4f1efd9c3a32acf6503cd1ad5e7fffc5df4f3f75fe7afeddeb275fd9f15cc7fffed367bffdfaa51d082b5d85e0d5d7cffe78f1ecd5379ffff9c3130bbc99
+a0810eef930873e73a3e766eb10816a6426032c783e4ed2cfa2122ba45339e701423398bc57f478406fafa1c5164c1b5b019c13b09488c0d787576cf20dc0b93
+9920168fd7c2c8001e30465b2cb146e19a9c4b0b737f164fec9327331d770ba123dbdc018a8dfc766653d05662731984d8a07993a258a0098eb170e4357688b1
+6575770931e27a408609e36c2c9cbbc46921620d499f0c8c6a5a19ed9108f232b711847c1bb139b8e3b418b5adba8d8f4c24dc15885ac8f73135c27815cd048a
+6c2efb28a27ac0f791086d247bf364a8e33a5c40a6279832a733c29cdb6c6e24b05e2de9d7405eec693fa0f3c84426821cda7cee23c674649b1d06218aa6366c
+8fc4a18efd881f428922e7261336f80133ef10790e7940f1d674df21d848f7e96a701b9455a7b42a107965965872791533a37e7b733a4658490d08bfa1e71189
+4f15f73559f7ff5b5907217df5ed53cbaa2eaaa0371362bda3f6d6647c1b6e5dbc03968cc8c5d7ee369ac53731dc2e9b0decbd74bf976ef77f2fdddbeee7772f
+d82b8d06f9965bc574abae36eed1d67dfb9850da13738af7b9daba73e84ca32e0c4a3bf5cc8ab3e7b8690887f24e86090cdc2441cac64998f88488b017a229ec
+ef8bae7432e10bd713ee4c19876dbf1ab6fa96783a8b0ed8287d5c2d16e5a3692a1e1c89d578c1cfc6e15143a4e84a75f50896b9576c27ea51794940dabe0d09
+6d329344d942a2ba1c9441520fe610340b09b5b277c2a26e615193ee97a9da6001d4b2acc0d6c9810d57c3f53d30012378a242148f649ed2542fb3ab92f92e33
+bd2d984605c03e625901ab4cd725d7adcb93ab4b4bed0c99364868e566925091513d8c87688417d52947cf42e36d735d5fa5d4a02743a1e683d25ad1a8d6fe8d
+c579730d76ebda40635d2968ec1c37dc4ad9879219a269c31dc3633f1c4653a81d2eb7bc884ee0ddd95024e90d7f1e6599265cb4110fd3802bd149d520220227
+0e2551c395cbcfd24063a5218a5bb104827061c9d541562e1a3948ba99643c1ee3a1d0d3ae8dc848a7a7a0f0a95658af2af3f383a5259b41ba7be1e8d819d059
+720b4189f9d5a20ce0887078fb534ca33922f03a3313b255fdad35a685eceaef13550da5e3884e43b4e828ba98a77025e5191d7596c5403b5bac1902aa8564d1
+080713d960f5a01add34eb1a2987ad5df7742319394d34573dd35015d935ed2a66ccb06c036bb13c5f93d7582d430c9aa677f854bad725b7bed4bab57d42d625
+20e059fc2c5df70c0d41a3b69acca026196fcab0d4ecc5a8d93b960b3c85da599a84a6fa95a5dbb5b8653dc23a1d0c9eabf383dd7ad5c2d078b9af549156df3d
+f44f136c700fc4a30d2f81675470954af8f09020d810f5d49e24950db845ee8bc5ad0147ce2c210df741c16f7a41c90f72859adfc97965af90abf9cd72aee9fb
+e562c72f16daadd243682c228c8a7efacda50bafa2e87cf1e5458d6f7c7d89966fdb2e0d599467eaeb4a5e11575f5f8aa5ed5f5f1c02a2f3a052ead6cbf55625
+572f37bb39afddaae5ea41a5956b57826abbdb0efc5abdfbd0758e14d86b9603afd2a9e52ac520c8799582a45fabe7aa5ea9d4f4aacd5ac76b3e5c6c6360e5a9
+7c2c6201e155bc76ff010000ffff0300504b0304140006000800000021000dd1909fb60000001b010000270000007468656d652f7468656d652f5f72656c732f
+7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4350d363f2451eced0dae2c082e8761be
+9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d262452282e3198720e274a939cd08a54f980
+ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa4c04ca5b
+babac4df000000ffff0300504b01022d0014000600080000002100e9de0fbfff0000001c0200001300000000000000000000000000000000005b436f6e74656e
+745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c0000000360100000b00000000000000000000000000300100005f72656c732f
+2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c00000000000000000000000000190200007468656d652f7468656d652f74
+68656d654d616e616765722e786d6c504b01022d0014000600080000002100aa5225dfc60600008b1a00001600000000000000000000000000d6020000746865
+6d652f7468656d652f7468656d65312e786d6c504b01022d00140006000800000021000dd1909fb60000001b0100002700000000000000000000000000d00900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000cb0a00000000}
+{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d
+617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169
+6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363
+656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e}
+{\*\latentstyles\lsdstimax371\lsdlockeddef0\lsdsemihiddendef0\lsdunhideuseddef0\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 1;
+\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 2;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 3;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4;
+\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7;
+\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 1;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 5;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 6;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 7;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 8;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 9;
+\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 1;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 2;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 3;
+\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 4;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 5;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 6;
+\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 7;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 8;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal Indent;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 header;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footer;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index heading;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of figures;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope address;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope return;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation reference;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 line number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 page number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote text;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of authorities;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 macro;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 toa heading;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 3;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 3;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 3;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 5;\lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Closing;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Signature;\lsdsemihidden1 \lsdunhideused1 \lsdpriority1 \lsdlocked0 Default Paragraph Font;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 4;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Message Header;\lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Salutation;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Date;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Note Heading;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 3;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Block Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Hyperlink;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 FollowedHyperlink;\lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;
+\lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Document Map;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Plain Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 E-mail Signature;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Top of Form;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Bottom of Form;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal (Web);\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Acronym;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Address;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Cite;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Code;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Definition;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Keyboard;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Preformatted;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Sample;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Typewriter;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Variable;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation subject;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 No List;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 1;
+\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Balloon Text;\lsdpriority39 \lsdlocked0 Table Grid;
+\lsdsemihidden1 \lsdlocked0 Placeholder Text;\lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing;\lsdpriority60 \lsdlocked0 Light Shading;\lsdpriority61 \lsdlocked0 Light List;\lsdpriority62 \lsdlocked0 Light Grid;
+\lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdpriority65 \lsdlocked0 Medium List 1;\lsdpriority66 \lsdlocked0 Medium List 2;\lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdpriority68 \lsdlocked0 Medium Grid 2;
+\lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdpriority70 \lsdlocked0 Dark List;\lsdpriority71 \lsdlocked0 Colorful Shading;\lsdpriority72 \lsdlocked0 Colorful List;\lsdpriority73 \lsdlocked0 Colorful Grid;\lsdpriority60 \lsdlocked0 Light Shading Accent 1;
+\lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;
+\lsdsemihidden1 \lsdlocked0 Revision;\lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;
+\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 1;
+\lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdpriority60 \lsdlocked0 Light Shading Accent 2;\lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdpriority62 \lsdlocked0 Light Grid Accent 2;
+\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 2;
+\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2;\lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;
+\lsdpriority72 \lsdlocked0 Colorful List Accent 2;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdpriority61 \lsdlocked0 Light List Accent 3;\lsdpriority62 \lsdlocked0 Light Grid Accent 3;
+\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;
+\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdpriority70 \lsdlocked0 Dark List Accent 3;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;
+\lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;\lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdpriority62 \lsdlocked0 Light Grid Accent 4;
+\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 4;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;
+\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 4;
+\lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdpriority60 \lsdlocked0 Light Shading Accent 5;\lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdpriority62 \lsdlocked0 Light Grid Accent 5;
+\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 5;
+\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;\lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 5;
+\lsdpriority72 \lsdlocked0 Colorful List Accent 5;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdpriority61 \lsdlocked0 Light List Accent 6;\lsdpriority62 \lsdlocked0 Light Grid Accent 6;
+\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;
+\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdpriority70 \lsdlocked0 Dark List Accent 6;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 6;
+\lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;\lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis;
+\lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;\lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdsemihidden1 \lsdunhideused1 \lsdpriority37 \lsdlocked0 Bibliography;
+\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;\lsdpriority41 \lsdlocked0 Plain Table 1;\lsdpriority42 \lsdlocked0 Plain Table 2;\lsdpriority43 \lsdlocked0 Plain Table 3;\lsdpriority44 \lsdlocked0 Plain Table 4;
+\lsdpriority45 \lsdlocked0 Plain Table 5;\lsdpriority40 \lsdlocked0 Grid Table Light;\lsdpriority46 \lsdlocked0 Grid Table 1 Light;\lsdpriority47 \lsdlocked0 Grid Table 2;\lsdpriority48 \lsdlocked0 Grid Table 3;\lsdpriority49 \lsdlocked0 Grid Table 4;
+\lsdpriority50 \lsdlocked0 Grid Table 5 Dark;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 1;
+\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 1;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 1;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 1;
+\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 1;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 2;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 2;
+\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 2;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 2;
+\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 3;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 3;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 3;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 3;
+\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 3;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 4;
+\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 4;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 4;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 4;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 4;
+\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 4;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 5;
+\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 5;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 5;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 5;
+\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 5;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 6;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 6;
+\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 6;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 6;
+\lsdpriority46 \lsdlocked0 List Table 1 Light;\lsdpriority47 \lsdlocked0 List Table 2;\lsdpriority48 \lsdlocked0 List Table 3;\lsdpriority49 \lsdlocked0 List Table 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark;
+\lsdpriority51 \lsdlocked0 List Table 6 Colorful;\lsdpriority52 \lsdlocked0 List Table 7 Colorful;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 List Table 2 Accent 1;\lsdpriority48 \lsdlocked0 List Table 3 Accent 1;
+\lsdpriority49 \lsdlocked0 List Table 4 Accent 1;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 1;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 1;
+\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 List Table 2 Accent 2;\lsdpriority48 \lsdlocked0 List Table 3 Accent 2;\lsdpriority49 \lsdlocked0 List Table 4 Accent 2;
+\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 2;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 3;
+\lsdpriority47 \lsdlocked0 List Table 2 Accent 3;\lsdpriority48 \lsdlocked0 List Table 3 Accent 3;\lsdpriority49 \lsdlocked0 List Table 4 Accent 3;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 3;
+\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 4;\lsdpriority47 \lsdlocked0 List Table 2 Accent 4;
+\lsdpriority48 \lsdlocked0 List Table 3 Accent 4;\lsdpriority49 \lsdlocked0 List Table 4 Accent 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 4;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 4;
+\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 List Table 2 Accent 5;\lsdpriority48 \lsdlocked0 List Table 3 Accent 5;
+\lsdpriority49 \lsdlocked0 List Table 4 Accent 5;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 5;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 5;
+\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 List Table 2 Accent 6;\lsdpriority48 \lsdlocked0 List Table 3 Accent 6;\lsdpriority49 \lsdlocked0 List Table 4 Accent 6;
+\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 6;}}{\*\datastore 010500000200000018000000
+4d73786d6c322e534158584d4c5265616465722e362e3000000000000000000000060000
+d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e5000000000000000000000000d0b6
+87d0acc0d401feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000
+00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000
+000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file
diff --git a/sw/qa/core/data/rtf/pass/tdf94049.rtf b/sw/qa/core/data/rtf/pass/tdf94049.rtf
new file mode 100644
index 0000000000..52e25ebeba
--- /dev/null
+++ b/sw/qa/core/data/rtf/pass/tdf94049.rtf
@@ -0,0 +1,12 @@
+{\rtf1
+\pard\plain\par
+{\object\objemb\objw608\objh774\objscalex100\objscaley100
+{\*\objdata
+0105000002000000080000005061636b6167650000000000000000006000000002000050726f674d616e2e45584500140001000000633a5c646f735c617474726962200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f00101c01050000050000000d0000004d45544146494c45504943540022040000a0faffff480400000800220460058e1f010009000003090200000200410100000000050000000b0200000000050000000c023300270010000000fb02f5ff00000000000090010000000004000022417269616c005754040000002d01000005000000090200000000050000000102ffffff0065000000410bc6008800200020000000000020002000000004002800000020000000200000000100010000000000800000000000000000000000000000000000000000000000ffffff00fffffffffffffffffc7ffe3ffbffffdff73ffceffefc1f7ffff00fffffc003ffff0001fffe0000fffe00007ffe00007ffc00007ff000000fe0000003c00000018000000000000000003ff800003ff800007ff80000fff80101fffc0101fffc0183fffe0383fffe0387ffff07c7ffff07cfffff8fcfffff9fffffffffffffffff050000000902010000000500000001020100000005000000090200000000050000000102ffffff0041010000410b4600660020002000000000002000200000000400280000002000000020000000010004000000000000020000000000000000000000000000000000000000000000008000008000000080800080000000800080008080000080808000c0c0c0000000ff0000ff000000ffff00ff000000ff00ff00ffff0000ffffff00000000000000000000000000000000000000000000000000000000000000000000000077700000000000000777000000000007000000000000000000007000000000700077000000000000770007000000000007000000000000000070000000000000000000008f07700000000000000000000000008f08f00000000000000000000000008f08f0808877000000000000000000ff08f08f08f0000000000000000000000ff08f008fff88770000000000000000f008008ffff80000000000000000000fffffffffff808888000000000000008fffff80008808fff8700000000000608fffff0ff8008fffff8707000000066088fffff0fffffffffff0880700000e66088fffff0fffffffff0bb07770060e666088000000000007f0bb0787776660e666000000000000000bb078787766660e6660000000000000bb08878787666660ee0000000000000700f888787866666600000000000000007f8f888780666666000000000000000008f8f8887066666600000000000000000f8f8f8880066660000000000000000000f8f8f8000666600000000000000000008f8f8f0006660000000000000000000008f8f0000066000000000000000000000f8f800000600000000000000000000000f8000000600000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000005000000090201000000050000000102010000000d000000fb020000000000000000000000000000000000010044040000002d0101000300000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000002f00101c}
+}
+\pard\plain\par
+{\object\objemb\objw608\objh774\objscalex100\objscaley100
+{\*\objdata
+0105000002000000080000005061636b6167650000000000000000006000000002000050726f674d616e2e45584500140001000000633a5c646f735c617474726962200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f00101c01050000050000000d0000004d45544146494c45504943540022040000a0faffff480400000800220460058e1f010009000003090200000200410100000000050000000b0200000000050000000c023300270010000000fb02f5ff00000000000090010000000004000022417269616c005754040000002d01000005000000090200000000050000000102ffffff0065000000410bc6008800200020000000000020002000000004002800000020000000200000000100010000000000800000000000000000000000000000000000000000000000ffffff00fffffffffffffffffc7ffe3ffbffffdff73ffceffefc1f7ffff00fffffc003ffff0001fffe0000fffe00007ffe00007ffc00007ff000000fe0000003c00000018000000000000000003ff800003ff800007ff80000fff80101fffc0101fffc0183fffe0383fffe0387ffff07c7ffff07cfffff8fcfffff9fffffffffffffffff050000000902010000000500000001020100000005000000090200000000050000000102ffffff0041010000410b4600660020002000000000002000200000000400280000002000000020000000010004000000000000020000000000000000000000000000000000000000000000008000008000000080800080000000800080008080000080808000c0c0c0000000ff0000ff000000ffff00ff000000ff00ff00ffff0000ffffff00000000000000000000000000000000000000000000000000000000000000000000000077700000000000000777000000000007000000000000000000007000000000700077000000000000770007000000000007000000000000000070000000000000000000008f07700000000000000000000000008f08f00000000000000000000000008f08f0808877000000000000000000ff08f08f08f0000000000000000000000ff08f008fff88770000000000000000f008008ffff80000000000000000000fffffffffff808888000000000000008fffff80008808fff8700000000000608fffff0ff8008fffff8707000000066088fffff0fffffffffff0880700000e66088fffff0fffffffff0bb07770060e666088000000000007f0bb0787776660e666000000000000000bb078787766660e6660000000000000bb08878787666660ee0000000000000700f888787866666600000000000000007f8f888780666666000000000000000008f8f8887066666600000000000000000f8f8f8880066660000000000000000000f8f8f8000666600000000000000000008f8f8f0006660000000000000000000008f8f0000066000000000000000000000f8f800000600000000000000000000000f8000000600000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000005000000090201000000050000000102010000000d000000fb020000000000000000000000000000000000010044040000002d0101000300000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000002f00101c}
+}
+}
diff --git a/sw/qa/core/data/txt/fail/.gitignore b/sw/qa/core/data/txt/fail/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sw/qa/core/data/txt/fail/.gitignore
diff --git a/sw/qa/core/data/txt/indeterminate/.gitignore b/sw/qa/core/data/txt/indeterminate/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sw/qa/core/data/txt/indeterminate/.gitignore
diff --git a/sw/qa/core/data/txt/pass/.gitignore b/sw/qa/core/data/txt/pass/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sw/qa/core/data/txt/pass/.gitignore
diff --git a/sw/qa/core/data/txt/pass/CVE-2009-2473-1.txt b/sw/qa/core/data/txt/pass/CVE-2009-2473-1.txt
new file mode 100644
index 0000000000..3bb3ebd2fb
--- /dev/null
+++ b/sw/qa/core/data/txt/pass/CVE-2009-2473-1.txt
@@ -0,0 +1 @@
+IXØ \ No newline at end of file
diff --git a/sw/qa/core/data/txt/pass/CVE-2009-2473-2.txt b/sw/qa/core/data/txt/pass/CVE-2009-2473-2.txt
new file mode 100644
index 0000000000..85fc47855b
--- /dev/null
+++ b/sw/qa/core/data/txt/pass/CVE-2009-2473-2.txt
@@ -0,0 +1 @@
+ujªÁBgÌoù·óåÞXÌà >Afàã \ No newline at end of file
diff --git a/sw/qa/core/data/txt/pass/UTF-8-test.txt b/sw/qa/core/data/txt/pass/UTF-8-test.txt
new file mode 100644
index 0000000000..abd16f7253
--- /dev/null
+++ b/sw/qa/core/data/txt/pass/UTF-8-test.txt
Binary files differ
diff --git a/sw/qa/core/data/ww5/fail/.gitignore b/sw/qa/core/data/ww5/fail/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sw/qa/core/data/ww5/fail/.gitignore
diff --git a/sw/qa/core/data/ww5/indeterminate/.gitignore b/sw/qa/core/data/ww5/indeterminate/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sw/qa/core/data/ww5/indeterminate/.gitignore
diff --git a/sw/qa/core/data/ww5/pass/.gitignore b/sw/qa/core/data/ww5/pass/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sw/qa/core/data/ww5/pass/.gitignore
diff --git a/sw/qa/core/data/ww5/pass/crash-1.doc b/sw/qa/core/data/ww5/pass/crash-1.doc
new file mode 100644
index 0000000000..5b94b9a558
--- /dev/null
+++ b/sw/qa/core/data/ww5/pass/crash-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww5/pass/crash-2.doc b/sw/qa/core/data/ww5/pass/crash-2.doc
new file mode 100644
index 0000000000..23a189712d
--- /dev/null
+++ b/sw/qa/core/data/ww5/pass/crash-2.doc
Binary files differ
diff --git a/sw/qa/core/data/ww5/pass/crash-3.doc b/sw/qa/core/data/ww5/pass/crash-3.doc
new file mode 100644
index 0000000000..54931a2820
--- /dev/null
+++ b/sw/qa/core/data/ww5/pass/crash-3.doc
Binary files differ
diff --git a/sw/qa/core/data/ww5/pass/hang-1.doc b/sw/qa/core/data/ww5/pass/hang-1.doc
new file mode 100644
index 0000000000..603372406e
--- /dev/null
+++ b/sw/qa/core/data/ww5/pass/hang-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww5/pass/hang-2.doc b/sw/qa/core/data/ww5/pass/hang-2.doc
new file mode 100644
index 0000000000..5f76093f95
--- /dev/null
+++ b/sw/qa/core/data/ww5/pass/hang-2.doc
Binary files differ
diff --git a/sw/qa/core/data/ww5/pass/hang-3.doc b/sw/qa/core/data/ww5/pass/hang-3.doc
new file mode 100644
index 0000000000..14fbaa6063
--- /dev/null
+++ b/sw/qa/core/data/ww5/pass/hang-3.doc
Binary files differ
diff --git a/sw/qa/core/data/ww5/pass/ofz18526-1.doc b/sw/qa/core/data/ww5/pass/ofz18526-1.doc
new file mode 100644
index 0000000000..e651650f9a
--- /dev/null
+++ b/sw/qa/core/data/ww5/pass/ofz18526-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww5/pass/ooo2535-1-WW2.doc b/sw/qa/core/data/ww5/pass/ooo2535-1-WW2.doc
new file mode 100644
index 0000000000..2c594f5623
--- /dev/null
+++ b/sw/qa/core/data/ww5/pass/ooo2535-1-WW2.doc
Binary files differ
diff --git a/sw/qa/core/data/ww5/pass/ooo37322-1-WW2.doc b/sw/qa/core/data/ww5/pass/ooo37322-1-WW2.doc
new file mode 100644
index 0000000000..fd64eeed29
--- /dev/null
+++ b/sw/qa/core/data/ww5/pass/ooo37322-1-WW2.doc
Binary files differ
diff --git a/sw/qa/core/data/ww5/pass/ooo40683-1-WW1.doc b/sw/qa/core/data/ww5/pass/ooo40683-1-WW1.doc
new file mode 100644
index 0000000000..af63daa0c0
--- /dev/null
+++ b/sw/qa/core/data/ww5/pass/ooo40683-1-WW1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww6/fail/.gitignore b/sw/qa/core/data/ww6/fail/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sw/qa/core/data/ww6/fail/.gitignore
diff --git a/sw/qa/core/data/ww6/fail/ofz45140-1.doc b/sw/qa/core/data/ww6/fail/ofz45140-1.doc
new file mode 100644
index 0000000000..59538b13e4
--- /dev/null
+++ b/sw/qa/core/data/ww6/fail/ofz45140-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww6/indeterminate/.gitignore b/sw/qa/core/data/ww6/indeterminate/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sw/qa/core/data/ww6/indeterminate/.gitignore
diff --git a/sw/qa/core/data/ww6/pass/.gitignore b/sw/qa/core/data/ww6/pass/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sw/qa/core/data/ww6/pass/.gitignore
diff --git a/sw/qa/core/data/ww6/pass/crash-1.doc b/sw/qa/core/data/ww6/pass/crash-1.doc
new file mode 100644
index 0000000000..3c6f684e85
--- /dev/null
+++ b/sw/qa/core/data/ww6/pass/crash-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww6/pass/crash-2.doc b/sw/qa/core/data/ww6/pass/crash-2.doc
new file mode 100644
index 0000000000..f155e973f7
--- /dev/null
+++ b/sw/qa/core/data/ww6/pass/crash-2.doc
Binary files differ
diff --git a/sw/qa/core/data/ww6/pass/crash-3.doc b/sw/qa/core/data/ww6/pass/crash-3.doc
new file mode 100644
index 0000000000..8646b7ac5d
--- /dev/null
+++ b/sw/qa/core/data/ww6/pass/crash-3.doc
Binary files differ
diff --git a/sw/qa/core/data/ww6/pass/crash-4.doc b/sw/qa/core/data/ww6/pass/crash-4.doc
new file mode 100644
index 0000000000..5abaecc2b3
--- /dev/null
+++ b/sw/qa/core/data/ww6/pass/crash-4.doc
Binary files differ
diff --git a/sw/qa/core/data/ww6/pass/crash-5.doc b/sw/qa/core/data/ww6/pass/crash-5.doc
new file mode 100644
index 0000000000..f1f4d7808c
--- /dev/null
+++ b/sw/qa/core/data/ww6/pass/crash-5.doc
Binary files differ
diff --git a/sw/qa/core/data/ww6/pass/crash-6.doc b/sw/qa/core/data/ww6/pass/crash-6.doc
new file mode 100644
index 0000000000..08c879176a
--- /dev/null
+++ b/sw/qa/core/data/ww6/pass/crash-6.doc
Binary files differ
diff --git a/sw/qa/core/data/ww6/pass/crash-7.doc b/sw/qa/core/data/ww6/pass/crash-7.doc
new file mode 100644
index 0000000000..5a9dab32bf
--- /dev/null
+++ b/sw/qa/core/data/ww6/pass/crash-7.doc
Binary files differ
diff --git a/sw/qa/core/data/ww6/pass/hang-1.doc b/sw/qa/core/data/ww6/pass/hang-1.doc
new file mode 100644
index 0000000000..825283d51e
--- /dev/null
+++ b/sw/qa/core/data/ww6/pass/hang-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww6/pass/ofz-redlining-1.doc b/sw/qa/core/data/ww6/pass/ofz-redlining-1.doc
new file mode 100644
index 0000000000..b2f60eb2a2
--- /dev/null
+++ b/sw/qa/core/data/ww6/pass/ofz-redlining-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww6/pass/ofz-trailingpara.doc b/sw/qa/core/data/ww6/pass/ofz-trailingpara.doc
new file mode 100644
index 0000000000..40c574759b
--- /dev/null
+++ b/sw/qa/core/data/ww6/pass/ofz-trailingpara.doc
Binary files differ
diff --git a/sw/qa/core/data/ww6/pass/ofz21168-1.doc b/sw/qa/core/data/ww6/pass/ofz21168-1.doc
new file mode 100644
index 0000000000..3bafb1d36b
--- /dev/null
+++ b/sw/qa/core/data/ww6/pass/ofz21168-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww6/pass/ofz21385-1.doc b/sw/qa/core/data/ww6/pass/ofz21385-1.doc
new file mode 100644
index 0000000000..311c6ed5fe
--- /dev/null
+++ b/sw/qa/core/data/ww6/pass/ofz21385-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww6/pass/ofz34898-1.doc b/sw/qa/core/data/ww6/pass/ofz34898-1.doc
new file mode 100644
index 0000000000..544dd0d558
--- /dev/null
+++ b/sw/qa/core/data/ww6/pass/ofz34898-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww6/pass/ofz41398-1.doc b/sw/qa/core/data/ww6/pass/ofz41398-1.doc
new file mode 100644
index 0000000000..34c6e357d8
--- /dev/null
+++ b/sw/qa/core/data/ww6/pass/ofz41398-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww6/pass/ofz42330-1.doc b/sw/qa/core/data/ww6/pass/ofz42330-1.doc
new file mode 100644
index 0000000000..a1cd04f53d
--- /dev/null
+++ b/sw/qa/core/data/ww6/pass/ofz42330-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww6/pass/ooo17498-1.doc b/sw/qa/core/data/ww6/pass/ooo17498-1.doc
new file mode 100644
index 0000000000..258c6ff63e
--- /dev/null
+++ b/sw/qa/core/data/ww6/pass/ooo17498-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww6/pass/ooo17498-2.doc b/sw/qa/core/data/ww6/pass/ooo17498-2.doc
new file mode 100644
index 0000000000..9955f78209
--- /dev/null
+++ b/sw/qa/core/data/ww6/pass/ooo17498-2.doc
Binary files differ
diff --git a/sw/qa/core/data/ww6/pass/ooo17498-3.doc b/sw/qa/core/data/ww6/pass/ooo17498-3.doc
new file mode 100644
index 0000000000..c0db457ca0
--- /dev/null
+++ b/sw/qa/core/data/ww6/pass/ooo17498-3.doc
Binary files differ
diff --git a/sw/qa/core/data/ww6/pass/ooo17498-4.doc b/sw/qa/core/data/ww6/pass/ooo17498-4.doc
new file mode 100644
index 0000000000..be0df81954
--- /dev/null
+++ b/sw/qa/core/data/ww6/pass/ooo17498-4.doc
Binary files differ
diff --git a/sw/qa/core/data/ww6/pass/ooo8726-1.doc b/sw/qa/core/data/ww6/pass/ooo8726-1.doc
new file mode 100644
index 0000000000..e78dab1551
--- /dev/null
+++ b/sw/qa/core/data/ww6/pass/ooo8726-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/fail/.gitignore b/sw/qa/core/data/ww8/fail/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sw/qa/core/data/ww8/fail/.gitignore
diff --git a/sw/qa/core/data/ww8/fail/CVE-2005-0941-1.doc b/sw/qa/core/data/ww8/fail/CVE-2005-0941-1.doc
new file mode 100644
index 0000000000..a1f5b7668b
--- /dev/null
+++ b/sw/qa/core/data/ww8/fail/CVE-2005-0941-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/fail/CVE-2006-2389-1.doc b/sw/qa/core/data/ww8/fail/CVE-2006-2389-1.doc
new file mode 100644
index 0000000000..a99da57e8c
--- /dev/null
+++ b/sw/qa/core/data/ww8/fail/CVE-2006-2389-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/fail/CVE-2008-0320-1.doc b/sw/qa/core/data/ww8/fail/CVE-2008-0320-1.doc
new file mode 100644
index 0000000000..5c6d351f25
--- /dev/null
+++ b/sw/qa/core/data/ww8/fail/CVE-2008-0320-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/fail/forcepoint-44.doc b/sw/qa/core/data/ww8/fail/forcepoint-44.doc
new file mode 100644
index 0000000000..100422a224
--- /dev/null
+++ b/sw/qa/core/data/ww8/fail/forcepoint-44.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/fail/hang-2.doc b/sw/qa/core/data/ww8/fail/hang-2.doc
new file mode 100644
index 0000000000..a48b521aed
--- /dev/null
+++ b/sw/qa/core/data/ww8/fail/hang-2.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/fail/redline-1.doc b/sw/qa/core/data/ww8/fail/redline-1.doc
new file mode 100644
index 0000000000..86c9673148
--- /dev/null
+++ b/sw/qa/core/data/ww8/fail/redline-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/indeterminate/.gitignore b/sw/qa/core/data/ww8/indeterminate/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sw/qa/core/data/ww8/indeterminate/.gitignore
diff --git a/sw/qa/core/data/ww8/pass/.gitignore b/sw/qa/core/data/ww8/pass/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/.gitignore
diff --git a/sw/qa/core/data/ww8/pass/CVE-2003-0820-1.doc b/sw/qa/core/data/ww8/pass/CVE-2003-0820-1.doc
new file mode 100644
index 0000000000..b3466d2807
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/CVE-2003-0820-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/CVE-2006-3493-1.doc b/sw/qa/core/data/ww8/pass/CVE-2006-3493-1.doc
new file mode 100644
index 0000000000..4623e3c190
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/CVE-2006-3493-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/CVE-2006-6561-1.doc b/sw/qa/core/data/ww8/pass/CVE-2006-6561-1.doc
new file mode 100644
index 0000000000..390a6634d1
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/CVE-2006-6561-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/CVE-2006-6628-1.doc b/sw/qa/core/data/ww8/pass/CVE-2006-6628-1.doc
new file mode 100644
index 0000000000..390a6634d1
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/CVE-2006-6628-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/CVE-2007-1347-1.doc b/sw/qa/core/data/ww8/pass/CVE-2007-1347-1.doc
new file mode 100644
index 0000000000..dabcf3fbaa
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/CVE-2007-1347-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/CVE-2008-2752-1.doc b/sw/qa/core/data/ww8/pass/CVE-2008-2752-1.doc
new file mode 100644
index 0000000000..20c40a8409
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/CVE-2008-2752-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/CVE-2008-2752-2.doc b/sw/qa/core/data/ww8/pass/CVE-2008-2752-2.doc
new file mode 100644
index 0000000000..569967ef92
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/CVE-2008-2752-2.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/CVE-2008-2752-3.doc b/sw/qa/core/data/ww8/pass/CVE-2008-2752-3.doc
new file mode 100644
index 0000000000..3fe55f6db1
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/CVE-2008-2752-3.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/CVE-2008-2752-4.doc b/sw/qa/core/data/ww8/pass/CVE-2008-2752-4.doc
new file mode 100644
index 0000000000..1bd549907e
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/CVE-2008-2752-4.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/CVE-2008-4841-1.doc b/sw/qa/core/data/ww8/pass/CVE-2008-4841-1.doc
new file mode 100644
index 0000000000..37b9945341
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/CVE-2008-4841-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/CVE-2009-0200-1.doc b/sw/qa/core/data/ww8/pass/CVE-2009-0200-1.doc
new file mode 100644
index 0000000000..6b9fb25f74
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/CVE-2009-0200-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/CVE-2009-0201-1.doc b/sw/qa/core/data/ww8/pass/CVE-2009-0201-1.doc
new file mode 100644
index 0000000000..462b17bef3
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/CVE-2009-0201-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/CVE-2009-0259-1.doc b/sw/qa/core/data/ww8/pass/CVE-2009-0259-1.doc
new file mode 100644
index 0000000000..37b9945341
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/CVE-2009-0259-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/CVE-2009-3301-1.doc b/sw/qa/core/data/ww8/pass/CVE-2009-3301-1.doc
new file mode 100644
index 0000000000..8351c834cc
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/CVE-2009-3301-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/CVE-2009-3302-1.doc b/sw/qa/core/data/ww8/pass/CVE-2009-3302-1.doc
new file mode 100644
index 0000000000..8351c834cc
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/CVE-2009-3302-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/CVE-2009-3302-2.doc b/sw/qa/core/data/ww8/pass/CVE-2009-3302-2.doc
new file mode 100644
index 0000000000..f8181f3db6
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/CVE-2009-3302-2.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/CVE-2010-3200-1.doc b/sw/qa/core/data/ww8/pass/CVE-2010-3200-1.doc
new file mode 100644
index 0000000000..4bdb0532a8
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/CVE-2010-3200-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/CVE-2010-3453-1.doc b/sw/qa/core/data/ww8/pass/CVE-2010-3453-1.doc
new file mode 100644
index 0000000000..62dacdc29b
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/CVE-2010-3453-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/CVE-2010-3454-1.doc b/sw/qa/core/data/ww8/pass/CVE-2010-3454-1.doc
new file mode 100644
index 0000000000..9bbadc0947
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/CVE-2010-3454-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/CVE-2012-4886-1.doc b/sw/qa/core/data/ww8/pass/CVE-2012-4886-1.doc
new file mode 100644
index 0000000000..609e8f68d9
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/CVE-2012-4886-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/CVE-2014-6356-1.doc b/sw/qa/core/data/ww8/pass/CVE-2014-6356-1.doc
new file mode 100644
index 0000000000..a28729498c
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/CVE-2014-6356-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/CVE-2014-6364.doc b/sw/qa/core/data/ww8/pass/CVE-2014-6364.doc
new file mode 100644
index 0000000000..14ac417406
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/CVE-2014-6364.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/CVE-2015-0064-1.doc b/sw/qa/core/data/ww8/pass/CVE-2015-0064-1.doc
new file mode 100644
index 0000000000..21263d591b
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/CVE-2015-0064-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/CVE-2015-0065-1.doc b/sw/qa/core/data/ww8/pass/CVE-2015-0065-1.doc
new file mode 100644
index 0000000000..e3c9640b95
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/CVE-2015-0065-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/CVE-2015-0097-1.doc b/sw/qa/core/data/ww8/pass/CVE-2015-0097-1.doc
new file mode 100644
index 0000000000..7c893da4b0
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/CVE-2015-0097-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/CVE-2015-2380-1.doc b/sw/qa/core/data/ww8/pass/CVE-2015-2380-1.doc
new file mode 100644
index 0000000000..cf1567806c
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/CVE-2015-2380-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/CVE-2015-2431-1.doc b/sw/qa/core/data/ww8/pass/CVE-2015-2431-1.doc
new file mode 100644
index 0000000000..05582e26a3
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/CVE-2015-2431-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/CVE-2015-2467-1.doc b/sw/qa/core/data/ww8/pass/CVE-2015-2467-1.doc
new file mode 100644
index 0000000000..a8f0f26333
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/CVE-2015-2467-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/CVE-2016-3133-1.doc b/sw/qa/core/data/ww8/pass/CVE-2016-3133-1.doc
new file mode 100644
index 0000000000..2d23eefa99
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/CVE-2016-3133-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/EDB-14092-1.doc b/sw/qa/core/data/ww8/pass/EDB-14092-1.doc
new file mode 100644
index 0000000000..a9caf97f72
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/EDB-14092-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/EDB-18952-1.doc b/sw/qa/core/data/ww8/pass/EDB-18952-1.doc
new file mode 100644
index 0000000000..505eb1d80a
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/EDB-18952-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/EDB-22215-1.doc b/sw/qa/core/data/ww8/pass/EDB-22215-1.doc
new file mode 100644
index 0000000000..f4429f6059
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/EDB-22215-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/EDB-37909-1.doc b/sw/qa/core/data/ww8/pass/EDB-37909-1.doc
new file mode 100644
index 0000000000..a51a985ad0
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/EDB-37909-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/EDB-37910-1.doc b/sw/qa/core/data/ww8/pass/EDB-37910-1.doc
new file mode 100644
index 0000000000..6ed7912312
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/EDB-37910-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/EDB-37924-1.doc b/sw/qa/core/data/ww8/pass/EDB-37924-1.doc
new file mode 100644
index 0000000000..39545b5cad
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/EDB-37924-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/EDB-39396-1.doc b/sw/qa/core/data/ww8/pass/EDB-39396-1.doc
new file mode 100644
index 0000000000..ae7c7ae7cb
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/EDB-39396-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/crash-1.doc b/sw/qa/core/data/ww8/pass/crash-1.doc
new file mode 100644
index 0000000000..9f6b25348c
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/crash-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/crash-2.doc b/sw/qa/core/data/ww8/pass/crash-2.doc
new file mode 100644
index 0000000000..452e21e511
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/crash-2.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/crash-3.doc b/sw/qa/core/data/ww8/pass/crash-3.doc
new file mode 100644
index 0000000000..d36afef50d
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/crash-3.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/crash-4.doc b/sw/qa/core/data/ww8/pass/crash-4.doc
new file mode 100644
index 0000000000..8658e0eeab
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/crash-4.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/fdo40686-1.doc b/sw/qa/core/data/ww8/pass/fdo40686-1.doc
new file mode 100644
index 0000000000..bb0fd59274
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/fdo40686-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/fdo66692-2.doc b/sw/qa/core/data/ww8/pass/fdo66692-2.doc
new file mode 100644
index 0000000000..5042eeeb20
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/fdo66692-2.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/forcepoint-layout-1.doc b/sw/qa/core/data/ww8/pass/forcepoint-layout-1.doc
new file mode 100644
index 0000000000..37801a9b14
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/forcepoint-layout-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/forcepoint50-grfanchor-1.doc b/sw/qa/core/data/ww8/pass/forcepoint50-grfanchor-1.doc
new file mode 100644
index 0000000000..91ee6b58f2
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/forcepoint50-grfanchor-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/forcepoint50-rows-1.doc b/sw/qa/core/data/ww8/pass/forcepoint50-rows-1.doc
new file mode 100644
index 0000000000..e91f9dd324
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/forcepoint50-rows-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/hang-1.doc b/sw/qa/core/data/ww8/pass/hang-1.doc
new file mode 100644
index 0000000000..8d68bbb127
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/hang-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/hang-2.doc b/sw/qa/core/data/ww8/pass/hang-2.doc
new file mode 100644
index 0000000000..6940c89e13
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/hang-2.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/hang-3.doc b/sw/qa/core/data/ww8/pass/hang-3.doc
new file mode 100644
index 0000000000..4188b801a4
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/hang-3.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/hang-4.doc b/sw/qa/core/data/ww8/pass/hang-4.doc
new file mode 100644
index 0000000000..b7fd04012f
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/hang-4.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/hang-5.doc b/sw/qa/core/data/ww8/pass/hang-5.doc
new file mode 100644
index 0000000000..c9d56711ab
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/hang-5.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/hang-6.doc b/sw/qa/core/data/ww8/pass/hang-6.doc
new file mode 100644
index 0000000000..48293c5fa9
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/hang-6.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/hang-7.doc b/sw/qa/core/data/ww8/pass/hang-7.doc
new file mode 100644
index 0000000000..a52a452fea
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/hang-7.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/hang-8.doc b/sw/qa/core/data/ww8/pass/hang-8.doc
new file mode 100644
index 0000000000..4f0e30ecc4
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/hang-8.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/hang-9.doc b/sw/qa/core/data/ww8/pass/hang-9.doc
new file mode 100644
index 0000000000..4e9e4120f4
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/hang-9.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/ofz18414-1.doc b/sw/qa/core/data/ww8/pass/ofz18414-1.doc
new file mode 100644
index 0000000000..84204d197b
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/ofz18414-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/ofz18534-1.doc b/sw/qa/core/data/ww8/pass/ofz18534-1.doc
new file mode 100644
index 0000000000..6b50fdd6d4
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/ofz18534-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/ofz18554-1.doc b/sw/qa/core/data/ww8/pass/ofz18554-1.doc
new file mode 100644
index 0000000000..0a6b81d78b
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/ofz18554-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/ofz19065.doc b/sw/qa/core/data/ww8/pass/ofz19065.doc
new file mode 100644
index 0000000000..a242f13bf8
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/ofz19065.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/ofz34749-1.doc b/sw/qa/core/data/ww8/pass/ofz34749-1.doc
new file mode 100644
index 0000000000..d657a71b52
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/ofz34749-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/ofz38011-1.doc b/sw/qa/core/data/ww8/pass/ofz38011-1.doc
new file mode 100644
index 0000000000..8ef58ca539
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/ofz38011-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/ofz46457-1.doc b/sw/qa/core/data/ww8/pass/ofz46457-1.doc
new file mode 100644
index 0000000000..c986678b5b
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/ofz46457-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/ofz47205-1.doc b/sw/qa/core/data/ww8/pass/ofz47205-1.doc
new file mode 100644
index 0000000000..acbb4830d5
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/ofz47205-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/ofz53457-1.doc b/sw/qa/core/data/ww8/pass/ofz53457-1.doc
new file mode 100644
index 0000000000..b847eedbbd
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/ofz53457-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/ofz57592-1.doc b/sw/qa/core/data/ww8/pass/ofz57592-1.doc
new file mode 100644
index 0000000000..289343a1af
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/ofz57592-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/ofz7322-1.doc b/sw/qa/core/data/ww8/pass/ofz7322-1.doc
new file mode 100644
index 0000000000..5f4858849a
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/ofz7322-1.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/tdf117129_dxagoal0.doc b/sw/qa/core/data/ww8/pass/tdf117129_dxagoal0.doc
new file mode 100644
index 0000000000..9fca8ef048
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/tdf117129_dxagoal0.doc
Binary files differ
diff --git a/sw/qa/core/data/ww8/pass/tdf57532-1.doc b/sw/qa/core/data/ww8/pass/tdf57532-1.doc
new file mode 100644
index 0000000000..70068fe10c
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/tdf57532-1.doc
Binary files differ
diff --git a/sw/qa/core/data/xml/fail/.gitignore b/sw/qa/core/data/xml/fail/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sw/qa/core/data/xml/fail/.gitignore
diff --git a/sw/qa/core/data/xml/fail/CVE-2006-3117-1.sxw b/sw/qa/core/data/xml/fail/CVE-2006-3117-1.sxw
new file mode 100644
index 0000000000..1f4d4d3b2f
--- /dev/null
+++ b/sw/qa/core/data/xml/fail/CVE-2006-3117-1.sxw
Binary files differ
diff --git a/sw/qa/core/data/xml/fail/ooo71273-1.sxw b/sw/qa/core/data/xml/fail/ooo71273-1.sxw
new file mode 100644
index 0000000000..5208512aae
--- /dev/null
+++ b/sw/qa/core/data/xml/fail/ooo71273-1.sxw
Binary files differ
diff --git a/sw/qa/core/data/xml/indeterminate/.gitignore b/sw/qa/core/data/xml/indeterminate/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sw/qa/core/data/xml/indeterminate/.gitignore
diff --git a/sw/qa/core/data/xml/pass/.gitignore b/sw/qa/core/data/xml/pass/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sw/qa/core/data/xml/pass/.gitignore
diff --git a/sw/qa/core/data/xml/pass/ooo32780-1.sxw b/sw/qa/core/data/xml/pass/ooo32780-1.sxw
new file mode 100644
index 0000000000..f946567188
--- /dev/null
+++ b/sw/qa/core/data/xml/pass/ooo32780-1.sxw
Binary files differ
diff --git a/sw/qa/core/doc/data/bookmark-delete-redline.doc b/sw/qa/core/doc/data/bookmark-delete-redline.doc
new file mode 100644
index 0000000000..7e46b0236b
--- /dev/null
+++ b/sw/qa/core/doc/data/bookmark-delete-redline.doc
Binary files differ
diff --git a/sw/qa/core/doc/data/copy-bookmarks.docx b/sw/qa/core/doc/data/copy-bookmarks.docx
new file mode 100644
index 0000000000..a9bedb4879
--- /dev/null
+++ b/sw/qa/core/doc/data/copy-bookmarks.docx
Binary files differ
diff --git a/sw/qa/core/doc/data/floating-table-dummy-text.docx b/sw/qa/core/doc/data/floating-table-dummy-text.docx
new file mode 100644
index 0000000000..14de5a920a
--- /dev/null
+++ b/sw/qa/core/doc/data/floating-table-dummy-text.docx
Binary files differ
diff --git a/sw/qa/core/doc/data/header-footer-delete.docx b/sw/qa/core/doc/data/header-footer-delete.docx
new file mode 100644
index 0000000000..e6cc427315
--- /dev/null
+++ b/sw/qa/core/doc/data/header-footer-delete.docx
Binary files differ
diff --git a/sw/qa/core/doc/data/locale-independent-template.odt b/sw/qa/core/doc/data/locale-independent-template.odt
new file mode 100644
index 0000000000..d2a8dc274c
--- /dev/null
+++ b/sw/qa/core/doc/data/locale-independent-template.odt
Binary files differ
diff --git a/sw/qa/core/doc/data/num-down-indent.docx b/sw/qa/core/doc/data/num-down-indent.docx
new file mode 100644
index 0000000000..86621c3cb9
--- /dev/null
+++ b/sw/qa/core/doc/data/num-down-indent.docx
Binary files differ
diff --git a/sw/qa/core/doc/data/textbox-makeflyframe.docx b/sw/qa/core/doc/data/textbox-makeflyframe.docx
new file mode 100644
index 0000000000..9e26cda3c6
--- /dev/null
+++ b/sw/qa/core/doc/data/textbox-makeflyframe.docx
Binary files differ
diff --git a/sw/qa/core/doc/data/textbox-textrotateangle.odt b/sw/qa/core/doc/data/textbox-textrotateangle.odt
new file mode 100644
index 0000000000..2ce4c3e0b7
--- /dev/null
+++ b/sw/qa/core/doc/data/textbox-textrotateangle.odt
Binary files differ
diff --git a/sw/qa/core/doc/data/textbox-zorder.docx b/sw/qa/core/doc/data/textbox-zorder.docx
new file mode 100644
index 0000000000..d5263f8bbd
--- /dev/null
+++ b/sw/qa/core/doc/data/textbox-zorder.docx
Binary files differ
diff --git a/sw/qa/core/doc/doc.cxx b/sw/qa/core/doc/doc.cxx
new file mode 100644
index 0000000000..b653a1cc22
--- /dev/null
+++ b/sw/qa/core/doc/doc.cxx
@@ -0,0 +1,614 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <swmodeltestbase.hxx>
+
+#include <com/sun/star/view/XSelectionSupplier.hpp>
+
+#include <comphelper/classids.hxx>
+#include <tools/globname.hxx>
+#include <svtools/embedhlp.hxx>
+#include <editeng/acorrcfg.hxx>
+#include <editeng/frmdiritem.hxx>
+#include <editeng/svxacorr.hxx>
+#include <vcl/errinf.hxx>
+#include <vcl/event.hxx>
+#include <editeng/langitem.hxx>
+#include <vcl/scheduler.hxx>
+#include <comphelper/propertyvalue.hxx>
+
+#include <wrtsh.hxx>
+#include <fmtanchr.hxx>
+#include <frameformats.hxx>
+#include <docsh.hxx>
+#include <edtwin.hxx>
+#include <view.hxx>
+#include <ndtxt.hxx>
+#include <swdtflvr.hxx>
+#include <unotxdoc.hxx>
+#include <UndoManager.hxx>
+#include <IDocumentRedlineAccess.hxx>
+#include <frmmgr.hxx>
+#include <formatflysplit.hxx>
+#include <IDocumentLayoutAccess.hxx>
+#include <rootfrm.hxx>
+#include <pagefrm.hxx>
+#include <sortedobjs.hxx>
+#include <itabenum.hxx>
+
+/// Covers sw/source/core/doc/ fixes.
+class SwCoreDocTest : public SwModelTestBase
+{
+public:
+ SwCoreDocTest()
+ : SwModelTestBase("/sw/qa/core/doc/data/")
+ {
+ }
+};
+
+CPPUNIT_TEST_FIXTURE(SwCoreDocTest, testMathInsertAnchorType)
+{
+ // Given an empty document.
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+
+ // When inserting an a math object.
+ SwWrtShell* pShell = pDoc->GetDocShell()->GetWrtShell();
+ SvGlobalName aGlobalName(SO3_SM_CLASSID);
+ pShell->InsertObject(svt::EmbeddedObjectRef(), &aGlobalName);
+
+ // Then the anchor type should be as-char.
+ sw::SpzFrameFormats& rFormats = *pDoc->GetSpzFrameFormats();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rFormats.size());
+ const SwFrameFormat& rFormat = *rFormats[0];
+ const SwFormatAnchor& rAnchor = rFormat.GetAnchor();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 1
+ // - Actual : 4
+ // i.e. the anchor type was at-char, not as-char.
+ CPPUNIT_ASSERT_EQUAL(RndStdIds::FLY_AS_CHAR, rAnchor.GetAnchorId());
+ ErrorRegistry::Reset();
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreDocTest, testTextboxTextRotateAngle)
+{
+ // Check the writing direction of the only TextFrame in the document.
+ createSwDoc("textbox-textrotateangle.odt");
+ SwDoc* pDoc = getSwDoc();
+ sw::SpzFrameFormats& rFrameFormats = *pDoc->GetSpzFrameFormats();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), rFrameFormats.size());
+ CPPUNIT_ASSERT_EQUAL(o3tl::narrowing<sal_uInt16>(RES_DRAWFRMFMT), rFrameFormats[0]->Which());
+ CPPUNIT_ASSERT_EQUAL(o3tl::narrowing<sal_uInt16>(RES_FLYFRMFMT), rFrameFormats[1]->Which());
+ SvxFrameDirection eActual = rFrameFormats[1]->GetAttrSet().GetItem(RES_FRAMEDIR)->GetValue();
+
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 5 (btlr)
+ // - Actual : 0 (lrtb)
+ // i.e. the writing direction was in the ODT file, but it was lost on import in the textbox
+ // case.
+ CPPUNIT_ASSERT_EQUAL(SvxFrameDirection::Vertical_LR_BT, eActual);
+ ErrorRegistry::Reset();
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreDocTest, testNumDownIndent)
+{
+ createSwDoc("num-down-indent.docx");
+ SwDoc* pDoc = getSwDoc();
+ SwDocShell* pDocShell = pDoc->GetDocShell();
+ SwWrtShell* pWrtShell = pDocShell->GetWrtShell();
+ pWrtShell->Down(/*bSelect=*/false);
+ SwEditWin& rEditWin = pDocShell->GetView()->GetEditWin();
+ KeyEvent aKeyEvent(0, KEY_TAB);
+ rEditWin.KeyInput(aKeyEvent);
+ SwTextNode* pTextNode = pWrtShell->GetCursor()->GetPointNode().GetTextNode();
+
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: \tB
+ // - Actual : B
+ // i.e. pressing <tab> at the start of the paragraph did not change the layout.
+ CPPUNIT_ASSERT_EQUAL(OUString("\tB"), pTextNode->GetText());
+ ErrorRegistry::Reset();
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreDocTest, testBulletsOnSpaceOff)
+{
+ SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get().GetAutoCorrect();
+ pAutoCorrect->GetSwFlags().bSetNumRule = false;
+ pAutoCorrect->GetSwFlags().bSetNumRuleAfterSpace = false;
+
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ SwDocShell* pDocShell = pDoc->GetDocShell();
+ SwWrtShell* pWrtShell = pDocShell->GetWrtShell();
+ pWrtShell->Down(/*bSelect=*/false);
+ SwEditWin& rEditWin = pDocShell->GetView()->GetEditWin();
+ KeyEvent aKeyEvent('-', 0);
+ rEditWin.KeyInput(aKeyEvent);
+ KeyEvent aKeyEvent2(' ', KEY_SPACE);
+ rEditWin.KeyInput(aKeyEvent2);
+ KeyEvent aKeyEvent3('a', 0);
+ rEditWin.KeyInput(aKeyEvent3);
+ SwTextNode* pTextNode = pWrtShell->GetCursor()->GetPointNode().GetTextNode();
+
+ CPPUNIT_ASSERT_EQUAL(OUString("- a"), pTextNode->GetText());
+ ErrorRegistry::Reset();
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreDocTest, testBulletsOnSpace)
+{
+ SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get().GetAutoCorrect();
+ pAutoCorrect->GetSwFlags().bSetNumRule = true;
+ pAutoCorrect->GetSwFlags().bSetNumRuleAfterSpace = true;
+
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ SwDocShell* pDocShell = pDoc->GetDocShell();
+ SwWrtShell* pWrtShell = pDocShell->GetWrtShell();
+ pWrtShell->Down(/*bSelect=*/false);
+ SwEditWin& rEditWin = pDocShell->GetView()->GetEditWin();
+ KeyEvent aKeyEvent('-', 0);
+ rEditWin.KeyInput(aKeyEvent);
+ KeyEvent aKeyEvent2(' ', KEY_SPACE);
+ rEditWin.KeyInput(aKeyEvent2);
+ KeyEvent aKeyEvent3('a', 0);
+ rEditWin.KeyInput(aKeyEvent3);
+ SwTextNode* pTextNode = pWrtShell->GetCursor()->GetPointNode().GetTextNode();
+
+ // '- ' was converted into bullet
+ CPPUNIT_ASSERT_EQUAL(OUString("a"), pTextNode->GetText());
+ ErrorRegistry::Reset();
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreDocTest, testLocaleIndependentTemplate)
+{
+ createSwDoc("locale-independent-template.odt");
+ SwDoc* pDoc = getSwDoc();
+ SwDocShell* pDocShell = pDoc->GetDocShell();
+ SwWrtShell* pWrtShell = pDocShell->GetWrtShell();
+ SfxItemSet aSet(pWrtShell->GetAttrPool(), svl::Items<RES_CHRATR_LANGUAGE, RES_CHRATR_LANGUAGE>);
+ pWrtShell->GetCurAttr(aSet);
+ const SvxLanguageItem* pItem = aSet.GetItem(RES_CHRATR_LANGUAGE);
+ CPPUNIT_ASSERT(pItem);
+ LanguageType eLang = pItem->GetValue();
+
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 1033 (LANGUAGE_ENGLISH_US)
+ // - Actual : 1023 (LANGUAGE_DONTKNOW)
+ // i.e. the status bar and the format -> character dialog didn't fall back to the UI locale when
+ // an explicit language was not set for the document.
+ CPPUNIT_ASSERT_EQUAL(LANGUAGE_ENGLISH_US, eLang);
+ ErrorRegistry::Reset();
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreDocTest, testTextBoxZOrder)
+{
+ createSwDoc("textbox-zorder.docx");
+ SwDoc* pDoc = getSwDoc();
+ sw::SpzFrameFormats& rFormats = *pDoc->GetSpzFrameFormats();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(3), rFormats.size());
+ const sw::SpzFrameFormat* pEllipse = rFormats[2];
+ const SdrObject* pEllipseShape = pEllipse->FindRealSdrObject();
+ // Make sure we test the right shape.
+ CPPUNIT_ASSERT_EQUAL(OUString("Shape3"), pEllipseShape->GetName());
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 2
+ // - Actual : 1
+ // i.e. the ellipse was under the frame of the shape-frame pair, not on top of it.
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt32>(2), pEllipseShape->GetOrdNum());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreDocTest, testTextBoxMakeFlyFrame)
+{
+ // Given a document with an as-char textbox (as-char draw format + at-char fly format):
+ createSwDoc("textbox-makeflyframe.docx");
+ SwDoc* pDoc = getSwDoc();
+
+ // When cutting the textbox and pasting it to a new document:
+ selectShape(1);
+ SwDocShell* pDocShell = pDoc->GetDocShell();
+ SwWrtShell* pWrtShell = pDocShell->GetWrtShell();
+ rtl::Reference<SwTransferable> pTransfer = new SwTransferable(*pWrtShell);
+ pTransfer->Cut();
+ TransferableDataHelper aHelper(pTransfer);
+ uno::Reference<lang::XComponent> xDoc2
+ = loadFromDesktop("private:factory/swriter", "com.sun.star.text.TextDocument", {});
+ SwXTextDocument* pTextDoc2 = dynamic_cast<SwXTextDocument*>(xDoc2.get());
+ SwDocShell* pDocShell2 = pTextDoc2->GetDocShell();
+ SwWrtShell* pWrtShell2 = pDocShell2->GetWrtShell();
+ SwTransferable::Paste(*pWrtShell2, aHelper);
+
+ // Then make sure its fly frame is created.
+ mxComponent->dispose();
+ mxComponent = xDoc2;
+ xmlDocUniquePtr pLayout = parseLayoutDump();
+ // Without the accompanying fix in place, this test would have failed, because the first text
+ // frame in the body frame had an SwAnchoredDrawObject anchored to it, but not a fly frame, so
+ // a blank square was painted, not the image.
+ assertXPath(pLayout, "/root/page/body/txt/anchored/fly"_ostr, 1);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreDocTest, testIMEGrouping)
+{
+// TODO figure out why the ext text input in this test code reaches the wrong window on
+// non-headless.
+#if !defined MACOSX && !defined _WIN32
+ // Given an empty document:
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ // Make sure no idle is in action, so the ExtTextInput events go to SwEditWin.
+ Scheduler::ProcessEventsToIdle();
+
+ // When pressing two keys via IME:
+ SwDocShell* pDocShell = pDoc->GetDocShell();
+ SwEditWin& rEditWin = pDocShell->GetView()->GetEditWin();
+ rEditWin.PostExtTextInputEvent(VclEventId::ExtTextInput, "a");
+ rEditWin.PostExtTextInputEvent(VclEventId::EndExtTextInput, "");
+ rEditWin.PostExtTextInputEvent(VclEventId::ExtTextInput, "b");
+ rEditWin.PostExtTextInputEvent(VclEventId::EndExtTextInput, "");
+
+ // Then make sure that gets grouped together to a single undo action:
+ SwWrtShell* pWrtShell = pDocShell->GetWrtShell();
+ SwTextNode* pTextNode = pWrtShell->GetCursor()->GetPointNode().GetTextNode();
+ CPPUNIT_ASSERT_EQUAL(OUString("ab"), pTextNode->GetText());
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 1
+ // - Actual : 2
+ // i.e. 2 subsequent IME events got their own undo actions.
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), pDoc->GetUndoManager().GetUndoActionCount());
+#endif
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreDocTest, testImageHyperlinkStyle)
+{
+ // Given a document with an image with a hyperlink:
+ createSwDoc();
+ uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextDocument> xDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ uno::Reference<text::XTextContent> xImage(
+ xFactory->createInstance("com.sun.star.text.TextGraphicObject"), uno::UNO_QUERY);
+ xText->insertTextContent(xCursor, xImage, /*bAbsorb=*/false);
+ uno::Reference<beans::XPropertySet> xImageProps(xImage, uno::UNO_QUERY);
+ OUString aExpected = "http://www.example.com";
+ xImageProps->setPropertyValue("HyperLinkURL", uno::Any(aExpected));
+
+ // When applying a frame style on it:
+ xImageProps->setPropertyValue("FrameStyleName", uno::Any(OUString("Frame")));
+
+ // Then make sure that the hyperlink is not lost:
+ auto aActual = getProperty<OUString>(xImageProps, "HyperLinkURL");
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: http://www.example.com
+ // - Actual :
+ // i.e. the link was lost, even if the frame style dialog doesn't allow specifying a link on
+ // frames.
+ CPPUNIT_ASSERT_EQUAL(aExpected, aActual);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreDocTest, testContentControlDelete)
+{
+ // Given a document with a content control:
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ uno::Reference<lang::XMultiServiceFactory> xMSF(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xTextDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ xText->insertString(xCursor, "test", /*bAbsorb=*/false);
+ xCursor->gotoStart(/*bExpand=*/false);
+ xCursor->gotoEnd(/*bExpand=*/true);
+ uno::Reference<text::XTextContent> xContentControl(
+ xMSF->createInstance("com.sun.star.text.ContentControl"), uno::UNO_QUERY);
+ xText->insertTextContent(xCursor, xContentControl, /*bAbsorb=*/true);
+
+ // When deleting the dummy character at the end of the content control:
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ pWrtShell->SttEndDoc(/*bStt=*/false);
+ pWrtShell->DelLeft();
+
+ // Then make sure that we only enter the content control, to be consistent with the start dummy
+ // character:
+ SwTextNode* pTextNode = pWrtShell->GetCursor()->GetMark()->GetNode().GetTextNode();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: ^Atest^A
+ // - Actual : ^Atest
+ // i.e. the end dummy character got deleted, but not the first one, which is inconsistent.
+ CPPUNIT_ASSERT_EQUAL(OUString("\x0001test\x0001"), pTextNode->GetText());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreDocTest, testCopyBookmarks)
+{
+ // Given a document with a bookmark in a header that is linked later:
+ createSwDoc("copy-bookmarks.docx");
+ SwDoc* pDoc = getSwDoc();
+
+ // When checking the # of non-copy bookmarks in the resulting doc model:
+ sal_Int32 nActual = 0;
+ for (auto it = pDoc->getIDocumentMarkAccess()->getBookmarksBegin();
+ it != pDoc->getIDocumentMarkAccess()->getBookmarksEnd(); ++it)
+ {
+ if ((*it)->GetName().indexOf("Copy") == -1)
+ {
+ ++nActual;
+ }
+ }
+
+ // Then make sure we have a single non-copy bookmark, with no duplications:
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 1
+ // - Actual : 2
+ // i.e. the 2nd header had a duplicated bookmark without "Copy" in its name.
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1), nActual);
+
+ // Also, when checking the # of non-copy images in the resulting doc model:
+ nActual = 0;
+ for (auto pSpz : *pDoc->GetSpzFrameFormats())
+ {
+ if (pSpz->GetName().indexOf("Copy") == -1)
+ {
+ ++nActual;
+ }
+ }
+
+ // Then make sure we have a single non-copy image, with no duplications:
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 1
+ // - Actual : 2
+ // i.e. the 2nd header had a duplicated image without "Copy" in its name.
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1), nActual);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreDocTest, testLinkedStyleDelete)
+{
+ // Given a document with linked styles: myparastyle is linked to mycharstyle and vica versa:
+ createSwDoc();
+ uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xParaStyle(
+ xFactory->createInstance("com.sun.star.style.ParagraphStyle"), uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xCharStyle(
+ xFactory->createInstance("com.sun.star.style.CharacterStyle"), uno::UNO_QUERY);
+ uno::Reference<container::XNameContainer> xParaStyles(getStyles("ParagraphStyles"),
+ uno::UNO_QUERY);
+ xParaStyles->insertByName("myparastyle", uno::Any(xParaStyle));
+ uno::Reference<container::XNameContainer> xCharStyles(getStyles("CharacterStyles"),
+ uno::UNO_QUERY);
+ xCharStyles->insertByName("mycharstyle", uno::Any(xCharStyle));
+ xParaStyle->setPropertyValue("LinkStyle", uno::Any(OUString("mycharstyle")));
+ xCharStyle->setPropertyValue("LinkStyle", uno::Any(OUString("myparastyle")));
+
+ // When deleting the paragraph style (and only that):
+ xParaStyles->removeByName("myparastyle");
+
+ // Then make sure we don't crash on save:
+ uno::Reference<frame::XStorable> xStorable(mxComponent, uno::UNO_QUERY);
+ uno::Sequence<beans::PropertyValue> aArgs = {
+ comphelper::makePropertyValue("FilterName", OUString("writer8")),
+ };
+ xStorable->storeAsURL(maTempFile.GetURL(), aArgs);
+}
+
+namespace
+{
+/// This selection listener calls getAnchor() on selection change, which creates UNO cursors and is
+/// invoked in the middle of a bookmark deletion.
+struct SelectionChangeListener : public cppu::WeakImplHelper<view::XSelectionChangeListener>
+{
+ uno::Reference<container::XNameAccess> m_xBookmarks;
+ std::vector<uno::Reference<text::XTextRange>> m_aAnchors;
+
+public:
+ SelectionChangeListener(const uno::Reference<container::XNameAccess>& xBookmarks);
+ // view::XSelectionChangeListener
+ void SAL_CALL selectionChanged(const lang::EventObject& rEvent) override;
+
+ // lang::XEventListener
+ void SAL_CALL disposing(const lang::EventObject& rSource) override;
+};
+}
+
+SelectionChangeListener::SelectionChangeListener(
+ const uno::Reference<container::XNameAccess>& xBookmarks)
+ : m_xBookmarks(xBookmarks)
+{
+}
+
+void SelectionChangeListener::selectionChanged(const lang::EventObject& /*rEvent*/)
+{
+ uno::Sequence<OUString> aElementNames = m_xBookmarks->getElementNames();
+ for (const auto& rName : aElementNames)
+ {
+ uno::Reference<text::XTextContent> xTextContent(m_xBookmarks->getByName(rName),
+ uno::UNO_QUERY);
+ m_aAnchors.push_back(xTextContent->getAnchor());
+ }
+}
+
+void SelectionChangeListener::disposing(const lang::EventObject& /*rSource*/) {}
+
+CPPUNIT_TEST_FIXTURE(SwCoreDocTest, testBookmarkDeleteListeners)
+{
+ // Given a document with 2 bookmarks:
+ createSwDoc();
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xTextDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ {
+ xText->insertString(xCursor, "test", /*bAbsorb=*/false);
+ xCursor->gotoStart(/*bExpand=*/false);
+ xCursor->gotoEnd(/*bExpand=*/true);
+ uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextContent> xBookmark(
+ xFactory->createInstance("com.sun.star.text.Bookmark"), uno::UNO_QUERY);
+ uno::Reference<container::XNamed> xBookmarkNamed(xBookmark, uno::UNO_QUERY);
+ xBookmarkNamed->setName("mybookmark");
+ xText->insertTextContent(xCursor, xBookmark, /*bAbsorb=*/true);
+ }
+ {
+ xCursor->gotoEnd(/*bExpand=*/false);
+ xText->insertString(xCursor, "test2", /*bAbsorb=*/false);
+ xCursor->goLeft(4, /*bExpand=*/true);
+ uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextContent> xBookmark(
+ xFactory->createInstance("com.sun.star.text.Bookmark"), uno::UNO_QUERY);
+ uno::Reference<container::XNamed> xBookmarkNamed(xBookmark, uno::UNO_QUERY);
+ xBookmarkNamed->setName("mybookmark2");
+ xText->insertTextContent(xCursor, xBookmark, /*bAbsorb=*/true);
+ }
+ uno::Reference<text::XBookmarksSupplier> xBookmarksSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XNameAccess> xBookmarks = xBookmarksSupplier->getBookmarks();
+
+ // When registering a selection listener that creates uno marks:
+ uno::Reference<frame::XModel> xModel(mxComponent, uno::UNO_QUERY);
+ uno::Reference<view::XSelectionSupplier> xController(xModel->getCurrentController(),
+ uno::UNO_QUERY);
+ xController->addSelectionChangeListener(new SelectionChangeListener(xBookmarks));
+
+ // Then make sure that deleting a bookmark doesn't crash:
+ uno::Reference<lang::XComponent> xBookmark(xBookmarks->getByName("mybookmark2"),
+ uno::UNO_QUERY);
+ // Without the accompanying fix in place, this test would have crashed, an invalidated iterator
+ // was used with erase().
+ xBookmark->dispose();
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreDocTest, testBookmarkDeleteRedline)
+{
+ // Given a document with redlines, a mark (annotation mark) inside a redline:
+ createSwDoc("bookmark-delete-redline.doc");
+ SwDoc* pDoc = getSwDoc();
+
+ // When hiding deletions / showing only inserts, make sure we don't crash:
+ // Without the accompanying fix in place, this test would have crashed, equal_range() was used
+ // on an unsorted container.
+ pDoc->getIDocumentRedlineAccess().SetRedlineFlags(RedlineFlags::ShowInsert);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreDocTest, testHeaderFooterDelete)
+{
+ // Given a document with bookmarks in header/footers:
+ // When importing that document:
+ // Then make sure that we don't crash:
+ // Without the accompanying fix in place, this test would have crashed, an invalidated iterator
+ // was used in sw::mark::MarkManager::deleteMarks().
+ createSwDoc("header-footer-delete.docx");
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreDocTest, testSplitFlyChain)
+{
+ // Given a document with 2 fly frames, first is allowed to split, second is not:
+ createSwDoc();
+ SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
+ SwFlyFrameAttrMgr aMgr(true, pWrtShell, Frmmgr_Type::TEXT, nullptr);
+ RndStdIds eAnchor = RndStdIds::FLY_AT_PARA;
+ aMgr.InsertFlyFrame(eAnchor, aMgr.GetPos(), aMgr.GetSize());
+ SwDoc* pDoc = getSwDoc();
+ auto& rFlys = *pDoc->GetSpzFrameFormats();
+ {
+ pWrtShell->StartAllAction();
+ auto pFly = rFlys[0];
+ SwAttrSet aSet(pFly->GetAttrSet());
+ aSet.Put(SwFormatFlySplit(true));
+ pDoc->SetAttr(aSet, *pFly);
+ pWrtShell->EndAllAction();
+ }
+ pWrtShell->UnSelectFrame();
+ pWrtShell->SttEndDoc(/*bStart=*/false);
+ aMgr.InsertFlyFrame(eAnchor, aMgr.GetPos(), aMgr.GetSize());
+ auto pFly = rFlys[0];
+ auto pFly2 = rFlys[1];
+
+ // When checking if chaining is allowed:
+ SwChainRet eActual = pDoc->Chainable(*pFly, *pFly2);
+ // Then make sure the source is rejected if it is a split fly:
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 5 (SwChainRet::SOURCE_CHAINED)
+ // - Actual : 0 (SwChainRet::OK)
+ // i.e. the UI allowed chaining for floating tables, which doesn't make sense.
+ CPPUNIT_ASSERT_EQUAL(SwChainRet::SOURCE_CHAINED, eActual);
+
+ // Also test the other way around, that should not be OK, either.
+ eActual = pDoc->Chainable(*pFly2, *pFly);
+ CPPUNIT_ASSERT_EQUAL(SwChainRet::IS_IN_CHAIN, eActual);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreDocTest, testSplitExpandGlossary)
+{
+ // Given a document with a split fly (2 pages) and a 'dt' at the end:
+ createSwDoc("floating-table-dummy-text.docx");
+ SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
+ pWrtShell->SttEndDoc(/*bStt=*/false);
+
+ // When expanding 'dt' to an actual dummy text:
+ dispatchCommand(mxComponent, ".uno:ExpandGlossary", {});
+
+ // Then make sure the 2 fly frames stay on the 2 pages:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage1);
+ CPPUNIT_ASSERT(pPage1->GetSortedObjs());
+ const SwSortedObjs& rPage1Objs = *pPage1->GetSortedObjs();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 1
+ // - Actual : 2
+ // i.e. both parts of the split fly chain were on page 1.
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage1Objs.size());
+ auto pPage2 = dynamic_cast<SwPageFrame*>(pPage1->GetNext());
+ CPPUNIT_ASSERT(pPage2);
+ CPPUNIT_ASSERT(pPage2->GetSortedObjs());
+ const SwSortedObjs& rPage2Objs = *pPage2->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage2Objs.size());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreDocTest, testSplitFlyInsertUndo)
+{
+ // Given a document with an inline table, which is then turned into a floating one:
+ createSwDoc();
+ SwDoc* pDoc = getSwDocShell()->GetDoc();
+ sw::FrameFormats<sw::SpzFrameFormat*>& rFlyFormats = *pDoc->GetSpzFrameFormats();
+ CPPUNIT_ASSERT(rFlyFormats.empty());
+ // Insert a table:
+ SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
+ SwInsertTableOptions aTableOptions(SwInsertTableFlags::DefaultBorder, 0);
+ pWrtShell->InsertTable(aTableOptions, /*nRows=*/2, /*nCols=*/1);
+ pWrtShell->MoveTable(GotoPrevTable, fnTableStart);
+ pWrtShell->GoPrevCell();
+ pWrtShell->Insert("A1");
+ pWrtShell->GoNextCell();
+ pWrtShell->Insert("A2");
+ // Select cell:
+ pWrtShell->SelAll();
+ // Select table:
+ pWrtShell->SelAll();
+ // Wrap the table in a text frame:
+ SwFlyFrameAttrMgr aMgr(true, pWrtShell, Frmmgr_Type::TEXT, nullptr);
+ pWrtShell->StartAllAction();
+ aMgr.InsertFlyFrame(RndStdIds::FLY_AT_PARA, aMgr.GetPos(), aMgr.GetSize());
+ pWrtShell->EndAllAction();
+ CPPUNIT_ASSERT(!rFlyFormats.empty());
+
+ // When undoing the conversion to floating table:
+ pDoc->GetUndoManager().Undo();
+
+ // Then make sure we don't have a frame anymore:
+ // Without the accompanying fix in place, this test would have failed, there was no undo action
+ // to execute.
+ CPPUNIT_ASSERT(rFlyFormats.empty());
+
+ // And when redoing the conversion:
+ pDoc->GetUndoManager().Redo();
+
+ // Then make sure we again have a frame:
+ CPPUNIT_ASSERT(!rFlyFormats.empty());
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/docnode/data/redline-ends-before-toc.docx b/sw/qa/core/docnode/data/redline-ends-before-toc.docx
new file mode 100644
index 0000000000..7696b3532e
--- /dev/null
+++ b/sw/qa/core/docnode/data/redline-ends-before-toc.docx
Binary files differ
diff --git a/sw/qa/core/docnode/data/tdf150086.docx b/sw/qa/core/docnode/data/tdf150086.docx
new file mode 100644
index 0000000000..063e68df68
--- /dev/null
+++ b/sw/qa/core/docnode/data/tdf150086.docx
Binary files differ
diff --git a/sw/qa/core/docnode/data/tdf156267.docx b/sw/qa/core/docnode/data/tdf156267.docx
new file mode 100644
index 0000000000..f782ed0c95
--- /dev/null
+++ b/sw/qa/core/docnode/data/tdf156267.docx
Binary files differ
diff --git a/sw/qa/core/docnode/docnode.cxx b/sw/qa/core/docnode/docnode.cxx
new file mode 100644
index 0000000000..9521c67b8e
--- /dev/null
+++ b/sw/qa/core/docnode/docnode.cxx
@@ -0,0 +1,71 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <swmodeltestbase.hxx>
+
+#include <IDocumentRedlineAccess.hxx>
+#include <redline.hxx>
+#include <doc.hxx>
+#include <docary.hxx>
+
+/// Covers sw/source/core/docnode/ fixes.
+class Test : public SwModelTestBase
+{
+public:
+ Test()
+ : SwModelTestBase("/sw/qa/core/docnode/data/")
+ {
+ }
+};
+
+CPPUNIT_TEST_FIXTURE(Test, testRedlineEndsBeforeToC)
+{
+ // Load a document where a delete redline ends right before a ToC, then redlines are hidden at a
+ // layout level.
+ createSwDoc("redline-ends-before-toc.docx");
+ SwDoc* pDoc = getSwDoc();
+ const SwRedlineTable& rTable = pDoc->getIDocumentRedlineAccess().GetRedlineTable();
+ // Without the accompanying fix in place, this test would have resulted in an assertion failure
+ // in InsertCnt_(), because the start of the section was hidden, but not its end.
+ CPPUNIT_ASSERT_EQUAL(static_cast<SwRedlineTable::size_type>(2), rTable.size());
+
+ // The redline contained the newline, too
+ CPPUNIT_ASSERT_EQUAL(OUString("<add-table-of-content>"), rTable[0]->GetText());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testTdf150086)
+{
+ // Load a document where an insert redline ends right before a ToC
+ createSwDoc("tdf150086.docx");
+ SwDoc* pDoc = getSwDoc();
+ const SwRedlineTable& rTable = pDoc->getIDocumentRedlineAccess().GetRedlineTable();
+ CPPUNIT_ASSERT_EQUAL(static_cast<SwRedlineTable::size_type>(8), rTable.size());
+
+ // This was "Conte" (stripped redline)
+ CPPUNIT_ASSERT_EQUAL(OUString("Content\n"), rTable[6]->GetText());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testTdf156267)
+{
+ createSwDoc("tdf156267.docx");
+ CPPUNIT_ASSERT_EQUAL(1, getPages());
+
+ dispatchCommand(mxComponent, ".uno:SelectAll", {});
+ dispatchCommand(mxComponent, ".uno:Copy", {});
+ dispatchCommand(mxComponent, ".uno:Paste", {});
+
+ // Without the fix in place, it would have crashed here
+ dispatchCommand(mxComponent, ".uno:Undo", {});
+
+ CPPUNIT_ASSERT_EQUAL(1, getPages());
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/draw/data/as-char-textbox.docx b/sw/qa/core/draw/data/as-char-textbox.docx
new file mode 100644
index 0000000000..3edf7c6322
--- /dev/null
+++ b/sw/qa/core/draw/data/as-char-textbox.docx
Binary files differ
diff --git a/sw/qa/core/draw/data/sdt-textbox-header.docx b/sw/qa/core/draw/data/sdt-textbox-header.docx
new file mode 100644
index 0000000000..a8b2d9625f
--- /dev/null
+++ b/sw/qa/core/draw/data/sdt-textbox-header.docx
Binary files differ
diff --git a/sw/qa/core/draw/data/tdf107727_FrameBorder.odt b/sw/qa/core/draw/data/tdf107727_FrameBorder.odt
new file mode 100644
index 0000000000..6b7bc3a375
--- /dev/null
+++ b/sw/qa/core/draw/data/tdf107727_FrameBorder.odt
Binary files differ
diff --git a/sw/qa/core/draw/data/textbox-undo-ordnum.docx b/sw/qa/core/draw/data/textbox-undo-ordnum.docx
new file mode 100644
index 0000000000..96b0097328
--- /dev/null
+++ b/sw/qa/core/draw/data/textbox-undo-ordnum.docx
Binary files differ
diff --git a/sw/qa/core/draw/draw.cxx b/sw/qa/core/draw/draw.cxx
new file mode 100644
index 0000000000..0cb50649a6
--- /dev/null
+++ b/sw/qa/core/draw/draw.cxx
@@ -0,0 +1,151 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <swmodeltestbase.hxx>
+
+#include <svx/svdpage.hxx>
+
+#include <IDocumentDrawModelAccess.hxx>
+#include <docsh.hxx>
+#include <drawdoc.hxx>
+#include <wrtsh.hxx>
+#include <frameformats.hxx>
+#include <textboxhelper.hxx>
+
+#include <com/sun/star/table/BorderLine2.hpp>
+#include <com/sun/star/text/XTextFramesSupplier.hpp>
+
+/// Covers sw/source/core/draw/ fixes.
+class SwCoreDrawTest : public SwModelTestBase
+{
+public:
+ SwCoreDrawTest()
+ : SwModelTestBase("/sw/qa/core/draw/data/")
+ {
+ }
+};
+
+CPPUNIT_TEST_FIXTURE(SwCoreDrawTest, testTextboxDeleteAsChar)
+{
+ // Load a document with an as-char shape in it that has a textbox and an image in it.
+ createSwDoc("as-char-textbox.docx");
+ SwDoc* pDoc = getSwDoc();
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ SdrPage* pPage = pDoc->getIDocumentDrawModelAccess().GetDrawModel()->GetPage(0);
+ sal_Int32 nActual = pPage->GetObjCount();
+ // 3 objects on the draw page: a shape + fly frame pair and a Writer image.
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(3), nActual);
+
+ // Select the shape of the textbox and delete it.
+ SdrObject* pObject = pPage->GetObj(0);
+ pWrtShell->SelectObj(Point(), 0, pObject);
+ pWrtShell->DelSelectedObj();
+ nActual = pPage->GetObjCount();
+
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 0
+ // - Actual : 2
+ // i.e. the fly frame of the shape and the inner Writer image was not deleted.
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), nActual);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreDrawTest, testTextboxUndoOrdNum)
+{
+ // Given a document with 5 frame formats:
+ // - picture
+ // - draw format + fly format and a picture in it
+ // - picture
+ createSwDoc("textbox-undo-ordnum.docx");
+ SwDoc* pDoc = getSwDoc();
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ const auto& rFormats = *pDoc->GetSpzFrameFormats();
+ // Test the state before del + undo.
+ for (const auto& pFormat : rFormats)
+ {
+ const SwFrameFormat* pFlyFormat
+ = SwTextBoxHelper::getOtherTextBoxFormat(pFormat, RES_DRAWFRMFMT);
+ if (!pFlyFormat)
+ {
+ continue;
+ }
+
+ sal_Int32 nDrawOrdNum = pFormat->FindRealSdrObject()->GetOrdNum();
+ sal_Int32 nFlyOrdNum = pFlyFormat->FindRealSdrObject()->GetOrdNum();
+ CPPUNIT_ASSERT_EQUAL(nDrawOrdNum + 1, nFlyOrdNum);
+ }
+
+ // When selecting the first page, deleting the selection and undoing:
+ pWrtShell->Down(true, 3);
+ pWrtShell->DelLeft();
+ pWrtShell->Undo();
+
+ // Then the z-order of the fly format should be still the z-order of the draw format + 1, when
+ // the fly and draw formats form a textbox pair.
+ for (const auto& pFormat : rFormats)
+ {
+ const SwFrameFormat* pFlyFormat
+ = SwTextBoxHelper::getOtherTextBoxFormat(pFormat, RES_DRAWFRMFMT);
+ if (!pFlyFormat)
+ {
+ continue;
+ }
+
+ sal_Int32 nDrawOrdNum = pFormat->FindRealSdrObject()->GetOrdNum();
+ sal_Int32 nFlyOrdNum = pFlyFormat->FindRealSdrObject()->GetOrdNum();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 4
+ // - Actual : 2
+ // i.e. the fly format was behind the draw format, not visible.
+ CPPUNIT_ASSERT_EQUAL(nDrawOrdNum + 1, nFlyOrdNum);
+ }
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreDrawTest, testTdf107727FrameBorder)
+{
+ // Load a document with a textframe without border, one with only left border
+ createSwDoc("tdf107727_FrameBorder.odt");
+
+ // Export to RTF and reload
+ saveAndReload("Rich Text Format");
+
+ // Get frame without border and inspect it.
+ uno::Reference<text::XTextFramesSupplier> xTextFramesSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xIndexAccess(xTextFramesSupplier->getTextFrames(),
+ uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xFrame0(xIndexAccess->getByIndex(0), uno::UNO_QUERY);
+ auto aBorder = getProperty<table::BorderLine2>(xFrame0, "LeftBorder");
+ // fo:border="none" is not available via API, and aBorder.LineWidth has wrong value (why?).
+ sal_uInt32 nBorderWidth
+ = aBorder.OuterLineWidth + aBorder.InnerLineWidth + aBorder.LineDistance;
+ // Without patch it failed with Expected 0, Actual 26
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt32>(0), nBorderWidth);
+
+ // Get frame with left border and inspect it.
+ uno::Reference<beans::XPropertySet> xFrame1(xIndexAccess->getByIndex(1), uno::UNO_QUERY);
+ aBorder = getProperty<table::BorderLine2>(xFrame1, "LeftBorder");
+ // Without patch it failed with Expected 127, Actual 26. Default border width was used.
+ nBorderWidth = aBorder.OuterLineWidth + aBorder.InnerLineWidth + aBorder.LineDistance;
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt32>(127), nBorderWidth);
+ // Without patch it failed with Expected Color: R:0 G:0 B:255 A:0, Actual Color: R:0 G:0 B:0 A:0.
+ // Default border color was used.
+ CPPUNIT_ASSERT_EQUAL(Color(0x0000ff), Color(ColorTransparency, aBorder.Color));
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreDrawTest, testSdtTextboxHeader)
+{
+ // Given a 2 page document, same header on both pages, content control in the header and
+ // shape+fly pair (textbox) anchored in the same header
+ // When loading that document, then make sure that layout doesn't fail with an assertion because
+ // the "master SdrObj should have the highest index" invariant doesn't hold:
+ createSwDoc("sdt-textbox-header.docx");
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/edit/data/redline-hidden.fodt b/sw/qa/core/edit/data/redline-hidden.fodt
new file mode 100644
index 0000000000..10355e3ac4
--- /dev/null
+++ b/sw/qa/core/edit/data/redline-hidden.fodt
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<office:document xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:settings>
+ <config:config-item-set config:name="ooo:view-settings">
+ <config:config-item config:name="ShowRedlineChanges" config:type="boolean">false</config:config-item>
+ </config:config-item-set>
+ </office:settings>
+ <office:automatic-styles>
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm"/>
+ </style:page-layout>
+ </office:automatic-styles>
+ <office:master-styles>
+ <style:master-page style:name="Standard" style:page-layout-name="pm1">
+ </style:master-page>
+ </office:master-styles>
+ <office:body>
+ <office:text>
+ <text:tracked-changes text:track-changes="false">
+ <text:changed-region xml:id="ct51730224" text:id="ct51730224">
+ <text:insertion>
+ <office:change-info>
+ <dc:creator>Creator</dc:creator>
+ <dc:date>2017-04-27T17:12:10</dc:date>
+ </office:change-info>
+ </text:insertion>
+ </text:changed-region>
+ </text:tracked-changes>
+ <text:p><text:change-start text:change-id="ct51730224"/>test<text:change-end text:change-id="ct51730224"/></text:p>
+ </office:text>
+ </office:body>
+</office:document>
diff --git a/sw/qa/core/edit/edit.cxx b/sw/qa/core/edit/edit.cxx
new file mode 100644
index 0000000000..444887fbb0
--- /dev/null
+++ b/sw/qa/core/edit/edit.cxx
@@ -0,0 +1,61 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <swmodeltestbase.hxx>
+
+#include <docsh.hxx>
+#include <view.hxx>
+#include <wrtsh.hxx>
+#include <unotxdoc.hxx>
+
+namespace
+{
+/// Covers sw/source/core/edit/ fixes.
+class Test : public SwModelTestBase
+{
+public:
+ Test()
+ : SwModelTestBase("/sw/qa/core/edit/data/")
+ {
+ }
+};
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testRedlineHidden)
+{
+ // Given a document with ShowRedlineChanges=false:
+ createSwDoc("redline-hidden.fodt");
+ SwDoc* pDoc = getSwDoc();
+
+ // When formatting a paragraph by setting the para adjust to center, then make sure setting the
+ // new item set on the paragraph doesn't crash:
+ SwView* pView = pDoc->GetDocShell()->GetView();
+ SfxItemSet aSet(pView->GetPool(), svl::Items<RES_PARATR_ADJUST, RES_PARATR_ADJUST>);
+ SvxAdjustItem aItem(SvxAdjust::Center, RES_PARATR_ADJUST);
+ aSet.Put(aItem);
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ pWrtShell->SetAttrSet(aSet, SetAttrMode::DEFAULT, nullptr, true);
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testAutocorrect)
+{
+ // Given an empty document:
+ createSwDoc();
+
+ // When typing a string, which contains a "-", then make sure no memory corruption happens when
+ // it gets auto-corrected to "–":
+ auto pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ // Without the accompanying fix in place, this test would have failed with a
+ // heap-use-after-free:
+ emulateTyping(*pTextDoc, u"But not now - with ");
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/sw/qa/core/exportdata/html/fail/.gitignore b/sw/qa/core/exportdata/html/fail/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sw/qa/core/exportdata/html/fail/.gitignore
diff --git a/sw/qa/core/exportdata/html/indeterminate/.gitignore b/sw/qa/core/exportdata/html/indeterminate/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sw/qa/core/exportdata/html/indeterminate/.gitignore
diff --git a/sw/qa/core/exportdata/html/pass/cp1000068.odt b/sw/qa/core/exportdata/html/pass/cp1000068.odt
new file mode 100644
index 0000000000..8ae4ad525b
--- /dev/null
+++ b/sw/qa/core/exportdata/html/pass/cp1000068.odt
Binary files differ
diff --git a/sw/qa/core/exportdata/ooxml/fail/.gitignore b/sw/qa/core/exportdata/ooxml/fail/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sw/qa/core/exportdata/ooxml/fail/.gitignore
diff --git a/sw/qa/core/exportdata/ooxml/indeterminate/.gitignore b/sw/qa/core/exportdata/ooxml/indeterminate/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sw/qa/core/exportdata/ooxml/indeterminate/.gitignore
diff --git a/sw/qa/core/exportdata/ooxml/pass/abi9930.odt b/sw/qa/core/exportdata/ooxml/pass/abi9930.odt
new file mode 100644
index 0000000000..04638df035
--- /dev/null
+++ b/sw/qa/core/exportdata/ooxml/pass/abi9930.odt
Binary files differ
diff --git a/sw/qa/core/exportdata/ooxml/pass/sdt-around-float-table.docx b/sw/qa/core/exportdata/ooxml/pass/sdt-around-float-table.docx
new file mode 100644
index 0000000000..1d57e7b858
--- /dev/null
+++ b/sw/qa/core/exportdata/ooxml/pass/sdt-around-float-table.docx
Binary files differ
diff --git a/sw/qa/core/exportdata/ooxml/pass/sdt-before-table.docx b/sw/qa/core/exportdata/ooxml/pass/sdt-before-table.docx
new file mode 100644
index 0000000000..da51cc798c
--- /dev/null
+++ b/sw/qa/core/exportdata/ooxml/pass/sdt-before-table.docx
Binary files differ
diff --git a/sw/qa/core/exportdata/ooxml/pass/sdt-in-shape-with-textbox.docx b/sw/qa/core/exportdata/ooxml/pass/sdt-in-shape-with-textbox.docx
new file mode 100644
index 0000000000..be033f1566
--- /dev/null
+++ b/sw/qa/core/exportdata/ooxml/pass/sdt-in-shape-with-textbox.docx
Binary files differ
diff --git a/sw/qa/core/exportdata/ooxml/pass/sdt-sectpr.docx b/sw/qa/core/exportdata/ooxml/pass/sdt-sectpr.docx
new file mode 100644
index 0000000000..334b6e5950
--- /dev/null
+++ b/sw/qa/core/exportdata/ooxml/pass/sdt-sectpr.docx
Binary files differ
diff --git a/sw/qa/core/exportdata/ooxml/pass/tdf135711.odt b/sw/qa/core/exportdata/ooxml/pass/tdf135711.odt
new file mode 100644
index 0000000000..7110ce2909
--- /dev/null
+++ b/sw/qa/core/exportdata/ooxml/pass/tdf135711.odt
Binary files differ
diff --git a/sw/qa/core/exportdata/ooxml/pass/tdf89191-1.odt b/sw/qa/core/exportdata/ooxml/pass/tdf89191-1.odt
new file mode 100644
index 0000000000..7ca047dccd
--- /dev/null
+++ b/sw/qa/core/exportdata/ooxml/pass/tdf89191-1.odt
Binary files differ
diff --git a/sw/qa/core/exportdata/ooxml/pass/textframe-in-shape.docx b/sw/qa/core/exportdata/ooxml/pass/textframe-in-shape.docx
new file mode 100644
index 0000000000..23f40f14cb
--- /dev/null
+++ b/sw/qa/core/exportdata/ooxml/pass/textframe-in-shape.docx
Binary files differ
diff --git a/sw/qa/core/exportdata/rtf/fail/.gitignore b/sw/qa/core/exportdata/rtf/fail/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sw/qa/core/exportdata/rtf/fail/.gitignore
diff --git a/sw/qa/core/exportdata/rtf/indeterminate/.gitignore b/sw/qa/core/exportdata/rtf/indeterminate/.gitignore
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sw/qa/core/exportdata/rtf/indeterminate/.gitignore
diff --git a/sw/qa/core/exportdata/rtf/pass/abi10201.rtf b/sw/qa/core/exportdata/rtf/pass/abi10201.rtf
new file mode 100644
index 0000000000..08cbe0cfe7
--- /dev/null
+++ b/sw/qa/core/exportdata/rtf/pass/abi10201.rtf
@@ -0,0 +1,3 @@
+{\rtf1
+{\*\do\dobxpage\dobypara\dodhgt8192\dptxbx\dptxbxmar0\dpx2914\dpy5119\dpxsize6474\dpysize221\dplinehollow0}
+}
diff --git a/sw/qa/core/exportdata/rtf/pass/abi7407.odt b/sw/qa/core/exportdata/rtf/pass/abi7407.odt
new file mode 100644
index 0000000000..70bf677560
--- /dev/null
+++ b/sw/qa/core/exportdata/rtf/pass/abi7407.odt
Binary files differ
diff --git a/sw/qa/core/exportdata/rtf/pass/fdo67386.doc b/sw/qa/core/exportdata/rtf/pass/fdo67386.doc
new file mode 100644
index 0000000000..ecd3d13af2
--- /dev/null
+++ b/sw/qa/core/exportdata/rtf/pass/fdo67386.doc
Binary files differ
diff --git a/sw/qa/core/exportdata/rtf/pass/fdo70624.odt b/sw/qa/core/exportdata/rtf/pass/fdo70624.odt
new file mode 100644
index 0000000000..1b177e8199
--- /dev/null
+++ b/sw/qa/core/exportdata/rtf/pass/fdo70624.odt
Binary files differ
diff --git a/sw/qa/core/exportdata/rtf/pass/i23357.odt b/sw/qa/core/exportdata/rtf/pass/i23357.odt
new file mode 100644
index 0000000000..79705fc35c
--- /dev/null
+++ b/sw/qa/core/exportdata/rtf/pass/i23357.odt
Binary files differ
diff --git a/sw/qa/core/fields/data/chapter_field_followedby.odt b/sw/qa/core/fields/data/chapter_field_followedby.odt
new file mode 100644
index 0000000000..b2086f2591
--- /dev/null
+++ b/sw/qa/core/fields/data/chapter_field_followedby.odt
Binary files differ
diff --git a/sw/qa/core/fields/data/styleref-flags.docx b/sw/qa/core/fields/data/styleref-flags.docx
new file mode 100644
index 0000000000..443624a575
--- /dev/null
+++ b/sw/qa/core/fields/data/styleref-flags.docx
Binary files differ
diff --git a/sw/qa/core/fields/data/styleref.odt b/sw/qa/core/fields/data/styleref.odt
new file mode 100644
index 0000000000..27af5aae1f
--- /dev/null
+++ b/sw/qa/core/fields/data/styleref.odt
Binary files differ
diff --git a/sw/qa/core/fields/data/suppress-non-numerical.docx b/sw/qa/core/fields/data/suppress-non-numerical.docx
new file mode 100644
index 0000000000..439e048b9f
--- /dev/null
+++ b/sw/qa/core/fields/data/suppress-non-numerical.docx
Binary files differ
diff --git a/sw/qa/core/fields/data/tdf143424.odt b/sw/qa/core/fields/data/tdf143424.odt
new file mode 100644
index 0000000000..d485267f12
--- /dev/null
+++ b/sw/qa/core/fields/data/tdf143424.odt
Binary files differ
diff --git a/sw/qa/core/fields/data/tdf86790.docx b/sw/qa/core/fields/data/tdf86790.docx
new file mode 100644
index 0000000000..a45c03f6b8
--- /dev/null
+++ b/sw/qa/core/fields/data/tdf86790.docx
Binary files differ
diff --git a/sw/qa/core/fields/fields.cxx b/sw/qa/core/fields/fields.cxx
new file mode 100644
index 0000000000..b783dc0cf3
--- /dev/null
+++ b/sw/qa/core/fields/fields.cxx
@@ -0,0 +1,484 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <com/sun/star/text/XParagraphCursor.hpp>
+#include <reffld.hxx>
+#include <com/sun/star/beans/PropertyValue.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/container/XIndexAccess.hpp>
+#include <com/sun/star/text/ControlCharacter.hpp>
+#include <com/sun/star/text/ReferenceFieldPart.hpp>
+#include <com/sun/star/text/ReferenceFieldSource.hpp>
+#include <com/sun/star/text/XFootnote.hpp>
+#include <com/sun/star/text/XFootnotesSupplier.hpp>
+#include <com/sun/star/text/XSimpleText.hpp>
+#include <com/sun/star/text/XTextField.hpp>
+#include <com/sun/star/text/XTextRange.hpp>
+#include <com/sun/star/text/XPageCursor.hpp>
+#include <com/sun/star/beans/XPropertySetInfo.hpp>
+#include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
+#include <com/sun/star/text/XText.hpp>
+#include <com/sun/star/container/XNameContainer.hpp>
+#include <com/sun/star/text/XTextCursor.hpp>
+#include <com/sun/star/uno/Any.h>
+#include <com/sun/star/uno/Reference.h>
+#include <com/sun/star/uno/Sequence.h>
+#include <cppunit/TestAssert.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <rtl/ustring.hxx>
+#include <sal/types.h>
+#include <swmodeltestbase.hxx>
+
+#include <com/sun/star/text/XTextDocument.hpp>
+#include <com/sun/star/text/XTextFieldsSupplier.hpp>
+#include <comphelper/propertyvalue.hxx>
+
+#include <authfld.hxx>
+#include <docsh.hxx>
+#include <rootfrm.hxx>
+#include <wrtsh.hxx>
+
+namespace
+{
+/// Covers sw/source/core/fields/ fixes.
+class Test : public SwModelTestBase
+{
+public:
+ Test()
+ : SwModelTestBase("/sw/qa/core/fields/data/")
+ {
+ }
+};
+
+CPPUNIT_TEST_FIXTURE(Test, testAuthorityTooltip)
+{
+ // Create a document with a bibliography reference in it.
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xField(
+ xFactory->createInstance("com.sun.star.text.TextField.Bibliography"), uno::UNO_QUERY);
+ uno::Sequence<beans::PropertyValue> aFields = {
+ comphelper::makePropertyValue("Identifier", OUString("ARJ00")),
+ comphelper::makePropertyValue("Author", OUString("Ar, J")),
+ comphelper::makePropertyValue("Title", OUString("mytitle")),
+ comphelper::makePropertyValue("Year", OUString("2020")),
+ };
+ xField->setPropertyValue("Fields", uno::Any(aFields));
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xTextDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ uno::Reference<text::XTextContent> xContent(xField, uno::UNO_QUERY);
+ xText->insertTextContent(xCursor, xContent, /*bAbsorb=*/false);
+
+ // Get the tooltip of the field.
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ pWrtShell->Left(SwCursorSkipMode::Chars, /*bSelect=*/false, 1, /*bBasicCall=*/false);
+ SwPaM* pCursor = pWrtShell->GetCursor();
+ auto pField = dynamic_cast<SwAuthorityField*>(
+ SwCursorShell::GetFieldAtCursor(pCursor, /*bIncludeInputFieldAtStart=*/true));
+ CPPUNIT_ASSERT(pField);
+ const SwRootFrame* pLayout = pWrtShell->GetLayout();
+ OUString aTooltip = pField->GetAuthority(pLayout);
+
+ // Without the accompanying fix in place, generating this tooltip text was not possible without
+ // first inserting an empty bibliography table into the document.
+ CPPUNIT_ASSERT_EQUAL(OUString("ARJ00: Ar, J, mytitle, 2020"), aTooltip);
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testTdf143424)
+{
+ createSwDoc("tdf143424.odt");
+
+ uno::Reference<text::XTextFieldsSupplier> xTextFieldsSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XEnumerationAccess> xFieldsAccess(
+ xTextFieldsSupplier->getTextFields());
+ uno::Reference<container::XEnumeration> xFields(xFieldsAccess->createEnumeration());
+
+ // TODO: I have no idea why fields are enumerated in invalid order, not like in document
+
+ // Field: Chapter Format: Chapter name
+ uno::Reference<text::XTextField> xField(xFields->nextElement(), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(OUString("Another title"), xField->getPresentation(false));
+
+ // Field: Chapter Format: Chapter number and name
+ xField.set(xFields->nextElement(), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(OUString("Chapter 2 - Another title"), xField->getPresentation(false));
+
+ // Field: Chapter Format: Chapter number
+ xField.set(xFields->nextElement(), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(OUString("Chapter 2 -"), xField->getPresentation(false));
+
+ // Field: Chapter Format: Chapter number without separator
+ xField.set(xFields->nextElement(), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(OUString("2"), xField->getPresentation(false));
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testChapterFieldsFollowedBy)
+{
+ createSwDoc("chapter_field_followedby.odt");
+
+ uno::Reference<text::XTextFieldsSupplier> xTextFieldsSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XEnumerationAccess> xFieldsAccess(
+ xTextFieldsSupplier->getTextFields());
+ uno::Reference<container::XEnumeration> xFields(xFieldsAccess->createEnumeration());
+
+ // TODO: I have no idea why fields are enumerated in invalid order, not like in document
+ std::vector<OUString> aFieldValues = {
+ "Followed by tab", // #1
+ "I.I.I.I", // #16
+ ">I.I.I.I< Followed by newline", // #15 Linefeed is replaced by space
+ ">I.I.I.I<", // #14
+ "Followed by newline", // #13
+ "I.I.I", // #12
+ ">I.I.I<Followed by nothing", // #11 Nothing between text & outline
+ ">I.I.I<", // #10
+ "Followed by nothing", // #9
+ "I.I", // #8
+ ">I.I< Followed by space", // #7 Space as is
+ ">I.I<", // #6
+ "Followed by space", // #5
+ "I", // #4
+ ">I< Followed by tab", // #3 Here is a tab, but replaced by space in field
+ ">I<", // #2
+ };
+
+ for (const auto& sValue : aFieldValues)
+ {
+ CPPUNIT_ASSERT(xFields->hasMoreElements());
+ uno::Reference<text::XTextField> xField(xFields->nextElement(), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sValue, xField->getPresentation(false));
+ }
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testTdf86790)
+{
+ loadFromFile(u"tdf86790.docx");
+
+ uno::Reference<text::XTextFieldsSupplier> xTextFieldsSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XEnumerationAccess> xFieldsAccess(
+ xTextFieldsSupplier->getTextFields());
+ uno::Reference<container::XEnumeration> xFields(xFieldsAccess->createEnumeration());
+
+ // Similarly to testChapterFieldsFollowedBy, the fields are enumerated with #1 first and everything else in reverse order
+ std::vector<std::pair<OUString, OUString>> aFieldValues = {
+ { " Heading 1", "1" }, // #1
+ { " foobar", "22.2" }, // #5
+ { " foobar", "4" }, // #4
+ { " Heading 2", "1.1" }, // #3
+ { " Heading 2", "1.1" }, // #2
+ };
+
+ for (const auto& sValue : aFieldValues)
+ {
+ CPPUNIT_ASSERT(xFields->hasMoreElements());
+ uno::Reference<text::XTextField> xField(xFields->nextElement(), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sValue.first, xField->getPresentation(true));
+ CPPUNIT_ASSERT_EQUAL(sValue.second, xField->getPresentation(false));
+ }
+ CPPUNIT_ASSERT(!xFields->hasMoreElements());
+}
+
+void InsertParagraphBreak(const uno::Reference<text::XTextCursor>& xCursor)
+{
+ uno::Reference<text::XText> xText = xCursor->getText();
+ xText->insertControlCharacter(xCursor, text::ControlCharacter::PARAGRAPH_BREAK, false);
+}
+void InsertHeading(const uno::Reference<text::XTextCursor>& xCursor, const OUString& content)
+{
+ uno::Reference<beans::XPropertySet> xCursorPropertySet(xCursor, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xCursor->getText();
+
+ xCursorPropertySet->setPropertyValue("ParaStyleName", uno::Any(OUString("Heading 1")));
+ xText->insertString(xCursor, content, false);
+ InsertParagraphBreak(xCursor);
+}
+
+/// If there is referenced text both above and below, STYLEREF searches up
+CPPUNIT_TEST_FIXTURE(Test, testStyleRefSearchUp)
+{
+ // Arrange
+ // Create a document with headings both above and below a cursor
+ createSwDoc();
+
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xTextDocument->getText();
+
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+
+ InsertHeading(xCursor, "Heading far above field");
+ InsertHeading(xCursor, "Heading above field");
+ InsertParagraphBreak(xCursor);
+ InsertHeading(xCursor, "Heading below field");
+ InsertHeading(xCursor, "Heading far below field");
+
+ uno::Reference<text::XParagraphCursor> xParagraphCursor(xCursor, uno::UNO_QUERY);
+ xParagraphCursor->gotoPreviousParagraph(false); // Heading far below...
+ xParagraphCursor->gotoPreviousParagraph(false); // Heading below...
+ xParagraphCursor->gotoPreviousParagraph(false); // Blank space
+
+ // Act
+ // Insert a STYLEREF field which looks for "Heading 1"s
+ uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextField> xField(
+ xFactory->createInstance("com.sun.star.text.TextField.GetReference"), uno::UNO_QUERY);
+
+ uno::Reference<beans::XPropertySet> xFieldPropertySet(xField, uno::UNO_QUERY);
+ xFieldPropertySet->setPropertyValue("ReferenceFieldSource",
+ uno::Any(sal_Int16(text::ReferenceFieldSource::STYLE)));
+ xFieldPropertySet->setPropertyValue("ReferenceFieldPart",
+ uno::Any(sal_Int16(text::ReferenceFieldPart::TEXT)));
+ xFieldPropertySet->setPropertyValue("SourceName", uno::Any(OUString("Heading 1")));
+
+ xField->attach(xCursor);
+
+ // Assert
+ // Make sure the field has the right text
+ CPPUNIT_ASSERT_EQUAL(OUString("Heading above field"), xField->getPresentation(false));
+}
+
+/// If there is referenced text only below, STYLEREF searches down
+CPPUNIT_TEST_FIXTURE(Test, testStyleRefSearchDown)
+{
+ // Arrange
+ // Create a document with headings below a cursor
+ createSwDoc();
+
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xTextDocument->getText();
+
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+
+ InsertParagraphBreak(xCursor);
+ InsertHeading(xCursor, "Heading below field");
+ InsertHeading(xCursor, "Heading far below field");
+
+ uno::Reference<text::XParagraphCursor> xParagraphCursor(xCursor, uno::UNO_QUERY);
+ xParagraphCursor->gotoPreviousParagraph(false); // Heading far below...
+ xParagraphCursor->gotoPreviousParagraph(false); // Heading below...
+ xParagraphCursor->gotoPreviousParagraph(false); // Blank space
+
+ // Act
+ // Insert a STYLEREF field which looks for "Heading 1"s
+ uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextField> xField(
+ xFactory->createInstance("com.sun.star.text.TextField.GetReference"), uno::UNO_QUERY);
+
+ uno::Reference<beans::XPropertySet> xFieldPropertySet(xField, uno::UNO_QUERY);
+ xFieldPropertySet->setPropertyValue("ReferenceFieldSource",
+ uno::Any(sal_Int16(text::ReferenceFieldSource::STYLE)));
+ xFieldPropertySet->setPropertyValue("ReferenceFieldPart",
+ uno::Any(sal_Int16(text::ReferenceFieldPart::TEXT)));
+ xFieldPropertySet->setPropertyValue("SourceName", uno::Any(OUString("Heading 1")));
+
+ xField->attach(xCursor);
+
+ // Assert
+ // Make sure the field has the right text
+ CPPUNIT_ASSERT_EQUAL(OUString("Heading below field"), xField->getPresentation(false));
+}
+
+/// STYLEREFs in marginals (headers or footers) should search in the page they are on first, regardless if there is anything above them
+CPPUNIT_TEST_FIXTURE(Test, testMarginalStyleRef)
+{
+ // Arrange
+ // Create a document with 2 headings
+ createSwDoc();
+
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xTextDocument->getText();
+
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+
+ InsertHeading(xCursor, "Top heading on page");
+ InsertHeading(xCursor, "Bottom heading on page");
+
+ // Act
+ // Insert a STYLEREF field which looks for "Heading 1"s into the footer
+ uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextField> xField(
+ xFactory->createInstance("com.sun.star.text.TextField.GetReference"), uno::UNO_QUERY);
+
+ uno::Reference<style::XStyleFamiliesSupplier> xStyleFamiliesSupplier(mxComponent,
+ uno::UNO_QUERY);
+ uno::Reference<container::XNameContainer> xParagraphStylesContainer(
+ xStyleFamiliesSupplier->getStyleFamilies()->getByName("PageStyles"), uno::UNO_QUERY);
+
+ uno::Reference<beans::XPropertySet> xPagePropertySet(
+ xParagraphStylesContainer->getByName("Standard"), uno::UNO_QUERY);
+
+ xPagePropertySet->setPropertyValue("FooterIsOn", uno::Any(true));
+ uno::Reference<text::XText> xFooterText(xPagePropertySet->getPropertyValue("FooterText"),
+ uno::UNO_QUERY);
+
+ uno::Reference<beans::XPropertySet> xFieldPropertySet(xField, uno::UNO_QUERY);
+ xFieldPropertySet->setPropertyValue("ReferenceFieldSource",
+ uno::Any(sal_Int16(text::ReferenceFieldSource::STYLE)));
+ xFieldPropertySet->setPropertyValue("ReferenceFieldPart",
+ uno::Any(sal_Int16(text::ReferenceFieldPart::TEXT)));
+ xFieldPropertySet->setPropertyValue("SourceName", uno::Any(OUString("Heading 1")));
+
+ uno::Reference<text::XTextRange> xFooterCursor = xFooterText->createTextCursor();
+ xField->attach(xFooterCursor);
+
+ // Assert
+ // Make sure the field has the right text
+ CPPUNIT_ASSERT_EQUAL(OUString("Top heading on page"), xField->getPresentation(false));
+}
+
+/// STYLEREFs in footnotes should search from the point of the reference mark
+CPPUNIT_TEST_FIXTURE(Test, testFootnoteStyleRef)
+{
+ // Arrange
+ // Create a document with headings both above and below a cursor
+ createSwDoc();
+
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xTextDocument->getText();
+
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+
+ InsertHeading(xCursor, "Heading far above reference mark");
+ InsertHeading(xCursor, "Heading above reference mark");
+ InsertParagraphBreak(xCursor);
+ InsertHeading(xCursor, "Heading below reference mark");
+ InsertHeading(xCursor, "Heading far below reference mark");
+
+ uno::Reference<text::XParagraphCursor> xParagraphCursor(xCursor, uno::UNO_QUERY);
+ xParagraphCursor->gotoPreviousParagraph(false); // Heading far below...
+ xParagraphCursor->gotoPreviousParagraph(false); // Heading below...
+ xParagraphCursor->gotoPreviousParagraph(false); // Blank space
+
+ // Act
+ // Insert a STYLEREF field which looks for "Heading 1"s into a footnote
+ uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+
+ uno::Reference<text::XFootnote> xFootnote(
+ xFactory->createInstance("com.sun.star.text.Footnote"), uno::UNO_QUERY);
+ xFootnote->setLabel("Style reference mark");
+ xText->insertTextContent(xCursor, xFootnote, false);
+
+ uno::Reference<text::XTextField> xField(
+ xFactory->createInstance("com.sun.star.text.TextField.GetReference"), uno::UNO_QUERY);
+
+ uno::Reference<beans::XPropertySet> xFieldPropertySet(xField, uno::UNO_QUERY);
+ xFieldPropertySet->setPropertyValue("ReferenceFieldSource",
+ uno::Any(sal_Int16(text::ReferenceFieldSource::STYLE)));
+ xFieldPropertySet->setPropertyValue("ReferenceFieldPart",
+ uno::Any(sal_Int16(text::ReferenceFieldPart::TEXT)));
+ xFieldPropertySet->setPropertyValue("SourceName", uno::Any(OUString("Heading 1")));
+
+ uno::Reference<text::XSimpleText> xFootnoteText(xFootnote, uno::UNO_QUERY);
+ uno::Reference<text::XTextRange> xFootnoteCursor = xFootnoteText->createTextCursor();
+ xField->attach(xFootnoteCursor);
+
+ // Assert
+ // Make sure the field has the right text
+ CPPUNIT_ASSERT_EQUAL(OUString("Heading above reference mark"), xField->getPresentation(false));
+}
+
+/// STYLEREFs with the REFFLDFLAG_HIDE_NON_NUMERICAL flag should hide all characters that are not numerical or delimiters
+CPPUNIT_TEST_FIXTURE(Test, testNumericalStyleRef)
+{
+ loadFromFile(u"suppress-non-numerical.docx");
+
+ uno::Reference<text::XTextFieldsSupplier> xTextFieldsSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XEnumerationAccess> xFieldsAccess(
+ xTextFieldsSupplier->getTextFields());
+ uno::Reference<container::XEnumeration> xFields(xFieldsAccess->createEnumeration());
+
+ // Similarly to testChapterFieldsFollowedBy, the fields are enumerated with #1 first and everything else in reverse order
+ std::vector<std::pair<OUString, OUString>> aFieldValues = {
+ { " Heading 1", "3" }, // #1
+ { " Heading 2", ".2\\@123^&~|a....." }, // #4
+ { " Heading 2", ".2\\|a....." }, // #3
+ { " Heading 1", "Chapter 3.!" }, // #2
+ };
+
+ for (const auto& sValue : aFieldValues)
+ {
+ CPPUNIT_ASSERT(xFields->hasMoreElements());
+ uno::Reference<text::XTextField> xField(xFields->nextElement(), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sValue.first, xField->getPresentation(true));
+ CPPUNIT_ASSERT_EQUAL(sValue.second, xField->getPresentation(false));
+ }
+ CPPUNIT_ASSERT(!xFields->hasMoreElements());
+}
+
+/// We should be able to import these flags from OOXML documents
+/// (Note: in Word, STYLEREF 'search bottom up' flag does nothing unless it's in a marginal, we place no such limitation but
+/// this docx only has such stylerefs to avoid confusion)
+CPPUNIT_TEST_FIXTURE(Test, testOOXMLStyleRefFlags)
+{
+ loadFromFile(u"styleref-flags.docx");
+
+ uno::Reference<text::XTextFieldsSupplier> xTextFieldsSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XEnumerationAccess> xFieldsAccess(
+ xTextFieldsSupplier->getTextFields());
+ uno::Reference<container::XEnumeration> xFields(xFieldsAccess->createEnumeration());
+
+ // Similarly to testChapterFieldsFollowedBy, the fields are enumerated with #1 first and everything else in reverse order
+ std::vector<std::pair<OUString, OUString>> aFieldValues = {
+ { " Heading 2", "2.1" }, // #1
+ { " Heading 1", "3" }, // #5
+ { " Heading 1", "A top level heading at the top of the page" }, // #4
+ { " Heading 1", "The last top level heading" }, // #3
+ { " Heading 2", "Heading 2.1" }, // #2
+ };
+
+ for (const auto& sValue : aFieldValues)
+ {
+ CPPUNIT_ASSERT(xFields->hasMoreElements());
+ uno::Reference<text::XTextField> xField(xFields->nextElement(), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sValue.first, xField->getPresentation(true));
+ CPPUNIT_ASSERT_EQUAL(sValue.second, xField->getPresentation(false));
+ }
+ CPPUNIT_ASSERT(!xFields->hasMoreElements());
+}
+
+/// We should be able to import these flags from OOXML documents
+/// (Note: in Word, STYLEREF 'search bottom up' flag does nothing unless it's in a marginal, we place no such limitation but
+/// this docx only has such stylerefs to avoid confusion)
+CPPUNIT_TEST_FIXTURE(Test, testODFStyleRef)
+{
+ loadFromFile(u"styleref.odt");
+
+ uno::Reference<text::XTextFieldsSupplier> xTextFieldsSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XEnumerationAccess> xFieldsAccess(
+ xTextFieldsSupplier->getTextFields());
+ uno::Reference<container::XEnumeration> xFields(xFieldsAccess->createEnumeration());
+
+ // Similarly to testChapterFieldsFollowedBy, the fields are enumerated with #1 first and everything else in reverse order
+ std::vector<std::pair<OUString, OUString>> aFieldValues = {
+ { " Heading 1", "1:" }, // #1
+ { " Heading 2", "In footnotes" }, // #10
+ { " Heading 2", "In document text" }, // #9
+ { " Heading 1", "STYLEREF in different locations" }, // #8
+ { " Heading 1", "2:" }, // #7
+ { " Heading 1", "With STYLEREF, many things are possible" }, // #6
+ { " Heading 1", "1:" }, // #5
+ { " Heading 1", "STYLEREF in different locations" }, // #4
+ { " Heading 1", "2:" }, // #3
+ { " Heading 1", "With STYLEREF, many things are possible" }, // #2
+ };
+
+ for (const auto& sValue : aFieldValues)
+ {
+ CPPUNIT_ASSERT(xFields->hasMoreElements());
+ uno::Reference<text::XTextField> xField(xFields->nextElement(), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(sValue.first, xField->getPresentation(true));
+ CPPUNIT_ASSERT_EQUAL(sValue.second, xField->getPresentation(false));
+ }
+ CPPUNIT_ASSERT(!xFields->hasMoreElements());
+}
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/filters-test.cxx b/sw/qa/core/filters-test.cxx
new file mode 100644
index 0000000000..ffc24cbda4
--- /dev/null
+++ b/sw/qa/core/filters-test.cxx
@@ -0,0 +1,229 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <unotest/filters-test.hxx>
+#include <test/bootstrapfixture.hxx>
+
+#include <comphelper/fileformat.h>
+
+#include <sfx2/app.hxx>
+#include <sfx2/docfilt.hxx>
+#include <sfx2/docfile.hxx>
+#include <sfx2/sfxsids.hrc>
+#include <sfx2/fcontnr.hxx>
+
+#include <svl/stritem.hxx>
+#include <unotools/tempfile.hxx>
+
+#include <iodetect.hxx>
+#include <docsh.hxx>
+
+typedef tools::SvRef<SwDocShell> SwDocShellRef;
+
+using namespace ::com::sun::star;
+
+/* Implementation of Filters test */
+
+class SwFiltersTest
+ : public test::FiltersTest
+ , public test::BootstrapFixture
+{
+public:
+ virtual bool load( const OUString &rFilter, const OUString &rURL,
+ const OUString &rUserData, SfxFilterFlags nFilterFlags,
+ SotClipboardFormatId nClipboardID, unsigned int nFilterVersion) override;
+ virtual bool save( const OUString &rFilter, const OUString &rURL,
+ const OUString &rUserData, SfxFilterFlags nFilterFlags,
+ SotClipboardFormatId nClipboardID, unsigned int nFilterVersion) override;
+ virtual void setUp() override;
+ virtual void tearDown() override;
+
+ // Ensure CVEs remain unbroken
+ void testCVEs();
+
+ CPPUNIT_TEST_SUITE(SwFiltersTest);
+ CPPUNIT_TEST(testCVEs);
+ CPPUNIT_TEST_SUITE_END();
+
+private:
+ bool filter( const OUString &rFilter, const OUString &rURL,
+ const OUString &rUserData, SfxFilterFlags nFilterFlags,
+ SotClipboardFormatId nClipboardID, unsigned int nFilterVersion, bool bExport);
+ uno::Reference<uno::XInterface> m_xWriterComponent;
+};
+
+bool SwFiltersTest::load(const OUString &rFilter, const OUString &rURL,
+ const OUString &rUserData, SfxFilterFlags nFilterFlags,
+ SotClipboardFormatId nClipboardID, unsigned int nFilterVersion)
+{
+ return filter(rFilter, rURL, rUserData, nFilterFlags, nClipboardID, nFilterVersion, false);
+}
+
+bool SwFiltersTest::save(const OUString &rFilter, const OUString &rURL,
+ const OUString &rUserData, SfxFilterFlags nFilterFlags,
+ SotClipboardFormatId nClipboardID, unsigned int nFilterVersion)
+{
+ return filter(rFilter, rURL, rUserData, nFilterFlags, nClipboardID, nFilterVersion, true);
+}
+
+bool SwFiltersTest::filter(const OUString &rFilter, const OUString &rURL,
+ const OUString &rUserData, SfxFilterFlags nFilterFlags,
+ SotClipboardFormatId nClipboardID, unsigned int nFilterVersion, bool bExport)
+{
+ auto pFilter = std::make_shared<SfxFilter>(
+ rFilter, OUString(), nFilterFlags,
+ nClipboardID, OUString(), OUString(),
+ rUserData, OUString());
+ pFilter->SetVersion(nFilterVersion);
+
+ SwDocShellRef xDocShRef = new SwDocShell;
+ SfxMedium* pSrcMed = new SfxMedium(rURL, StreamMode::STD_READ);
+
+ std::shared_ptr<const SfxFilter> pImportFilter;
+ std::shared_ptr<const SfxFilter> pExportFilter;
+ if (bExport)
+ {
+ SfxGetpApp()->GetFilterMatcher().GuessFilter(*pSrcMed, pImportFilter, SfxFilterFlags::IMPORT, SfxFilterFlags::NONE);
+ pExportFilter = pFilter;
+ }
+ else
+ pImportFilter = pFilter;
+
+ pSrcMed->SetFilter(pImportFilter);
+
+ if (rUserData == FILTER_TEXT_DLG)
+ {
+ pSrcMed->GetItemSet().Put(
+ SfxStringItem(SID_FILE_FILTEROPTIONS, "UTF8,LF,Liberation Mono,en-US"));
+ }
+
+ bool bLoaded = xDocShRef->DoLoad(pSrcMed);
+ if (!bExport)
+ {
+ if (xDocShRef.is())
+ xDocShRef->DoClose();
+ return bLoaded;
+ }
+
+ // How come an error may be set, and still DoLoad() returns success? Strange...
+ if (bLoaded)
+ xDocShRef->ResetError();
+
+ bool bSaved;
+ {
+ utl::TempFileNamed aTempFile;
+ aTempFile.EnableKillingFile();
+ SfxMedium aDstMed(aTempFile.GetURL(), StreamMode::STD_WRITE);
+ aDstMed.SetFilter(pExportFilter);
+ bSaved = xDocShRef->DoSaveAs(aDstMed);
+ }
+ if (xDocShRef.is())
+ xDocShRef->DoClose();
+ return bSaved;
+}
+
+#define isstorage SotClipboardFormatId::STRING
+
+void SwFiltersTest::testCVEs()
+{
+ testDir("StarOffice XML (Writer)",
+ m_directories.getURLFromSrc(u"/sw/qa/core/data/xml/"),
+ FILTER_XML,
+ SfxFilterFlags::IMPORT | SfxFilterFlags::OWN | SfxFilterFlags::DEFAULT,
+ isstorage, SOFFICE_FILEFORMAT_CURRENT);
+
+ testDir("writer8",
+ m_directories.getURLFromSrc(u"/sw/qa/core/data/odt/"),
+ FILTER_XML,
+ SfxFilterFlags::IMPORT | SfxFilterFlags::OWN | SfxFilterFlags::DEFAULT,
+ isstorage, SOFFICE_FILEFORMAT_CURRENT);
+
+ testDir("MS Word 97",
+ m_directories.getURLFromSrc(u"/sw/qa/core/data/ww8/"),
+ FILTER_WW8);
+
+ testDir("MS WinWord 6.0",
+ m_directories.getURLFromSrc(u"/sw/qa/core/data/ww6/"),
+ sWW6);
+
+ testDir("MS WinWord 5",
+ m_directories.getURLFromSrc(u"/sw/qa/core/data/ww5/"),
+ sWW5);
+
+ testDir("Text (encoded)",
+ m_directories.getURLFromSrc(u"/sw/qa/core/data/txt/"),
+ FILTER_TEXT_DLG);
+
+ testDir("MS Word 2007 XML",
+ m_directories.getURLFromSrc(u"/sw/qa/core/data/ooxml/"),
+ OUString(),
+ SfxFilterFlags::STARONEFILTER);
+
+ testDir("Rich Text Format",
+ m_directories.getURLFromSrc(u"/sw/qa/core/data/rtf/"),
+ OUString(),
+ SfxFilterFlags::STARONEFILTER);
+
+ testDir("HTML",
+ m_directories.getURLFromSrc(u"/sw/qa/core/data/html/"),
+ sHTML);
+
+ testDir("T602Document",
+ m_directories.getURLFromSrc(u"/sw/qa/core/data/602/"),
+ OUString(),
+ SfxFilterFlags::STARONEFILTER);
+
+ testDir("Rich Text Format",
+ m_directories.getURLFromSrc(u"/sw/qa/core/exportdata/rtf/"),
+ OUString(),
+ SfxFilterFlags::STARONEFILTER,
+ SotClipboardFormatId::NONE,
+ 0,
+ /*bExport=*/true);
+
+ testDir("HTML",
+ m_directories.getURLFromSrc(u"/sw/qa/core/exportdata/html/"),
+ sHTML,
+ SfxFilterFlags::NONE,
+ SotClipboardFormatId::NONE,
+ 0,
+ /*bExport=*/true);
+
+ testDir("MS Word 2007 XML",
+ m_directories.getURLFromSrc(u"/sw/qa/core/exportdata/ooxml/"),
+ OUString(),
+ SfxFilterFlags::STARONEFILTER,
+ SotClipboardFormatId::NONE,
+ 0,
+ /*bExport=*/true);
+
+}
+
+void SwFiltersTest::setUp()
+{
+ test::BootstrapFixture::setUp();
+
+ //This is a bit of a fudge, we do this to ensure that SwGlobals::ensure,
+ //which is a private symbol to us, gets called
+ m_xWriterComponent =
+ getMultiServiceFactory()->createInstance("com.sun.star.comp.Writer.TextDocument");
+ CPPUNIT_ASSERT_MESSAGE("no writer component!", m_xWriterComponent.is());
+}
+
+void SwFiltersTest::tearDown()
+{
+ uno::Reference<lang::XComponent>(m_xWriterComponent, uno::UNO_QUERY_THROW)->dispose();
+ m_xWriterComponent.clear();
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(SwFiltersTest);
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/frmedt/data/floating-table-caption.docx b/sw/qa/core/frmedt/data/floating-table-caption.docx
new file mode 100644
index 0000000000..18c4690322
--- /dev/null
+++ b/sw/qa/core/frmedt/data/floating-table-caption.docx
Binary files differ
diff --git a/sw/qa/core/frmedt/data/paste-fly-in-textbox.docx b/sw/qa/core/frmedt/data/paste-fly-in-textbox.docx
new file mode 100644
index 0000000000..75bf13b13b
--- /dev/null
+++ b/sw/qa/core/frmedt/data/paste-fly-in-textbox.docx
Binary files differ
diff --git a/sw/qa/core/frmedt/data/textbox-reanchor.odt b/sw/qa/core/frmedt/data/textbox-reanchor.odt
new file mode 100644
index 0000000000..dd4eb69d17
--- /dev/null
+++ b/sw/qa/core/frmedt/data/textbox-reanchor.odt
Binary files differ
diff --git a/sw/qa/core/frmedt/frmedt.cxx b/sw/qa/core/frmedt/frmedt.cxx
new file mode 100644
index 0000000000..b2a53e60db
--- /dev/null
+++ b/sw/qa/core/frmedt/frmedt.cxx
@@ -0,0 +1,255 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <swmodeltestbase.hxx>
+
+#include <com/sun/star/text/VertOrientation.hpp>
+#include <com/sun/star/drawing/XDrawPageSupplier.hpp>
+
+#include <svx/svdpage.hxx>
+
+#include <wrtsh.hxx>
+#include <fmtanchr.hxx>
+#include <IDocumentDrawModelAccess.hxx>
+#include <drawdoc.hxx>
+#include <dcontact.hxx>
+#include <frameformats.hxx>
+#include <unotxdoc.hxx>
+#include <docsh.hxx>
+#include <swdtflvr.hxx>
+#include <caption.hxx>
+#include <view.hxx>
+#include <formatflysplit.hxx>
+#include <itabenum.hxx>
+#include <frmmgr.hxx>
+#include <UndoManager.hxx>
+
+/// Covers sw/source/core/frmedt/ fixes.
+class SwCoreFrmedtTest : public SwModelTestBase
+{
+public:
+ SwCoreFrmedtTest()
+ : SwModelTestBase("/sw/qa/core/frmedt/data/")
+ {
+ }
+};
+
+CPPUNIT_TEST_FIXTURE(SwCoreFrmedtTest, testTextboxReanchor)
+{
+ // Load a document with a textframe and a textbox(shape+textframe).
+ createSwDoc("textbox-reanchor.odt");
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc();
+ SdrPage* pDrawPage = pDoc->getIDocumentDrawModelAccess().GetDrawModel()->GetPage(0);
+ SdrObject* pDrawShape = pDrawPage->GetObj(1);
+ CPPUNIT_ASSERT_EQUAL(OUString("draw shape"), pDrawShape->GetName());
+
+ // Select the shape of the textbox.
+ Point aPoint;
+ SwWrtShell* pShell = pDoc->GetDocShell()->GetWrtShell();
+ pShell->SelectObj(aPoint, /*nFlag=*/0, pDrawShape);
+
+ // Anchor the shape of the textbox into its own textframe.
+ SdrObject* pTextFrameObj = pDrawPage->GetObj(2);
+ SwFrameFormat* pTextFrameFormat = FindFrameFormat(pTextFrameObj);
+ CPPUNIT_ASSERT_EQUAL(OUString("Frame2"), pTextFrameFormat->GetName());
+ SwFrameFormat* pDrawShapeFormat = FindFrameFormat(pDrawShape);
+ SwNodeOffset nOldAnchor = pDrawShapeFormat->GetAnchor().GetAnchorNode()->GetIndex();
+ pShell->FindAnchorPos(pTextFrameObj->GetLastBoundRect().Center(), true);
+ SwNodeOffset nNewAnchor = pDrawShapeFormat->GetAnchor().GetAnchorNode()->GetIndex();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 6
+ // - Actual : 9
+ // i.e. SwFEShell allowed to anchor the textframe of a textbox into itself.
+ CPPUNIT_ASSERT_EQUAL(nOldAnchor, nNewAnchor);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreFrmedtTest, testVertPosFromBottomBoundingBox)
+{
+ // Insert a shape and anchor it vertically in a way, so its position is from the top of the page
+ // bottom margin area.
+ createSwDoc();
+ uno::Reference<css::lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+ uno::Reference<drawing::XShape> xShape(
+ xFactory->createInstance("com.sun.star.drawing.RectangleShape"), uno::UNO_QUERY);
+ xShape->setSize(awt::Size(10000, 10000));
+ uno::Reference<beans::XPropertySet> xShapeProps(xShape, uno::UNO_QUERY);
+ xShapeProps->setPropertyValue("AnchorType", uno::Any(text::TextContentAnchorType_AT_CHARACTER));
+ xShapeProps->setPropertyValue("VertOrient", uno::Any(text::VertOrientation::NONE));
+ xShapeProps->setPropertyValue("VertOrientRelation",
+ uno::Any(text::RelOrientation::PAGE_PRINT_AREA_BOTTOM));
+ xShapeProps->setPropertyValue("VertOrientPosition", uno::Any(static_cast<sal_Int32>(-11000)));
+ uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(mxComponent, uno::UNO_QUERY);
+ xDrawPageSupplier->getDrawPage()->add(xShape);
+
+ // Get the absolute position of the top of the page bottom margin area.
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+ SwTwips nPagePrintAreaBottom
+ = getXPath(pXmlDoc, "//page/infos/prtBounds"_ostr, "bottom"_ostr).toInt32();
+
+ // Calculate the allowed bounding box of the shape, e.g. the shape's position & size dialog uses
+ // this to limit the vertical position to sensible values.
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ SwWrtShell* pWrtShell = pTextDoc->GetDocShell()->GetWrtShell();
+ SwRect aBoundRect;
+ RndStdIds eAnchorType = RndStdIds::FLY_AT_CHAR;
+ SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc();
+ const auto& rFrameFormats = *pDoc->GetFrameFormats();
+ const SwFormatAnchor* pFormatAhchor = &rFrameFormats[0]->GetAnchor();
+ sal_Int16 eHoriRelOrient = text::RelOrientation::PAGE_FRAME;
+ sal_Int16 eVertRelOrient = text::RelOrientation::PAGE_PRINT_AREA_BOTTOM;
+ bool bFollowTextFlow = false;
+ bool bMirror = false;
+ Size aPercentSize;
+ pWrtShell->CalcBoundRect(aBoundRect, eAnchorType, eHoriRelOrient, eVertRelOrient, pFormatAhchor,
+ bFollowTextFlow, bMirror, nullptr, &aPercentSize);
+
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: -14705
+ // - Actual : -1134
+ // i.e. UI did not allow anchoring a shape 10cm above the bottom of the page due to wrong
+ // bounding box.
+ CPPUNIT_ASSERT_EQUAL(-1 * nPagePrintAreaBottom, aBoundRect.Pos().getY());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreFrmedtTest, testPasteFlyInTextBox)
+{
+ // Given a document that contains a textbox, which contains an sw image (fly frame)
+ createSwDoc("paste-fly-in-textbox.docx");
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ SwDocShell* pDocShell = pTextDoc->GetDocShell();
+ SwWrtShell* pWrtShell = pDocShell->GetWrtShell();
+ SwDoc* pDoc = pDocShell->GetDoc();
+ SdrPage* pPage = pDoc->getIDocumentDrawModelAccess().GetDrawModel()->GetPage(0);
+ SdrObject* pObject = pPage->GetObj(0);
+ pWrtShell->SelectObj(Point(), 0, pObject);
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(3), pDoc->GetSpzFrameFormats()->GetFormatCount());
+ rtl::Reference<SwTransferable> pTransfer = new SwTransferable(*pWrtShell);
+ pTransfer->Cut();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(0), pDoc->GetSpzFrameFormats()->GetFormatCount());
+ TransferableDataHelper aHelper(pTransfer);
+
+ // When pasting that to an empty document.
+ SwTransferable::Paste(*pWrtShell, aHelper);
+
+ // Then we should have the image only once: 3 formats (draw+fly formats for the textbox and a
+ // fly format for the image).
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 3
+ // - Actual : 4
+ // i.e. the image was pasted twice.
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(3), pDoc->GetSpzFrameFormats()->GetFormatCount());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreFrmedtTest, testTextBoxSelectCursorPos)
+{
+ // Given a document with a fly+draw format pair (textbox):
+ createSwDoc("paste-fly-in-textbox.docx");
+
+ // When selecting the fly format:
+ SwDoc* pDoc = getSwDoc();
+ SdrPage* pPage = pDoc->getIDocumentDrawModelAccess().GetDrawModel()->GetPage(0);
+ SdrObject* pFlyObject = pPage->GetObj(1);
+ SwContact* pFlyContact = static_cast<SwContact*>(pFlyObject->GetUserCall());
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt16>(RES_FLYFRMFMT), pFlyContact->GetFormat()->Which());
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ pWrtShell->SelectObj(Point(), 0, pFlyObject);
+
+ // Then make sure the cursor is the anchor of the draw format:
+ SdrObject* pDrawObject = pPage->GetObj(0);
+ SwDrawContact* pDrawContact = static_cast<SwDrawContact*>(pDrawObject->GetUserCall());
+ SwFrameFormat* pDrawFormat = pDrawContact->GetFormat();
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt16>(RES_DRAWFRMFMT), pDrawFormat->Which());
+ SwNodeOffset nAnchor = pDrawFormat->GetAnchor().GetContentAnchor()->GetNode().GetIndex();
+ SwNodeOffset nCursor = pWrtShell->GetCurrentShellCursor().GetPointNode().GetIndex();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 15 (anchor of draw format)
+ // - Actual : 6 (in-fly-format position)
+ // i.e. the cursor had a broken position after trying to select the fly format.
+ CPPUNIT_ASSERT_EQUAL(nAnchor, nCursor);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreFrmedtTest, testSplitFlyInsertCaption)
+{
+ // Given a document with a full-page floating table:
+ createSwDoc("floating-table-caption.docx");
+
+ // When trying to insert a caption below that table:
+ SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
+ pWrtShell->GotoTable("Table1");
+ InsCaptionOpt aOpt;
+ SwView& rView = pWrtShell->GetView();
+ aOpt.SetCategory("Table");
+ aOpt.SetCaption("Numbers English-German");
+ // After, not before.
+ aOpt.SetPos(1);
+ // Without the accompanying fix in place, this call never finished, layout didn't handle content
+ // after the table in a floating table.
+ rView.InsertCaption(&aOpt);
+
+ // Then make sure the insertion finishes and now this is just a plain table-in-frame:
+ SwDoc* pDoc = getSwDoc();
+ sw::SpzFrameFormats& rFlys = *pDoc->GetSpzFrameFormats();
+ sw::SpzFrameFormat* pFly = rFlys[0];
+ CPPUNIT_ASSERT(!pFly->GetAttrSet().GetFlySplit().GetValue());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreFrmedtTest, testSplitFlyUnfloat)
+{
+ // Given a document with a floating table:
+ createSwDoc();
+ SwDoc* pDoc = getSwDocShell()->GetDoc();
+ CPPUNIT_ASSERT(pDoc->GetUndoManager().IsUndoEnabled());
+ pDoc->GetUndoManager().EnableUndo(false);
+ sw::FrameFormats<sw::SpzFrameFormat*>& rFlyFormats = *pDoc->GetSpzFrameFormats();
+ CPPUNIT_ASSERT(rFlyFormats.empty());
+ // Insert a table:
+ SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
+ SwInsertTableOptions aTableOptions(SwInsertTableFlags::DefaultBorder, 0);
+ pWrtShell->InsertTable(aTableOptions, /*nRows=*/2, /*nCols=*/1);
+ pWrtShell->MoveTable(GotoPrevTable, fnTableStart);
+ pWrtShell->GoPrevCell();
+ pWrtShell->Insert("A1");
+ pWrtShell->GoNextCell();
+ pWrtShell->Insert("A2");
+ // Select cell:
+ pWrtShell->SelAll();
+ // Select table:
+ pWrtShell->SelAll();
+ // Wrap the table in a text frame:
+ SwFlyFrameAttrMgr aMgr(true, pWrtShell, Frmmgr_Type::TEXT, nullptr);
+ pWrtShell->StartAllAction();
+ aMgr.InsertFlyFrame(RndStdIds::FLY_AT_PARA, aMgr.GetPos(), aMgr.GetSize());
+ pWrtShell->EndAllAction();
+ CPPUNIT_ASSERT(!rFlyFormats.empty());
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), pDoc->GetTableFrameFormatCount(/*bUsed=*/true));
+ pDoc->GetUndoManager().EnableUndo(true);
+
+ // When marking that frame and unfloating it:
+ selectShape(1);
+ pWrtShell->UnfloatFlyFrame();
+
+ // Then make sure the frame is removed, but the table is still part of the document:
+ // Without the accompanying fix in place (empty SwFEShell::UnfloatFlyFrame()), this test would
+ // have failed, the frame was not removed.
+ CPPUNIT_ASSERT(rFlyFormats.empty());
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), pDoc->GetTableFrameFormatCount(/*bUsed=*/true));
+
+ // When undoing the conversion to inline:
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), pDoc->GetUndoManager().GetUndoActionCount());
+ pDoc->GetUndoManager().Undo();
+
+ // Then the undo stack had 2 undo actions and undo-all crashed.
+ CPPUNIT_ASSERT(!rFlyFormats.empty());
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), pDoc->GetTableFrameFormatCount(/*bUsed=*/true));
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/header_footer/HeaderFooterTest.cxx b/sw/qa/core/header_footer/HeaderFooterTest.cxx
new file mode 100644
index 0000000000..6bb5fd6167
--- /dev/null
+++ b/sw/qa/core/header_footer/HeaderFooterTest.cxx
@@ -0,0 +1,1336 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <swmodeltestbase.hxx>
+
+#include <com/sun/star/text/XTextViewCursorSupplier.hpp>
+#include <com/sun/star/text/XFootnote.hpp>
+#include <com/sun/star/text/XFootnotesSupplier.hpp>
+#include <com/sun/star/text/XSimpleText.hpp>
+#include <com/sun/star/text/XTextField.hpp>
+#include <com/sun/star/text/XTextRange.hpp>
+#include <com/sun/star/text/XPageCursor.hpp>
+#include <com/sun/star/text/XText.hpp>
+#include <com/sun/star/text/XTextCursor.hpp>
+#include <com/sun/star/text/XTextDocument.hpp>
+#include <com/sun/star/text/XTextFrame.hpp>
+#include <com/sun/star/text/XTextFramesSupplier.hpp>
+#include <com/sun/star/text/XTextFieldsSupplier.hpp>
+#include <com/sun/star/style/PageStyleLayout.hpp>
+#include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
+#include <com/sun/star/container/XNameContainer.hpp>
+
+#include <cppunit/TestAssert.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace
+{
+class HeaderFooterTest : public SwModelTestBase
+{
+public:
+ void checkParagraph(sal_Int32 nNumber, OUString const& rParagraphString,
+ OUString const& rConnectedPageStyle);
+ void checkFirstRestHeaderPageStyles();
+ void checkLeftRightHeaderPageStyles();
+ void checkFirstLeftRightHeaderPageStyles();
+ void checkDoubleFirstLeftRightHeaderPageStyles(OUString const& rCustomPageStyleName);
+ void checkShapeInFirstPageHeader();
+
+ HeaderFooterTest()
+ : SwModelTestBase("/sw/qa/core/header_footer/data/")
+ {
+ }
+};
+
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testStashedHeaderFooter)
+{
+ createSwDoc();
+ SwDoc* pSourceDocument = getSwDoc();
+ uno::Reference<lang::XComponent> xSourceDocument = mxComponent;
+ mxComponent.clear();
+
+ createSwDoc();
+ SwDoc* pTargetDocument = getSwDoc();
+ uno::Reference<lang::XComponent> xTargetDocument = mxComponent;
+ mxComponent.clear();
+
+ // Source
+ SwPageDesc* pSourcePageDesc = pSourceDocument->MakePageDesc("SourceStyle");
+ pSourcePageDesc->ChgFirstShare(false);
+ CPPUNIT_ASSERT(!pSourcePageDesc->IsFirstShared());
+ pSourcePageDesc->StashFrameFormat(pSourcePageDesc->GetFirstMaster(), true, false, true);
+ pSourceDocument->ChgPageDesc("SourceStyle", *pSourcePageDesc);
+ CPPUNIT_ASSERT(pSourcePageDesc->HasStashedFormat(true, false, true));
+
+ // Target
+ SwPageDesc* pTargetPageDesc = pTargetDocument->MakePageDesc("TargetStyle");
+
+ // Copy source to target
+ pTargetDocument->CopyPageDesc(*pSourcePageDesc, *pTargetPageDesc);
+
+ // Check the stashed frame format is copied
+ CPPUNIT_ASSERT(pTargetPageDesc->HasStashedFormat(true, false, true));
+
+ // Check document instance
+ auto pSourceStashedFormat = pSourcePageDesc->GetStashedFrameFormat(true, false, true);
+ CPPUNIT_ASSERT_EQUAL(true, pSourceStashedFormat->GetDoc() == pSourceDocument);
+
+ auto pTargetStashedFormat = pTargetPageDesc->GetStashedFrameFormat(true, false, true);
+ CPPUNIT_ASSERT_EQUAL(true, pTargetStashedFormat->GetDoc() == pTargetDocument);
+
+ xSourceDocument->dispose();
+ xTargetDocument->dispose();
+}
+
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testNonFirstHeaderIsDisabled)
+{
+ // related to tdf#127778
+ // Header for the first page is enabled, but for the second page it should be disabled or act like it is disabled
+ // so the header vertical size is consistent.
+
+ createSwDoc("tdf127778.docx");
+
+ // TODO
+
+ // Header can only be enabled or disabled, but can't be disabled just for first, left or right page.
+ // If a header is enabled but empty, the header still takes space in LO, but not in MSO, where it acts the same as
+ // if it is disabled.
+}
+
+// Check for correct header/footer with special first page with TOC inside
+// Related to tdf#118393
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testHeaderFooterWithSpecialFirstPage_OOXML)
+{
+ // Load, save in OOXML format and reload
+ createSwDoc("tdf118393.odt");
+ saveAndReload("Office Open XML Text");
+
+ CPPUNIT_ASSERT_EQUAL(7, getPages());
+
+ {
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+ // check first page
+ assertXPath(pXmlDoc, "/root/page[1]/header"_ostr);
+ assertXPath(pXmlDoc, "/root/page[1]/footer"_ostr);
+ assertXPath(pXmlDoc, "/root/page[1]/header/txt/text()"_ostr, 0);
+ assertXPath(pXmlDoc, "/root/page[1]/footer/txt/text()"_ostr, 0);
+ // check second page in the same way
+ assertXPath(pXmlDoc, "/root/page[2]/header"_ostr);
+ assertXPath(pXmlDoc, "/root/page[2]/footer"_ostr);
+ }
+ // All other pages should have header/footer
+ OUString sExpected("Seite * von *");
+ CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[2]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[2]/footer/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[3]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[3]/footer/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[4]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[4]/footer/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[5]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[5]/footer/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[6]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[6]/footer/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[7]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[7]/footer/txt/text()"_ostr));
+}
+
+// Check for correct header/footer with special first page with TOC inside
+// Related to tdf#118393
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testHeaderFooterWithSpecialFirstPage_ODF)
+{
+ // Load, save in ODF format and reload
+ createSwDoc("tdf118393.odt");
+ saveAndReload("writer8");
+
+ CPPUNIT_ASSERT_EQUAL(7, getPages());
+
+ // First page has no header/footer
+ {
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+ // check first page
+ assertXPath(pXmlDoc, "/root/page[1]/header"_ostr, 0);
+ assertXPath(pXmlDoc, "/root/page[1]/footer"_ostr, 0);
+ // check second page in the same way
+ assertXPath(pXmlDoc, "/root/page[2]/header"_ostr);
+ assertXPath(pXmlDoc, "/root/page[2]/footer"_ostr);
+ }
+
+ // All other pages should have header/footer
+ OUString sExpected("Seite * von *");
+ CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[2]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[2]/footer/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[3]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[3]/footer/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[4]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[4]/footer/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[5]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[5]/footer/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[6]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[6]/footer/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[7]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(sExpected, parseDump("/root/page[7]/footer/txt/text()"_ostr));
+}
+
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testFloatingTableInHeader)
+{
+ // Related to tdf#79639
+ createSwDoc("tdf79639.docx");
+
+ // This was 0, floating table in header wasn't converted to a TextFrame.
+ CPPUNIT_ASSERT_EQUAL(1, getShapes());
+
+ saveAndReload("Office Open XML Text");
+
+ // This was 0, floating table in header wasn't converted to a TextFrame.
+ CPPUNIT_ASSERT_EQUAL(1, getShapes());
+}
+
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testFdo64238_a)
+{
+ createSwDoc("fdo64238_a.docx");
+
+ // The problem was that when 'Show Only Odd Footer' was marked in Word and the Even footer *was filled*
+ // then LO would still import the Even footer and concatenate it to the odd footer.
+ // This case specifically is for :
+ // 'Blank Odd Footer' with 'Non-Blank Even Footer' when 'Show Only Odd Footer' is marked in Word
+ // In this case the imported footer in LO was supposed to be blank, but instead was the 'even' footer
+ uno::Reference<text::XText> xFooterText = getProperty<uno::Reference<text::XText>>(
+ getStyles("PageStyles")->getByName("Standard"), "FooterText");
+ uno::Reference<text::XTextRange> xFooterParagraph = getParagraphOfText(1, xFooterText);
+ uno::Reference<container::XEnumerationAccess> xRunEnumAccess(xFooterParagraph, uno::UNO_QUERY);
+ uno::Reference<container::XEnumeration> xRunEnum = xRunEnumAccess->createEnumeration();
+ sal_Int32 numOfRuns = 0;
+ while (xRunEnum->hasMoreElements())
+ {
+ xRunEnum->nextElement();
+ numOfRuns++;
+ }
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(2), numOfRuns);
+}
+
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testFdo64238_b)
+{
+ createSwDoc("fdo64238_b.docx");
+
+ // The problem was that when 'Show Only Odd Footer' was marked in Word and the Even footer *was filled*
+ // then LO would still import the Even footer and concatenate it to the odd footer.
+ // This case specifically is for :
+ // 'Non-Blank Odd Footer' with 'Non-Blank Even Footer' when 'Show Only Odd Footer' is marked in Word
+ // In this case the imported footer in LO was supposed to be just the odd footer, but instead was the 'odd' and 'even' footers concatenated
+ uno::Reference<text::XText> xFooterText = getProperty<uno::Reference<text::XText>>(
+ getStyles("PageStyles")->getByName("Standard"), "FooterText");
+ uno::Reference<text::XTextRange> xFooterParagraph = getParagraphOfText(1, xFooterText);
+ uno::Reference<container::XEnumerationAccess> xRunEnumAccess(xFooterParagraph, uno::UNO_QUERY);
+ uno::Reference<container::XEnumeration> xRunEnum = xRunEnumAccess->createEnumeration();
+ sal_Int32 numOfRuns = 0;
+ while (xRunEnum->hasMoreElements())
+ {
+ xRunEnum->nextElement();
+ numOfRuns++;
+ }
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5), numOfRuns);
+}
+
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testFirstPageHeadersAndEmptyFooters)
+{
+ // Test for fdo#66145
+
+ // Test case where headers and footers for first page are set, but footers are empty
+ auto verify = [this]() {
+ CPPUNIT_ASSERT_EQUAL(OUString("This is the FIRST page header."),
+ parseDump("/root/page[1]/header/txt/text()"_ostr));
+
+ CPPUNIT_ASSERT_EQUAL(OUString("This is the header for the REST OF THE FILE."),
+ parseDump("/root/page[2]/header/txt/text()"_ostr));
+
+ CPPUNIT_ASSERT_EQUAL(OUString("This is the header for the REST OF THE FILE."),
+ parseDump("/root/page[3]/header/txt/text()"_ostr));
+ };
+
+ createSwDoc("fdo66145.docx");
+ verify();
+ saveAndReload("Office Open XML Text");
+ verify();
+}
+
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testFirstHeaderFooterImport)
+{
+ // Test import and export of a section's headerf/footerf properties.
+ // (copied from a ww8export test, with doc converted to docx using Word)
+ auto verify = [this]() {
+ CPPUNIT_ASSERT_EQUAL(6, getPages());
+
+ // The document has 6 pages. Note that we don't test if 4 or just 2 page
+ // styles are created, the point is that layout should be correct.
+ CPPUNIT_ASSERT_EQUAL(OUString("First page header"),
+ parseDump("/root/page[1]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("First page footer"),
+ parseDump("/root/page[1]/footer/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("Even page header"),
+ parseDump("/root/page[2]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("Even page footer"),
+ parseDump("/root/page[2]/footer/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("Odd page header"),
+ parseDump("/root/page[3]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("Odd page footer"),
+ parseDump("/root/page[3]/footer/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("First page header2"),
+ parseDump("/root/page[4]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("First page footer 2"),
+ parseDump("/root/page[4]/footer/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("Odd page header 2"),
+ parseDump("/root/page[5]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("Odd page footer 2"),
+ parseDump("/root/page[5]/footer/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("Even page header 2"),
+ parseDump("/root/page[6]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("Even page footer 2"),
+ parseDump("/root/page[6]/footer/txt/text()"_ostr));
+ };
+
+ createSwDoc("first-header-footer.docx");
+ verify();
+ saveAndReload("Office Open XML Text");
+ verify();
+}
+
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testFirstHeaderFooterRoundTrip)
+{
+ createSwDoc("first-header-footerB.odt");
+ saveAndReload("Office Open XML Text");
+
+ CPPUNIT_ASSERT_EQUAL(6, getPages());
+
+ CPPUNIT_ASSERT_EQUAL(OUString("First page header"),
+ parseDump("/root/page[1]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("First page footer"),
+ parseDump("/root/page[1]/footer/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("Even page header"),
+ parseDump("/root/page[2]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("Even page footer"),
+ parseDump("/root/page[2]/footer/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("Odd page header"),
+ parseDump("/root/page[3]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("Odd page footer"),
+ parseDump("/root/page[3]/footer/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("First page header2"),
+ parseDump("/root/page[4]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("First page footer 2"),
+ parseDump("/root/page[4]/footer/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("Odd page header 2"),
+ parseDump("/root/page[5]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("Odd page footer 2"),
+ parseDump("/root/page[5]/footer/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("Even page header 2"),
+ parseDump("/root/page[6]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("Even page footer 2"),
+ parseDump("/root/page[6]/footer/txt/text()"_ostr));
+}
+
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testFirstHeaderFooter_ODF)
+{
+ createSwDoc("first-header-footer.odt");
+ saveAndReload("writer8");
+
+ CPPUNIT_ASSERT_EQUAL(6, getPages());
+ // Test import and export of the header-first token.
+
+ // The document has 6 pages, two page styles for the first and second half of pages.
+ CPPUNIT_ASSERT_EQUAL(OUString("First header"),
+ parseDump("/root/page[1]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("First footer"),
+ parseDump("/root/page[1]/footer/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("Left header"),
+ parseDump("/root/page[2]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("Left footer"),
+ parseDump("/root/page[2]/footer/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("Right header"),
+ parseDump("/root/page[3]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("Right footer"),
+ parseDump("/root/page[3]/footer/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("First header2"),
+ parseDump("/root/page[4]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("First footer2"),
+ parseDump("/root/page[4]/footer/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("Right header2"),
+ parseDump("/root/page[5]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("Right footer2"),
+ parseDump("/root/page[5]/footer/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("Left header2"),
+ parseDump("/root/page[6]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("Left footer2"),
+ parseDump("/root/page[6]/footer/txt/text()"_ostr));
+}
+
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testFirstHeaderFooter_DOC)
+{
+ createSwDoc("first-header-footer.doc");
+ saveAndReload("MS Word 97");
+
+ // Test import and export of a section's headerf/footerf properties.
+
+ // The document has 6 pages. Note that we don't test if 4 or just 2 page
+ // styles are created, the point is that layout should be correct.
+ CPPUNIT_ASSERT_EQUAL(OUString("First page header"),
+ parseDump("/root/page[1]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("First page footer"),
+ parseDump("/root/page[1]/footer/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("Even page header"),
+ parseDump("/root/page[2]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("Even page footer"),
+ parseDump("/root/page[2]/footer/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("Odd page header"),
+ parseDump("/root/page[3]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("Odd page footer"),
+ parseDump("/root/page[3]/footer/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("First page header2"),
+ parseDump("/root/page[4]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("First page footer 2"),
+ parseDump("/root/page[4]/footer/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("Odd page header 2"),
+ parseDump("/root/page[5]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("Odd page footer 2"),
+ parseDump("/root/page[5]/footer/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("Even page header 2"),
+ parseDump("/root/page[6]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("Even page footer 2"),
+ parseDump("/root/page[6]/footer/txt/text()"_ostr));
+}
+
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testFdo65655)
+{
+ // related - fdo#65655
+
+ // The problem was that the DOCX had a non-blank odd footer and a blank even footer
+ // The 'Different Odd & Even Pages' was turned on
+ // However - LO assumed that because the 'even' footer is blank - it should ignore the 'Different Odd & Even Pages' flag
+ // So it did not import it and did not export it
+
+ auto verify = [this]() {
+ uno::Reference<beans::XPropertySet> xPropertySet(
+ getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY);
+ {
+ bool bValue = false;
+ xPropertySet->getPropertyValue("HeaderIsShared") >>= bValue;
+ CPPUNIT_ASSERT_EQUAL(false, bValue);
+ }
+ {
+ bool bValue = false;
+ xPropertySet->getPropertyValue("FooterIsShared") >>= bValue;
+ CPPUNIT_ASSERT_EQUAL(false, bValue);
+ }
+ };
+ createSwDoc("fdo65655.docx");
+ verify();
+ saveAndReload("Office Open XML Text");
+ verify();
+}
+
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testImageInHeader)
+{
+ // Related bug tdf#57155
+ createSwDoc("tdf57155.docx");
+
+ // Without the fix in place, the image in the header of page 2 wouldn't exist
+ CPPUNIT_ASSERT_EQUAL(2, getPages());
+ CPPUNIT_ASSERT_EQUAL(4, getShapes());
+
+ saveAndReload("Office Open XML Text");
+
+ CPPUNIT_ASSERT_EQUAL(2, getPages());
+ CPPUNIT_ASSERT_EQUAL(4, getShapes());
+}
+
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testImageInFooter)
+{
+ // Related bug tdf#129582
+ createSwDoc("tdf129582.docx");
+
+ // Without the fix in place, the image in the footer of page 2 wouldn't exist
+ CPPUNIT_ASSERT_EQUAL(2, getPages());
+ CPPUNIT_ASSERT_EQUAL(2, getShapes());
+
+ saveAndReload("Office Open XML Text");
+
+ CPPUNIT_ASSERT_EQUAL(2, getPages());
+ CPPUNIT_ASSERT_EQUAL(2, getShapes());
+}
+
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testTdf112694)
+{
+ auto verify = [this]() {
+ uno::Any aPageStyle = getStyles("PageStyles")->getByName("Standard");
+ // Header was on when header for file was for explicit first pages only
+ // (marked via <w:titlePg>).
+ //CPPUNIT_ASSERT(!getProperty<bool>(aPageStyle, "HeaderIsOn"));
+ // TODO - can't disable headers/footers selectively (only fo first page)
+ CPPUNIT_ASSERT(getProperty<bool>(aPageStyle, "HeaderIsOn"));
+ };
+
+ createSwDoc("tdf112694.docx");
+ verify();
+ saveAndReload("Office Open XML Text");
+ verify();
+}
+
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testContSectBreakHeaderFooter)
+{
+ auto verify = [this]() {
+ // Load a document with a continuous section break on page 2.
+ CPPUNIT_ASSERT_EQUAL(OUString("First page header, section 1"),
+ parseDump("/root/page[1]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("First page footer, section 1"),
+ parseDump("/root/page[1]/footer/txt/text()"_ostr));
+
+ // Make sure the header stays like this; if we naively just update the page style name of the
+ // first para on page 2, then this would be 'Header, section 2', which is incorrect.
+ CPPUNIT_ASSERT_EQUAL(OUString("First page header, section 2"),
+ parseDump("/root/page[2]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("First page footer, section 2"),
+ parseDump("/root/page[2]/footer/txt/text()"_ostr));
+
+ // This is inherited from page 2.
+ CPPUNIT_ASSERT_EQUAL(OUString("Header, section 2"),
+ parseDump("/root/page[3]/header/txt/text()"_ostr));
+ CPPUNIT_ASSERT_EQUAL(OUString("Footer, section 3"),
+ parseDump("/root/page[3]/footer/txt/text()"_ostr));
+
+ // Without the export fix in place, the import-export-import test would have failed with:
+ // - Expected: Header, section 2
+ // - Actual : First page header, section 2
+ // i.e. both the header and the footer on page 3 was wrong.
+
+ // Additional problem: top margin on page 3 was wrong.
+ if (isExported())
+ {
+ xmlDocUniquePtr pXml = parseExport("word/document.xml");
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 2200
+ // - Actual : 2574
+ // i.e. the top margin on page 3 was too large and now matches the value from the input
+ // document.
+ assertXPath(pXml, "/w:document/w:body/w:sectPr/w:pgMar"_ostr, "top"_ostr, "2200");
+ }
+ };
+
+ createSwDoc("cont-sect-break-header-footer.docx");
+ verify();
+ saveAndReload("Office Open XML Text");
+ verify();
+}
+
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testTdf145998_firstHeader)
+{
+ createSwDoc("tdf145998_firstHeader.odt");
+ saveAndReload("Office Open XML Text");
+
+ // Sanity check - always good to test when dealing with page styles and breaks.
+ CPPUNIT_ASSERT_EQUAL(2, getPages());
+
+ CPPUNIT_ASSERT_EQUAL(OUString("Very first header"), parseDump("/root/page[1]/header/txt"_ostr));
+
+ // Page Style is already used in prior section - this can't be the first-header
+ CPPUNIT_ASSERT_EQUAL(OUString("Normal Header"), parseDump("/root/page[2]/header/txt"_ostr));
+}
+
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testEvenPageOddPageFooter_Import)
+{
+ // Related tdf#135216
+
+ createSwDoc("tdf135216_evenOddFooter.docx");
+
+ uno::Reference<frame::XModel> xModel(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextViewCursorSupplier> xTextViewCursorSupplier(
+ xModel->getCurrentController(), uno::UNO_QUERY);
+ uno::Reference<text::XPageCursor> xCursor(xTextViewCursorSupplier->getViewCursor(),
+ uno::UNO_QUERY);
+
+ // get LO page style for the first page (even page #2)
+ OUString pageStyleName = getProperty<OUString>(xCursor, "PageStyleName");
+ uno::Reference<container::XNameAccess> xPageStyles = getStyles("PageStyles");
+ uno::Reference<style::XStyle> xPageStyle(xPageStyles->getByName(pageStyleName), uno::UNO_QUERY);
+
+ xCursor->jumpToFirstPage(); // Even/Left page #2
+ uno::Reference<text::XText> xFooter
+ = getProperty<uno::Reference<text::XText>>(xPageStyle, "FooterTextLeft");
+ CPPUNIT_ASSERT_EQUAL(OUString("even page"), xFooter->getString());
+
+ xCursor->jumpToNextPage();
+ pageStyleName = getProperty<OUString>(xCursor, "PageStyleName");
+ xPageStyle.set(xPageStyles->getByName(pageStyleName), uno::UNO_QUERY);
+ xFooter.set(getProperty<uno::Reference<text::XText>>(xPageStyle, "FooterTextFirst"));
+ CPPUNIT_ASSERT_EQUAL(OUString("odd page - first footer"), xFooter->getString());
+
+ xCursor->jumpToNextPage();
+ pageStyleName = getProperty<OUString>(xCursor, "PageStyleName");
+ xPageStyle.set(xPageStyles->getByName(pageStyleName), uno::UNO_QUERY);
+ xFooter.set(getProperty<uno::Reference<text::XText>>(xPageStyle, "FooterTextLeft"));
+ CPPUNIT_ASSERT_EQUAL(OUString("even page"), xFooter->getString());
+
+ // The contents of paragraph 2 should be the page number (2) located on page 1.
+ getParagraph(2, "2");
+}
+
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testEvenPageOddPageFooter_Roundtrip)
+{
+ // Related tdf#135216
+
+ // Load, save as OOXML and reload
+ createSwDoc("tdf135216_evenOddFooter.odt");
+ saveAndReload("Office Open XML Text");
+
+ uno::Reference<frame::XModel> xModel(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextViewCursorSupplier> xTextViewCursorSupplier(
+ xModel->getCurrentController(), uno::UNO_QUERY);
+ uno::Reference<text::XPageCursor> xCursor(xTextViewCursorSupplier->getViewCursor(),
+ uno::UNO_QUERY);
+
+ // get LO page style for the first page (even page #2)
+ OUString pageStyleName = getProperty<OUString>(xCursor, "PageStyleName");
+ uno::Reference<container::XNameAccess> xPageStyles = getStyles("PageStyles");
+ uno::Reference<style::XStyle> xPageStyle(xPageStyles->getByName(pageStyleName), uno::UNO_QUERY);
+
+ xCursor->jumpToFirstPage(); // Even/Left page #2
+ uno::Reference<text::XText> xFooter
+ = getProperty<uno::Reference<text::XText>>(xPageStyle, "FooterTextLeft");
+ CPPUNIT_ASSERT_EQUAL(OUString("even page"), xFooter->getString());
+
+ xCursor->jumpToNextPage();
+ pageStyleName = getProperty<OUString>(xCursor, "PageStyleName");
+ xPageStyle.set(xPageStyles->getByName(pageStyleName), uno::UNO_QUERY);
+ xFooter.set(getProperty<uno::Reference<text::XText>>(xPageStyle, "FooterTextFirst"));
+ CPPUNIT_ASSERT_EQUAL(OUString("odd page - first footer"), xFooter->getString());
+
+ xCursor->jumpToNextPage();
+ pageStyleName = getProperty<OUString>(xCursor, "PageStyleName");
+ xPageStyle.set(xPageStyles->getByName(pageStyleName), uno::UNO_QUERY);
+ xFooter.set(getProperty<uno::Reference<text::XText>>(xPageStyle, "FooterTextLeft"));
+ CPPUNIT_ASSERT_EQUAL(OUString("even page"), xFooter->getString());
+
+ // The contents of paragraph 2 should be the page number (2) located on page 1.
+ getParagraph(2, "2");
+}
+
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testTdf69635)
+{
+ createSwDoc("tdf69635.docx");
+ saveAndReload("Office Open XML Text");
+
+ xmlDocUniquePtr pXmlHeader1 = parseExport("word/header1.xml");
+ CPPUNIT_ASSERT(pXmlHeader1);
+
+ xmlDocUniquePtr pXmlSettings = parseExport("word/settings.xml");
+ CPPUNIT_ASSERT(pXmlSettings);
+
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: "left"
+ // - Actual : "right"
+ assertXPathContent(pXmlHeader1, "/w:hdr/w:p/w:r/w:t"_ostr, "left");
+
+ // Make sure "left" appears as a hidden header
+ assertXPath(pXmlSettings, "/w:settings/w:evenAndOddHeaders"_ostr, 0);
+}
+
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testTdf113849_evenAndOddHeaders)
+{
+ createSwDoc("tdf113849_evenAndOddHeaders.odt");
+ saveAndReload("Office Open XML Text");
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Header2 text", OUString("L. J. Kendall"),
+ parseDump("/root/page[2]/header/txt"_ostr));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Footer2 text", OUString("*"),
+ parseDump("/root/page[2]/footer/txt"_ostr));
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Header3 text", OUString("Shadow Hunt"),
+ parseDump("/root/page[3]/header/txt"_ostr));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Footer3 text", OUString("*"),
+ parseDump("/root/page[3]/footer/txt"_ostr));
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Header4 text", OUString("L. J. Kendall"),
+ parseDump("/root/page[4]/header/txt"_ostr));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Footer4 text", OUString("*"),
+ parseDump("/root/page[4]/footer/txt"_ostr));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Footer5 text", OUString(""),
+ parseDump("/root/page[5]/footer/txt"_ostr));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Footer6 text", OUString(""),
+ parseDump("/root/page[6]/footer/txt"_ostr));
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Number of pages", 6, getPages());
+}
+
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testFirstPageFooterEnabled)
+{
+ // tdf#106572
+ // Page style with first page and other pages.
+ // Footer shouldn't be enabled on first page, but then on the other pages
+ auto verify = [this]() {
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+ // TODO
+ // It's currently not possible to disable the header on first page only.
+ //assertXPath(pXmlDoc, "/root/page[1]/footer/txt"_ostr, 0);
+ assertXPath(pXmlDoc, "/root/page[1]/footer/txt"_ostr);
+ };
+ createSwDoc("TestFirstFooterDisabled.docx");
+ verify();
+ saveAndReload("Office Open XML Text");
+ verify();
+}
+
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testBnc519228OddBreaks)
+{
+ auto verify = [this]() {
+ // Check that all the normal styles are not set as right-only, those should be only those used after odd page breaks.
+ auto xStyles = getStyles("PageStyles");
+ uno::Reference<beans::XPropertySet> xStyle;
+ {
+ xStyle.set(xStyles->getByName("Standard"), uno::UNO_QUERY);
+ auto aPageLayout = xStyle->getPropertyValue("PageStyleLayout");
+ CPPUNIT_ASSERT_EQUAL(uno::Any(style::PageStyleLayout_ALL), aPageLayout);
+ }
+ {
+ xStyle.set(xStyles->getByName("First Page"), uno::UNO_QUERY);
+ auto aPageLayout = xStyle->getPropertyValue("PageStyleLayout");
+ CPPUNIT_ASSERT_EQUAL(uno::Any(style::PageStyleLayout_ALL), aPageLayout);
+ }
+
+ uno::Reference<beans::XPropertySet> page1Style;
+ {
+ auto xPara = getParagraph(1);
+ CPPUNIT_ASSERT_EQUAL(OUString("This is the first page."), xPara->getString());
+ OUString page1StyleName = getProperty<OUString>(xPara, "PageDescName");
+ page1Style.set(xStyles->getByName(page1StyleName), uno::UNO_QUERY);
+ auto aPageLayout = page1Style->getPropertyValue("PageStyleLayout");
+ CPPUNIT_ASSERT_EQUAL(uno::Any(style::PageStyleLayout_RIGHT), aPageLayout);
+
+ auto xHeaderText = getProperty<uno::Reference<text::XText>>(page1Style, "HeaderText");
+ auto xHeaderPara = getParagraphOfText(1, xHeaderText);
+ CPPUNIT_ASSERT_EQUAL(OUString("This is the header for odd pages"),
+ xHeaderPara->getString());
+ }
+
+ // Page2 comes from follow of style for page 1 and should be a normal page. Also check the two page style have the same properties,
+ // since page style for page1 was created from page style for page 2.
+ {
+ auto aFollowStyleName = getProperty<OUString>(page1Style, "FollowStyle");
+
+ uno::Reference<beans::XPropertySet> page2Style;
+ page2Style.set(xStyles->getByName(aFollowStyleName), uno::UNO_QUERY);
+ auto aPage2Layout = page2Style->getPropertyValue("PageStyleLayout");
+ CPPUNIT_ASSERT_EQUAL(uno::Any(style::PageStyleLayout_ALL), aPage2Layout);
+
+ auto xHeaderTextLeft
+ = getProperty<uno::Reference<text::XText>>(page2Style, "HeaderTextLeft");
+ auto xHeaderLeftPara = getParagraphOfText(1, xHeaderTextLeft);
+ CPPUNIT_ASSERT_EQUAL(OUString("This is the even header"), xHeaderLeftPara->getString());
+
+ auto xHeaderTextRight
+ = getProperty<uno::Reference<text::XText>>(page2Style, "HeaderTextRight");
+ auto xHeaderRightPara = getParagraphOfText(1, xHeaderTextRight);
+ CPPUNIT_ASSERT_EQUAL(OUString("This is the header for odd pages"),
+ xHeaderRightPara->getString());
+
+ CPPUNIT_ASSERT_EQUAL(getProperty<sal_Int32>(page1Style, "TopMargin"),
+ getProperty<sal_Int32>(page2Style, "TopMargin"));
+ }
+
+ // Page 5
+ {
+ auto xPara = getParagraph(4);
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("Then an odd break after an odd page, should lead us to page #5."),
+ xPara->getString());
+
+ OUString page5StyleName = getProperty<OUString>(xPara, "PageDescName");
+ uno::Reference<beans::XPropertySet> page5Style(xStyles->getByName(page5StyleName),
+ uno::UNO_QUERY);
+ auto aPageLayout = page5Style->getPropertyValue("PageStyleLayout");
+ CPPUNIT_ASSERT_EQUAL(uno::Any(style::PageStyleLayout_RIGHT), aPageLayout);
+
+ auto xHeaderText = getProperty<uno::Reference<text::XText>>(page5Style, "HeaderText");
+ auto xHeaderTextPara = getParagraphOfText(1, xHeaderText);
+ CPPUNIT_ASSERT_EQUAL(OUString("This is the header for odd pages"),
+ xHeaderTextPara->getString());
+ }
+ };
+
+ createSwDoc("bnc519228_odd-breaksB.docx");
+ verify();
+ saveAndReload("Office Open XML Text");
+ verify();
+}
+
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testBnc875718)
+{
+ createSwDoc("bnc875718.docx");
+ //saveAndReload("Office Open XML Text");
+
+ // The frame in the footer must not accidentally end up in the document body.
+ // The easiest way for this to test I've found is checking that
+ // xray ThisComponent.TextFrames.GetByIndex( index ).Anchor.Text.ImplementationName
+ // is not SwXBodyText but rather SwXHeadFootText
+ uno::Reference<text::XTextFramesSupplier> xTextFramesSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xIndexAccess(xTextFramesSupplier->getTextFrames(),
+ uno::UNO_QUERY);
+
+ // The sample bugdoc has 3 footer.xml and has a textframe in each. The first one is hidden
+ // and it has no text in its anchored text range: it is anchored to body text.
+ // At least one text frame should be connected to the header/footer
+
+ sal_Int32 nCheck = 0;
+ for (sal_Int32 i = 0; i < xIndexAccess->getCount(); ++i)
+ {
+ uno::Reference<text::XTextFrame> frame(xIndexAccess->getByIndex(i), uno::UNO_QUERY);
+ uno::Reference<text::XTextRange> range = frame->getAnchor();
+ uno::Reference<lang::XServiceInfo> aText(range->getText(), uno::UNO_QUERY);
+ OString aMessage("TextFrame " + OString::number(i) + "XText content is empty");
+ if (aText.is())
+ {
+ CPPUNIT_ASSERT_EQUAL_MESSAGE(aMessage.getStr(), OUString("SwXHeadFootText"),
+ aText->getImplementationName());
+ nCheck++;
+ }
+ }
+ CPPUNIT_ASSERT(nCheck > 0);
+
+ // Also check that the footer contents are not in the body text.
+ uno::Reference<text::XTextDocument> textDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> aText = textDocument->getText();
+ CPPUNIT_ASSERT(aText.is());
+ CPPUNIT_ASSERT_EQUAL(OUString("Text"), aText->getString());
+}
+
+// base class to supply a helper method for testHFLinkToPrev
+class TestHFBase : public HeaderFooterTest
+{
+protected:
+ OUString getHFText(const uno::Reference<style::XStyle>& xPageStyle, const OUString& sPropName)
+ {
+ auto xTextRange = getProperty<uno::Reference<text::XTextRange>>(xPageStyle, sPropName);
+ return xTextRange->getString();
+ }
+};
+
+CPPUNIT_TEST_FIXTURE(TestHFBase, testHFLinkToPrev)
+{
+ auto verify = [this]() {
+ uno::Reference<container::XNameAccess> xPageStyles = getStyles("PageStyles");
+
+ // get a page cursor
+ uno::Reference<frame::XModel> xModel(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextViewCursorSupplier> xTextViewCursorSupplier(
+ xModel->getCurrentController(), uno::UNO_QUERY);
+ uno::Reference<text::XPageCursor> xCursor(xTextViewCursorSupplier->getViewCursor(),
+ uno::UNO_QUERY);
+
+ // get LO page style for page 1, corresponding to docx section 1 first page
+ xCursor->jumpToFirstPage();
+ OUString pageStyleName = getProperty<OUString>(xCursor, "PageStyleName");
+ uno::Reference<style::XStyle> xPageStyle(xPageStyles->getByName(pageStyleName),
+ uno::UNO_QUERY);
+ // check page 1 header & footer text
+ CPPUNIT_ASSERT_EQUAL(OUString("First page header for all sections"),
+ getHFText(xPageStyle, "HeaderTextFirst"));
+ CPPUNIT_ASSERT_EQUAL(OUString("First page footer for section 1 only"),
+ getHFText(xPageStyle, "FooterTextFirst"));
+
+ // get LO page style for page 2, corresponding to docx section 1
+ xCursor->jumpToPage(2);
+ pageStyleName = getProperty<OUString>(xCursor, "PageStyleName");
+ xPageStyle.set(xPageStyles->getByName(pageStyleName), uno::UNO_QUERY);
+ // check header & footer text
+ CPPUNIT_ASSERT_EQUAL(OUString("Even page header for section 1 only"),
+ getHFText(xPageStyle, "HeaderTextLeft"));
+ CPPUNIT_ASSERT_EQUAL(OUString("Even page footer for all sections"),
+ getHFText(xPageStyle, "FooterTextLeft"));
+ CPPUNIT_ASSERT_EQUAL(OUString("Odd page header for all sections"),
+ getHFText(xPageStyle, "HeaderText"));
+ CPPUNIT_ASSERT_EQUAL(OUString("Odd page footer for section 1 only"),
+ getHFText(xPageStyle, "FooterText"));
+
+ // get LO page style for page 4, corresponding to docx section 2 first page
+ xCursor->jumpToPage(4);
+ pageStyleName = getProperty<OUString>(xCursor, "PageStyleName");
+ xPageStyle.set(xPageStyles->getByName(pageStyleName), uno::UNO_QUERY);
+ // check header & footer text
+ CPPUNIT_ASSERT_EQUAL(OUString("First page header for all sections"),
+ getHFText(xPageStyle, "HeaderTextFirst"));
+ CPPUNIT_ASSERT_EQUAL(OUString("First page footer for sections 2 and 3 only"),
+ getHFText(xPageStyle, "FooterTextFirst"));
+
+ // get LO page style for page 5, corresponding to docx section 2
+ xCursor->jumpToPage(5);
+ pageStyleName = getProperty<OUString>(xCursor, "PageStyleName");
+ xPageStyle.set(xPageStyles->getByName(pageStyleName), uno::UNO_QUERY);
+ // check header & footer text
+ CPPUNIT_ASSERT_EQUAL(OUString("Even page header for sections 2 and 3 only"),
+ getHFText(xPageStyle, "HeaderTextLeft"));
+ CPPUNIT_ASSERT_EQUAL(OUString("Even page footer for all sections"),
+ getHFText(xPageStyle, "FooterTextLeft"));
+ CPPUNIT_ASSERT_EQUAL(OUString("Odd page header for all sections"),
+ getHFText(xPageStyle, "HeaderText"));
+ CPPUNIT_ASSERT_EQUAL(OUString("Odd page footer for sections 2 and 3 only"),
+ getHFText(xPageStyle, "FooterText"));
+
+ // get LO page style for page 7, corresponding to docx section 3 first page
+ xCursor->jumpToPage(7);
+ pageStyleName = getProperty<OUString>(xCursor, "PageStyleName");
+ xPageStyle.set(xPageStyles->getByName(pageStyleName), uno::UNO_QUERY);
+ // check header & footer text
+ CPPUNIT_ASSERT_EQUAL(OUString("First page header for all sections"),
+ getHFText(xPageStyle, "HeaderTextFirst"));
+ CPPUNIT_ASSERT_EQUAL(OUString("First page footer for sections 2 and 3 only"),
+ getHFText(xPageStyle, "FooterTextFirst"));
+
+ // get LO page style for page 8, corresponding to docx section 3
+ xCursor->jumpToPage(8);
+ pageStyleName = getProperty<OUString>(xCursor, "PageStyleName");
+ xPageStyle.set(xPageStyles->getByName(pageStyleName), uno::UNO_QUERY);
+ // check header & footer text
+ CPPUNIT_ASSERT_EQUAL(OUString("Even page header for sections 2 and 3 only"),
+ getHFText(xPageStyle, "HeaderTextLeft"));
+ CPPUNIT_ASSERT_EQUAL(OUString("Even page footer for all sections"),
+ getHFText(xPageStyle, "FooterTextLeft"));
+ CPPUNIT_ASSERT_EQUAL(OUString("Odd page header for all sections"),
+ getHFText(xPageStyle, "HeaderText"));
+ CPPUNIT_ASSERT_EQUAL(OUString("Odd page footer for sections 2 and 3 only"),
+ getHFText(xPageStyle, "FooterText"));
+ };
+ createSwDoc("headerfooter-link-to-prev.docx");
+ verify();
+ saveAndReload("Office Open XML Text");
+ verify();
+}
+
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testN750935)
+{
+ auto verify = [this]() {
+ // Some page break types were ignores, resulting in less pages.
+ CPPUNIT_ASSERT_EQUAL(5, getPages());
+
+ // The problem was that the header and footer was not shared.
+ // xray ThisComponent.StyleFamilies.PageStyles.Default.FooterIsShared
+ uno::Reference<beans::XPropertySet> xPropertySet(
+ getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY);
+ bool bValue = false;
+ xPropertySet->getPropertyValue("HeaderIsShared") >>= bValue;
+ CPPUNIT_ASSERT_EQUAL(true, bValue);
+ xPropertySet->getPropertyValue("FooterIsShared") >>= bValue;
+ CPPUNIT_ASSERT_EQUAL(true, bValue);
+ };
+ createSwDoc("n750935.docx");
+ verify();
+ saveAndReload("Office Open XML Text");
+ verify();
+}
+
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testOnlyLeftPageStyle)
+{
+ createSwDoc("TestPageStyleOnlyLeft.docx");
+ saveAndReload("Office Open XML Text");
+ // There should be 2 pages - first page should be blank
+ CPPUNIT_ASSERT_EQUAL(2, getPages());
+}
+
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testMsoPosition)
+{
+ auto verifyFooter = [this]() {
+ xmlDocUniquePtr doc = parseExport("word/footer2.xml");
+ // We write the frames out in different order than they were read, so check it's the correct
+ // textbox first by checking width. These tests may need reordering if that gets fixed.
+ OUString style1
+ = getXPath(doc, "/w:ftr/w:p/w:r[3]/mc:AlternateContent/mc:Fallback/w:pict/v:rect"_ostr,
+ "style"_ostr);
+ CPPUNIT_ASSERT(style1.indexOf(";width:531pt;") >= 0);
+ CPPUNIT_ASSERT(style1.indexOf(";mso-position-vertical-relative:page") >= 0);
+ CPPUNIT_ASSERT(style1.indexOf(";mso-position-horizontal-relative:page") >= 0);
+ OUString style2
+ = getXPath(doc, "/w:ftr/w:p/w:r[4]/mc:AlternateContent/mc:Fallback/w:pict/v:rect"_ostr,
+ "style"_ostr);
+ CPPUNIT_ASSERT(style2.indexOf(";width:549pt;") >= 0);
+ CPPUNIT_ASSERT(style2.indexOf(";mso-position-vertical-relative:text") >= 0);
+ CPPUNIT_ASSERT(style2.indexOf(";mso-position-horizontal:center") >= 0);
+ CPPUNIT_ASSERT(style2.indexOf(";mso-position-horizontal-relative:text") >= 0);
+ OUString style3
+ = getXPath(doc, "/w:ftr/w:p/w:r[5]/mc:AlternateContent/mc:Fallback/w:pict/v:rect"_ostr,
+ "style"_ostr);
+ CPPUNIT_ASSERT(style3.indexOf(";width:36pt;") >= 0);
+ CPPUNIT_ASSERT(style3.indexOf(";mso-position-horizontal-relative:text") >= 0);
+ CPPUNIT_ASSERT(style3.indexOf(";mso-position-vertical-relative:text") >= 0);
+ };
+
+ auto verifyHeader = [this]() {
+ xmlDocUniquePtr doc = parseExport("word/header2.xml");
+ OUString style1
+ = getXPath(doc, "/w:hdr/w:p/w:r[2]/mc:AlternateContent/mc:Fallback/w:pict/v:rect"_ostr,
+ "style"_ostr);
+ CPPUNIT_ASSERT(style1.indexOf(";width:335.75pt;") >= 0);
+ CPPUNIT_ASSERT(style1.indexOf(";mso-position-horizontal-relative:page") >= 0);
+ CPPUNIT_ASSERT(style1.indexOf(";mso-position-vertical-relative:page") >= 0);
+ OUString style2
+ = getXPath(doc, "/w:hdr/w:p/w:r[3]/mc:AlternateContent/mc:Fallback/w:pict/v:rect"_ostr,
+ "style"_ostr);
+ CPPUNIT_ASSERT(style2.indexOf(";width:138.15pt;") >= 0);
+ CPPUNIT_ASSERT(style2.indexOf(";mso-position-horizontal-relative:page") >= 0);
+ CPPUNIT_ASSERT(style2.indexOf(";mso-position-vertical-relative:page") >= 0);
+ OUString style3
+ = getXPath(doc, "/w:hdr/w:p/w:r[4]/mc:AlternateContent/mc:Fallback/w:pict/v:rect"_ostr,
+ "style"_ostr);
+ CPPUNIT_ASSERT(style3.indexOf(";width:163.8pt;") >= 0);
+ CPPUNIT_ASSERT(style3.indexOf(";mso-position-horizontal-relative:page") >= 0);
+ CPPUNIT_ASSERT(style3.indexOf(";mso-position-vertical-relative:page") >= 0);
+ };
+
+ createSwDoc("bnc884615-mso-position.docx");
+ saveAndReload("Office Open XML Text");
+ verifyHeader();
+ verifyFooter();
+}
+
+void HeaderFooterTest::checkParagraph(sal_Int32 nNumber, OUString const& rParagraphString,
+ OUString const& rConnectedPageStyle)
+{
+ uno::Reference<beans::XPropertySet> xPropertySet(getParagraphOrTable(nNumber), uno::UNO_QUERY);
+
+ uno::Reference<text::XTextRange> xTextRange(xPropertySet, uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(rParagraphString, xTextRange->getString());
+
+ OUString pageStyle;
+ xPropertySet->getPropertyValue("PageStyleName") >>= pageStyle;
+ CPPUNIT_ASSERT_EQUAL(rConnectedPageStyle, pageStyle);
+}
+
+void HeaderFooterTest::checkFirstRestHeaderPageStyles()
+{
+ // Page 1
+ checkParagraph(1, "P1", "Standard");
+
+ // Page 2
+ checkParagraph(2, "P2", "Standard");
+
+ // Page 3
+ checkParagraph(3, "P3", "Standard");
+
+ // Check Default Style
+ {
+ uno::Reference<beans::XPropertySet> xPageStyle(
+ getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY);
+
+ bool bHeader = getProperty<bool>(xPageStyle, "HeaderIsOn");
+ CPPUNIT_ASSERT_EQUAL(true, bHeader);
+
+ bool bHeaderIsShared = getProperty<bool>(xPageStyle, "HeaderIsShared");
+ CPPUNIT_ASSERT_EQUAL(true, bHeaderIsShared);
+
+ bool bFirstIsShared = getProperty<bool>(xPageStyle, "FirstIsShared");
+ CPPUNIT_ASSERT_EQUAL(false, bFirstIsShared);
+
+ auto xHeaderTextFirst
+ = getProperty<uno::Reference<text::XText>>(xPageStyle, "HeaderTextFirst");
+ CPPUNIT_ASSERT_EQUAL(OUString("FIRST"), xHeaderTextFirst->getString());
+
+ auto xHeaderText = getProperty<uno::Reference<text::XText>>(xPageStyle, "HeaderText");
+ CPPUNIT_ASSERT_EQUAL(OUString("NON-FIRST"), xHeaderText->getString());
+ }
+}
+
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testFirstRestHeaderPageStyles_ODF)
+{
+ createSwDoc("SimpleFirst.odt");
+ checkFirstRestHeaderPageStyles();
+}
+
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testFirstRestHeaderPageStyles_OOXML)
+{
+ createSwDoc("SimpleFirst.docx");
+ checkFirstRestHeaderPageStyles();
+}
+
+void HeaderFooterTest::checkLeftRightHeaderPageStyles()
+{
+ // Page 1
+ checkParagraph(1, "P1", "Standard");
+
+ // Page 2
+ checkParagraph(2, "P2", "Standard");
+
+ // Page 3
+ checkParagraph(3, "P3", "Standard");
+
+ // Page 4
+ checkParagraph(4, "P4", "Standard");
+
+ // Check Default Style
+ {
+ uno::Reference<beans::XPropertySet> xPageStyle(
+ getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY);
+
+ bool bHeader = getProperty<bool>(xPageStyle, "HeaderIsOn");
+ CPPUNIT_ASSERT_EQUAL(true, bHeader);
+
+ bool bHeaderIsShared = getProperty<bool>(xPageStyle, "HeaderIsShared");
+ CPPUNIT_ASSERT_EQUAL(false, bHeaderIsShared);
+
+ bool bFirstIsShared = getProperty<bool>(xPageStyle, "FirstIsShared");
+ CPPUNIT_ASSERT_EQUAL(true, bFirstIsShared);
+
+ auto xHeaderTextLeft
+ = getProperty<uno::Reference<text::XText>>(xPageStyle, "HeaderTextLeft");
+ CPPUNIT_ASSERT_EQUAL(OUString("LEFT"), xHeaderTextLeft->getString());
+
+ auto xHeaderTextRight
+ = getProperty<uno::Reference<text::XText>>(xPageStyle, "HeaderTextRight");
+ CPPUNIT_ASSERT_EQUAL(OUString("RIGHT"), xHeaderTextRight->getString());
+ }
+}
+
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testLeftRightHeaderPageStyles_ODF)
+{
+ createSwDoc("SimpleLeftRight.odt");
+ checkLeftRightHeaderPageStyles();
+}
+
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testLeftRightHeaderPageStyles_OOXML)
+{
+ createSwDoc("SimpleLeftRight.docx");
+ checkLeftRightHeaderPageStyles();
+}
+
+void HeaderFooterTest::checkFirstLeftRightHeaderPageStyles()
+{
+ // Page 1
+ checkParagraph(1, "Para 1", "Standard");
+
+ // Page 2
+ checkParagraph(2, "Para 2", "Standard");
+
+ // Page 3
+ checkParagraph(3, "Para 3", "Standard");
+
+ // Page 4
+ checkParagraph(4, "Para 4", "Standard");
+
+ // Page 5
+ checkParagraph(5, "Para 5", "Standard");
+
+ // Check Default Style
+ uno::Reference<beans::XPropertySet> xPageStyle(getStyles("PageStyles")->getByName("Standard"),
+ uno::UNO_QUERY);
+
+ bool bHeader = getProperty<bool>(xPageStyle, "HeaderIsOn");
+ CPPUNIT_ASSERT_EQUAL(true, bHeader);
+
+ bool bFooter = getProperty<bool>(xPageStyle, "FooterIsOn");
+ CPPUNIT_ASSERT_EQUAL(true, bFooter);
+
+ bool bHeaderIsShared = getProperty<bool>(xPageStyle, "HeaderIsShared");
+ CPPUNIT_ASSERT_EQUAL(false, bHeaderIsShared);
+
+ bool bFooterIsShared = getProperty<bool>(xPageStyle, "FooterIsShared");
+ CPPUNIT_ASSERT_EQUAL(false, bFooterIsShared);
+
+ bool bFirstIsShared = getProperty<bool>(xPageStyle, "FirstIsShared");
+ CPPUNIT_ASSERT_EQUAL(false, bFirstIsShared);
+
+ auto xHeaderTextFirst = getProperty<uno::Reference<text::XText>>(xPageStyle, "HeaderTextFirst");
+ CPPUNIT_ASSERT_EQUAL(OUString("FIRST HEADER"), xHeaderTextFirst->getString());
+
+ auto xHeaderTextLeft = getProperty<uno::Reference<text::XText>>(xPageStyle, "HeaderTextLeft");
+ CPPUNIT_ASSERT_EQUAL(OUString("LEFT HEADER"), xHeaderTextLeft->getString());
+
+ auto xHeaderTextRight = getProperty<uno::Reference<text::XText>>(xPageStyle, "HeaderText");
+ CPPUNIT_ASSERT_EQUAL(OUString("RIGHT HEADER"), xHeaderTextRight->getString());
+
+ auto xFooterTextFirst = getProperty<uno::Reference<text::XText>>(xPageStyle, "FooterTextFirst");
+ CPPUNIT_ASSERT_EQUAL(OUString("FIRST FOOTER"), xFooterTextFirst->getString());
+
+ auto xFooterTextLeft = getProperty<uno::Reference<text::XText>>(xPageStyle, "FooterTextLeft");
+ CPPUNIT_ASSERT_EQUAL(OUString("LEFT FOOTER"), xFooterTextLeft->getString());
+
+ auto xFooterTextRight = getProperty<uno::Reference<text::XText>>(xPageStyle, "FooterText");
+ CPPUNIT_ASSERT_EQUAL(OUString("RIGHT FOOTER"), xFooterTextRight->getString());
+}
+
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testFirstLeftRightHeaderPageStyles_ODF)
+{
+ createSwDoc("SimpleFirstLeftRight.odt");
+ checkFirstLeftRightHeaderPageStyles();
+}
+
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testFirstLeftRightHeaderPageStyles_OOXML)
+{
+ createSwDoc("SimpleFirstLeftRight.docx");
+ checkFirstLeftRightHeaderPageStyles();
+}
+
+void HeaderFooterTest::checkDoubleFirstLeftRightHeaderPageStyles(
+ OUString const& rCustomPageStyleName)
+{
+ // Page 1
+ checkParagraph(1, "Para 1 - Default", "Standard");
+
+ // Page 2
+ checkParagraph(2, "Para 2 - Default", "Standard");
+
+ // Page 3
+ checkParagraph(3, "Para 3 - Default", "Standard");
+
+ // Page 4
+ checkParagraph(4, "Para 4 - Custom", rCustomPageStyleName);
+
+ // Page 5
+ checkParagraph(5, "Para 5 - Custom", rCustomPageStyleName);
+
+ // Page 6
+ checkParagraph(6, "Para 6 - Custom", rCustomPageStyleName);
+
+ // Check Default Style
+ {
+ uno::Reference<beans::XPropertySet> xPageStyle(
+ getStyles("PageStyles")->getByName("Standard"), uno::UNO_QUERY);
+
+ bool bHeader = getProperty<bool>(xPageStyle, "HeaderIsOn");
+ CPPUNIT_ASSERT_EQUAL(true, bHeader);
+
+ bool bFooter = getProperty<bool>(xPageStyle, "FooterIsOn");
+ CPPUNIT_ASSERT_EQUAL(true, bFooter);
+
+ bool bHeaderIsShared = getProperty<bool>(xPageStyle, "HeaderIsShared");
+ CPPUNIT_ASSERT_EQUAL(false, bHeaderIsShared);
+
+ bool bFooterIsShared = getProperty<bool>(xPageStyle, "FooterIsShared");
+ CPPUNIT_ASSERT_EQUAL(false, bFooterIsShared);
+
+ bool bFirstIsShared = getProperty<bool>(xPageStyle, "FirstIsShared");
+ CPPUNIT_ASSERT_EQUAL(false, bFirstIsShared);
+
+ auto xHeaderTextFirst
+ = getProperty<uno::Reference<text::XText>>(xPageStyle, "HeaderTextFirst");
+ CPPUNIT_ASSERT_EQUAL(OUString("FIRST HEADER"), xHeaderTextFirst->getString());
+
+ auto xHeaderTextLeft
+ = getProperty<uno::Reference<text::XText>>(xPageStyle, "HeaderTextLeft");
+ CPPUNIT_ASSERT_EQUAL(OUString("LEFT HEADER"), xHeaderTextLeft->getString());
+
+ auto xHeaderTextRight = getProperty<uno::Reference<text::XText>>(xPageStyle, "HeaderText");
+ CPPUNIT_ASSERT_EQUAL(OUString("RIGHT HEADER"), xHeaderTextRight->getString());
+
+ auto xFooterTextFirst
+ = getProperty<uno::Reference<text::XText>>(xPageStyle, "FooterTextFirst");
+ CPPUNIT_ASSERT_EQUAL(OUString("FIRST FOOTER"), xFooterTextFirst->getString());
+
+ auto xFooterTextLeft
+ = getProperty<uno::Reference<text::XText>>(xPageStyle, "FooterTextLeft");
+ CPPUNIT_ASSERT_EQUAL(OUString("LEFT FOOTER"), xFooterTextLeft->getString());
+
+ auto xFooterTextRight = getProperty<uno::Reference<text::XText>>(xPageStyle, "FooterText");
+ CPPUNIT_ASSERT_EQUAL(OUString("RIGHT FOOTER"), xFooterTextRight->getString());
+ }
+
+ {
+ uno::Reference<beans::XPropertySet> xPageStyle(
+ getStyles("PageStyles")->getByName(rCustomPageStyleName), uno::UNO_QUERY);
+
+ bool bHeader = getProperty<bool>(xPageStyle, "HeaderIsOn");
+ CPPUNIT_ASSERT_EQUAL(true, bHeader);
+
+ bool bFooter = getProperty<bool>(xPageStyle, "FooterIsOn");
+ CPPUNIT_ASSERT_EQUAL(true, bFooter);
+
+ bool bHeaderIsShared = getProperty<bool>(xPageStyle, "HeaderIsShared");
+ CPPUNIT_ASSERT_EQUAL(false, bHeaderIsShared);
+
+ bool bFooterIsShared = getProperty<bool>(xPageStyle, "FooterIsShared");
+ CPPUNIT_ASSERT_EQUAL(false, bFooterIsShared);
+
+ bool bFirstIsShared = getProperty<bool>(xPageStyle, "FirstIsShared");
+ CPPUNIT_ASSERT_EQUAL(false, bFirstIsShared);
+
+ auto xHeaderTextFirst
+ = getProperty<uno::Reference<text::XText>>(xPageStyle, "HeaderTextFirst");
+ CPPUNIT_ASSERT_EQUAL(OUString("FIRST HEADER - CUSTOM"), xHeaderTextFirst->getString());
+
+ auto xHeaderTextLeft
+ = getProperty<uno::Reference<text::XText>>(xPageStyle, "HeaderTextLeft");
+ CPPUNIT_ASSERT_EQUAL(OUString("LEFT HEADER - CUSTOM"), xHeaderTextLeft->getString());
+
+ auto xHeaderTextRight = getProperty<uno::Reference<text::XText>>(xPageStyle, "HeaderText");
+ CPPUNIT_ASSERT_EQUAL(OUString("RIGHT HEADER - CUSTOM"), xHeaderTextRight->getString());
+
+ auto xFooterTextFirst
+ = getProperty<uno::Reference<text::XText>>(xPageStyle, "FooterTextFirst");
+ CPPUNIT_ASSERT_EQUAL(OUString("FIRST FOOTER - CUSTOM"), xFooterTextFirst->getString());
+
+ auto xFooterTextLeft
+ = getProperty<uno::Reference<text::XText>>(xPageStyle, "FooterTextLeft");
+ CPPUNIT_ASSERT_EQUAL(OUString("LEFT FOOTER - CUSTOM"), xFooterTextLeft->getString());
+
+ auto xFooterTextRight = getProperty<uno::Reference<text::XText>>(xPageStyle, "FooterText");
+ CPPUNIT_ASSERT_EQUAL(OUString("RIGHT FOOTER - CUSTOM"), xFooterTextRight->getString());
+ }
+}
+
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testDoubleFirstLeftRightHeaderPageStyles_ODF)
+{
+ createSwDoc("DoubleFirstLeftRight.odt");
+ checkDoubleFirstLeftRightHeaderPageStyles("Custom Page Style");
+}
+
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testDoubleFirstLeftRightHeaderPageStyles_OOXML)
+{
+ createSwDoc("DoubleFirstLeftRight.docx");
+ checkDoubleFirstLeftRightHeaderPageStyles("Converted1");
+}
+
+void HeaderFooterTest::checkShapeInFirstPageHeader()
+{
+ // Check Default Style
+ uno::Reference<beans::XPropertySet> xPageStyle(getStyles("PageStyles")->getByName("Standard"),
+ uno::UNO_QUERY);
+
+ bool bHeader = getProperty<bool>(xPageStyle, "HeaderIsOn");
+ CPPUNIT_ASSERT_EQUAL(true, bHeader);
+
+ bool bFooter = getProperty<bool>(xPageStyle, "FooterIsOn");
+ CPPUNIT_ASSERT_EQUAL(false, bFooter);
+
+ bool bHeaderIsShared = getProperty<bool>(xPageStyle, "HeaderIsShared");
+ CPPUNIT_ASSERT_EQUAL(true, bHeaderIsShared);
+
+ bool bFirstIsShared = getProperty<bool>(xPageStyle, "FirstIsShared");
+ CPPUNIT_ASSERT_EQUAL(false, bFirstIsShared);
+
+ // Check shape is anchored to paragraph belonging to XText from "HeaderTextFirst" property
+ auto xHeaderTextFirst = getProperty<uno::Reference<text::XText>>(xPageStyle, "HeaderTextFirst");
+ CPPUNIT_ASSERT(xHeaderTextFirst.is());
+
+ uno::Reference<text::XTextContent> xShapeText(getShape(1), uno::UNO_QUERY);
+ CPPUNIT_ASSERT(xShapeText.is());
+ uno::Reference<text::XTextRange> xAnchor = xShapeText->getAnchor();
+ CPPUNIT_ASSERT(xAnchor.is());
+
+ CPPUNIT_ASSERT_EQUAL(xHeaderTextFirst, xAnchor->getText());
+}
+
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testFirstPageHeaderShape_ODF)
+{
+ createSwDoc("FirstPageHeaderShape.odt");
+ checkShapeInFirstPageHeader();
+}
+
+CPPUNIT_TEST_FIXTURE(HeaderFooterTest, testFirstPageHeaderShape_OOXML)
+{
+ createSwDoc("FirstPageHeaderShape.docx");
+ checkShapeInFirstPageHeader();
+}
+
+} // end anonymous namespace
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/header_footer/data/DoubleFirstLeftRight.docx b/sw/qa/core/header_footer/data/DoubleFirstLeftRight.docx
new file mode 100644
index 0000000000..307567507d
--- /dev/null
+++ b/sw/qa/core/header_footer/data/DoubleFirstLeftRight.docx
Binary files differ
diff --git a/sw/qa/core/header_footer/data/DoubleFirstLeftRight.odt b/sw/qa/core/header_footer/data/DoubleFirstLeftRight.odt
new file mode 100644
index 0000000000..3bef1c87b6
--- /dev/null
+++ b/sw/qa/core/header_footer/data/DoubleFirstLeftRight.odt
Binary files differ
diff --git a/sw/qa/core/header_footer/data/FirstPageHeaderShape.docx b/sw/qa/core/header_footer/data/FirstPageHeaderShape.docx
new file mode 100644
index 0000000000..baed4b215e
--- /dev/null
+++ b/sw/qa/core/header_footer/data/FirstPageHeaderShape.docx
Binary files differ
diff --git a/sw/qa/core/header_footer/data/FirstPageHeaderShape.odt b/sw/qa/core/header_footer/data/FirstPageHeaderShape.odt
new file mode 100644
index 0000000000..7053423d00
--- /dev/null
+++ b/sw/qa/core/header_footer/data/FirstPageHeaderShape.odt
Binary files differ
diff --git a/sw/qa/core/header_footer/data/SimpleFirst.docx b/sw/qa/core/header_footer/data/SimpleFirst.docx
new file mode 100644
index 0000000000..1641a2d084
--- /dev/null
+++ b/sw/qa/core/header_footer/data/SimpleFirst.docx
Binary files differ
diff --git a/sw/qa/core/header_footer/data/SimpleFirst.odt b/sw/qa/core/header_footer/data/SimpleFirst.odt
new file mode 100644
index 0000000000..fc165e966f
--- /dev/null
+++ b/sw/qa/core/header_footer/data/SimpleFirst.odt
Binary files differ
diff --git a/sw/qa/core/header_footer/data/SimpleFirstLeftRight.docx b/sw/qa/core/header_footer/data/SimpleFirstLeftRight.docx
new file mode 100644
index 0000000000..d0a8ed02e8
--- /dev/null
+++ b/sw/qa/core/header_footer/data/SimpleFirstLeftRight.docx
Binary files differ
diff --git a/sw/qa/core/header_footer/data/SimpleFirstLeftRight.odt b/sw/qa/core/header_footer/data/SimpleFirstLeftRight.odt
new file mode 100644
index 0000000000..a16cc922fc
--- /dev/null
+++ b/sw/qa/core/header_footer/data/SimpleFirstLeftRight.odt
Binary files differ
diff --git a/sw/qa/core/header_footer/data/SimpleLeftRight.docx b/sw/qa/core/header_footer/data/SimpleLeftRight.docx
new file mode 100644
index 0000000000..80dbda0420
--- /dev/null
+++ b/sw/qa/core/header_footer/data/SimpleLeftRight.docx
Binary files differ
diff --git a/sw/qa/core/header_footer/data/SimpleLeftRight.odt b/sw/qa/core/header_footer/data/SimpleLeftRight.odt
new file mode 100644
index 0000000000..61302944da
--- /dev/null
+++ b/sw/qa/core/header_footer/data/SimpleLeftRight.odt
Binary files differ
diff --git a/sw/qa/core/header_footer/data/TestFirstFooterDisabled.docx b/sw/qa/core/header_footer/data/TestFirstFooterDisabled.docx
new file mode 100644
index 0000000000..2fe9a17668
--- /dev/null
+++ b/sw/qa/core/header_footer/data/TestFirstFooterDisabled.docx
Binary files differ
diff --git a/sw/qa/core/header_footer/data/TestPageStyleOnlyLeft.docx b/sw/qa/core/header_footer/data/TestPageStyleOnlyLeft.docx
new file mode 100644
index 0000000000..4714b8e27f
--- /dev/null
+++ b/sw/qa/core/header_footer/data/TestPageStyleOnlyLeft.docx
Binary files differ
diff --git a/sw/qa/core/header_footer/data/bnc519228_odd-breaksB.docx b/sw/qa/core/header_footer/data/bnc519228_odd-breaksB.docx
new file mode 100644
index 0000000000..674d714011
--- /dev/null
+++ b/sw/qa/core/header_footer/data/bnc519228_odd-breaksB.docx
Binary files differ
diff --git a/sw/qa/core/header_footer/data/bnc875718.docx b/sw/qa/core/header_footer/data/bnc875718.docx
new file mode 100644
index 0000000000..878a46fdf9
--- /dev/null
+++ b/sw/qa/core/header_footer/data/bnc875718.docx
Binary files differ
diff --git a/sw/qa/core/header_footer/data/bnc884615-mso-position.docx b/sw/qa/core/header_footer/data/bnc884615-mso-position.docx
new file mode 100644
index 0000000000..2fb28ecfb3
--- /dev/null
+++ b/sw/qa/core/header_footer/data/bnc884615-mso-position.docx
Binary files differ
diff --git a/sw/qa/core/header_footer/data/cont-sect-break-header-footer.docx b/sw/qa/core/header_footer/data/cont-sect-break-header-footer.docx
new file mode 100644
index 0000000000..61c18298d0
--- /dev/null
+++ b/sw/qa/core/header_footer/data/cont-sect-break-header-footer.docx
Binary files differ
diff --git a/sw/qa/core/header_footer/data/fdo64238_a.docx b/sw/qa/core/header_footer/data/fdo64238_a.docx
new file mode 100644
index 0000000000..7c43feaf75
--- /dev/null
+++ b/sw/qa/core/header_footer/data/fdo64238_a.docx
Binary files differ
diff --git a/sw/qa/core/header_footer/data/fdo64238_b.docx b/sw/qa/core/header_footer/data/fdo64238_b.docx
new file mode 100644
index 0000000000..bfaf92cca2
--- /dev/null
+++ b/sw/qa/core/header_footer/data/fdo64238_b.docx
Binary files differ
diff --git a/sw/qa/core/header_footer/data/fdo65655.docx b/sw/qa/core/header_footer/data/fdo65655.docx
new file mode 100644
index 0000000000..5fe9451bb0
--- /dev/null
+++ b/sw/qa/core/header_footer/data/fdo65655.docx
Binary files differ
diff --git a/sw/qa/core/header_footer/data/fdo66145.docx b/sw/qa/core/header_footer/data/fdo66145.docx
new file mode 100644
index 0000000000..62ffdbe22e
--- /dev/null
+++ b/sw/qa/core/header_footer/data/fdo66145.docx
Binary files differ
diff --git a/sw/qa/core/header_footer/data/first-header-footer.doc b/sw/qa/core/header_footer/data/first-header-footer.doc
new file mode 100644
index 0000000000..023c494862
--- /dev/null
+++ b/sw/qa/core/header_footer/data/first-header-footer.doc
Binary files differ
diff --git a/sw/qa/core/header_footer/data/first-header-footer.docx b/sw/qa/core/header_footer/data/first-header-footer.docx
new file mode 100644
index 0000000000..d18eea5866
--- /dev/null
+++ b/sw/qa/core/header_footer/data/first-header-footer.docx
Binary files differ
diff --git a/sw/qa/core/header_footer/data/first-header-footer.odt b/sw/qa/core/header_footer/data/first-header-footer.odt
new file mode 100644
index 0000000000..2ed6b740a1
--- /dev/null
+++ b/sw/qa/core/header_footer/data/first-header-footer.odt
Binary files differ
diff --git a/sw/qa/core/header_footer/data/first-header-footerB.odt b/sw/qa/core/header_footer/data/first-header-footerB.odt
new file mode 100644
index 0000000000..0ae1992ed7
--- /dev/null
+++ b/sw/qa/core/header_footer/data/first-header-footerB.odt
Binary files differ
diff --git a/sw/qa/core/header_footer/data/headerfooter-link-to-prev.docx b/sw/qa/core/header_footer/data/headerfooter-link-to-prev.docx
new file mode 100644
index 0000000000..cc4ddc89bb
--- /dev/null
+++ b/sw/qa/core/header_footer/data/headerfooter-link-to-prev.docx
Binary files differ
diff --git a/sw/qa/core/header_footer/data/n750935.docx b/sw/qa/core/header_footer/data/n750935.docx
new file mode 100644
index 0000000000..0dd01592dd
--- /dev/null
+++ b/sw/qa/core/header_footer/data/n750935.docx
Binary files differ
diff --git a/sw/qa/core/header_footer/data/tdf112694.docx b/sw/qa/core/header_footer/data/tdf112694.docx
new file mode 100644
index 0000000000..f629a388e3
--- /dev/null
+++ b/sw/qa/core/header_footer/data/tdf112694.docx
Binary files differ
diff --git a/sw/qa/core/header_footer/data/tdf113849_evenAndOddHeaders.odt b/sw/qa/core/header_footer/data/tdf113849_evenAndOddHeaders.odt
new file mode 100644
index 0000000000..d9aa0ae235
--- /dev/null
+++ b/sw/qa/core/header_footer/data/tdf113849_evenAndOddHeaders.odt
Binary files differ
diff --git a/sw/qa/core/header_footer/data/tdf118393.odt b/sw/qa/core/header_footer/data/tdf118393.odt
new file mode 100644
index 0000000000..ff8d540095
--- /dev/null
+++ b/sw/qa/core/header_footer/data/tdf118393.odt
Binary files differ
diff --git a/sw/qa/core/header_footer/data/tdf127778.docx b/sw/qa/core/header_footer/data/tdf127778.docx
new file mode 100644
index 0000000000..a706d57576
--- /dev/null
+++ b/sw/qa/core/header_footer/data/tdf127778.docx
Binary files differ
diff --git a/sw/qa/core/header_footer/data/tdf129582.docx b/sw/qa/core/header_footer/data/tdf129582.docx
new file mode 100644
index 0000000000..d160262ae7
--- /dev/null
+++ b/sw/qa/core/header_footer/data/tdf129582.docx
Binary files differ
diff --git a/sw/qa/core/header_footer/data/tdf135216_evenOddFooter.docx b/sw/qa/core/header_footer/data/tdf135216_evenOddFooter.docx
new file mode 100644
index 0000000000..05840f9848
--- /dev/null
+++ b/sw/qa/core/header_footer/data/tdf135216_evenOddFooter.docx
Binary files differ
diff --git a/sw/qa/core/header_footer/data/tdf135216_evenOddFooter.odt b/sw/qa/core/header_footer/data/tdf135216_evenOddFooter.odt
new file mode 100644
index 0000000000..ab0ac591e2
--- /dev/null
+++ b/sw/qa/core/header_footer/data/tdf135216_evenOddFooter.odt
Binary files differ
diff --git a/sw/qa/core/header_footer/data/tdf145998_firstHeader.odt b/sw/qa/core/header_footer/data/tdf145998_firstHeader.odt
new file mode 100644
index 0000000000..ad5e4c3e03
--- /dev/null
+++ b/sw/qa/core/header_footer/data/tdf145998_firstHeader.odt
Binary files differ
diff --git a/sw/qa/core/header_footer/data/tdf57155.docx b/sw/qa/core/header_footer/data/tdf57155.docx
new file mode 100644
index 0000000000..5cca9b3ea9
--- /dev/null
+++ b/sw/qa/core/header_footer/data/tdf57155.docx
Binary files differ
diff --git a/sw/qa/core/header_footer/data/tdf69635.docx b/sw/qa/core/header_footer/data/tdf69635.docx
new file mode 100644
index 0000000000..94cced4d2a
--- /dev/null
+++ b/sw/qa/core/header_footer/data/tdf69635.docx
Binary files differ
diff --git a/sw/qa/core/header_footer/data/tdf79639.docx b/sw/qa/core/header_footer/data/tdf79639.docx
new file mode 100644
index 0000000000..b84aaea703
--- /dev/null
+++ b/sw/qa/core/header_footer/data/tdf79639.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/birt_min.odt b/sw/qa/core/layout/data/birt_min.odt
new file mode 100644
index 0000000000..91193644c2
--- /dev/null
+++ b/sw/qa/core/layout/data/birt_min.odt
Binary files differ
diff --git a/sw/qa/core/layout/data/border-collapse-compat.docx b/sw/qa/core/layout/data/border-collapse-compat.docx
new file mode 100644
index 0000000000..a3f29cbe8d
--- /dev/null
+++ b/sw/qa/core/layout/data/border-collapse-compat.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/btlr-nested-cell.odt b/sw/qa/core/layout/data/btlr-nested-cell.odt
new file mode 100644
index 0000000000..ca7a4798db
--- /dev/null
+++ b/sw/qa/core/layout/data/btlr-nested-cell.odt
Binary files differ
diff --git a/sw/qa/core/layout/data/btlr-table-row-span.odt b/sw/qa/core/layout/data/btlr-table-row-span.odt
new file mode 100644
index 0000000000..ca4b6872fb
--- /dev/null
+++ b/sw/qa/core/layout/data/btlr-table-row-span.odt
Binary files differ
diff --git a/sw/qa/core/layout/data/bullet.png b/sw/qa/core/layout/data/bullet.png
new file mode 100644
index 0000000000..4e2dcf4149
--- /dev/null
+++ b/sw/qa/core/layout/data/bullet.png
Binary files differ
diff --git a/sw/qa/core/layout/data/continuous-endnotes-move-backwards.doc b/sw/qa/core/layout/data/continuous-endnotes-move-backwards.doc
new file mode 100644
index 0000000000..3ee6c56aa3
--- /dev/null
+++ b/sw/qa/core/layout/data/continuous-endnotes-move-backwards.doc
Binary files differ
diff --git a/sw/qa/core/layout/data/double-border-horizontal.docx b/sw/qa/core/layout/data/double-border-horizontal.docx
new file mode 100644
index 0000000000..624c7aa1aa
--- /dev/null
+++ b/sw/qa/core/layout/data/double-border-horizontal.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/double-border-vertical.docx b/sw/qa/core/layout/data/double-border-vertical.docx
new file mode 100644
index 0000000000..a4731ebec6
--- /dev/null
+++ b/sw/qa/core/layout/data/double-border-vertical.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/double-page-border.docx b/sw/qa/core/layout/data/double-page-border.docx
new file mode 100644
index 0000000000..a706b327cd
--- /dev/null
+++ b/sw/qa/core/layout/data/double-page-border.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-2cols.docx b/sw/qa/core/layout/data/floattable-2cols.docx
new file mode 100644
index 0000000000..b55bc8dd49
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-2cols.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-3pages.docx b/sw/qa/core/layout/data/floattable-3pages.docx
new file mode 100644
index 0000000000..d6cbdafc19
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-3pages.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-anchor-keep-with-next.docx b/sw/qa/core/layout/data/floattable-anchor-keep-with-next.docx
new file mode 100644
index 0000000000..a0930900d8
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-anchor-keep-with-next.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-compat14-body.docx b/sw/qa/core/layout/data/floattable-compat14-body.docx
new file mode 100644
index 0000000000..fc25b867af
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-compat14-body.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-compat14-nosplit.docx b/sw/qa/core/layout/data/floattable-compat14-nosplit.docx
new file mode 100644
index 0000000000..bd3f09c69e
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-compat14-nosplit.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-compat14.docx b/sw/qa/core/layout/data/floattable-compat14.docx
new file mode 100644
index 0000000000..19221609dd
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-compat14.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-del-empty.docx b/sw/qa/core/layout/data/floattable-del-empty.docx
new file mode 100644
index 0000000000..340d06b622
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-del-empty.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-deleted-anchor.docx b/sw/qa/core/layout/data/floattable-deleted-anchor.docx
new file mode 100644
index 0000000000..cab5b68ff9
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-deleted-anchor.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-footer-2rows.docx b/sw/qa/core/layout/data/floattable-footer-2rows.docx
new file mode 100644
index 0000000000..0d3db047c1
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-footer-2rows.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-footer.docx b/sw/qa/core/layout/data/floattable-footer.docx
new file mode 100644
index 0000000000..731e4fdb23
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-footer.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-from-bottom.docx b/sw/qa/core/layout/data/floattable-from-bottom.docx
new file mode 100644
index 0000000000..86374a68ba
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-from-bottom.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-hori-pos.docx b/sw/qa/core/layout/data/floattable-hori-pos.docx
new file mode 100644
index 0000000000..7a5e033a49
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-hori-pos.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-in-inlinetable.docx b/sw/qa/core/layout/data/floattable-in-inlinetable.docx
new file mode 100644
index 0000000000..56505316cd
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-in-inlinetable.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-in-inltbl-in-sect.docx b/sw/qa/core/layout/data/floattable-in-inltbl-in-sect.docx
new file mode 100644
index 0000000000..ff329ecb5a
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-in-inltbl-in-sect.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-in-section.docx b/sw/qa/core/layout/data/floattable-in-section.docx
new file mode 100644
index 0000000000..a0e9090bcc
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-in-section.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-in-text-section.docx b/sw/qa/core/layout/data/floattable-in-text-section.docx
new file mode 100644
index 0000000000..5b377dd037
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-in-text-section.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-model-position-for-view-point-correction.docx b/sw/qa/core/layout/data/floattable-model-position-for-view-point-correction.docx
new file mode 100644
index 0000000000..1de36c6e0c
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-model-position-for-view-point-correction.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-move-master.docx b/sw/qa/core/layout/data/floattable-move-master.docx
new file mode 100644
index 0000000000..03087eb358
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-move-master.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-multi-col.docx b/sw/qa/core/layout/data/floattable-multi-col.docx
new file mode 100644
index 0000000000..10e63bad39
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-multi-col.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-negative-height.docx b/sw/qa/core/layout/data/floattable-negative-height.docx
new file mode 100644
index 0000000000..e5b6cd5103
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-negative-height.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-nested-overlap.odt b/sw/qa/core/layout/data/floattable-nested-overlap.odt
new file mode 100644
index 0000000000..b90ae9a7b0
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-nested-overlap.odt
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-nested-rowspan.docx b/sw/qa/core/layout/data/floattable-nested-rowspan.docx
new file mode 100644
index 0000000000..48cbdbfe59
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-nested-rowspan.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-nested.odt b/sw/qa/core/layout/data/floattable-nested.odt
new file mode 100644
index 0000000000..3d21314f58
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-nested.odt
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-next-leaf-in-section.docx b/sw/qa/core/layout/data/floattable-next-leaf-in-section.docx
new file mode 100644
index 0000000000..3a315d51c9
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-next-leaf-in-section.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-next-row-invalidate-pos.docx b/sw/qa/core/layout/data/floattable-next-row-invalidate-pos.docx
new file mode 100644
index 0000000000..bbc7114b8e
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-next-row-invalidate-pos.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-no-footer-overlap.doc b/sw/qa/core/layout/data/floattable-no-footer-overlap.doc
new file mode 100644
index 0000000000..87e301189d
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-no-footer-overlap.doc
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-nomargins.docx b/sw/qa/core/layout/data/floattable-nomargins.docx
new file mode 100644
index 0000000000..642010e0f3
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-nomargins.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-object-formatter.docx b/sw/qa/core/layout/data/floattable-object-formatter.docx
new file mode 100644
index 0000000000..2582af0eb8
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-object-formatter.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-rowsplit.docx b/sw/qa/core/layout/data/floattable-rowsplit.docx
new file mode 100644
index 0000000000..8e1e9fb301
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-rowsplit.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-tab-join-legacy.docx b/sw/qa/core/layout/data/floattable-tab-join-legacy.docx
new file mode 100644
index 0000000000..f4056bf21f
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-tab-join-legacy.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-tab-join.docx b/sw/qa/core/layout/data/floattable-tab-join.docx
new file mode 100644
index 0000000000..cb1990c2a8
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-tab-join.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-table-join.docx b/sw/qa/core/layout/data/floattable-table-join.docx
new file mode 100644
index 0000000000..807b4cfa8c
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-table-join.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-table-row-keep.docx b/sw/qa/core/layout/data/floattable-table-row-keep.docx
new file mode 100644
index 0000000000..c7edcc0334
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-table-row-keep.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-then-table.doc b/sw/qa/core/layout/data/floattable-then-table.doc
new file mode 100644
index 0000000000..8c9684e595
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-then-table.doc
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-then-table.docx b/sw/qa/core/layout/data/floattable-then-table.docx
new file mode 100644
index 0000000000..eb06507bd8
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-then-table.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-vertoffset.docx b/sw/qa/core/layout/data/floattable-vertoffset.docx
new file mode 100644
index 0000000000..d71a587f9c
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-vertoffset.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-widow.docx b/sw/qa/core/layout/data/floattable-widow.docx
new file mode 100644
index 0000000000..c3f17e6cd9
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-widow.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-wrap-on-all-pages.docx b/sw/qa/core/layout/data/floattable-wrap-on-all-pages.docx
new file mode 100644
index 0000000000..39642002bb
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-wrap-on-all-pages.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable-wrapped-by-table.docx b/sw/qa/core/layout/data/floattable-wrapped-by-table.docx
new file mode 100644
index 0000000000..a53f652183
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable-wrapped-by-table.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/floattable.docx b/sw/qa/core/layout/data/floattable.docx
new file mode 100644
index 0000000000..ee1b029882
--- /dev/null
+++ b/sw/qa/core/layout/data/floattable.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/header-textbox.docx b/sw/qa/core/layout/data/header-textbox.docx
new file mode 100644
index 0000000000..4df72cccd3
--- /dev/null
+++ b/sw/qa/core/layout/data/header-textbox.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/inner-border.docx b/sw/qa/core/layout/data/inner-border.docx
new file mode 100644
index 0000000000..1d8adc9fe8
--- /dev/null
+++ b/sw/qa/core/layout/data/inner-border.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/keepwithnext-fullheight.fodt b/sw/qa/core/layout/data/keepwithnext-fullheight.fodt
new file mode 100644
index 0000000000..b33dd80e71
--- /dev/null
+++ b/sw/qa/core/layout/data/keepwithnext-fullheight.fodt
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<office:document xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" office:mimetype="application/vnd.oasis.opendocument.text" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0">
+ <office:styles>
+ <style:style style:name="OLE" style:family="graphic">
+ <style:graphic-properties text:anchor-type="paragraph" svg:x="0cm" svg:y="0cm" style:wrap="none" style:horizontal-pos="center" style:horizontal-rel="paragraph" style:flow-with-text="false"/>
+ </style:style>
+ </office:styles>
+ <office:automatic-styles>
+ <style:style style:name="P1" style:family="paragraph" style:master-page-name="Landscape"/>
+ <style:style style:name="fr1" style:family="graphic" style:parent-style-name="OLE">
+ <style:graphic-properties style:vertical-pos="top" style:vertical-rel="paragraph" draw:ole-draw-aspect="1"/>
+ </style:style>
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-width="82.652cm" fo:page-height="57.683cm" style:num-format="1" style:print-orientation="landscape" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" style:layout-grid-lines="20" style:layout-grid-base-height="0.706cm" style:layout-grid-ruby-height="0.353cm" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="false" style:layout-grid-display="false" style:footnote-max-height="0cm"/>
+ </style:page-layout>
+ </office:automatic-styles>
+ <office:master-styles>
+ <style:master-page style:name="Landscape" style:page-layout-name="pm1"/>
+ </office:master-styles>
+ <office:body>
+ <office:text>
+ <text:p text:style-name="P1">Landscape page</text:p>
+ <text:h>Heading</text:h>
+ <text:p><draw:frame draw:style-name="fr1" draw:name="Image1" text:anchor-type="paragraph" svg:width="58.644cm" style:rel-width="100%" svg:height="57.683cm" style:rel-height="scale" draw:z-index="0"><draw:image draw:mime-type="image/png"><office:binary-data>iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAQAAAAAYLlVAAAABGdBTUEAALGPC/xhBQAAAAFz
+ UkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAA
+ AAJiS0dEAACqjSMyAAAACW9GRnMAAAAGAAAAAAAMc1XTAAAACXBIWXMAAA3XAAAN1wFCKJt4
+ AAAACXZwQWcAAABMAAAAQACdMTgbAAABzUlEQVRo3u3ZPU/CQBjA8X+Jxs3ESUDj4iK+LA5+
+ BBfjqBE1cXB2MlFAEqMgxvhNNL4sLsK3UPQL6ObkoAETz+FKW2mxCPRYnucWUu76/OC59C49
+ cGOCKqrD9kHRc6ddPv7oW2WCwMh0nF63Myz7Tm8hPTNu0pgHMER3scepTbgK6enJNND83RLn
+ /878yRaPmgBZFDuMsNLeWB9gmFQHP77MIg9gsYciR50NFKvtjIy10yk84pSZA7DYpwR8scmF
+ QQCMuoQMpzbh0iAARrlnVn90CWHTsZcAiHPPdINQAuqsc2MQAAnKDUKWEhZ10twaBEDSJWQo
+ YlFj7S9CzwEegkXWIbQsRAQASFJhpplwbRAACS+hANRJBxMiAkDcJeQ4sQkBhYgMoJ+Ozlwo
+ 2YQ7AJ6CRxyiUGnVy3hVKb0Af9v7hUG2Wy9TEQCUelFTDULB2S+YKYGOMcpM6UIccOQnRA6A
+ cSp6ibfI+wkGADBGpTEd8xz1AaAfTQ7huA8AvUw5hVjuA0D/C5OaMN8XACRZ8F0zCggKAQhA
+ AAIQgAAEIAABCEAAAhCAAAQgAAH4zg3feY4w3Xs44M5+oW0qvCWoGcvaIlM3x/f/ab+O738A
+ hOCNQr34oD4AAAAldEVYdGNyZWF0ZS1kYXRlADIwMTAtMTItMjBUMTc6MDg6MzYrMDE6MDB6
+ 5RscAAAAJXRFWHRtb2RpZnktZGF0ZQAyMDEwLTEyLTIwVDE3OjA4OjM3KzAxOjAwgyNmnAAA
+ AABJRU5ErkJggg==
+ </office:binary-data></draw:image></draw:frame></text:p>
+ </office:text>
+ </office:body>
+</office:document>
diff --git a/sw/qa/core/layout/data/linked-bullet.odt b/sw/qa/core/layout/data/linked-bullet.odt
new file mode 100644
index 0000000000..ae165531ab
--- /dev/null
+++ b/sw/qa/core/layout/data/linked-bullet.odt
Binary files differ
diff --git a/sw/qa/core/layout/data/page-remove-fly-no-table.fodt b/sw/qa/core/layout/data/page-remove-fly-no-table.fodt
new file mode 100644
index 0000000000..035688b85b
--- /dev/null
+++ b/sw/qa/core/layout/data/page-remove-fly-no-table.fodt
@@ -0,0 +1,460 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<office:document xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:styles>
+ <style:default-style style:family="graphic">
+ <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:writing-mode="lr-tb" style:flow-with-text="false"/>
+ <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:font-independent-line-spacing="false">
+ <style:tab-stops/>
+ </style:paragraph-properties>
+ <style:text-properties style:use-window-font-color="true" loext:opacity="0%" loext:color-lum-mod="100%" loext:color-lum-off="0%" style:font-name="Liberation Sans" fo:font-size="12pt" fo:language="en" fo:country="US" style:letter-kerning="true" style:font-name-asian="Noto Serif CJK SC" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Lohit Devanagari" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/>
+ </style:default-style>
+ <style:default-style style:family="paragraph">
+ <style:paragraph-properties fo:orphans="2" fo:widows="2" fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="1.251cm" style:writing-mode="lr-tb"/>
+ <style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Liberation Sans" fo:font-size="12pt" fo:language="en" fo:country="US" style:letter-kerning="true" style:font-name-asian="Noto Serif CJK SC" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Lohit Devanagari" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2" loext:hyphenation-no-caps="false" loext:hyphenation-no-last-word="false" loext:hyphenation-word-char-count="no-limit" loext:hyphenation-zone="no-limit"/>
+ </style:default-style>
+ <style:default-style style:family="table">
+ <style:table-properties table:border-model="collapsing"/>
+ </style:default-style>
+ <style:default-style style:family="table-row">
+ <style:table-row-properties fo:keep-together="auto"/>
+ </style:default-style>
+ <style:style style:name="Standard" style:family="paragraph" style:default-outline-level="" style:class="text" style:master-page-name="">
+ <style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0.25cm" style:contextual-spacing="false" fo:line-height="120%" fo:text-align="start" style:justify-single-word="false" fo:orphans="2" fo:widows="2" fo:hyphenation-ladder-count="no-limit" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="auto" style:punctuation-wrap="simple" style:writing-mode="lr-tb"/>
+ <style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Liberation Sans" fo:font-family="'Liberation Sans'" style:font-family-generic="swiss" fo:font-size="10.5pt" fo:letter-spacing="0.014cm" style:letter-kerning="true" style:font-name-asian="Noto Sans CJK SC Regular" style:font-family-asian="'Noto Sans CJK SC Regular'" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="FreeSans" style:font-family-complex="FreeSans" style:font-family-generic-complex="system" style:font-pitch-complex="variable" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN" fo:hyphenate="true" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2" loext:hyphenation-no-caps="false" loext:hyphenation-no-last-word="false" loext:hyphenation-word-char-count="no-limit" loext:hyphenation-zone="no-limit"/>
+ </style:style>
+ <style:style style:name="Heading" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text_20_body" style:default-outline-level="" style:class="text">
+ <style:paragraph-properties fo:margin-top="0.423cm" fo:margin-bottom="0.212cm" style:contextual-spacing="false" fo:keep-with-next="always"/>
+ <style:text-properties style:font-name="Liberation Sans" fo:font-family="'Liberation Sans'" style:font-family-generic="swiss" fo:font-size="14pt" style:font-name-asian="Noto Sans CJK SC Regular" style:font-family-asian="'Noto Sans CJK SC Regular'" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="14pt" style:font-name-complex="FreeSans" style:font-family-complex="FreeSans" style:font-family-generic-complex="system" style:font-pitch-complex="variable" style:font-size-complex="14pt"/>
+ </style:style>
+ <style:style style:name="Heading_20_2" style:display-name="Heading 2" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:default-outline-level="2" style:class="text" style:master-page-name="">
+ <style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.353cm" fo:margin-bottom="0.212cm" style:contextual-spacing="false" fo:keep-together="always" fo:orphans="0" fo:widows="0" fo:text-indent="0cm" style:auto-text-indent="false" style:page-number="auto"/>
+ <style:text-properties fo:font-size="16pt" fo:font-weight="bold" style:font-size-asian="16pt" style:font-weight-asian="bold" style:font-size-complex="16pt" style:font-weight-complex="normal"/>
+ </style:style>
+ <style:style style:name="Table_20_Contents" style:display-name="Table Contents" style:family="paragraph" style:parent-style-name="Standard" style:default-outline-level="" style:class="extra">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.101cm" style:contextual-spacing="false" text:number-lines="false" text:line-number="0"/>
+ </style:style>
+ <style:style style:name="Heading_20_3" style:display-name="Heading 3" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:default-outline-level="3" style:class="text">
+ <style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.247cm" fo:margin-bottom="0.212cm" style:contextual-spacing="false" fo:text-indent="0cm" style:auto-text-indent="false"/>
+ <style:text-properties fo:font-size="14pt" fo:font-weight="bold" style:font-size-asian="14pt" style:font-weight-asian="bold" style:font-size-complex="14pt" style:font-weight-complex="600"/>
+ </style:style>
+ <style:style style:name="Heading_20_4" style:display-name="Heading 4" style:family="paragraph" style:parent-style-name="Heading" style:next-style-name="Text_20_body" style:default-outline-level="4" style:class="text">
+ <style:paragraph-properties fo:margin-top="0.212cm" fo:margin-bottom="0.212cm" style:contextual-spacing="false"/>
+ <style:text-properties fo:font-size="13pt" fo:font-style="normal" fo:font-weight="bold" style:font-size-asian="13.5pt" style:font-style-asian="italic" style:font-weight-asian="bold" style:font-size-complex="13.5pt" style:font-style-complex="italic" style:font-weight-complex="bold"/>
+ </style:style>
+ <style:style style:name="Contents_20_Heading" style:display-name="Contents Heading" style:family="paragraph" style:parent-style-name="Heading" style:class="index">
+ <style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0.101cm" style:contextual-spacing="false" fo:text-align="center" style:justify-single-word="false" fo:text-indent="0cm" style:auto-text-indent="false" text:number-lines="false" text:line-number="0"/>
+ <style:text-properties fo:font-size="13pt" fo:font-weight="bold" style:font-size-asian="16pt" style:font-weight-asian="bold" style:font-size-complex="16pt" style:font-weight-complex="600"/>
+ </style:style>
+ </office:styles>
+ <office:automatic-styles>
+ <style:style style:name="Table1" style:family="table">
+ <style:table-properties style:width="17cm" table:align="margins" style:may-break-between-rows="true" style:writing-mode="lr-tb" table:border-model="collapsing"/>
+ </style:style>
+ <style:style style:name="Table1.A" style:family="table-column">
+ <style:table-column-properties style:column-width="17cm" style:rel-column-width="65535*"/>
+ </style:style>
+ <style:style style:name="Table1.1" style:family="table-row">
+ <style:table-row-properties fo:keep-together="always"/>
+ </style:style>
+ <style:style style:name="Table1.A1" style:family="table-cell">
+ <style:table-cell-properties fo:background-color="transparent" fo:padding="0.097cm" fo:border="none" style:writing-mode="lr-tb">
+ <style:background-image/>
+ </style:table-cell-properties>
+ </style:style>
+ <style:style style:name="Table2" style:family="table">
+ <style:table-properties style:width="17cm" fo:margin-top="0cm" fo:margin-bottom="0.3cm" table:align="margins" style:may-break-between-rows="true" style:writing-mode="lr-tb" table:border-model="collapsing"/>
+ </style:style>
+ <style:style style:name="Table2.A" style:family="table-column">
+ <style:table-column-properties style:column-width="17cm" style:rel-column-width="65535*"/>
+ </style:style>
+ <style:style style:name="Table2.1" style:family="table-row">
+ <style:table-row-properties fo:keep-together="always"/>
+ </style:style>
+ <style:style style:name="Table2.A1" style:family="table-cell">
+ <style:table-cell-properties fo:background-color="transparent" fo:padding="0.097cm" fo:border="none" style:writing-mode="lr-tb">
+ <style:background-image/>
+ </style:table-cell-properties>
+ </style:style>
+ <style:style style:name="Table3" style:family="table">
+ <style:table-properties style:width="8.251cm" fo:margin-top="0cm" fo:margin-bottom="0.3cm" table:align="margins" style:writing-mode="lr-tb"/>
+ </style:style>
+ <style:style style:name="Table3.A" style:family="table-column">
+ <style:table-column-properties style:column-width="8.251cm" style:rel-column-width="65535*"/>
+ </style:style>
+ <style:style style:name="Table3.A1" style:family="table-cell">
+ <style:table-cell-properties fo:padding="0.097cm" fo:border="none"/>
+ </style:style>
+ <style:style style:name="fr1" style:family="graphic" style:parent-style-name="Graphics">
+ <style:graphic-properties style:vertical-pos="top" style:vertical-rel="paragraph" style:horizontal-pos="center" style:horizontal-rel="paragraph" style:mirror="none" fo:clip="rect(0cm, 0cm, 0cm, 0cm)" draw:luminance="0%" draw:contrast="0%" draw:red="0%" draw:green="0%" draw:blue="0%" draw:gamma="100%" draw:color-inversion="false" draw:image-opacity="100%" draw:color-mode="standard"/>
+ </style:style>
+ <style:style style:name="fr2" style:family="graphic" style:parent-style-name="Graphics">
+ <style:graphic-properties style:vertical-pos="top" style:vertical-rel="paragraph" style:horizontal-pos="center" style:horizontal-rel="paragraph" style:mirror="none" fo:clip="rect(0cm, 0cm, 0cm, 0cm)" draw:luminance="0%" draw:contrast="0%" draw:red="0%" draw:green="0%" draw:blue="0%" draw:gamma="100%" draw:color-inversion="false" draw:image-opacity="100%" draw:color-mode="standard"/>
+ </style:style>
+ <style:style style:name="Sect1" style:family="section">
+ <style:section-properties style:editable="false">
+ <style:columns fo:column-count="1" fo:column-gap="0cm"/>
+ </style:section-properties>
+ </style:style>
+ <style:style style:name="Sect2" style:family="section">
+ <style:section-properties fo:margin-left="0cm" fo:margin-right="0cm" style:editable="false">
+ <style:columns fo:column-count="1" fo:column-gap="0cm"/>
+ </style:section-properties>
+ </style:style>
+ <style:style style:name="Sect3" style:family="section">
+ <style:section-properties text:dont-balance-text-columns="false" style:editable="false">
+ <style:columns fo:column-count="2" fo:column-gap="0.497cm">
+ <style:column style:rel-width="32767*" fo:start-indent="0cm" fo:end-indent="0.248cm"/>
+ <style:column style:rel-width="32768*" fo:start-indent="0.248cm" fo:end-indent="0cm"/>
+ </style:columns>
+ </style:section-properties>
+ </style:style>
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" style:layout-grid-lines="23" style:layout-grid-base-height="1.058cm" style:layout-grid-ruby-height="0cm" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="false" style:layout-grid-display="false" style:layout-grid-base-width="0.704cm" style:layout-grid-snap-to="true" style:footnote-max-height="0cm" loext:margin-gutter="0cm">
+ <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style>
+ <style:header-footer-properties fo:min-height="0.998cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.9cm" style:dynamic-spacing="true"/>
+ </style:footer-style>
+ </style:page-layout>
+ <style:page-layout style:name="pm2">
+ <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" style:layout-grid-lines="44" style:layout-grid-base-height="0.55cm" style:layout-grid-ruby-height="0cm" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="false" style:layout-grid-display="false" style:layout-grid-base-width="0.37cm" style:layout-grid-snap-to="true" style:footnote-max-height="0cm" loext:margin-gutter="0cm">
+ <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style>
+ <style:header-footer-properties fo:min-height="0.998cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.9cm" style:dynamic-spacing="true"/>
+ </style:footer-style>
+ </style:page-layout>
+ <style:page-layout style:name="pm3">
+ <style:page-layout-properties fo:page-width="21.59cm" fo:page-height="27.94cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2.54cm" fo:margin-bottom="1.27cm" fo:margin-left="3.175cm" fo:margin-right="3.175cm" style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" style:layout-grid-lines="22860" style:layout-grid-base-height="0.176cm" style:layout-grid-ruby-height="0cm" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="false" style:layout-grid-display="false" style:layout-grid-base-width="0.37cm" style:layout-grid-snap-to="true" style:footnote-max-height="0cm" loext:margin-gutter="0cm">
+ <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style>
+ <style:header-footer-properties fo:min-height="1.27cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="1.169cm" style:dynamic-spacing="true"/>
+ </style:footer-style>
+ </style:page-layout>
+ <style:page-layout style:name="pm4">
+ <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1cm" fo:margin-bottom="1cm" fo:margin-left="2cm" fo:margin-right="1cm" style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" style:layout-grid-lines="20" style:layout-grid-base-height="0.706cm" style:layout-grid-ruby-height="0.353cm" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="false" style:layout-grid-display="false" style:layout-grid-base-width="0.706cm" style:layout-grid-snap-to="true" style:footnote-max-height="0cm" loext:margin-gutter="0cm">
+ <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style/>
+ </style:page-layout>
+ <style:style style:name="dp1" style:family="drawing-page">
+ <style:drawing-page-properties draw:background-size="full"/>
+ </style:style>
+ </office:automatic-styles>
+ <office:master-styles>
+ <style:master-page style:name="Standard" style:page-layout-name="pm1" draw:style-name="dp1">
+ <style:footer>
+ <text:p/>
+ </style:footer>
+ </style:master-page>
+ </office:master-styles>
+ <office:body>
+ <office:text text:use-soft-page-breaks="true">
+ <text:p text:style-name="P6">2022-04-24_Quirk<text:span text:style-name="T2">s</text:span> in the focusing property of the Navigator</text:p>
+ <text:p text:style-name="P10">This example file shows several bugs. It was written as an example to #148755. But I also recorded all other surprising things in order to report them on separate bug reports. Don’t mind if they appear here, it is just just to catch some of them in order to report them.</text:p>
+ <text:p text:style-name="P10">This report was written with </text:p>
+ <text:p text:style-name="P11">Version: 7.4.0.0.alpha0+ / LibreOffice Community<text:line-break/>Build ID: f775b625b497b4fa6731bddd433916dde52fbb2e<text:line-break/>CPU threads: 4; OS: Linux 5.4; UI render: default; VCL: gtk3<text:line-break/>Locale: de-DE (de_DE.UTF-8); UI: en-US<text:line-break/>Calc: threaded</text:p>
+ <text:p text:style-name="P12">but I have seen some of these glitches also in other versions of LO Writer!</text:p>
+ <text:table-of-content text:style-name="Sect1" text:protected="true" text:name="Table of Contents1">
+ <text:table-of-content-source text:outline-level="10">
+ <text:index-title-template text:style-name="Contents_20_Heading">Table of Contents</text:index-title-template>
+ <text:table-of-content-entry-template text:outline-level="1" text:style-name="Contents_20_1">
+ <text:index-entry-link-start text:style-name="Index_20_Link"/>
+ <text:index-entry-chapter/>
+ <text:index-entry-text/>
+ <text:index-entry-tab-stop style:type="right" style:leader-char="."/>
+ <text:index-entry-page-number/>
+ <text:index-entry-link-end/>
+ </text:table-of-content-entry-template>
+ </text:table-of-content-source>
+ <text:index-body>
+ <text:index-title text:style-name="Sect1" text:name="Table of Contents1_Head">
+ <text:p text:style-name="Contents_20_Heading">Table of Contents</text:p>
+ </text:index-title>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ </text:index-body>
+ </text:table-of-content>
+ <text:p/>
+ <text:h text:style-name="P19" text:outline-level="2"><text:bookmark-start text:name="__RefHeading___Toc71113_2824860697"/>Original Post <text:span text:style-name="T5">#148755</text:span><text:bookmark-end text:name="__RefHeading___Toc71113_2824860697"/></text:h>
+ <text:h text:style-name="P22" text:outline-level="3"><text:bookmark-start text:name="__RefHeading___Toc71115_2824860697"/><text:span text:style-name="T5">P</text:span>receding events<text:bookmark-end text:name="__RefHeading___Toc71115_2824860697"/></text:h>
+ <text:p/>
+ <text:section text:style-name="Sect2" text:name="c0">
+ <text:h text:style-name="P22" text:outline-level="3"><text:bookmark-start text:name="__RefHeading___Toc71117_2824860697"/>New findings<text:bookmark-end text:name="__RefHeading___Toc71117_2824860697"/></text:h>
+ <text:p/>
+ <text:p/>
+ <text:p/>
+ <text:p text:style-name="P4">Sometimes I use tables because they make the location of inserted images more predictable than if I insert them into the text (e.g. anchored to paragraphs). If - as e.g. often in user manuals - many short text passages and corresponding illustrations follow one after another, it may even make sense to place headings in tables as well. If you do this, however, you lose the nice feature of the navigator that you can continuously see how a text is positioned in the hierarchy of associated headings: The navigator suddenly shows the position in the hierarchy of tables (or sections, if the text passage is in a section).</text:p>
+ <text:h text:style-name="P22" text:outline-level="3"><text:bookmark-start text:name="__RefHeading___Toc71119_2824860697"/>Expected behavior:<text:bookmark-end text:name="__RefHeading___Toc71119_2824860697"/></text:h>
+ <text:p text:style-name="P18">I expect the navigator to always show the location of the bookmark in the editing window with respect to the category selected in the navigator's drop-down list of categories at the top left (really useful there are headings, tables, maybe sections. For hyperlinks, I can only imagine that it might make sense to highlight the next hyperlink before the position of the bookmark in the editing window).</text:p>
+ </text:section>
+ <text:h text:style-name="P20" text:outline-level="2"><text:bookmark-start text:name="__RefHeading___Toc71121_2824860697"/>An example<text:bookmark-end text:name="__RefHeading___Toc71121_2824860697"/></text:h>
+ <text:p text:style-name="P3">In order to demonstrate the to be shown behavior, I add some headlines such that navigator really has some structure to show. Then I also add the original post, but this time arranged in a table:</text:p>
+ <text:h text:style-name="P21" text:outline-level="2"><text:bookmark-start text:name="__RefHeading___Toc71123_2824860697"/>Original Post <text:span text:style-name="T5">#148755 in a table</text:span><text:bookmark-end text:name="__RefHeading___Toc71123_2824860697"/></text:h>
+ <table:table table:name="Table1" table:style-name="Table1" table:template-name="Standardtabelle">
+ <table:table-column table:style-name="Table1.A"/>
+ <table:table-row table:style-name="Table1.1">
+ <table:table-cell table:style-name="Table1.A1" office:value-type="string">
+ <text:h text:style-name="Heading_20_3" text:outline-level="3"><text:bookmark-start text:name="__RefHeading___Toc71125_2824860697"/><text:span text:style-name="T5">P</text:span>receding events<text:span text:style-name="T5"> in a table</text:span><text:bookmark-end text:name="__RefHeading___Toc71125_2824860697"/></text:h>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row table:style-name="Table1.1">
+ <table:table-cell table:style-name="Table1.A1" office:value-type="string">
+ <text:p text:style-name="Text_20_body">End of June 2021 I first observed that the Navigator adjusts itself to the proper headline associated to the current editing position. The item belonging to the edit position in the Edit window gets highlighted. That's something which has long been missing and which is very useful.</text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row table:style-name="Table1.1">
+ <table:table-cell table:style-name="Table1.A1" office:value-type="string">
+ <text:h text:style-name="Heading_20_3" text:outline-level="3"><text:bookmark-start text:name="__RefHeading___Toc71127_2824860697"/>New findings<text:span text:style-name="T5"> in a table</text:span><text:bookmark-end text:name="__RefHeading___Toc71127_2824860697"/></text:h>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row table:style-name="Table1.1">
+ <table:table-cell table:style-name="Table1.A1" office:value-type="string">
+ <text:p text:style-name="Text_20_body">Now I found something inconsistent with that: If the edit position in the edit window is in a table, the highlight moves to the relevant entry in the Tables category, if it is in a section, the highlight jumps to the proper entry in the Sections category.</text:p>
+ </table:table-cell>
+ </table:table-row>
+ <text:soft-page-break/>
+ <table:table-row table:style-name="Table1.1">
+ <table:table-cell table:style-name="Table1.A1" office:value-type="string">
+ <text:p text:style-name="Text_20_body">When writing a larger document, the main hierarchy of things is by headline order. Being able to associate some place in the document to the surrounding headlines hierarchy is the main concern. Only in very special cases one might want to locate an image in the list of all images or a table in the list of all tables and so on.</text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row table:style-name="Table1.1">
+ <table:table-cell table:style-name="Table1.A1" office:value-type="string">
+ <text:p text:style-name="Text_20_body">Locating something in another category than the one highlighted (Headings/Images/Sections/Table, ..., topmost drop-down setting of Navigator) is not meaningful, especially jumping to sections instead of headlines is bizarre.</text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row table:style-name="Table1.1">
+ <table:table-cell table:style-name="Table1.A1" office:value-type="string">
+ <text:p text:style-name="Text_20_body">Sometimes I use tables because they make the location of inserted images more predictable than if I insert them into the text (e.g. anchored to paragraphs). If - as e.g. often in user manuals - many short text passages and corresponding illustrations follow one after another, it may even make sense to place headings in tables as well. If you do this, however, you lose the nice feature of the navigator that you can continuously see how a text is positioned in the hierarchy of associated headings: The navigator suddenly shows the position in the hierarchy of tables (or sections, if the text passage is in a section).</text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row table:style-name="Table1.1">
+ <table:table-cell table:style-name="Table1.A1" office:value-type="string">
+ <text:h text:style-name="Heading_20_3" text:outline-level="3"><text:bookmark-start text:name="__RefHeading___Toc71129_2824860697"/>Expected behavior<text:span text:style-name="T5"> in a table</text:span>:<text:bookmark-end text:name="__RefHeading___Toc71129_2824860697"/></text:h>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row table:style-name="Table1.1">
+ <table:table-cell table:style-name="Table1.A1" office:value-type="string">
+ <text:p text:style-name="Text_20_body">I expect the navigator to always show the location of the bookmark in the editing window with respect to the category selected in the navigator's drop-down list of categories at the top left (really useful there are headings, tables, maybe sections. For hyperlinks, I can only imagine that it might make sense to highlight the next hyperlink before the position of the bookmark in the editing window).</text:p>
+ </table:table-cell>
+ </table:table-row>
+ </table:table>
+ <text:h text:style-name="P20" text:outline-level="2"><text:bookmark-start text:name="__RefHeading___Toc71131_2824860697"/>Some screenshots demonstrating what goes wrong<text:bookmark-end text:name="__RefHeading___Toc71131_2824860697"/></text:h>
+ <table:table table:name="Table2" table:style-name="Table2" table:template-name="Standardtabelle">
+ <table:table-column table:style-name="Table2.A"/>
+ <table:table-row table:style-name="Table2.1">
+ <table:table-cell table:style-name="Table2.A1" office:value-type="string">
+ <text:h text:style-name="Heading_20_3" text:outline-level="3"><text:bookmark-start text:name="__RefHeading___Toc72157_2824860697"/>What goes right<text:bookmark-end text:name="__RefHeading___Toc72157_2824860697"/></text:h>
+ <text:p text:style-name="Text_20_body">Before I’ll show what goes wrong, I’ll precede my examples with one showing that Navigator’s reflection of edit places goes right, as long as one navigates in text which is not part of a table <text:span text:style-name="T7">(or a section, which we will encounter soon)</text:span>: I go some lines up, add the word HERE to some place and make a screenshot:</text:p>
+ </table:table-cell>
+ </table:table-row>
+ <text:soft-page-break/>
+ <table:table-row table:style-name="Table2.1">
+ <table:table-cell table:style-name="Table2.A1" office:value-type="string">
+ <text:p text:style-name="Text_20_body"><draw:frame draw:style-name="fr2" draw:name="Image3" text:anchor-type="char" svg:width="16.806cm" svg:height="10.834cm" draw:z-index="2"><draw:image draw:mime-type="image/png"><office:binary-data>iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAQAAAAAYLlVAAAABGdBTUEAALGPC/xhBQAAAAFz
+UkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAA
+AAJiS0dEAACqjSMyAAAACW9GRnMAAAAGAAAAAAAMc1XTAAAACXBIWXMAAA3XAAAN1wFCKJt4
+AAAACXZwQWcAAABMAAAAQACdMTgbAAABzUlEQVRo3u3ZPU/CQBjA8X+Jxs3ESUDj4iK+LA5+
+BBfjqBE1cXB2MlFAEqMgxvhNNL4sLsK3UPQL6ObkoAETz+FKW2mxCPRYnucWUu76/OC59C49
+cGOCKqrD9kHRc6ddPv7oW2WCwMh0nF63Myz7Tm8hPTNu0pgHMER3scepTbgK6enJNND83RLn
+/878yRaPmgBZFDuMsNLeWB9gmFQHP77MIg9gsYciR50NFKvtjIy10yk84pSZA7DYpwR8scmF
+QQCMuoQMpzbh0iAARrlnVn90CWHTsZcAiHPPdINQAuqsc2MQAAnKDUKWEhZ10twaBEDSJWQo
+YlFj7S9CzwEegkXWIbQsRAQASFJhpplwbRAACS+hANRJBxMiAkDcJeQ4sQkBhYgMoJ+Ozlwo
+2YQ7AJ6CRxyiUGnVy3hVKb0Af9v7hUG2Wy9TEQCUelFTDULB2S+YKYGOMcpM6UIccOQnRA6A
+cSp6ibfI+wkGADBGpTEd8xz1AaAfTQ7huA8AvUw5hVjuA0D/C5OaMN8XACRZ8F0zCggKAQhA
+AAIQgAAEIAABCEAAAhCAAAQgAAH4zg3feY4w3Xs44M5+oW0qvCWoGcvaIlM3x/f/ab+O738A
+hOCNQr34oD4AAAAldEVYdGNyZWF0ZS1kYXRlADIwMTAtMTItMjBUMTc6MDg6MzYrMDE6MDB6
+5RscAAAAJXRFWHRtb2RpZnktZGF0ZQAyMDEwLTEyLTIwVDE3OjA4OjM3KzAxOjAwgyNmnAAA
+AABJRU5ErkJggg==</office:binary-data></draw:image></draw:frame>The highlighted word HERE is in the paragraph with headline “An example“: the right paragraph is highlighted in the <text:span text:style-name="T7">N</text:span>avigator. That’s <text:span text:style-name="T7">re</text:span>ally helpful. In order to show that this is not just an accidental r<text:span text:style-name="T7">e</text:span>sult, I’ll remove the highlighted word and transplant it to some other paragraph:</text:p>
+ </table:table-cell>
+ </table:table-row>
+ <text:soft-page-break/>
+ <table:table-row table:style-name="Table2.1">
+ <table:table-cell table:style-name="Table2.A1" office:value-type="string">
+ <text:p text:style-name="Text_20_body"><draw:frame draw:style-name="fr1" draw:name="Image4" text:anchor-type="paragraph" svg:width="16.806cm" svg:height="10.834cm" draw:z-index="3"><draw:image draw:mime-type="image/png"><office:binary-data>iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAQAAAAAYLlVAAAABGdBTUEAALGPC/xhBQAAAAFz
+UkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAA
+AAJiS0dEAACqjSMyAAAACW9GRnMAAAAGAAAAAAAMc1XTAAAACXBIWXMAAA3XAAAN1wFCKJt4
+AAAACXZwQWcAAABMAAAAQACdMTgbAAABzUlEQVRo3u3ZPU/CQBjA8X+Jxs3ESUDj4iK+LA5+
+BBfjqBE1cXB2MlFAEqMgxvhNNL4sLsK3UPQL6ObkoAETz+FKW2mxCPRYnucWUu76/OC59C49
+cGOCKqrD9kHRc6ddPv7oW2WCwMh0nF63Myz7Tm8hPTNu0pgHMER3scepTbgK6enJNND83RLn
+/878yRaPmgBZFDuMsNLeWB9gmFQHP77MIg9gsYciR50NFKvtjIy10yk84pSZA7DYpwR8scmF
+QQCMuoQMpzbh0iAARrlnVn90CWHTsZcAiHPPdINQAuqsc2MQAAnKDUKWEhZ10twaBEDSJWQo
+YlFj7S9CzwEegkXWIbQsRAQASFJhpplwbRAACS+hANRJBxMiAkDcJeQ4sQkBhYgMoJ+Ozlwo
+2YQ7AJ6CRxyiUGnVy3hVKb0Af9v7hUG2Wy9TEQCUelFTDULB2S+YKYGOMcpM6UIccOQnRA6A
+cSp6ibfI+wkGADBGpTEd8xz1AaAfTQ7huA8AvUw5hVjuA0D/C5OaMN8XACRZ8F0zCggKAQhA
+AAIQgAAEIAABCEAAAhCAAAQgAAH4zg3feY4w3Xs44M5+oW0qvCWoGcvaIlM3x/f/ab+O738A
+hOCNQr34oD4AAAAldEVYdGNyZWF0ZS1kYXRlADIwMTAtMTItMjBUMTc6MDg6MzYrMDE6MDB6
+5RscAAAAJXRFWHRtb2RpZnktZGF0ZQAyMDEwLTEyLTIwVDE3OjA4OjM3KzAxOjAwgyNmnAAA
+AABJRU5ErkJggg==</office:binary-data></draw:image></draw:frame>Again the highlighted portion in the Navigator shows the position in the edit window. Now I’ll test it with yet another place.</text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row table:style-name="Table2.1">
+ <table:table-cell table:style-name="Table2.A1" office:value-type="string">
+ <text:h text:style-name="Heading_20_3" text:outline-level="3"><text:bookmark-start text:name="__RefHeading___Toc72159_2824860697"/>But this one will go wrong:<text:bookmark-end text:name="__RefHeading___Toc72159_2824860697"/></text:h>
+ </table:table-cell>
+ </table:table-row>
+ <text:soft-page-break/>
+ <table:table-row table:style-name="Table2.1">
+ <table:table-cell table:style-name="Table2.A1" office:value-type="string">
+ <text:h text:style-name="Heading_20_4" text:outline-level="4"><draw:frame draw:style-name="fr1" draw:name="Image5" text:anchor-type="paragraph" svg:width="16.806cm" svg:height="10.834cm" draw:z-index="4"><draw:image draw:mime-type="image/png"><office:binary-data>iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAQAAAAAYLlVAAAABGdBTUEAALGPC/xhBQAAAAFz
+UkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAA
+AAJiS0dEAACqjSMyAAAACW9GRnMAAAAGAAAAAAAMc1XTAAAACXBIWXMAAA3XAAAN1wFCKJt4
+AAAACXZwQWcAAABMAAAAQACdMTgbAAABzUlEQVRo3u3ZPU/CQBjA8X+Jxs3ESUDj4iK+LA5+
+BBfjqBE1cXB2MlFAEqMgxvhNNL4sLsK3UPQL6ObkoAETz+FKW2mxCPRYnucWUu76/OC59C49
+cGOCKqrD9kHRc6ddPv7oW2WCwMh0nF63Myz7Tm8hPTNu0pgHMER3scepTbgK6enJNND83RLn
+/878yRaPmgBZFDuMsNLeWB9gmFQHP77MIg9gsYciR50NFKvtjIy10yk84pSZA7DYpwR8scmF
+QQCMuoQMpzbh0iAARrlnVn90CWHTsZcAiHPPdINQAuqsc2MQAAnKDUKWEhZ10twaBEDSJWQo
+YlFj7S9CzwEegkXWIbQsRAQASFJhpplwbRAACS+hANRJBxMiAkDcJeQ4sQkBhYgMoJ+Ozlwo
+2YQ7AJ6CRxyiUGnVy3hVKb0Af9v7hUG2Wy9TEQCUelFTDULB2S+YKYGOMcpM6UIccOQnRA6A
+cSp6ibfI+wkGADBGpTEd8xz1AaAfTQ7huA8AvUw5hVjuA0D/C5OaMN8XACRZ8F0zCggKAQhA
+AAIQgAAEIAABCEAAAhCAAAQgAAH4zg3feY4w3Xs44M5+oW0qvCWoGcvaIlM3x/f/ab+O738A
+hOCNQr34oD4AAAAldEVYdGNyZWF0ZS1kYXRlADIwMTAtMTItMjBUMTc6MDg6MzYrMDE6MDB6
+5RscAAAAJXRFWHRtb2RpZnktZGF0ZQAyMDEwLTEyLTIwVDE3OjA4OjM3KzAxOjAwgyNmnAAA
+AABJRU5ErkJggg==</office:binary-data></draw:image></draw:frame><text:bookmark-start text:name="__RefHeading___Toc72161_2824860697"/>1. Expec<text:span text:style-name="T7">t</text:span>ed result<text:bookmark-end text:name="__RefHeading___Toc72161_2824860697"/></text:h>
+ <text:p text:style-name="Text_20_body">This time, the highlight is in section c0! This is really surprising! I have not created any section c0 active at all. Even when LO Writer created one for internal organizational reasons: my text is under the heading “New findingsâ€!</text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row table:style-name="Table2.1">
+ <table:table-cell table:style-name="Table2.A1" office:value-type="string">
+ <text:h text:style-name="Heading_20_3" text:outline-level="3"><text:bookmark-start text:name="__RefHeading___Toc72673_2824860697"/>Continued examples<text:bookmark-end text:name="__RefHeading___Toc72673_2824860697"/></text:h>
+ <text:p text:style-name="Text_20_body">In order to avoid any difficulty of pasted screenshots appearing on arbitrary places (another bug, but not the issue of this error report, I place all my text and screenshots to just another table: In the next picture, you see the navigator when the focus in the text field is HERE</text:p>
+ </table:table-cell>
+ </table:table-row>
+ <text:soft-page-break/>
+ <table:table-row table:style-name="Table2.1">
+ <table:table-cell table:style-name="Table2.A1" office:value-type="string">
+ <text:p text:style-name="Text_20_body"><draw:frame draw:style-name="fr1" draw:name="Image1" text:anchor-type="paragraph" svg:width="16.806cm" svg:height="10.834cm" draw:z-index="0"><draw:image draw:mime-type="image/png"><office:binary-data>iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAQAAAAAYLlVAAAABGdBTUEAALGPC/xhBQAAAAFz
+UkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAA
+AAJiS0dEAACqjSMyAAAACW9GRnMAAAAGAAAAAAAMc1XTAAAACXBIWXMAAA3XAAAN1wFCKJt4
+AAAACXZwQWcAAABMAAAAQACdMTgbAAABzUlEQVRo3u3ZPU/CQBjA8X+Jxs3ESUDj4iK+LA5+
+BBfjqBE1cXB2MlFAEqMgxvhNNL4sLsK3UPQL6ObkoAETz+FKW2mxCPRYnucWUu76/OC59C49
+cGOCKqrD9kHRc6ddPv7oW2WCwMh0nF63Myz7Tm8hPTNu0pgHMER3scepTbgK6enJNND83RLn
+/878yRaPmgBZFDuMsNLeWB9gmFQHP77MIg9gsYciR50NFKvtjIy10yk84pSZA7DYpwR8scmF
+QQCMuoQMpzbh0iAARrlnVn90CWHTsZcAiHPPdINQAuqsc2MQAAnKDUKWEhZ10twaBEDSJWQo
+YlFj7S9CzwEegkXWIbQsRAQASFJhpplwbRAACS+hANRJBxMiAkDcJeQ4sQkBhYgMoJ+Ozlwo
+2YQ7AJ6CRxyiUGnVy3hVKb0Af9v7hUG2Wy9TEQCUelFTDULB2S+YKYGOMcpM6UIccOQnRA6A
+cSp6ibfI+wkGADBGpTEd8xz1AaAfTQ7huA8AvUw5hVjuA0D/C5OaMN8XACRZ8F0zCggKAQhA
+AAIQgAAEIAABCEAAAhCAAAQgAAH4zg3feY4w3Xs44M5+oW0qvCWoGcvaIlM3x/f/ab+O738A
+hOCNQr34oD4AAAAldEVYdGNyZWF0ZS1kYXRlADIwMTAtMTItMjBUMTc6MDg6MzYrMDE6MDB6
+5RscAAAAJXRFWHRtb2RpZnktZGF0ZQAyMDEwLTEyLTIwVDE3OjA4OjM3KzAxOjAwgyNmnAAA
+AABJRU5ErkJggg==</office:binary-data></draw:image></draw:frame>As you see, Table2 under Tables is highlighted. You might argue, ok, the focus is really in Table2, just go to Headings in Navigator. I’ll do that now:</text:p>
+ </table:table-cell>
+ </table:table-row>
+ <text:soft-page-break/>
+ <table:table-row table:style-name="Table2.1">
+ <table:table-cell table:style-name="Table2.A1" office:value-type="string">
+ <text:p text:style-name="Text_20_body"><draw:frame draw:style-name="fr2" draw:name="Image2" text:anchor-type="char" svg:width="16.806cm" svg:height="10.834cm" draw:z-index="1"><draw:image draw:mime-type="image/png"><office:binary-data>iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAQAAAAAYLlVAAAABGdBTUEAALGPC/xhBQAAAAFz
+UkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAA
+AAJiS0dEAACqjSMyAAAACW9GRnMAAAAGAAAAAAAMc1XTAAAACXBIWXMAAA3XAAAN1wFCKJt4
+AAAACXZwQWcAAABMAAAAQACdMTgbAAABzUlEQVRo3u3ZPU/CQBjA8X+Jxs3ESUDj4iK+LA5+
+BBfjqBE1cXB2MlFAEqMgxvhNNL4sLsK3UPQL6ObkoAETz+FKW2mxCPRYnucWUu76/OC59C49
+cGOCKqrD9kHRc6ddPv7oW2WCwMh0nF63Myz7Tm8hPTNu0pgHMER3scepTbgK6enJNND83RLn
+/878yRaPmgBZFDuMsNLeWB9gmFQHP77MIg9gsYciR50NFKvtjIy10yk84pSZA7DYpwR8scmF
+QQCMuoQMpzbh0iAARrlnVn90CWHTsZcAiHPPdINQAuqsc2MQAAnKDUKWEhZ10twaBEDSJWQo
+YlFj7S9CzwEegkXWIbQsRAQASFJhpplwbRAACS+hANRJBxMiAkDcJeQ4sQkBhYgMoJ+Ozlwo
+2YQ7AJ6CRxyiUGnVy3hVKb0Af9v7hUG2Wy9TEQCUelFTDULB2S+YKYGOMcpM6UIccOQnRA6A
+cSp6ibfI+wkGADBGpTEd8xz1AaAfTQ7huA8AvUw5hVjuA0D/C5OaMN8XACRZ8F0zCggKAQhA
+AAIQgAAEIAABCEAAAhCAAAQgAAH4zg3feY4w3Xs44M5+oW0qvCWoGcvaIlM3x/f/ab+O738A
+hOCNQr34oD4AAAAldEVYdGNyZWF0ZS1kYXRlADIwMTAtMTItMjBUMTc6MDg6MzYrMDE6MDB6
+5RscAAAAJXRFWHRtb2RpZnktZGF0ZQAyMDEwLTEyLTIwVDE3OjA4OjM3KzAxOjAwgyNmnAAA
+AABJRU5ErkJggg==</office:binary-data></draw:image></draw:frame>but as soon as I continue writing in the text area, Table2 is highlighted again!</text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row table:style-name="Table2.1">
+ <table:table-cell table:style-name="Table2.A1" office:value-type="string">
+ <text:h text:style-name="Heading_20_4" text:outline-level="4"><text:bookmark-start text:name="__RefHeading___Toc71133_2824860697"/><text:span text:style-name="T6">2</text:span>. Expected behavior<text:bookmark-end text:name="__RefHeading___Toc71133_2824860697"/></text:h>
+ <text:p text:style-name="Text_20_body"><text:span text:style-name="T9">If the focus in Navigator is on Headings, it should not jump to tables when I continue to edit text which is in a table</text:span>.</text:p>
+ </table:table-cell>
+ </table:table-row>
+ </table:table>
+ <text:section text:style-name="Sect3" text:name="section 2">
+ <text:h text:style-name="Heading_20_3" text:outline-level="3"><text:bookmark-start text:name="__RefHeading___Toc74207_2824860697"/>Now I create a section<text:bookmark-end text:name="__RefHeading___Toc74207_2824860697"/></text:h>
+ <table:table table:name="Table3" table:style-name="Table3">
+ <table:table-column table:style-name="Table3.A"/>
+ <table:table-row>
+ <table:table-cell table:style-name="Table3.A1" office:value-type="string">
+ <text:p text:style-name="P14">To make it appear differently, I make it a two column one. Right now, the focus in the editing window is HERE, <text:span text:style-name="T8">but although “H Headings†is selected in the upper left corner of Navigator, the highlight jumps down to section 2! (Btw: when I tried to paste the screenshot below this text, it went to a completely different page, which is yet another bug in LO Writer, which is not subject of this bug report, but I keep note of it to report it in another bug report soon). In order to paste my picture where I want it to appear, I rearranged my text into a table and pasted the picture to a cell below. </text:span><text:span text:style-name="T10">Strangely, this picture goes to the next page in this section!</text:span><text:span text:style-name="T8">)</text:span></text:p>
+ </table:table-cell>
+ </table:table-row>
+ <text:soft-page-break/>
+ <table:table-row>
+ <table:table-cell table:style-name="Table3.A1" office:value-type="string">
+ <text:p text:style-name="Table_20_Contents"><draw:frame draw:style-name="fr1" draw:name="Image7" text:anchor-type="paragraph" svg:width="4.78cm" svg:height="9.999cm" draw:z-index="6"><draw:image draw:mime-type="image/png"></draw:image><office:binary-data>iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAQAAAAAYLlVAAAABGdBTUEAALGPC/xhBQAAAAFz
+UkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAA
+AAJiS0dEAACqjSMyAAAACW9GRnMAAAAGAAAAAAAMc1XTAAAACXBIWXMAAA3XAAAN1wFCKJt4
+AAAACXZwQWcAAABMAAAAQACdMTgbAAABzUlEQVRo3u3ZPU/CQBjA8X+Jxs3ESUDj4iK+LA5+
+BBfjqBE1cXB2MlFAEqMgxvhNNL4sLsK3UPQL6ObkoAETz+FKW2mxCPRYnucWUu76/OC59C49
+cGOCKqrD9kHRc6ddPv7oW2WCwMh0nF63Myz7Tm8hPTNu0pgHMER3scepTbgK6enJNND83RLn
+/878yRaPmgBZFDuMsNLeWB9gmFQHP77MIg9gsYciR50NFKvtjIy10yk84pSZA7DYpwR8scmF
+QQCMuoQMpzbh0iAARrlnVn90CWHTsZcAiHPPdINQAuqsc2MQAAnKDUKWEhZ10twaBEDSJWQo
+YlFj7S9CzwEegkXWIbQsRAQASFJhpplwbRAACS+hANRJBxMiAkDcJeQ4sQkBhYgMoJ+Ozlwo
+2YQ7AJ6CRxyiUGnVy3hVKb0Af9v7hUG2Wy9TEQCUelFTDULB2S+YKYGOMcpM6UIccOQnRA6A
+cSp6ibfI+wkGADBGpTEd8xz1AaAfTQ7huA8AvUw5hVjuA0D/C5OaMN8XACRZ8F0zCggKAQhA
+AAIQgAAEIAABCEAAAhCAAAQgAAH4zg3feY4w3Xs44M5+oW0qvCWoGcvaIlM3x/f/ab+O738A
+hOCNQr34oD4AAAAldEVYdGNyZWF0ZS1kYXRlADIwMTAtMTItMjBUMTc6MDg6MzYrMDE6MDB6
+5RscAAAAJXRFWHRtb2RpZnktZGF0ZQAyMDEwLTEyLTIwVDE3OjA4OjM3KzAxOjAwgyNmnAAA
+AABJRU5ErkJggg==</office:binary-data></draw:frame></text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row>
+ <table:table-cell table:style-name="Table3.A1" office:value-type="string">
+ <text:h text:style-name="Heading_20_4" text:outline-level="4"><text:bookmark-start text:name="__RefHeading___Toc74209_2824860697"/><text:span text:style-name="T11">3. </text:span>Expected Behavior<text:bookmark-end text:name="__RefHeading___Toc74209_2824860697"/></text:h>
+ <text:p text:style-name="P15"><text:span text:style-name="T12">1.</text:span> Since “H Headings†is highlighted, I would expect this one highlighted:</text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row>
+ <table:table-cell table:style-name="Table3.A1" office:value-type="string">
+ <text:p text:style-name="P16"><draw:frame draw:style-name="fr1" draw:name="Image8" text:anchor-type="paragraph" svg:width="5.02cm" svg:height="9.999cm" draw:z-index="5"><draw:image draw:mime-type="image/png"><office:binary-data>iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAQAAAAAYLlVAAAABGdBTUEAALGPC/xhBQAAAAFz
+UkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAA
+AAJiS0dEAACqjSMyAAAACW9GRnMAAAAGAAAAAAAMc1XTAAAACXBIWXMAAA3XAAAN1wFCKJt4
+AAAACXZwQWcAAABMAAAAQACdMTgbAAABzUlEQVRo3u3ZPU/CQBjA8X+Jxs3ESUDj4iK+LA5+
+BBfjqBE1cXB2MlFAEqMgxvhNNL4sLsK3UPQL6ObkoAETz+FKW2mxCPRYnucWUu76/OC59C49
+cGOCKqrD9kHRc6ddPv7oW2WCwMh0nF63Myz7Tm8hPTNu0pgHMER3scepTbgK6enJNND83RLn
+/878yRaPmgBZFDuMsNLeWB9gmFQHP77MIg9gsYciR50NFKvtjIy10yk84pSZA7DYpwR8scmF
+QQCMuoQMpzbh0iAARrlnVn90CWHTsZcAiHPPdINQAuqsc2MQAAnKDUKWEhZ10twaBEDSJWQo
+YlFj7S9CzwEegkXWIbQsRAQASFJhpplwbRAACS+hANRJBxMiAkDcJeQ4sQkBhYgMoJ+Ozlwo
+2YQ7AJ6CRxyiUGnVy3hVKb0Af9v7hUG2Wy9TEQCUelFTDULB2S+YKYGOMcpM6UIccOQnRA6A
+cSp6ibfI+wkGADBGpTEd8xz1AaAfTQ7huA8AvUw5hVjuA0D/C5OaMN8XACRZ8F0zCggKAQhA
+AAIQgAAEIAABCEAAAhCAAAQgAAH4zg3feY4w3Xs44M5+oW0qvCWoGcvaIlM3x/f/ab+O738A
+hOCNQr34oD4AAAAldEVYdGNyZWF0ZS1kYXRlADIwMTAtMTItMjBUMTc6MDg6MzYrMDE6MDB6
+5RscAAAAJXRFWHRtb2RpZnktZGF0ZQAyMDEwLTEyLTIwVDE3OjA4OjM3KzAxOjAwgyNmnAAA
+AABJRU5ErkJggg==</office:binary-data></draw:image></draw:frame>However, whatever I do, as soon as I continue editing, Table3 is highlighted again in the editor window.</text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row>
+ <table:table-cell table:style-name="Table3.A1" office:value-type="string">
+ <text:p text:style-name="P17"><text:span text:style-name="T12">2.</text:span> I would have expected the <text:span text:style-name="T11">column to continue on the last page (which again is another quirk which I’ll report in another bug report).</text:span></text:p>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row>
+ <table:table-cell table:style-name="Table3.A1" office:value-type="string">
+ <text:p text:style-name="P15"><text:span text:style-name="T12">3.</text:span> <text:span text:style-name="T9">When editing this part, LibreOffice Writer started flickering</text:span> (a phenomemon which I also observed earlier but for which I was missing reproducible examples – and of course, this bug is not subject of this report, but I note it in order to use this file for a demonstration.</text:p>
+ </table:table-cell>
+ </table:table-row>
+ </table:table>
+ <text:p text:style-name="P13"/>
+ </text:section>
+ </office:text>
+ </office:body>
+</office:document>
diff --git a/sw/qa/core/layout/data/page-remove-fly-table.odt b/sw/qa/core/layout/data/page-remove-fly-table.odt
new file mode 100644
index 0000000000..6aaf230966
--- /dev/null
+++ b/sw/qa/core/layout/data/page-remove-fly-table.odt
Binary files differ
diff --git a/sw/qa/core/layout/data/para-border-in-cell-clip.docx b/sw/qa/core/layout/data/para-border-in-cell-clip.docx
new file mode 100644
index 0000000000..7c51685364
--- /dev/null
+++ b/sw/qa/core/layout/data/para-border-in-cell-clip.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/rtl-table.docx b/sw/qa/core/layout/data/rtl-table.docx
new file mode 100644
index 0000000000..a329229699
--- /dev/null
+++ b/sw/qa/core/layout/data/rtl-table.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/shape-textbox.odt b/sw/qa/core/layout/data/shape-textbox.odt
new file mode 100644
index 0000000000..15b0aa48df
--- /dev/null
+++ b/sw/qa/core/layout/data/shape-textbox.odt
Binary files differ
diff --git a/sw/qa/core/layout/data/sorted-objs-insert.docx b/sw/qa/core/layout/data/sorted-objs-insert.docx
new file mode 100644
index 0000000000..4041ab9868
--- /dev/null
+++ b/sw/qa/core/layout/data/sorted-objs-insert.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/split-table-border.odt b/sw/qa/core/layout/data/split-table-border.odt
new file mode 100644
index 0000000000..743d54bd38
--- /dev/null
+++ b/sw/qa/core/layout/data/split-table-border.odt
Binary files differ
diff --git a/sw/qa/core/layout/data/split-table-merged-border.odt b/sw/qa/core/layout/data/split-table-merged-border.odt
new file mode 100644
index 0000000000..122bfd473c
--- /dev/null
+++ b/sw/qa/core/layout/data/split-table-merged-border.odt
Binary files differ
diff --git a/sw/qa/core/layout/data/table-fly-overlap-spacing.docx b/sw/qa/core/layout/data/table-fly-overlap-spacing.docx
new file mode 100644
index 0000000000..1791bbee6d
--- /dev/null
+++ b/sw/qa/core/layout/data/table-fly-overlap-spacing.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/table-fly-overlap.docx b/sw/qa/core/layout/data/table-fly-overlap.docx
new file mode 100644
index 0000000000..a819e855b2
--- /dev/null
+++ b/sw/qa/core/layout/data/table-fly-overlap.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/table-in-footnote.docx b/sw/qa/core/layout/data/table-in-footnote.docx
new file mode 100644
index 0000000000..10e20ffbf4
--- /dev/null
+++ b/sw/qa/core/layout/data/table-in-footnote.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/table-missing-join.docx b/sw/qa/core/layout/data/table-missing-join.docx
new file mode 100644
index 0000000000..1fabb9e5b2
--- /dev/null
+++ b/sw/qa/core/layout/data/table-missing-join.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/table-print-area-left.docx b/sw/qa/core/layout/data/table-print-area-left.docx
new file mode 100644
index 0000000000..e326bed82f
--- /dev/null
+++ b/sw/qa/core/layout/data/table-print-area-left.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/tables-move-backwards.odt b/sw/qa/core/layout/data/tables-move-backwards.odt
new file mode 100644
index 0000000000..861dc4f4ad
--- /dev/null
+++ b/sw/qa/core/layout/data/tables-move-backwards.odt
Binary files differ
diff --git a/sw/qa/core/layout/data/tdf122894-4.doc b/sw/qa/core/layout/data/tdf122894-4.doc
new file mode 100644
index 0000000000..2fe41c9ad1
--- /dev/null
+++ b/sw/qa/core/layout/data/tdf122894-4.doc
Binary files differ
diff --git a/sw/qa/core/layout/data/tdf128195.docx b/sw/qa/core/layout/data/tdf128195.docx
new file mode 100644
index 0000000000..16180654ce
--- /dev/null
+++ b/sw/qa/core/layout/data/tdf128195.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/tdf134783_testAnchorPositionBasedOnParagraph.fodt b/sw/qa/core/layout/data/tdf134783_testAnchorPositionBasedOnParagraph.fodt
new file mode 100644
index 0000000000..aa5cc77126
--- /dev/null
+++ b/sw/qa/core/layout/data/tdf134783_testAnchorPositionBasedOnParagraph.fodt
@@ -0,0 +1,284 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<office:document xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:officeooo="http://openoffice.org/2009/office" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:meta><dc:date>2020-07-14T15:50:45.951000000</dc:date><meta:editing-duration>PT1M19S</meta:editing-duration><meta:editing-cycles>1</meta:editing-cycles><meta:document-statistic meta:table-count="0" meta:image-count="0" meta:object-count="0" meta:page-count="1" meta:paragraph-count="4" meta:word-count="4" meta:character-count="8" meta:non-whitespace-character-count="8"/><meta:generator>LibreOfficeDev/7.1.0.0.alpha0$Windows_X86_64 LibreOffice_project/e8ffd954ee590d1f382685ceae12a51387919fb8</meta:generator></office:meta>
+ <office:settings>
+ <config:config-item-set config:name="ooo:view-settings">
+ <config:config-item config:name="ViewAreaTop" config:type="long">0</config:config-item>
+ <config:config-item config:name="ViewAreaLeft" config:type="long">0</config:config-item>
+ <config:config-item config:name="ViewAreaWidth" config:type="long">37837</config:config-item>
+ <config:config-item config:name="ViewAreaHeight" config:type="long">23232</config:config-item>
+ <config:config-item config:name="ShowRedlineChanges" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="InBrowseMode" config:type="boolean">false</config:config-item>
+ <config:config-item-map-indexed config:name="Views">
+ <config:config-item-map-entry>
+ <config:config-item config:name="ViewId" config:type="string">view2</config:config-item>
+ <config:config-item config:name="ViewLeft" config:type="long">10911</config:config-item>
+ <config:config-item config:name="ViewTop" config:type="long">6713</config:config-item>
+ <config:config-item config:name="VisibleLeft" config:type="long">0</config:config-item>
+ <config:config-item config:name="VisibleTop" config:type="long">0</config:config-item>
+ <config:config-item config:name="VisibleRight" config:type="long">37835</config:config-item>
+ <config:config-item config:name="VisibleBottom" config:type="long">23230</config:config-item>
+ <config:config-item config:name="ZoomType" config:type="short">0</config:config-item>
+ <config:config-item config:name="ViewLayoutColumns" config:type="short">1</config:config-item>
+ <config:config-item config:name="ViewLayoutBookMode" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ZoomFactor" config:type="short">100</config:config-item>
+ <config:config-item config:name="IsSelectedFrame" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item>
+ </config:config-item-map-entry>
+ </config:config-item-map-indexed>
+ </config:config-item-set>
+ <config:config-item-set config:name="ooo:configuration-settings">
+ <config:config-item config:name="ProtectForm" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrinterName" config:type="string"/>
+ <config:config-item config:name="EmbeddedDatabaseName" config:type="string"/>
+ <config:config-item config:name="CurrentDatabaseDataSource" config:type="string"/>
+ <config:config-item config:name="LinkUpdateMode" config:type="short">1</config:config-item>
+ <config:config-item config:name="AddParaTableSpacingAtStart" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="FloattableNomargins" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UnbreakableNumberings" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="FieldAutoUpdate" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AddVerticalFrameOffsets" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="BackgroundParaOverDrawings" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AddParaTableSpacing" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ChartAutoUpdate" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="CurrentDatabaseCommand" config:type="string"/>
+ <config:config-item config:name="PrinterSetup" config:type="base64Binary"/>
+ <config:config-item config:name="AlignTabStopPosition" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrinterPaperFromSetup" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IsKernAsianPunctuation" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="CharacterCompressionType" config:type="short">0</config:config-item>
+ <config:config-item config:name="ApplyUserData" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="DoNotJustifyLinesWithManualBreak" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SaveThumbnail" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="SaveGlobalDocumentLinks" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SmallCapsPercentage66" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="CurrentDatabaseCommandType" config:type="int">0</config:config-item>
+ <config:config-item config:name="SaveVersionOnClose" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UpdateFromTemplate" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="DoNotCaptureDrawObjsOnPage" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UseFormerObjectPositioning" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintSingleJobs" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedSystemFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrinterIndependentLayout" config:type="string">high-resolution</config:config-item>
+ <config:config-item config:name="IsLabelDocument" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AddFrameOffsets" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AddExternalLeading" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="MsWordCompMinLineHeightByFly" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UseOldNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="OutlineLevelYieldsNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="DoNotResetParaAttrsForNumFont" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IgnoreFirstLineIndentInNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AllowPrintJobCancel" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="UseFormerLineSpacing" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AddParaSpacingToTableCells" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="UseFormerTextWrapping" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="RedlineProtectionKey" config:type="base64Binary"/>
+ <config:config-item config:name="ConsiderTextWrapOnObjPos" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TableRowKeep" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TabsRelativeToIndent" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="IgnoreTabsAndBlanksForLineCalculation" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="RsidRoot" config:type="int">2065661</config:config-item>
+ <config:config-item config:name="LoadReadonly" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ClipAsCharacterAnchoredWriterFlyFrames" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UnxForceZeroExtLeading" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UseOldPrinterMetrics" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TabAtLeftIndentForParagraphsInList" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="Rsid" config:type="int">2065661</config:config-item>
+ <config:config-item config:name="MsWordCompTrailingBlanks" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="MathBaselineAlignment" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="InvertBorderSpacing" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="CollapseEmptyCellPara" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="TabOverflow" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="StylesNoDefault" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ClippedPictures" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedOnlyUsedFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedLatinScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmbedAsianScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmptyDbFieldHidesPara" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedComplexScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="TabOverMargin" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TreatSingleColumnBreakAsPageBreak" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SurroundTextWrapSmall" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ApplyParagraphMarkFormatToNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PropLineSpacingShrinksFirstLine" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="SubtractFlysAnchoredAtFlys" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="DisableOffPagePositioning" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ContinuousEndnotes" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ProtectBookmarks" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ProtectFields" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="HeaderSpacingBelowLastPara" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintAnnotationMode" config:type="short">0</config:config-item>
+ <config:config-item config:name="PrintGraphics" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintBlackFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintLeftPages" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintControls" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintPageBackground" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintTextPlaceholder" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintDrawings" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintHiddenText" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintProspect" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintTables" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintProspectRTL" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintReversed" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintRightPages" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintFaxName" config:type="string"/>
+ <config:config-item config:name="PrintPaperFromSetup" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintEmptyPages" config:type="boolean">true</config:config-item>
+ </config:config-item-set>
+ </office:settings>
+ <office:scripts>
+ <office:script script:language="ooo:Basic">
+ <ooo:libraries xmlns:ooo="http://openoffice.org/2004/office" xmlns:xlink="http://www.w3.org/1999/xlink"/>
+ </office:script>
+ </office:scripts>
+ <office:font-face-decls>
+ <style:font-face style:name="Lucida Sans1" svg:font-family="&apos;Lucida Sans&apos;" style:font-family-generic="swiss"/>
+ <style:font-face style:name="Liberation Serif" svg:font-family="&apos;Liberation Serif&apos;" style:font-family-generic="roman" style:font-pitch="variable"/>
+ <style:font-face style:name="Liberation Sans" svg:font-family="&apos;Liberation Sans&apos;" style:font-family-generic="swiss" style:font-pitch="variable"/>
+ <style:font-face style:name="Lucida Sans" svg:font-family="&apos;Lucida Sans&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="Microsoft YaHei" svg:font-family="&apos;Microsoft YaHei&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="NSimSun" svg:font-family="NSimSun" style:font-family-generic="system" style:font-pitch="variable"/>
+ </office:font-face-decls>
+ <office:styles>
+ <style:default-style style:family="graphic">
+ <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:flow-with-text="false"/>
+ <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:writing-mode="lr-tb" style:font-independent-line-spacing="false">
+ <style:tab-stops/>
+ </style:paragraph-properties>
+ <style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="hu" fo:country="HU" style:letter-kerning="true" style:font-name-asian="NSimSun" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Lucida Sans" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/>
+ </style:default-style>
+ <style:default-style style:family="paragraph">
+ <style:paragraph-properties fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="1.251cm" style:writing-mode="page"/>
+ <style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="hu" fo:country="HU" style:letter-kerning="true" style:font-name-asian="NSimSun" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Lucida Sans" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2" loext:hyphenation-no-caps="false"/>
+ </style:default-style>
+ <style:default-style style:family="table">
+ <style:table-properties table:border-model="collapsing"/>
+ </style:default-style>
+ <style:default-style style:family="table-row">
+ <style:table-row-properties fo:keep-together="auto"/>
+ </style:default-style>
+ <style:style style:name="Standard" style:family="paragraph" style:class="text">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="2.752cm" style:contextual-spacing="true"/>
+ </style:style>
+ <style:style style:name="Heading" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text_20_body" style:class="text">
+ <style:paragraph-properties fo:margin-top="0.423cm" fo:margin-bottom="0.212cm" style:contextual-spacing="false" fo:keep-with-next="always"/>
+ <style:text-properties style:font-name="Liberation Sans" fo:font-family="&apos;Liberation Sans&apos;" style:font-family-generic="swiss" style:font-pitch="variable" fo:font-size="14pt" style:font-name-asian="Microsoft YaHei" style:font-family-asian="&apos;Microsoft YaHei&apos;" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="14pt" style:font-name-complex="Lucida Sans" style:font-family-complex="&apos;Lucida Sans&apos;" style:font-family-generic-complex="system" style:font-pitch-complex="variable" style:font-size-complex="14pt"/>
+ </style:style>
+ <style:style style:name="Text_20_body" style:display-name="Text body" style:family="paragraph" style:parent-style-name="Standard" style:class="text">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.247cm" style:contextual-spacing="false" fo:line-height="115%"/>
+ </style:style>
+ <style:style style:name="List" style:family="paragraph" style:parent-style-name="Text_20_body" style:class="list">
+ <style:text-properties style:font-size-asian="12pt" style:font-name-complex="Lucida Sans1" style:font-family-complex="&apos;Lucida Sans&apos;" style:font-family-generic-complex="swiss"/>
+ </style:style>
+ <style:style style:name="Caption" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
+ <style:paragraph-properties fo:margin-top="0.212cm" fo:margin-bottom="0.212cm" style:contextual-spacing="false" text:number-lines="false" text:line-number="0"/>
+ <style:text-properties fo:font-size="12pt" fo:font-style="italic" style:font-size-asian="12pt" style:font-style-asian="italic" style:font-name-complex="Lucida Sans1" style:font-family-complex="&apos;Lucida Sans&apos;" style:font-family-generic-complex="swiss" style:font-size-complex="12pt" style:font-style-complex="italic"/>
+ </style:style>
+ <style:style style:name="Index" style:family="paragraph" style:parent-style-name="Standard" style:class="index">
+ <style:paragraph-properties text:number-lines="false" text:line-number="0"/>
+ <style:text-properties style:font-size-asian="12pt" style:font-name-complex="Lucida Sans1" style:font-family-complex="&apos;Lucida Sans&apos;" style:font-family-generic-complex="swiss"/>
+ </style:style>
+ <text:outline-style style:name="Outline">
+ <text:outline-level-style text:level="1" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="2" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="3" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="4" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="5" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="6" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="7" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="8" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="9" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="10" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ </text:outline-style>
+ <text:notes-configuration text:note-class="footnote" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/>
+ <text:notes-configuration text:note-class="endnote" style:num-format="i" text:start-value="0"/>
+ <text:linenumbering-configuration text:number-lines="false" text:offset="0.499cm" style:num-format="1" text:number-position="left" text:increment="5"/>
+ </office:styles>
+ <office:automatic-styles>
+ <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Standard">
+ <style:paragraph-properties fo:text-align="center" style:justify-single-word="false"/>
+ </style:style>
+ <style:style style:name="P2" style:family="paragraph" style:parent-style-name="Text_20_body">
+ <style:text-properties officeooo:rsid="001f84fd" officeooo:paragraph-rsid="001f84fd"/>
+ </style:style>
+ <style:style style:name="P3" style:family="paragraph">
+ <style:paragraph-properties fo:text-align="center"/>
+ </style:style>
+ <style:style style:name="gr1" style:family="graphic">
+ <style:graphic-properties svg:stroke-width="0.081cm" draw:marker-start-width="0.474cm" draw:marker-end-width="0.474cm" draw:textarea-horizontal-align="center" draw:textarea-vertical-align="middle" fo:padding-top="0.041cm" fo:padding-bottom="0.041cm" fo:padding-left="0.041cm" fo:padding-right="0.041cm" style:run-through="foreground" style:wrap="run-through" style:number-wrapped-paragraphs="no-limit" style:vertical-pos="top" style:vertical-rel="paragraph" style:horizontal-pos="left" style:horizontal-rel="paragraph" draw:wrap-influence-on-position="once-concurrent" loext:allow-overlap="true" style:flow-with-text="false"/>
+ </style:style>
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" style:layout-grid-lines="20" style:layout-grid-base-height="0.706cm" style:layout-grid-ruby-height="0.353cm" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="false" style:layout-grid-display="false" style:footnote-max-height="0cm">
+ <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style/>
+ </style:page-layout>
+ </office:automatic-styles>
+ <office:master-styles>
+ <style:master-page style:name="Standard" style:page-layout-name="pm1"/>
+ </office:master-styles>
+ <office:body>
+ <office:text>
+ <text:sequence-decls>
+ <text:sequence-decl text:display-outline-level="0" text:name="Illustration"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Table"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Text"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Figure"/>
+ </text:sequence-decls>
+ <text:p text:style-name="Standard">A1</text:p>
+ <text:p text:style-name="Standard"><draw:line text:anchor-type="paragraph" draw:z-index="0" draw:name="Alakzat1" draw:style-name="gr1" draw:text-style-name="P3" svg:x1="0cm" svg:y1="0cm" svg:x2="3.44cm" svg:y2="0.026cm">
+ <text:p/>
+ </draw:line>A2</text:p>
+ <text:p text:style-name="Standard"><draw:line text:anchor-type="paragraph" draw:z-index="1" draw:name="Alakzat1_0" draw:style-name="gr1" draw:text-style-name="P3" svg:x1="0cm" svg:y1="0cm" svg:x2="3.44cm" svg:y2="0.026cm">
+ <text:p/>
+ </draw:line>A3</text:p>
+ <text:p text:style-name="P2"><draw:line text:anchor-type="paragraph" draw:z-index="2" draw:name="Alakzat1_1" draw:style-name="gr1" draw:text-style-name="P3" svg:x1="0cm" svg:y1="0cm" svg:x2="3.44cm" svg:y2="0.026cm">
+ <text:p/>
+ </draw:line>B1</text:p>
+ </office:text>
+ </office:body>
+</office:document>
diff --git a/sw/qa/core/layout/data/tdf157096.docx b/sw/qa/core/layout/data/tdf157096.docx
new file mode 100644
index 0000000000..bca591e8ad
--- /dev/null
+++ b/sw/qa/core/layout/data/tdf157096.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/tdf45908_invoice.odt b/sw/qa/core/layout/data/tdf45908_invoice.odt
new file mode 100644
index 0000000000..41ff78d34d
--- /dev/null
+++ b/sw/qa/core/layout/data/tdf45908_invoice.odt
Binary files differ
diff --git a/sw/qa/core/layout/data/textbox-autogrow-vertical.docx b/sw/qa/core/layout/data/textbox-autogrow-vertical.docx
new file mode 100644
index 0000000000..0cc45a781c
--- /dev/null
+++ b/sw/qa/core/layout/data/textbox-autogrow-vertical.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/textbox-modification.docx b/sw/qa/core/layout/data/textbox-modification.docx
new file mode 100644
index 0000000000..6adf1a950e
--- /dev/null
+++ b/sw/qa/core/layout/data/textbox-modification.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/textbox-phantom-change.docx b/sw/qa/core/layout/data/textbox-phantom-change.docx
new file mode 100644
index 0000000000..75ac039561
--- /dev/null
+++ b/sw/qa/core/layout/data/textbox-phantom-change.docx
Binary files differ
diff --git a/sw/qa/core/layout/data/vmerge-cell-border.docx b/sw/qa/core/layout/data/vmerge-cell-border.docx
new file mode 100644
index 0000000000..11d7a76d22
--- /dev/null
+++ b/sw/qa/core/layout/data/vmerge-cell-border.docx
Binary files differ
diff --git a/sw/qa/core/layout/fly.cxx b/sw/qa/core/layout/fly.cxx
new file mode 100644
index 0000000000..47cfb40fa6
--- /dev/null
+++ b/sw/qa/core/layout/fly.cxx
@@ -0,0 +1,91 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <swmodeltestbase.hxx>
+
+#include <IDocumentLayoutAccess.hxx>
+#include <anchoredobject.hxx>
+#include <flyfrms.hxx>
+#include <pagefrm.hxx>
+#include <rootfrm.hxx>
+#include <sortedobjs.hxx>
+#include <docsh.hxx>
+#include <wrtsh.hxx>
+
+namespace
+{
+/// Covers sw/source/core/layout/fly.cxx fixes, i.e. mostly SwFlyFrame.
+class Test : public SwModelTestBase
+{
+public:
+ Test()
+ : SwModelTestBase("/sw/qa/core/layout/data/")
+ {
+ }
+};
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyNegativeHeight)
+{
+ // Given a document with complex enough content that a split fly frame temporarily moves below
+ // the bottom of the body frame on a page:
+ // When laying out the document, SwEditShell::CalcLayout() never returned:
+ createSwDoc("floattable-negative-height.docx");
+
+ SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
+ pWrtShell->Reformat();
+
+ // Make sure that all the pages have the expected content:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ for (SwFrame* pFrame = pLayout->Lower(); pFrame; pFrame = pFrame->GetNext())
+ {
+ auto pPage = pFrame->DynCastPageFrame();
+ if (!pPage->GetPrev())
+ {
+ // First page: start of the split fly chain:
+ CPPUNIT_ASSERT(pPage->GetSortedObjs());
+ SwSortedObjs& rPageObjs = *pPage->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPageObjs.size());
+ auto pFly = rPageObjs[0]->DynCastFlyFrame()->DynCastFlyAtContentFrame();
+ CPPUNIT_ASSERT(pFly);
+ CPPUNIT_ASSERT(!pFly->GetPrecede());
+ CPPUNIT_ASSERT(pFly->GetFollow());
+ }
+ else if (pPage->GetPrev() && pPage->GetNext() && pPage->GetNext()->GetNext())
+ {
+ // Middle pages: have a previous and a next fly:
+ CPPUNIT_ASSERT(pPage->GetSortedObjs());
+ SwSortedObjs& rPageObjs = *pPage->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPageObjs.size());
+ auto pFly = rPageObjs[0]->DynCastFlyFrame()->DynCastFlyAtContentFrame();
+ CPPUNIT_ASSERT(pFly);
+ CPPUNIT_ASSERT(pFly->GetPrecede());
+ CPPUNIT_ASSERT(pFly->GetFollow());
+ }
+ else if (pPage->GetPrev() && pPage->GetNext() && !pPage->GetNext()->GetNext())
+ {
+ // Page last but one: end of the fly chain:
+ CPPUNIT_ASSERT(pPage->GetSortedObjs());
+ SwSortedObjs& rPageObjs = *pPage->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPageObjs.size());
+ auto pFly = rPageObjs[0]->DynCastFlyFrame()->DynCastFlyAtContentFrame();
+ CPPUNIT_ASSERT(pFly);
+ CPPUNIT_ASSERT(pFly->GetPrecede());
+ CPPUNIT_ASSERT(!pFly->GetFollow());
+ }
+ else if (pPage->GetPrev() && !pPage->GetNext())
+ {
+ // Last page: no flys.
+ CPPUNIT_ASSERT(!pPage->GetSortedObjs());
+ }
+ }
+}
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/layout/flycnt.cxx b/sw/qa/core/layout/flycnt.cxx
new file mode 100644
index 0000000000..455012ea49
--- /dev/null
+++ b/sw/qa/core/layout/flycnt.cxx
@@ -0,0 +1,1275 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <swmodeltestbase.hxx>
+
+#include <svx/svdview.hxx>
+#include <comphelper/propertyvalue.hxx>
+
+#include <IDocumentLayoutAccess.hxx>
+#include <anchoredobject.hxx>
+#include <flyfrms.hxx>
+#include <formatflysplit.hxx>
+#include <pagefrm.hxx>
+#include <rootfrm.hxx>
+#include <sortedobjs.hxx>
+#include <tabfrm.hxx>
+#include <txtfrm.hxx>
+#include <fmtfsize.hxx>
+#include <docsh.hxx>
+#include <wrtsh.hxx>
+#include <itabenum.hxx>
+#include <frmmgr.hxx>
+#include <frameformats.hxx>
+#include <cellfrm.hxx>
+#include <ndtxt.hxx>
+#include <dflyobj.hxx>
+#include <IDocumentSettingAccess.hxx>
+#include <formatwraptextatflystart.hxx>
+
+namespace
+{
+/// Covers sw/source/core/layout/flycnt.cxx fixes, i.e. mostly SwFlyAtContentFrame.
+class Test : public SwModelTestBase
+{
+public:
+ Test()
+ : SwModelTestBase("/sw/qa/core/layout/data/")
+ {
+ }
+
+ /// Creates a document with a multi-page floating table: 1 columns and 2 rows.
+ void Create1x2SplitFly();
+};
+
+void Test::Create1x2SplitFly()
+{
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ SwPageDesc aStandard(pDoc->GetPageDesc(0));
+ SwFormatFrameSize aPageSize(aStandard.GetMaster().GetFrameSize());
+ // 10 cm for the page height, 2cm are the top and bottom margins, so 6cm remains for the body
+ // frame:
+ aPageSize.SetHeight(5669);
+ aStandard.GetMaster().SetFormatAttr(aPageSize);
+ pDoc->ChgPageDesc(0, aStandard);
+ // Insert a table:
+ SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
+ SwInsertTableOptions aTableOptions(SwInsertTableFlags::DefaultBorder, 0);
+ pWrtShell->InsertTable(aTableOptions, /*nRows=*/2, /*nCols=*/1);
+ pWrtShell->MoveTable(GotoPrevTable, fnTableStart);
+ pWrtShell->GoPrevCell();
+ pWrtShell->Insert("A1");
+ SwFormatFrameSize aRowSize(SwFrameSize::Minimum);
+ // 4 cm, so 2 rows don't fit 1 page.
+ aRowSize.SetHeight(2267);
+ pWrtShell->SetRowHeight(aRowSize);
+ pWrtShell->GoNextCell();
+ pWrtShell->Insert("A2");
+ pWrtShell->SetRowHeight(aRowSize);
+ // Select cell:
+ pWrtShell->SelAll();
+ // Select table:
+ pWrtShell->SelAll();
+ // Wrap the table in a text frame:
+ SwFlyFrameAttrMgr aMgr(true, pWrtShell, Frmmgr_Type::TEXT, nullptr);
+ pWrtShell->StartAllAction();
+ aMgr.InsertFlyFrame(RndStdIds::FLY_AT_PARA, aMgr.GetPos(), aMgr.GetSize());
+ pWrtShell->EndAllAction();
+ // Allow the text frame to split:
+ pWrtShell->StartAllAction();
+ auto& rFlys = *pDoc->GetSpzFrameFormats();
+ auto pFly = rFlys[0];
+ SwAttrSet aSet(pFly->GetAttrSet());
+ aSet.Put(SwFormatFlySplit(true));
+ pDoc->SetAttr(aSet, *pFly);
+ pWrtShell->EndAllAction();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage1);
+ // We have 2 pages:
+ CPPUNIT_ASSERT(pPage1->GetNext());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyWithTable)
+{
+ // Given a document with a multi-page floating table:
+ createSwDoc("floattable.docx");
+
+ // When laying out that document:
+ calcLayout();
+
+ // Then make sure that the first row goes to page 1 and the second row goes to page 2, while the
+ // table is floating:
+ SwDoc* pDoc = getSwDoc();
+ // Without the accompanying fix in place, this test would have failed with a stack overflow
+ // because the follow frame of the anchor was moved into the follow frame of the fly, so the fly
+ // was anchored in itself.
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ // Page 1 has a master fly, which contains a master table:
+ auto pPage1 = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage1);
+ const SwSortedObjs& rPage1Objs = *pPage1->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage1Objs.size());
+ auto pPage1Fly = dynamic_cast<SwFlyAtContentFrame*>(rPage1Objs[0]);
+ CPPUNIT_ASSERT(pPage1Fly);
+ CPPUNIT_ASSERT(!pPage1Fly->GetPrecede());
+ CPPUNIT_ASSERT(pPage1Fly->GetFollow());
+ auto pPage1Table = dynamic_cast<SwTabFrame*>(pPage1Fly->GetLower());
+ CPPUNIT_ASSERT(pPage1Table);
+ CPPUNIT_ASSERT(!pPage1Table->GetPrecede());
+ CPPUNIT_ASSERT(pPage1Table->GetFollow());
+ // Page 2 has a follow fly, which contains a follow table:
+ auto pPage2 = dynamic_cast<SwPageFrame*>(pPage1->GetNext());
+ CPPUNIT_ASSERT(pPage2);
+ const SwSortedObjs& rPage2Objs = *pPage2->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage2Objs.size());
+ auto pPage2Fly = dynamic_cast<SwFlyAtContentFrame*>(rPage2Objs[0]);
+ CPPUNIT_ASSERT(pPage2Fly);
+ CPPUNIT_ASSERT(pPage2Fly->GetPrecede());
+ CPPUNIT_ASSERT(!pPage2Fly->GetFollow());
+ auto pPage2Table = dynamic_cast<SwTabFrame*>(pPage2Fly->GetLower());
+ CPPUNIT_ASSERT(pPage2Table);
+ CPPUNIT_ASSERT(pPage2Table->GetPrecede());
+ CPPUNIT_ASSERT(!pPage2Table->GetFollow());
+ // Page 1 anchor has no text:
+ auto pPage1Anchor = dynamic_cast<SwTextFrame*>(pPage1->FindLastBodyContent());
+ CPPUNIT_ASSERT(pPage1Anchor);
+ // This failed, page 1 anchor had unexpected, leftover text.
+ CPPUNIT_ASSERT(!pPage1Anchor->HasPara());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyVertOffset)
+{
+ // Given a document with a floattable, split on 2 pages and a positive vertical offset:
+ createSwDoc("floattable-vertoffset.docx");
+
+ // When laying out that document:
+ calcLayout();
+
+ // Then make sure that the vert offset has an effect on the master fly, but not on follow flys:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage1);
+ const SwSortedObjs& rPage1Objs = *pPage1->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage1Objs.size());
+ auto pPage1Fly = dynamic_cast<SwFlyAtContentFrame*>(rPage1Objs[0]);
+ CPPUNIT_ASSERT(pPage1Fly);
+ auto pPage1Anchor = dynamic_cast<SwTextFrame*>(pPage1->FindLastBodyContent());
+ CPPUNIT_ASSERT(pPage1Anchor);
+ SwTwips nPage1AnchorTop = pPage1Anchor->getFrameArea().Top();
+ SwTwips nPage1FlyTop = pPage1Fly->getFrameArea().Top();
+ // First page, the vert offset should be there. This comes from word/document.xml:
+ // <w:tblpPr ... w:tblpY="1135"/>
+ CPPUNIT_ASSERT_EQUAL(static_cast<SwTwips>(1135), nPage1FlyTop - nPage1AnchorTop);
+
+ // Also verify that the 2nd page has no such offset:
+ auto pPage2 = dynamic_cast<SwPageFrame*>(pPage1->GetNext());
+ CPPUNIT_ASSERT(pPage2);
+ const SwSortedObjs& rPage2Objs = *pPage2->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage2Objs.size());
+ auto pPage2Fly = dynamic_cast<SwFlyAtContentFrame*>(rPage2Objs[0]);
+ CPPUNIT_ASSERT(pPage2Fly);
+ auto pPage2Anchor = dynamic_cast<SwTextFrame*>(pPage2->FindLastBodyContent());
+ CPPUNIT_ASSERT(pPage2Anchor);
+ SwTwips nPage2AnchorTop = pPage2Anchor->getFrameArea().Top();
+ SwTwips nPage2FlyTop = pPage2Fly->getFrameArea().Top();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 0
+ // - Actual : 1135
+ // i.e. the fly frame on the 2nd page was also shifted down in Writer, but not in Word.
+ CPPUNIT_ASSERT_EQUAL(static_cast<SwTwips>(0), nPage2FlyTop - nPage2AnchorTop);
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFly3Pages)
+{
+ // Given a document with a floattable, split on 3 pages:
+ createSwDoc("floattable-3pages.docx");
+
+ // When laying out that document:
+ calcLayout();
+
+ // Then make sure that row 1, 2 & 3 go to page 1, 2 & 3, while the table is floating:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage1);
+ const SwSortedObjs& rPage1Objs = *pPage1->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage1Objs.size());
+ auto pPage1Fly = dynamic_cast<SwFlyAtContentFrame*>(rPage1Objs[0]);
+ CPPUNIT_ASSERT(pPage1Fly);
+ auto pPage1Anchor = dynamic_cast<SwTextFrame*>(pPage1->FindLastBodyContent());
+ CPPUNIT_ASSERT(pPage1Anchor);
+ SwTwips nPage1AnchorTop = pPage1Anchor->getFrameArea().Top();
+ SwTwips nPage1FlyTop = pPage1Fly->getFrameArea().Top();
+ // The vert offset should be there on the first page:
+ CPPUNIT_ASSERT_EQUAL(static_cast<SwTwips>(1135), nPage1FlyTop - nPage1AnchorTop);
+ // Second page:
+ auto pPage2 = dynamic_cast<SwPageFrame*>(pPage1->GetNext());
+ CPPUNIT_ASSERT(pPage2);
+ const SwSortedObjs& rPage2Objs = *pPage2->GetSortedObjs();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 1
+ // - Actual : 2
+ // i.e. both the 2nd and 3rd fly was anchored on page 2.
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage2Objs.size());
+ auto pPage2Fly = dynamic_cast<SwFlyAtContentFrame*>(rPage2Objs[0]);
+ CPPUNIT_ASSERT(pPage2Fly);
+ auto pPage2Anchor = dynamic_cast<SwTextFrame*>(pPage2->FindLastBodyContent());
+ CPPUNIT_ASSERT(pPage2Anchor);
+ SwTwips nPage2AnchorTop = pPage2Anchor->getFrameArea().Top();
+ SwTwips nPage2FlyTop = pPage2Fly->getFrameArea().Top();
+ // No vert offset on the second page:
+ CPPUNIT_ASSERT_EQUAL(static_cast<SwTwips>(0), nPage2FlyTop - nPage2AnchorTop);
+ // 3rd page:
+ auto pPage3 = dynamic_cast<SwPageFrame*>(pPage1->GetNext());
+ CPPUNIT_ASSERT(pPage3);
+ const SwSortedObjs& rPage3Objs = *pPage3->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage3Objs.size());
+ auto pPage3Fly = dynamic_cast<SwFlyAtContentFrame*>(rPage3Objs[0]);
+ CPPUNIT_ASSERT(pPage3Fly);
+ auto pPage3Anchor = dynamic_cast<SwTextFrame*>(pPage3->FindLastBodyContent());
+ CPPUNIT_ASSERT(pPage3Anchor);
+ SwTwips nPage3AnchorTop = pPage3Anchor->getFrameArea().Top();
+ SwTwips nPage3FlyTop = pPage3Fly->getFrameArea().Top();
+ // No vert offset on the 3rd page:
+ CPPUNIT_ASSERT_EQUAL(static_cast<SwTwips>(0), nPage3FlyTop - nPage3AnchorTop);
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyRow)
+{
+ // Given a document with a floattable, single row split on 2 pages:
+ createSwDoc("floattable-rowsplit.docx");
+
+ // When laying out that document:
+ calcLayout();
+
+ // Then make sure that the single row is split to 2 pages, and the fly frames have the correct
+ // coordinates:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage1);
+ const SwSortedObjs& rPage1Objs = *pPage1->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage1Objs.size());
+ auto pPage1Fly = dynamic_cast<SwFlyAtContentFrame*>(rPage1Objs[0]);
+ CPPUNIT_ASSERT(pPage1Fly);
+ auto pPage1Anchor = dynamic_cast<SwTextFrame*>(pPage1->FindLastBodyContent());
+ CPPUNIT_ASSERT(pPage1Anchor);
+ // ~No offset between the fly and its anchor:
+ SwTwips nPage1AnchorTop = pPage1Anchor->getFrameArea().Top();
+ SwTwips nPage1FlyTop = pPage1Fly->getFrameArea().Top();
+ CPPUNIT_ASSERT_EQUAL(static_cast<SwTwips>(1), nPage1FlyTop - nPage1AnchorTop);
+ // Second page:
+ auto pPage2 = dynamic_cast<SwPageFrame*>(pPage1->GetNext());
+ CPPUNIT_ASSERT(pPage2);
+ const SwSortedObjs& rPage2Objs = *pPage2->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage2Objs.size());
+ auto pPage2Fly = dynamic_cast<SwFlyAtContentFrame*>(rPage2Objs[0]);
+ CPPUNIT_ASSERT(pPage2Fly);
+ auto pPage2Anchor = dynamic_cast<SwTextFrame*>(pPage2->FindLastBodyContent());
+ CPPUNIT_ASSERT(pPage2Anchor);
+ // No offset between the fly and its anchor:
+ SwTwips nPage2AnchorTop = pPage2Anchor->getFrameArea().Top();
+ SwTwips nPage2FlyTop = pPage2Fly->getFrameArea().Top();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 0
+ // - Actual : -1440
+ // i.e. the 2nd page's fly had a wrong position.
+ CPPUNIT_ASSERT_EQUAL(static_cast<SwTwips>(0), nPage2FlyTop - nPage2AnchorTop);
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyEnable)
+{
+ // Given a document with a table in a textframe:
+ Create1x2SplitFly();
+
+ // Then make sure that the layout is updated and we have 2 pages:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage1);
+ auto pPage2 = dynamic_cast<SwPageFrame*>(pPage1->GetNext());
+ // Without the accompanying fix in place, this test would have failed, there was no 2nd page.
+ CPPUNIT_ASSERT(pPage2);
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyDisable)
+{
+ // Given a document with a floating table, table split on 2 pages:
+ Create1x2SplitFly();
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage1);
+ CPPUNIT_ASSERT(pPage1->GetNext());
+ const SwSortedObjs& rPage1Objs = *pPage1->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage1Objs.size());
+ auto pPage1Fly = dynamic_cast<SwFlyAtContentFrame*>(rPage1Objs[0]);
+ CPPUNIT_ASSERT(pPage1Fly);
+ CPPUNIT_ASSERT(pPage1Fly->GetFollow());
+
+ // When turning the "split fly" checkbox off:
+ SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
+ pWrtShell->StartAllAction();
+ auto& rFlys = *pDoc->GetSpzFrameFormats();
+ auto pFly = rFlys[0];
+ SwAttrSet aSet(pFly->GetAttrSet());
+ // Note how the UI puts a SwFormatFrameSize into this item set with a slightly different size
+ // (e.g. 3823 twips width -> 3821). This means that by accident the UI works even without the
+ // explicit RES_FLY_SPLIT handling in SwFlyFrame::UpdateAttr_(), but this test will fail when
+ // that is missing.
+ aSet.Put(SwFormatFlySplit(false));
+ pDoc->SetAttr(aSet, *pFly);
+ pWrtShell->EndAllAction();
+
+ // Then make sure the extra page and follow fly frame is joined:
+ CPPUNIT_ASSERT(!pPage1->GetNext());
+ // Without the accompanying fix in place, this test would have failed, the follow fly frame was
+ // moved to page 1, but it wasn't deleted.
+ CPPUNIT_ASSERT(!pPage1Fly->GetFollow());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyFooter)
+{
+ // Given a document with a floattable, table split on 2 pages with headers/footers:
+ createSwDoc("floattable-footer.docx");
+
+ // When laying out that document:
+ calcLayout();
+
+ // Then make sure that the table is split to 2 pages:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage1);
+ SwTwips nPage1Top = pPage1->getFrameArea().Top();
+ const SwSortedObjs& rPage1Objs = *pPage1->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage1Objs.size());
+ auto pPage1Fly = dynamic_cast<SwFlyAtContentFrame*>(rPage1Objs[0]);
+ CPPUNIT_ASSERT(pPage1Fly);
+ SwTwips nPage1FlyTop = pPage1Fly->getFrameArea().Top();
+ // <w:tblpPr w:tblpY="3286"> from the bugdoc.
+ CPPUNIT_ASSERT_EQUAL(static_cast<SwTwips>(3286), nPage1FlyTop - nPage1Top);
+ // Second page:
+ auto pPage2 = dynamic_cast<SwPageFrame*>(pPage1->GetNext());
+ // Without the accompanying fix in place, this test would have failed, there was no 2nd page.
+ CPPUNIT_ASSERT(pPage2);
+ SwTwips nPage2Top = pPage2->getFrameArea().Top();
+ const SwSortedObjs& rPage2Objs = *pPage2->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage2Objs.size());
+ auto pPage2Fly = dynamic_cast<SwFlyAtContentFrame*>(rPage2Objs[0]);
+ CPPUNIT_ASSERT(pPage2Fly);
+ SwTwips nPage2FlyTop = pPage2Fly->getFrameArea().Top();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 1440
+ // - Actual : 0
+ // i.e. <w:pgMar w:top="1440"> from the bugdoc was lost, the follow fly had no vertical offset.
+ CPPUNIT_ASSERT_EQUAL(static_cast<SwTwips>(1440), nPage2FlyTop - nPage2Top);
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyFooter2Rows)
+{
+ // Given a document with a 2nd page that contains the second half of a split row + a last row:
+ createSwDoc("floattable-footer-2rows.docx");
+
+ // When laying out that document:
+ calcLayout();
+
+ // Then make sure that the table is split to 2 pages:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage1);
+ auto pPage2 = dynamic_cast<SwPageFrame*>(pPage1->GetNext());
+ CPPUNIT_ASSERT(pPage2);
+ // Without the accompanying fix in place, this test would have failed. The 2nd page only had the
+ // 2nd half of the split row and the last row went to a 3rd page.
+ CPPUNIT_ASSERT(!pPage2->GetNext());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFly2Cols)
+{
+ // Given a document with a 2nd page that contains the second half of a split row and 2 columns:
+ createSwDoc("floattable-2cols.docx");
+
+ // When laying out that document:
+ calcLayout();
+
+ // Then make sure that the table is split to 2 pages:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage1);
+ auto pPage2 = dynamic_cast<SwPageFrame*>(pPage1->GetNext());
+ CPPUNIT_ASSERT(pPage2);
+ // Without the accompanying fix in place, this test would have failed. The 2nd page only had the
+ // 2nd half of the split row and the very last row went to a 3rd page.
+ CPPUNIT_ASSERT(!pPage2->GetNext());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyWidow)
+{
+ // Given a document with a 2nd page that contains 2 lines, due to widow control:
+ createSwDoc("floattable-widow.docx");
+
+ // When laying out that document:
+ calcLayout();
+
+ // Then make sure that widow control works:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage1);
+ const SwSortedObjs& rPage1Objs = *pPage1->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage1Objs.size());
+ auto pPage1Fly = dynamic_cast<SwFlyAtContentFrame*>(rPage1Objs[0]);
+ CPPUNIT_ASSERT(pPage1Fly);
+ SwFrame* pTab1 = pPage1Fly->GetLower();
+ SwFrame* pRow1 = pTab1->GetLower();
+ SwFrame* pCell1 = pRow1->GetLower();
+ auto pText1 = dynamic_cast<SwTextFrame*>(pCell1->GetLower());
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 6
+ // - Actual : 7
+ // i.e. widow control was disabled, layout didn't match Word.
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(6), pText1->GetThisLines());
+ auto pPage2 = dynamic_cast<SwPageFrame*>(pPage1->GetNext());
+ CPPUNIT_ASSERT(pPage2);
+ const SwSortedObjs& rPage2Objs = *pPage2->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage2Objs.size());
+ auto pPage2Fly = dynamic_cast<SwFlyAtContentFrame*>(rPage2Objs[0]);
+ CPPUNIT_ASSERT(pPage2Fly);
+ SwFrame* pTab2 = pPage2Fly->GetLower();
+ SwFrame* pRow2 = pTab2->GetLower();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 1014
+ // - Actual : 553
+ // i.e. <w:trHeight w:val="1014"> from the file was ignored.
+ CPPUNIT_ASSERT_EQUAL(static_cast<tools::Long>(1014), pRow2->getFrameArea().Height());
+ SwFrame* pCell2 = pRow2->GetLower();
+ auto pText2 = dynamic_cast<SwTextFrame*>(pCell2->GetLower());
+ // And then similarly this was 1, not 2.
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(2), pText2->GetThisLines());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyCompat14)
+{
+ // Given a Word 2010 document with 2 pages, one table row each:
+ createSwDoc("floattable-compat14.docx");
+
+ // When laying out that document:
+ calcLayout();
+
+ // Then make sure that the first row is entirely on page 1:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage1);
+ const SwSortedObjs& rPage1Objs = *pPage1->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage1Objs.size());
+ auto pPage1Fly = dynamic_cast<SwFlyAtContentFrame*>(rPage1Objs[0]);
+ CPPUNIT_ASSERT(pPage1Fly);
+ SwFrame* pTab1 = pPage1Fly->GetLower();
+ SwFrame* pRow1 = pTab1->GetLower();
+ auto pCell1 = dynamic_cast<SwCellFrame*>(pRow1->GetLower());
+ // Without the accompanying fix in place, this test would have failed, the first row was split,
+ // but not in Word.
+ CPPUNIT_ASSERT(!pCell1->GetFollowCell());
+ // Also make sure that the second row is entirely on page 2:
+ auto pPage2 = dynamic_cast<SwPageFrame*>(pPage1->GetNext());
+ CPPUNIT_ASSERT(pPage2);
+ const SwSortedObjs& rPage2Objs = *pPage2->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage2Objs.size());
+ auto pPage2Fly = dynamic_cast<SwFlyAtContentFrame*>(rPage2Objs[0]);
+ CPPUNIT_ASSERT(pPage2Fly);
+ SwFrame* pTab2 = pPage2Fly->GetLower();
+ SwFrame* pRow2 = pTab2->GetLower();
+ auto pCell2 = dynamic_cast<SwCellFrame*>(pRow2->GetLower());
+ // Without the accompanying fix in place, this test would have failed, the second row was split,
+ // but not in Word.
+ CPPUNIT_ASSERT(!pCell2->GetPreviousCell());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyCompat14Nosplit)
+{
+ // Given a Word 2010 document with 2 pages, 2 rows on page 1, 1 row on page 2:
+ createSwDoc("floattable-compat14-nosplit.docx");
+
+ // When laying out that document:
+ calcLayout();
+
+ // Then make sure that the last row is on a separate page:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage1);
+ const SwSortedObjs& rPage1Objs = *pPage1->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage1Objs.size());
+ auto pPage1Fly = dynamic_cast<SwFlyAtContentFrame*>(rPage1Objs[0]);
+ CPPUNIT_ASSERT(pPage1Fly);
+ SwFrame* pTab1 = pPage1Fly->GetLower();
+ SwFrame* pRow1 = pTab1->GetLower();
+ CPPUNIT_ASSERT(pRow1->GetNext());
+ auto pPage2 = dynamic_cast<SwPageFrame*>(pPage1->GetNext());
+ // Without the accompanying fix in place, this test would have failed, all rows were on page 1.
+ CPPUNIT_ASSERT(pPage2);
+ const SwSortedObjs& rPage2Objs = *pPage2->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage2Objs.size());
+ auto pPage2Fly = dynamic_cast<SwFlyAtContentFrame*>(rPage2Objs[0]);
+ CPPUNIT_ASSERT(pPage2Fly);
+ SwFrame* pTab2 = pPage2Fly->GetLower();
+ SwFrame* pRow2 = pTab2->GetLower();
+ CPPUNIT_ASSERT(!pRow2->GetNext());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyCompat14Body)
+{
+ // Given a Word 2010 document with 2 pages, 1 row on page 1, 1 row on page 2:
+ createSwDoc("floattable-compat14-body.docx");
+
+ // When laying out that document:
+ // (This is legacy mode, but still Word doesn't split row 2 because 1) row 2 has a minimal
+ // height, so even the first part of row 2 would not fit the body frame and 2) Word allows using
+ // the bottom margin area in legacy mode, but only in case the fly height <= body height.)
+ calcLayout();
+
+ // Then make sure that the second row is on a page 2:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage1);
+ const SwSortedObjs& rPage1Objs = *pPage1->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage1Objs.size());
+ auto pPage1Fly = dynamic_cast<SwFlyAtContentFrame*>(rPage1Objs[0]);
+ CPPUNIT_ASSERT(pPage1Fly);
+ SwFrame* pTab1 = pPage1Fly->GetLower();
+ SwFrame* pRow1 = pTab1->GetLower();
+ // Without the accompanying fix in place, this test would have failed, part of row 2 was on page
+ // 1.
+ CPPUNIT_ASSERT(!pRow1->GetNext());
+ auto pPage2 = dynamic_cast<SwPageFrame*>(pPage1->GetNext());
+ CPPUNIT_ASSERT(pPage2);
+ const SwSortedObjs& rPage2Objs = *pPage2->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage2Objs.size());
+ auto pPage2Fly = dynamic_cast<SwFlyAtContentFrame*>(rPage2Objs[0]);
+ CPPUNIT_ASSERT(pPage2Fly);
+ SwFrame* pTab2 = pPage2Fly->GetLower();
+ SwFrame* pRow2 = pTab2->GetLower();
+ CPPUNIT_ASSERT(!pRow2->GetNext());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyFollowHorizontalPosition)
+{
+ // Given a document with 2 pages, master fly on page 1, follow fly on page 2:
+ createSwDoc("floattable-hori-pos.docx");
+
+ // When laying out that document:
+ calcLayout();
+
+ // Then make sure that the follow fly doesn't have a different horizontal position:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage1);
+ const SwSortedObjs& rPage1Objs = *pPage1->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage1Objs.size());
+ auto pPage1Fly = dynamic_cast<SwFlyAtContentFrame*>(rPage1Objs[0]);
+ CPPUNIT_ASSERT(pPage1Fly);
+ tools::Long nPage1FlyLeft = pPage1Fly->getFrameArea().Left();
+ auto pPage2 = dynamic_cast<SwPageFrame*>(pPage1->GetNext());
+ CPPUNIT_ASSERT(pPage2);
+ const SwSortedObjs& rPage2Objs = *pPage2->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage2Objs.size());
+ auto pPage2Fly = dynamic_cast<SwFlyAtContentFrame*>(rPage2Objs[0]);
+ CPPUNIT_ASSERT(pPage2Fly);
+ tools::Long nPage2FlyLeft = pPage2Fly->getFrameArea().Left();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 5528
+ // - Actual : 284
+ // i.e. the follow fly was pushed towards the left, instead of having the same position as the
+ // master fly.
+ CPPUNIT_ASSERT_EQUAL(nPage1FlyLeft, nPage2FlyLeft);
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testCursorTraversal)
+{
+ // Given a document with a multi-page floating table:
+ Create1x2SplitFly();
+
+ // When going from A1 to A2:
+ SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
+ pWrtShell->GotoTable("Table1");
+ SwTextNode* pTextNode = pWrtShell->GetCursor()->GetPointNode().GetTextNode();
+ CPPUNIT_ASSERT_EQUAL(OUString("A1"), pTextNode->GetText());
+ pWrtShell->Down(/*bSelect=*/false);
+
+ // Then make sure we get to A2 and don't stay in A1:
+ pTextNode = pWrtShell->GetCursor()->GetPointNode().GetTextNode();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: A2
+ // - Actual : A1
+ // i.e. the cursor didn't get from A1 to A2.
+ CPPUNIT_ASSERT_EQUAL(OUString("A2"), pTextNode->GetText());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyRowDelete)
+{
+ // Given a document with a multi-page floating table:
+ Create1x2SplitFly();
+
+ // When deleting the row of A2:
+ SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
+ pWrtShell->GotoTable("Table1");
+ pWrtShell->Down(/*bSelect=*/false);
+ SwTextNode* pTextNode = pWrtShell->GetCursor()->GetPointNode().GetTextNode();
+ // We delete the right row:
+ CPPUNIT_ASSERT_EQUAL(OUString("A2"), pTextNode->GetText());
+ pWrtShell->DeleteRow();
+
+ // Then make sure we only have 1 page:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage1);
+ CPPUNIT_ASSERT(!pPage1->GetNext());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFly1stRowDelete)
+{
+ // Given a document with a multi-page floating table:
+ Create1x2SplitFly();
+
+ // When deleting the row of A1:
+ SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
+ pWrtShell->GotoTable("Table1");
+ SwTextNode* pTextNode = pWrtShell->GetCursor()->GetPointNode().GetTextNode();
+ // We delete the right row:
+ CPPUNIT_ASSERT_EQUAL(OUString("A1"), pTextNode->GetText());
+ pWrtShell->DeleteRow();
+
+ // Then make sure we only have 1 page:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage1);
+ // Without the accompanying fix in place, this test would have failed, the follow fly was still
+ // on page 2.
+ CPPUNIT_ASSERT(!pPage1->GetNext());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFly3rdRowDelete)
+{
+ // Given a document with a floattable, split on 3 pages:
+ createSwDoc("floattable-3pages.docx");
+
+ // When deleting the row of A3:
+ SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
+ pWrtShell->GotoTable("Table1");
+ pWrtShell->Down(/*bSelect=*/false);
+ pWrtShell->Down(/*bSelect=*/false);
+ SwTextNode* pTextNode = pWrtShell->GetCursor()->GetPointNode().GetTextNode();
+ // We delete the right row:
+ CPPUNIT_ASSERT_EQUAL(OUString("A3"), pTextNode->GetText());
+ pWrtShell->DeleteRow();
+
+ // Then make sure we only have 2 pages:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage1);
+ auto pPage2 = dynamic_cast<SwPageFrame*>(pPage1->GetNext());
+ // Without the accompanying fix in place, this test would have failed, page 3 was not deleted.
+ CPPUNIT_ASSERT(!pPage2->GetNext());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFly2ndRowSelect)
+{
+ // Given a document with a multi-page floating table:
+ createSwDoc("floattable.docx");
+
+ // When selecting the second row:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage1);
+ auto pPage2 = dynamic_cast<SwPageFrame*>(pPage1->GetNext());
+ SwSortedObjs& rPage2Objs = *pPage2->GetSortedObjs();
+ auto pPage2Fly = dynamic_cast<SwFlyAtContentFrame*>(rPage2Objs[0]);
+ const SwRect& aFollowArea = pPage2Fly->getFrameArea();
+ Point aTopCenter((aFollowArea.Left() + aFollowArea.Right()) / 2, aFollowArea.Top());
+ SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
+ pWrtShell->SelectObj(aTopCenter);
+
+ // Then make sure the first row is selected:
+ const SdrMarkList& rMarkList = pWrtShell->GetDrawView()->GetMarkedObjectList();
+ SdrObject* pSelectedObj = rMarkList.GetMark(0)->GetMarkedSdrObj();
+ auto pSelectedVirtObj = dynamic_cast<SwVirtFlyDrawObj*>(pSelectedObj);
+ auto pSelected = static_cast<SwFlyAtContentFrame*>(pSelectedVirtObj->GetFlyFrame());
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 5
+ // - Actual : 17
+ // i.e. a follow fly was possible to select (instead of its master)
+ CPPUNIT_ASSERT_EQUAL(pPage2Fly->GetPrecede()->GetFrameId(), pSelected->GetFrameId());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyInSection)
+{
+ // This crashed, the layout assumed that the floating table is directly under the body frame.
+ createSwDoc("floattable-in-section.docx");
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyThenTable)
+{
+ // Given a document with a 2 page floating table, followed by an other table:
+ // Intentionally load the document as hidden to avoid layout during load (see TestTdf150616):
+ uno::Sequence<beans::PropertyValue> aFilterOptions = {
+ comphelper::makePropertyValue("Hidden", true),
+ };
+ mxComponent = loadFromDesktop(m_directories.getURLFromSrc(u"/sw/qa/core/layout/data/")
+ + "floattable-then-table.docx",
+ "com.sun.star.text.TextDocument", aFilterOptions);
+
+ // When layout is calculated during PDF export:
+ // Then make sure that finishes without errors:
+ // This crashed, due to a stack overflow in layout code.
+ save("writer_pdf_Export");
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyInTextSection)
+{
+ // The document contains a DOCX cont sect break, which is mapped to a TextSection.
+ // This crashed, the anchor was split directly, so the follow anchor was moved outside the
+ // section frame, which is broken.
+ createSwDoc("floattable-in-text-section.docx");
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyTableRowKeep)
+{
+ // Given a document with a floating table, 2.5 rows on the first page:
+ createSwDoc("floattable-table-row-keep.docx");
+
+ // When laying out that document:
+ calcLayout();
+
+ // Then make sure that the expected amount of rows is on the first page:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage1);
+ const SwSortedObjs& rPage1Objs = *pPage1->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage1Objs.size());
+ auto pPage1Fly = dynamic_cast<SwFlyAtContentFrame*>(rPage1Objs[0]);
+ CPPUNIT_ASSERT(pPage1Fly);
+ SwFrame* pTab1 = pPage1Fly->GetLower();
+ SwFrame* pRow1 = pTab1->GetLower();
+ CPPUNIT_ASSERT(pRow1);
+ SwFrame* pRow2 = pRow1->GetNext();
+ // Without the accompanying fix in place, this test would have failed, the table on the first
+ // page only had 1 row, due to TableRowKeep kicking in for floating tables, which is incorrect.
+ CPPUNIT_ASSERT(pRow2);
+ SwFrame* pRow3 = pRow2->GetNext();
+ CPPUNIT_ASSERT(pRow3);
+ auto pCell3 = dynamic_cast<SwCellFrame*>(pRow3->GetLower());
+ CPPUNIT_ASSERT(pCell3->GetFollowCell());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyDeletedAnchor)
+{
+ // Given a document with a floating table that spans over 3 pages:
+ createSwDoc("floattable-deleted-anchor.docx");
+
+ // When laying out that document:
+ calcLayout();
+
+ // Then make sure that there are 3 anchors for the 3 pages:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage1);
+ SwFrame* pBody1 = pPage1->GetLower();
+ CPPUNIT_ASSERT(pBody1);
+ auto pAnchor1 = dynamic_cast<SwTextFrame*>(pBody1->GetLower()->GetNext());
+ CPPUNIT_ASSERT(pAnchor1);
+ SwTextFrame* pAnchor2 = pAnchor1->GetFollow();
+ CPPUNIT_ASSERT(pAnchor2);
+ SwTextFrame* pAnchor3 = pAnchor2->GetFollow();
+ // Without the accompanying fix in place, this test would have failed, the fly frame on the 3rd
+ // page was anchored to a text frame on the 2nd page, leading to a negative frame height.
+ CPPUNIT_ASSERT(pAnchor3);
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyMultiCol)
+{
+ // Given a document with a floating table that is in a multi-col section:
+ createSwDoc("floattable-multi-col.docx");
+
+ // When laying out that document:
+ calcLayout();
+
+ // Then make sure that the fly frame is not split, matching Word:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage1);
+ const SwSortedObjs& rPage1Objs = *pPage1->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage1Objs.size());
+ auto pPage1Fly = dynamic_cast<SwFlyAtContentFrame*>(rPage1Objs[0]);
+ CPPUNIT_ASSERT(pPage1Fly);
+ // Without the accompanying fix in place, this test would have failed, we tried to split and
+ // then hit an assertion failure.
+ CPPUNIT_ASSERT(!pPage1Fly->GetFollow());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyTabJoin)
+{
+ // Given a document with 3 pages and 2 tables: table on first and second page, 3rd page has no
+ // table:
+ createSwDoc("floattable-tab-join.docx");
+
+ // When laying out that document:
+ calcLayout();
+
+ // Then make sure that all pages have the expected amount of fly frames:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage1);
+ const SwSortedObjs& rPage1Objs = *pPage1->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage1Objs.size());
+ auto pPage2 = dynamic_cast<SwPageFrame*>(pPage1->GetNext());
+ CPPUNIT_ASSERT(pPage2);
+ const SwSortedObjs& rPage2Objs = *pPage2->GetSortedObjs();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 1
+ // - Actual : 2
+ // i.e. the 2nd page had 2 fly frames, hosting a split table, instead of joining that table and
+ // having 1 fly frame.
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage2Objs.size());
+ auto pPage3 = dynamic_cast<SwPageFrame*>(pPage2->GetNext());
+ CPPUNIT_ASSERT(pPage3);
+ CPPUNIT_ASSERT(!pPage3->GetSortedObjs());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyTabJoinLegacy)
+{
+ // Given a document with 3 pages and 2 tables: table on first and second page, 3rd page has no
+ // table (Word 2010 mode):
+ createSwDoc("floattable-tab-join-legacy.docx");
+
+ // When laying out that document:
+ calcLayout();
+
+ // Then make sure that all pages have the expected amount of fly frames:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage1);
+ const SwSortedObjs& rPage1Objs = *pPage1->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage1Objs.size());
+ auto pPage2 = dynamic_cast<SwPageFrame*>(pPage1->GetNext());
+ CPPUNIT_ASSERT(pPage2);
+ const SwSortedObjs& rPage2Objs = *pPage2->GetSortedObjs();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 1
+ // - Actual : 2
+ // i.e. the 2nd page had 2 fly frames, hosting a split table, instead of joining that table and
+ // having 1 fly frame (even after the non-legacy case was fixed already).
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage2Objs.size());
+ auto pPage3 = dynamic_cast<SwPageFrame*>(pPage2->GetNext());
+ CPPUNIT_ASSERT(pPage3);
+ CPPUNIT_ASSERT(!pPage3->GetSortedObjs());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyObjectFormatter)
+{
+ // Given a document with 3 pages and 2 tables: table on first and second page, 3rd page has no
+ // table:
+ createSwDoc("floattable-object-formatter.docx");
+
+ // When calculating the layout:
+ calcLayout();
+
+ // Then make sure we don't crash and also that all pages have the expected amount of fly frames:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage1);
+ const SwSortedObjs& rPage1Objs = *pPage1->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage1Objs.size());
+ auto pPage2 = dynamic_cast<SwPageFrame*>(pPage1->GetNext());
+ CPPUNIT_ASSERT(pPage2);
+ const SwSortedObjs& rPage2Objs = *pPage2->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage2Objs.size());
+ auto pPage3 = dynamic_cast<SwPageFrame*>(pPage2->GetNext());
+ CPPUNIT_ASSERT(pPage3);
+ CPPUNIT_ASSERT(!pPage3->GetSortedObjs());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyNextLeafInSection)
+{
+ // Given a document with 4 pages: page 1 had a floating table, page 2 & 3 had a second floating
+ // table and finally page 4 is empty:
+ createSwDoc("floattable-next-leaf-in-section.docx");
+
+ // When calculating the layout:
+ // Then this never returned, the loop in SwFrame::GetNextFlyLeaf() never finished.
+ calcLayout();
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyAnchorKeepWithNext)
+{
+ // Given a document with 2 pages, a split floating table on both pages:
+ createSwDoc("floattable-anchor-keep-with-next.docx");
+
+ // When calculating the layout:
+ calcLayout();
+
+ // Then make sure the pages have the expected amount of anchored objects:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage1);
+ // Without the accompanying fix in place, this test would have failed, page 1 had no floating
+ // table, it was entirely on page 2.
+ CPPUNIT_ASSERT(pPage1->GetSortedObjs());
+ const SwSortedObjs& rPage1Objs = *pPage1->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage1Objs.size());
+ auto pPage2 = dynamic_cast<SwPageFrame*>(pPage1->GetNext());
+ CPPUNIT_ASSERT(pPage2);
+ CPPUNIT_ASSERT(pPage2->GetSortedObjs());
+ const SwSortedObjs& rPage2Objs = *pPage2->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage2Objs.size());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyNoFooterOverlap)
+{
+ // Given a document with 2 pages, a floating table on both pages:
+ createSwDoc("floattable-no-footer-overlap.doc");
+
+ // When calculating the layout:
+ calcLayout();
+
+ // Then make sure the second page has a floating table:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage1);
+ CPPUNIT_ASSERT(pPage1->GetSortedObjs());
+ const SwSortedObjs& rPage1Objs = *pPage1->GetSortedObjs();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 1
+ // - Actual : 2
+ // i.e. part of the second table was on page 1.
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage1Objs.size());
+ auto pPage2 = dynamic_cast<SwPageFrame*>(pPage1->GetNext());
+ // Without the accompanying fix in place, this test would have failed, there was no page 2, both
+ // floating tables were on page 1.
+ CPPUNIT_ASSERT(pPage2);
+ CPPUNIT_ASSERT(pPage2->GetSortedObjs());
+ const SwSortedObjs& rPage2Objs = *pPage2->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage2Objs.size());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyGrowFromBottom)
+{
+ // Given a document with a floating table that grows from the bottom:
+ createSwDoc("floattable-from-bottom.docx");
+
+ // When calculating the layout:
+ calcLayout();
+
+ // Then make sure that such a floating table is not split, matching Word:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage1);
+ CPPUNIT_ASSERT(pPage1->GetSortedObjs());
+ const SwSortedObjs& rPage1Objs = *pPage1->GetSortedObjs();
+ const auto pFly = dynamic_cast<SwFlyAtContentFrame*>(rPage1Objs[0]);
+ // Without the accompanying fix in place, this test would have failed, we tried to split the fly
+ // frame on page 1 even when it would fit, and this lead to a crash on export later.
+ CPPUNIT_ASSERT(!pFly->GetFollow());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyIntoTable)
+{
+ // Given a document with a floating table, then an inline table on the next page:
+ createSwDoc("floattable-then-table.doc");
+
+ // When inserting a page break:
+ // Then make sure the layout doesn't crash:
+ SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
+ pWrtShell->InsertPageBreak();
+ // Without the accompanying fix in place, this test would have crashed, we tried to insert the
+ // second part of a floating table into a table on the next page, not before that table.
+ calcLayout();
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyFromAsCharAnchor)
+{
+ // Given a document with a footnote that has a table (imported in an as-char anchored frame in
+ // Writer):
+ createSwDoc("table-in-footnote.docx");
+
+ // When changing the anchor type of that frame to to-para:
+ // Then make sure we don't crash:
+ selectShape(1);
+ // Without the accompanying fix in place, this test would have crashed, we tried to split a
+ // frame+table inside a footnote.
+ dispatchCommand(mxComponent, ".uno:SetAnchorToPara", {});
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyNested)
+{
+ // Given a document with a nested, multi-page floating table:
+ // When calculating the layout:
+ createSwDoc("floattable-nested.odt");
+ calcLayout();
+
+ // Then make sure we don't crash:
+ // Without the accompanying fix in place, this test would have crashed.
+ // Check that we have exactly 4 fly frames, all of them on the expected pages: master outer,
+ // follow outer, master inner and follow inner.
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = pLayout->Lower()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage1);
+ CPPUNIT_ASSERT(pPage1->GetSortedObjs());
+ SwSortedObjs& rPage1Objs = *pPage1->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), rPage1Objs.size());
+ auto pPage1Fly1 = rPage1Objs[0]->DynCastFlyFrame()->DynCastFlyAtContentFrame();
+ CPPUNIT_ASSERT(pPage1Fly1);
+ CPPUNIT_ASSERT(pPage1Fly1->GetAnchorFrameContainingAnchPos()->IsInFly());
+ CPPUNIT_ASSERT(pPage1Fly1->GetFollow());
+ auto pPage1Fly2 = rPage1Objs[1]->DynCastFlyFrame()->DynCastFlyAtContentFrame();
+ CPPUNIT_ASSERT(pPage1Fly2);
+ CPPUNIT_ASSERT(!pPage1Fly2->GetAnchorFrameContainingAnchPos()->IsInFly());
+ CPPUNIT_ASSERT(pPage1Fly2->GetFollow());
+ auto pPage2 = pPage1->GetNext()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage2);
+ CPPUNIT_ASSERT(pPage2->GetSortedObjs());
+ SwSortedObjs& rPage2Objs = *pPage2->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), rPage2Objs.size());
+ auto pPage2Fly1 = rPage2Objs[0]->DynCastFlyFrame()->DynCastFlyAtContentFrame();
+ CPPUNIT_ASSERT(pPage2Fly1);
+ CPPUNIT_ASSERT(pPage2Fly1->GetAnchorFrameContainingAnchPos()->IsInFly());
+ CPPUNIT_ASSERT(pPage2Fly1->GetPrecede());
+
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected greater than: 6204
+ // - Actual : 1725
+ // i.e. the inner follow fly had a bad position, it was outside the page rectangle, it was not
+ // rendered and this way the inner anchor had no fly portion, either.
+ CPPUNIT_ASSERT_GREATER(pPage2->getFrameArea().Top(), pPage2Fly1->getFrameArea().Top());
+
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected less than: 12523
+ // - Actual : 15312
+ // i.e. the inner follow fly was not "moved back" to its place to have the wanted 4400 position,
+ // which makes the "Inner A2" text visible.
+ CPPUNIT_ASSERT_LESS(pPage2->getFrameArea().Right(), pPage2Fly1->getFrameArea().Right());
+
+ auto pPage2Fly2 = rPage2Objs[1]->DynCastFlyFrame()->DynCastFlyAtContentFrame();
+ CPPUNIT_ASSERT(pPage2Fly2);
+ CPPUNIT_ASSERT(!pPage2Fly2->GetAnchorFrameContainingAnchPos()->IsInFly());
+ CPPUNIT_ASSERT(pPage2Fly2->GetPrecede());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyNestedOverlap)
+{
+ // Given a document with a nested, multi-page floating table, enabling the "don't overlap" logic:
+ // When calculating the layout:
+ createSwDoc("floattable-nested-overlap.odt");
+ calcLayout();
+
+ // Then make sure we get 2 pages (2 flys on each page):
+ // Without the accompanying fix in place, this test would have failed with a layout loop.
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = pLayout->Lower()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage1);
+ CPPUNIT_ASSERT(pPage1->GetSortedObjs());
+ SwSortedObjs& rPage1Objs = *pPage1->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), rPage1Objs.size());
+ auto pPage2 = pPage1->GetNext()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage2);
+ CPPUNIT_ASSERT(pPage2->GetSortedObjs());
+ SwSortedObjs& rPage2Objs = *pPage2->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), rPage2Objs.size());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyMoveMaster)
+{
+ // Given a document with a multi-page floating table on pages 1 -> 2 -> 3:
+ createSwDoc("floattable-move-master.docx");
+
+ // When adding an empty para at the start of the anchor text of the table:
+ SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
+ pWrtShell->SttEndDoc(/*bStt=*/true);
+ pWrtShell->Down(/*bSelect=*/false, /*nCount=*/4);
+ pWrtShell->SplitNode();
+
+ // Then make sure page the fly chain is pages 1 -> 2 -> 3, still:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = pLayout->Lower()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage1);
+ // Without the accompanying fix in place, this test would have failed, the fly chain was pages 1
+ // -> 4 -> 2.
+ CPPUNIT_ASSERT(pPage1->GetSortedObjs());
+ CPPUNIT_ASSERT(pPage1->GetSortedObjs());
+ SwSortedObjs& rPage1Objs = *pPage1->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage1Objs.size());
+ auto pPage1Fly = rPage1Objs[0]->DynCastFlyFrame()->DynCastFlyAtContentFrame();
+ CPPUNIT_ASSERT(pPage1Fly);
+ CPPUNIT_ASSERT(!pPage1Fly->GetPrecede());
+ CPPUNIT_ASSERT(pPage1Fly->HasFollow());
+ auto pPage2 = pPage1->GetNext()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage2);
+ CPPUNIT_ASSERT(pPage2->GetSortedObjs());
+ SwSortedObjs& rPage2Objs = *pPage2->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage2Objs.size());
+ auto pPage2Fly = rPage2Objs[0]->DynCastFlyFrame()->DynCastFlyAtContentFrame();
+ CPPUNIT_ASSERT(pPage2Fly);
+ CPPUNIT_ASSERT(pPage2Fly->GetPrecede());
+ CPPUNIT_ASSERT(pPage2Fly->HasFollow());
+ auto pPage3 = pPage2->GetNext()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage3);
+ CPPUNIT_ASSERT(pPage3->GetSortedObjs());
+ SwSortedObjs& rPage3Objs = *pPage3->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage3Objs.size());
+ auto pPage3Fly = rPage3Objs[0]->DynCastFlyFrame()->DynCastFlyAtContentFrame();
+ CPPUNIT_ASSERT(pPage3Fly);
+ CPPUNIT_ASSERT(pPage3Fly->GetPrecede());
+ CPPUNIT_ASSERT(!pPage3Fly->GetFollow());
+ auto pPage4 = pPage3->GetNext()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage4);
+ CPPUNIT_ASSERT(!pPage4->GetSortedObjs());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyDelEmpty)
+{
+ // Given a document with multiple floating tables and 7 pages:
+ // When loading that document:
+ // Without the accompanying fix in place, this test would have crashed due to a
+ // heap-use-after-free problem (visible with e.g. MALLOC_PERTURB_=153).
+ createSwDoc("floattable-del-empty.docx");
+
+ // Then make sure that the page count matches Word:
+ CPPUNIT_ASSERT_EQUAL(7, getPages());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyInTableInSection)
+{
+ // Given a document where page 2 and page 3 has a floating table inside an inline table, inside
+ // a section:
+ // Without the accompanying fix in place, this test would have crashed, we created a follow
+ // anchor which was marked as "in table", but had no table parent.
+ createSwDoc("floattable-in-inltbl-in-sect.docx");
+
+ // Then make sure that the floating table is on page 2 and page 3:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = pLayout->Lower()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage1);
+ CPPUNIT_ASSERT(!pPage1->GetSortedObjs());
+ auto pPage2 = pPage1->GetNext()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage2);
+ CPPUNIT_ASSERT(pPage2->GetSortedObjs());
+ SwSortedObjs& rPage2Objs = *pPage2->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage2Objs.size());
+ auto pPage3 = pPage2->GetNext()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage3);
+ CPPUNIT_ASSERT(pPage3->GetSortedObjs());
+ SwSortedObjs& rPage3Objs = *pPage3->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage3Objs.size());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyWrapOnAllPages)
+{
+ // Given a document where we want to wrap on all pages, around a split floating table:
+ createSwDoc("floattable-wrap-on-all-pages.docx");
+ SwDoc* pDoc = getSwDoc();
+ pDoc->getIDocumentSettingAccess().set(DocumentSettingId::ALLOW_TEXT_AFTER_FLOATING_TABLE_BREAK,
+ true);
+
+ // When formatting that document:
+ SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
+ pWrtShell->Reformat();
+
+ // Then make sure that the anchor text is also split between page 1 and page 2:
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = pLayout->Lower()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage1);
+ auto pPage1Anchor = pPage1->FindLastBodyContent()->DynCastTextFrame();
+ CPPUNIT_ASSERT(pPage1Anchor);
+ OUString aAnchor1Text(pPage1Anchor->GetText().subView(
+ static_cast<sal_Int32>(pPage1Anchor->GetOffset()),
+ static_cast<sal_Int32>(pPage1Anchor->GetFollow()->GetOffset()
+ - pPage1Anchor->GetOffset())));
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: He heard quiet steps behind him. That
+ // - Actual :
+ // i.e. the first page had no anchor text, only the second.
+ CPPUNIT_ASSERT_EQUAL(OUString("He heard quiet steps behind him. That "), aAnchor1Text);
+ auto pPage2 = pPage1->GetNext()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage2);
+ auto pPage2Anchor = pPage2->FindLastBodyContent()->DynCastTextFrame();
+ CPPUNIT_ASSERT(pPage2Anchor);
+ OUString aAnchor2Text(
+ pPage2Anchor->GetText().subView(static_cast<sal_Int32>(pPage2Anchor->GetOffset())));
+ CPPUNIT_ASSERT(!pPage2Anchor->GetFollow());
+ CPPUNIT_ASSERT_EQUAL(OUString("didn't bode well."), aAnchor2Text);
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyPerFrameWrapOnAllPages)
+{
+ // Given a document where we want to wrap on all pages, around a split floating table:
+ createSwDoc("floattable-wrap-on-all-pages.docx");
+ SwDoc* pDoc = getSwDoc();
+ sw::SpzFrameFormats& rFlys = *pDoc->GetSpzFrameFormats();
+ sw::SpzFrameFormat* pFly = rFlys[0];
+ SfxItemSet aSet(pFly->GetAttrSet());
+ SwFormatWrapTextAtFlyStart aItem(true);
+ aSet.Put(aItem);
+ pDoc->SetFlyFrameAttr(*pFly, aSet);
+
+ // When formatting that document:
+ SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
+ pWrtShell->Reformat();
+
+ // Then make sure that the anchor text is also split between page 1 and page 2:
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = pLayout->Lower()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage1);
+ auto pPage1Anchor = pPage1->FindLastBodyContent()->DynCastTextFrame();
+ CPPUNIT_ASSERT(pPage1Anchor);
+ OUString aAnchor1Text(pPage1Anchor->GetText().subView(
+ static_cast<sal_Int32>(pPage1Anchor->GetOffset()),
+ static_cast<sal_Int32>(pPage1Anchor->GetFollow()->GetOffset()
+ - pPage1Anchor->GetOffset())));
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: He heard quiet steps behind him. That
+ // - Actual :
+ // i.e. the first page had no anchor text, only the second.
+ CPPUNIT_ASSERT_EQUAL(OUString("He heard quiet steps behind him. That "), aAnchor1Text);
+ auto pPage2 = pPage1->GetNext()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage2);
+ auto pPage2Anchor = pPage2->FindLastBodyContent()->DynCastTextFrame();
+ CPPUNIT_ASSERT(pPage2Anchor);
+ OUString aAnchor2Text(
+ pPage2Anchor->GetText().subView(static_cast<sal_Int32>(pPage2Anchor->GetOffset())));
+ CPPUNIT_ASSERT(!pPage2Anchor->GetFollow());
+ CPPUNIT_ASSERT_EQUAL(OUString("didn't bode well."), aAnchor2Text);
+}
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/layout/frmtool.cxx b/sw/qa/core/layout/frmtool.cxx
new file mode 100644
index 0000000000..2ee4c3a07d
--- /dev/null
+++ b/sw/qa/core/layout/frmtool.cxx
@@ -0,0 +1,40 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <swmodeltestbase.hxx>
+
+#include <IDocumentLayoutAccess.hxx>
+#include <pagefrm.hxx>
+#include <rootfrm.hxx>
+
+namespace
+{
+/// Covers sw/source/core/layout/frmtool.cxx fixes.
+class Test : public SwModelTestBase
+{
+public:
+ Test()
+ : SwModelTestBase("/sw/qa/core/layout/data/")
+ {
+ }
+};
+
+CPPUNIT_TEST_FIXTURE(Test, testFloattableNoMargins)
+{
+ createSwDoc("floattable-nomargins.docx");
+
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = pLayout->Lower()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage1);
+ CPPUNIT_ASSERT(!pPage1->GetNext());
+}
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/layout/ftnfrm.cxx b/sw/qa/core/layout/ftnfrm.cxx
new file mode 100644
index 0000000000..4c874202da
--- /dev/null
+++ b/sw/qa/core/layout/ftnfrm.cxx
@@ -0,0 +1,66 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <swmodeltestbase.hxx>
+
+#include <IDocumentLayoutAccess.hxx>
+#include <docsh.hxx>
+#include <formatflysplit.hxx>
+#include <frmmgr.hxx>
+#include <pagefrm.hxx>
+#include <rootfrm.hxx>
+#include <view.hxx>
+#include <wrtsh.hxx>
+
+/// Covers sw/source/core/layout/ftnfrm.cxx fixes.
+class Test : public SwModelTestBase
+{
+public:
+ Test()
+ : SwModelTestBase("/sw/qa/core/layout/data/")
+ {
+ }
+};
+
+CPPUNIT_TEST_FIXTURE(Test, testFlySplitFootnoteLayout)
+{
+ // Given a document with a split fly (to host a table):
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
+ SwFlyFrameAttrMgr aMgr(true, pWrtShell, Frmmgr_Type::TEXT, nullptr);
+ RndStdIds eAnchor = RndStdIds::FLY_AT_PARA;
+ pWrtShell->StartAllAction();
+ aMgr.InsertFlyFrame(eAnchor, aMgr.GetPos(), aMgr.GetSize());
+ pWrtShell->EndAllAction();
+ pWrtShell->StartAllAction();
+ sw::FrameFormats<sw::SpzFrameFormat*>& rFlys = *pDoc->GetSpzFrameFormats();
+ sw::SpzFrameFormat* pFly = rFlys[0];
+ SwAttrSet aSet(pFly->GetAttrSet());
+ aSet.Put(SwFormatFlySplit(true));
+ pDoc->SetAttr(aSet, *pFly);
+ pWrtShell->EndAllAction();
+ pWrtShell->UnSelectFrame();
+ pWrtShell->LeaveSelFrameMode();
+ pWrtShell->GetView().AttrChangedNotify(nullptr);
+ pWrtShell->MoveSection(GoCurrSection, fnSectionEnd);
+
+ // When inserting a footnote:
+ pWrtShell->InsertFootnote(OUString());
+
+ // Then make sure the footnote frame and its container is created:
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage);
+ // Without the accompanying fix in place, this test would have failed, the footnote frame was
+ // not created, the footnote reference was empty.
+ CPPUNIT_ASSERT(pPage->FindFootnoteCont());
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/layout/layact.cxx b/sw/qa/core/layout/layact.cxx
new file mode 100644
index 0000000000..d432ae52b7
--- /dev/null
+++ b/sw/qa/core/layout/layact.cxx
@@ -0,0 +1,91 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <swmodeltestbase.hxx>
+
+#include <vcl/scheduler.hxx>
+
+#include <IDocumentLayoutAccess.hxx>
+#include <anchoredobject.hxx>
+#include <docsh.hxx>
+#include <flyfrm.hxx>
+#include <pagefrm.hxx>
+#include <rootfrm.hxx>
+#include <rowfrm.hxx>
+#include <sortedobjs.hxx>
+#include <tabfrm.hxx>
+#include <wrtsh.hxx>
+
+namespace
+{
+/// Covers sw/source/core/layout/layact.cxx fixes.
+class Test : public SwModelTestBase
+{
+public:
+ Test()
+ : SwModelTestBase("/sw/qa/core/layout/data/")
+ {
+ }
+};
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyNextRowInvalidatePos)
+{
+ // Given a multi-page floating table, row1 is split, i.e. is both on page 1 and page 2:
+ createSwDoc("floattable-next-row-invalidate-pos.docx");
+ // Make sure the follow anchor's IsCompletePaint() reaches its false state, as it happens in the
+ // interactive case.
+ Scheduler::ProcessEventsToIdle();
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = pLayout->Lower()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage1);
+ auto pPage2 = pPage1->GetNext()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage2);
+ CPPUNIT_ASSERT(pPage2->GetSortedObjs());
+ SwSortedObjs& rPage2Objs = *pPage2->GetSortedObjs();
+ auto pFly2 = rPage2Objs[0]->DynCastFlyFrame();
+ auto pTable2 = pFly2->GetLower()->DynCastTabFrame();
+ auto pRow2 = pTable2->GetLastLower()->DynCastRowFrame();
+ SwTwips nOldRow2Top = pRow2->getFrameArea().Top();
+
+ // When adding a new paragraph at the end of B1:
+ // Go to the table: A1 cell.
+ SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
+ pWrtShell->GotoTable("Table1");
+ // Go to the column: B1 cell.
+ pWrtShell->GoNextCell();
+ // Go to the end of the B1 cell, on page 2.
+ pWrtShell->EndOfSection();
+ // Add a new paragraph at the cell end.
+ pWrtShell->SplitNode();
+
+ // Then make sure row 2 is shifted down:
+ SwTwips nNewRow2Top = pRow2->getFrameArea().Top();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected greater than: 7121
+ // - Actual : 7121
+ // i.e. row 2 has to be shifted down to 7390, but this didn't happen.
+ CPPUNIT_ASSERT_GREATER(nOldRow2Top, nNewRow2Top);
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testTdf157096)
+{
+ createSwDoc("tdf157096.docx");
+
+ CPPUNIT_ASSERT_EQUAL(2, getPages());
+ dispatchCommand(mxComponent, ".uno:SelectAll", {});
+
+ // Without the fix in place, it would have crashed here
+ dispatchCommand(mxComponent, ".uno:Delete", {});
+
+ CPPUNIT_ASSERT_EQUAL(1, getPages());
+}
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/layout/layout.cxx b/sw/qa/core/layout/layout.cxx
new file mode 100644
index 0000000000..5971e87030
--- /dev/null
+++ b/sw/qa/core/layout/layout.cxx
@@ -0,0 +1,1052 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <swmodeltestbase.hxx>
+
+#include <com/sun/star/style/PageStyleLayout.hpp>
+
+#include <vcl/gdimtf.hxx>
+#include <svx/svdpage.hxx>
+#include <o3tl/string_view.hxx>
+#include <sfx2/viewfrm.hxx>
+#include <sfx2/dispatch.hxx>
+#include <editeng/frmdiritem.hxx>
+
+#include <wrtsh.hxx>
+#include <docsh.hxx>
+#include <unotxdoc.hxx>
+#include <drawdoc.hxx>
+#include <IDocumentDrawModelAccess.hxx>
+#include <IDocumentState.hxx>
+#include <IDocumentLayoutAccess.hxx>
+#include <rootfrm.hxx>
+#include <itabenum.hxx>
+#include <fmtanchr.hxx>
+#include <fmtsrnd.hxx>
+#include <IDocumentSettingAccess.hxx>
+#include <fmtfsize.hxx>
+#include <fmtfollowtextflow.hxx>
+#include <view.hxx>
+#include <cmdid.h>
+#include <node.hxx>
+#include <ndtxt.hxx>
+#include <tabfrm.hxx>
+#include <cntfrm.hxx>
+
+/// Covers sw/source/core/layout/ fixes.
+class SwCoreLayoutTest : public SwModelTestBase
+{
+public:
+ SwCoreLayoutTest()
+ : SwModelTestBase("/sw/qa/core/layout/data/")
+ {
+ }
+};
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testTableFlyOverlap)
+{
+ // Load a document that has an image anchored in the header.
+ // It also has a table which has the wrap around the image.
+ createSwDoc("table-fly-overlap.docx");
+ SwTwips nFlyTop
+ = parseDump("//header/txt/anchored/fly/infos/bounds"_ostr, "top"_ostr).toInt32();
+ SwTwips nFlyHeight
+ = parseDump("//header/txt/anchored/fly/infos/bounds"_ostr, "height"_ostr).toInt32();
+ SwTwips nFlyBottom = nFlyTop + nFlyHeight;
+ SwTwips nTableFrameTop = parseDump("//tab/infos/bounds"_ostr, "top"_ostr).toInt32();
+ SwTwips nTablePrintTop = parseDump("//tab/infos/prtBounds"_ostr, "top"_ostr).toInt32();
+ SwTwips nTableTop = nTableFrameTop + nTablePrintTop;
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected greater or equal than: 3579
+ // - Actual : 2210
+ // i.e. the table's top border overlapped with the image, even if the image's wrap mode was set
+ // to parallel.
+ CPPUNIT_ASSERT_GREATEREQUAL(nFlyBottom, nTableTop);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testTdf128195)
+{
+ // Load a document that has two paragraphs in the header.
+ // The second paragraph should have its bottom spacing applied.
+ createSwDoc("tdf128195.docx");
+ sal_Int32 nTxtHeight = parseDump("//header/txt[2]/infos/bounds"_ostr, "height"_ostr).toInt32();
+ sal_Int32 nTxtBottom = parseDump("//header/txt[2]/infos/bounds"_ostr, "bottom"_ostr).toInt32();
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(2269), nTxtHeight);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(3529), nTxtBottom);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testBIRT)
+{
+ // this looped
+ createSwDoc("birt_min.odt");
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testBorderCollapseCompat)
+{
+ // Load a document with a border conflict: top cell has a dotted bottom border, bottom cell has
+ // a solid upper border.
+ createSwDoc("border-collapse-compat.docx");
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ SwDocShell* pShell = pTextDoc->GetDocShell();
+ std::shared_ptr<GDIMetaFile> xMetaFile = pShell->GetPreviewMetaFile();
+ MetafileXmlDump aDumper;
+ xmlDocUniquePtr pXmlDoc = dumpAndParse(aDumper, *xMetaFile);
+
+ // Make sure the solid border has priority.
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 1
+ // - Actual : 48
+ // i.e. there was no single cell border with width=20, rather there were 48 border parts
+ // (forming a dotted border), all with width=40.
+ assertXPath(pXmlDoc, "//polyline[@style='solid']"_ostr, "width"_ostr, "20");
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testBtlrTableRowSpan)
+{
+ // Load a document which has a table. The A1 cell has btlr text direction, and the A1..A3 cells
+ // are merged.
+ createSwDoc("btlr-table-row-span.odt");
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ SwDocShell* pShell = pTextDoc->GetDocShell();
+ std::shared_ptr<GDIMetaFile> xMetaFile = pShell->GetPreviewMetaFile();
+ MetafileXmlDump aDumper;
+ xmlDocUniquePtr pXmlDoc = dumpAndParse(aDumper, *xMetaFile);
+
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: USA
+ // - Actual : West
+ // i.e. the "USA" text completely disappeared.
+ assertXPathContent(pXmlDoc, "//textarray[1]/text"_ostr, "USA");
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testTableFlyOverlapSpacing)
+{
+ // Load a document that has an image on the right of a table. The table wraps around the image.
+ createSwDoc("table-fly-overlap-spacing.docx");
+ SwTwips nFlyTop = parseDump("//body/txt/anchored/fly/infos/bounds"_ostr, "top"_ostr).toInt32();
+ SwTwips nFlyHeight
+ = parseDump("//body/txt/anchored/fly/infos/bounds"_ostr, "height"_ostr).toInt32();
+ SwTwips nFlyBottom = nFlyTop + nFlyHeight;
+ SwTwips nTableFrameTop = parseDump("//tab/infos/bounds"_ostr, "top"_ostr).toInt32();
+ SwTwips nTablePrintTop = parseDump("//tab/infos/prtBounds"_ostr, "top"_ostr).toInt32();
+ SwTwips nTableTop = nTableFrameTop + nTablePrintTop;
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected greater or equal than: 3993
+ // - Actual : 3993
+ // i.e. the table was below the image, not on the left of the image.
+ CPPUNIT_ASSERT_LESS(nFlyBottom, nTableTop);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testTablesMoveBackwards)
+{
+ // Load a document with 1 pages: empty content on first page, then 21 tables on the second page.
+ createSwDoc("tables-move-backwards.odt");
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ SwDocShell* pDocShell = pTextDoc->GetDocShell();
+ SwWrtShell* pWrtShell = pDocShell->GetWrtShell();
+
+ // Delete the content on the first page.
+ pWrtShell->SttEndDoc(/*bStart=*/true);
+ pWrtShell->EndPg(/*bSelect=*/true);
+ pWrtShell->DelLeft();
+
+ // Calc the layout and check the number of pages.
+ pWrtShell->CalcLayout();
+ xmlDocUniquePtr pLayout = parseLayoutDump();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 1
+ // - Actual : 2
+ // i.e. there was an unexpected 2nd page, as only 20 out of 21 tables were moved to the first
+ // page.
+ assertXPath(pLayout, "//page"_ostr, 1);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testContinuousEndnotesMoveBackwards)
+{
+ // Load a document with the ContinuousEndnotes flag turned on.
+ createSwDoc("continuous-endnotes-move-backwards.doc");
+ xmlDocUniquePtr pLayout = parseLayoutDump();
+ // We have 2 pages.
+ assertXPath(pLayout, "/root/page"_ostr, 2);
+ // No endnote container on page 1.
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 0
+ // - Actual : 1
+ // i.e. there were unexpected endnotes on page 1.
+ assertXPath(pLayout, "/root/page[1]/ftncont"_ostr, 0);
+ // All endnotes are in a container on page 2.
+ assertXPath(pLayout, "/root/page[2]/ftncont"_ostr, 1);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testAnchorPositionBasedOnParagraph)
+{
+ // tdf#134783 check whether position of shape is good if it is anchored to paragraph and
+ // the "Don't add space between paragraphs of the same style" option is set
+ createSwDoc("tdf134783_testAnchorPositionBasedOnParagraph.fodt");
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+ CPPUNIT_ASSERT(pXmlDoc);
+ assertXPath(pXmlDoc, "(//anchored/SwAnchoredDrawObject)[1]/bounds"_ostr, "top"_ostr, "1671");
+ assertXPath(pXmlDoc, "(//anchored/SwAnchoredDrawObject)[1]/bounds"_ostr, "bottom"_ostr, "1732");
+ assertXPath(pXmlDoc, "(//anchored/SwAnchoredDrawObject)[2]/bounds"_ostr, "top"_ostr, "1947");
+ assertXPath(pXmlDoc, "(//anchored/SwAnchoredDrawObject)[2]/bounds"_ostr, "bottom"_ostr, "2008");
+ assertXPath(pXmlDoc, "(//anchored/SwAnchoredDrawObject)[3]/bounds"_ostr, "top"_ostr, "3783");
+ assertXPath(pXmlDoc, "(//anchored/SwAnchoredDrawObject)[3]/bounds"_ostr, "bottom"_ostr, "3844");
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testTextBoxStaysInsideShape)
+{
+ // tdf#135198: check whether text box stays inside shape after moving it upwards
+ createSwDoc("shape-textbox.odt");
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+ CPPUNIT_ASSERT(pXmlDoc);
+
+ // Without the fix in place, this test would have failed with
+ // - Expected: 1932
+ // - Actual : 7476
+ assertXPath(pXmlDoc, "//anchored/fly/infos/bounds"_ostr, "top"_ostr, "1932");
+ assertXPath(pXmlDoc, "//anchored/fly/infos/bounds"_ostr, "bottom"_ostr, "7184");
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testTextBoxNotModifiedOnOpen)
+{
+ // tdf#138050: a freshly opened document containing a shape with a text box
+ // should not appear to be modified
+ createSwDoc("textbox-phantom-change.docx");
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc();
+
+ // Without the fix in place this test would have shown that the document
+ // was modified due to a fix to tdf#135198
+ CPPUNIT_ASSERT(!pDoc->getIDocumentState().IsModified());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testTextBoxAutoGrowVertical)
+{
+ createSwDoc("textbox-autogrow-vertical.docx");
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc();
+ SdrPage* pPage = pDoc->getIDocumentDrawModelAccess().GetDrawModel()->GetPage(0);
+ SdrObject* pShape = pPage->GetObj(0);
+ tools::Rectangle aShapeRect = pShape->GetCurrentBoundRect();
+
+ discardDumpedLayout();
+ xmlDocUniquePtr pLayout = parseLayoutDump();
+ CPPUNIT_ASSERT(pLayout);
+ sal_Int32 nFlyLeft
+ = getXPath(pLayout, "//anchored/fly/infos/bounds"_ostr, "left"_ostr).toInt32();
+ sal_Int32 nFlyTop = getXPath(pLayout, "//anchored/fly/infos/bounds"_ostr, "top"_ostr).toInt32();
+ sal_Int32 nFlyRight
+ = getXPath(pLayout, "//anchored/fly/infos/bounds"_ostr, "right"_ostr).toInt32();
+ sal_Int32 nFlyBottom
+ = getXPath(pLayout, "//anchored/fly/infos/bounds"_ostr, "bottom"_ostr).toInt32();
+ tools::Rectangle aFlyRect(nFlyLeft, nFlyTop, nFlyRight, nFlyBottom);
+ // Without the accompanying fix in place, this test would have failed, as aFlyRect was too wide,
+ // so it was not inside aShapeRect anymore.
+ CPPUNIT_ASSERT(aShapeRect.Contains(aFlyRect));
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testTextboxModification)
+{
+ // Load a document with a textbox in it: the layout will have to position the shape part.
+ createSwDoc("textbox-modification.docx");
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ SwDocShell* pDocShell = pTextDoc->GetDocShell();
+
+ // Without the accompanying fix in place, this test would have failed, as the document was
+ // marked as modified right after the import.
+ CPPUNIT_ASSERT(!pDocShell->IsModified());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testTextBoxInHeaderIsPositioned)
+{
+ // Load a document with a floating text box in the header
+ createSwDoc("header-textbox.docx");
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+ CPPUNIT_ASSERT(pXmlDoc);
+
+ // Without the fix in place, this test would have failed with
+ // - Expected: 8051
+ // - Actual : 1418
+ // Comparison with 7000 chosen due to variability between devices
+ CPPUNIT_ASSERT_GREATEREQUAL(
+ double(7000),
+ getXPath(pXmlDoc, "//anchored/fly/infos/bounds"_ostr, "left"_ostr).toDouble());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testBtlrNestedCell)
+{
+ // Load a document with a nested table, the inner A1 cell has a btlr text direction.
+ createSwDoc("btlr-nested-cell.odt");
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ SwFrame* pPage = pLayout->GetLower();
+ SwFrame* pBody = pPage->GetLower();
+ SwFrame* pOuterTable = pBody->GetLower()->GetNext();
+ SwFrame* pInnerTable = pOuterTable->GetLower()->GetLower()->GetLower();
+
+ // Check the paint area of the only text frame in the cell.
+ SwFrame* pTextFrame = pInnerTable->GetLower()->GetLower()->GetLower();
+ tools::Long nFrameBottom = pTextFrame->getFrameArea().Bottom();
+ SwRect aPaintArea = pTextFrame->GetPaintArea();
+
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected greater or equal than: 2829
+ // - Actual : 2080
+ // i.e. part of the text frame area was not painted, hiding the actual text.
+ CPPUNIT_ASSERT_GREATEREQUAL(nFrameBottom, aPaintArea.Bottom());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testKeepwithnextFullheight)
+{
+ // The document has a heading (keep with next) and a full-page image in the next paragraph, i.e.
+ // conflicting requirements.
+ // Without the accompanying fix in place, this test would have failed with a layout loop in
+ // SwEditShell::CalcLayout().
+ createSwDoc("keepwithnext-fullheight.fodt");
+
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+ CPPUNIT_ASSERT(pXmlDoc);
+ // Make sure the document has 2 pages.
+ assertXPath(pXmlDoc, "//page"_ostr, 2);
+ // Heading stays on page 1 to avoid a layout loop.
+ assertXPathContent(pXmlDoc, "//page[1]/body/txt[2]"_ostr, "Heading");
+ // Image stays on page 2.
+ assertXPath(pXmlDoc, "//page[2]/body/txt/anchored/fly"_ostr, 1);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testGutterMargin)
+{
+ // Create a document, remember the old left edge of the page print area (the rectangle that is
+ // inside margins).
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ uno::Reference<beans::XPropertySet> xStandard(getStyles("PageStyles")->getByName("Standard"),
+ uno::UNO_QUERY);
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ SwFrame* pPage = pLayout->GetLower();
+ tools::Long nOldLeft = pPage->getFramePrintArea().Left();
+
+ // Set the gutter margin to 2cm.
+ sal_Int32 nGutterMm100 = 2000;
+ xStandard->setPropertyValue("GutterMargin", uno::Any(nGutterMm100));
+
+ // Verify that the new left edge is larger.
+ tools::Long nNewLeft = pPage->getFramePrintArea().Left();
+ tools::Long nGutterTwips = o3tl::toTwips(nGutterMm100, o3tl::Length::mm100);
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 1134
+ // - Actual : 0
+ // i.e. the gutter was not added to the left margin.
+ CPPUNIT_ASSERT_EQUAL(nGutterTwips, nNewLeft - nOldLeft);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testGutterTopMargin)
+{
+ // Create a document, remember the old top edge of the page print area (the rectangle that is
+ // inside margins).
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xSettings(
+ xFactory->createInstance("com.sun.star.document.Settings"), uno::UNO_QUERY);
+ xSettings->setPropertyValue("GutterAtTop", uno::Any(true));
+ uno::Reference<beans::XPropertySet> xStandard(getStyles("PageStyles")->getByName("Standard"),
+ uno::UNO_QUERY);
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ SwFrame* pPage = pLayout->GetLower();
+ tools::Long nOldTop = pPage->getFramePrintArea().Top();
+
+ // Set the gutter margin to 2cm.
+ sal_Int32 nGutterMm100 = 2000;
+ xStandard->setPropertyValue("GutterMargin", uno::Any(nGutterMm100));
+
+ // Verify that the new top edge is larger.
+ tools::Long nNewTop = pPage->getFramePrintArea().Top();
+ tools::Long nGutterTwips = o3tl::toTwips(nGutterMm100, o3tl::Length::mm100);
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 1134
+ // - Actual : 0
+ // i.e. the gutter was not added to the left margin.
+ CPPUNIT_ASSERT_EQUAL(nGutterTwips, nNewTop - nOldTop);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testGutterMirrorMargin)
+{
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ SwDocShell* pDocShell = pDoc->GetDocShell();
+ SwWrtShell* pWrtShell = pDocShell->GetWrtShell();
+ pWrtShell->InsertPageBreak();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ SwFrame* pPage = pLayout->GetLower();
+ tools::Long nOldLeft = pPage->getFramePrintArea().Left();
+ SwFrame* pPage2 = pPage->GetNext();
+ tools::Long nOldRight = pPage2->getFramePrintArea().Right();
+
+ uno::Reference<beans::XPropertySet> xStandard(getStyles("PageStyles")->getByName("Standard"),
+ uno::UNO_QUERY);
+ xStandard->setPropertyValue("PageStyleLayout", uno::Any(style::PageStyleLayout_MIRRORED));
+ sal_Int32 nGutterMm100 = 2000;
+ xStandard->setPropertyValue("GutterMargin", uno::Any(nGutterMm100));
+
+ tools::Long nNewLeft = pPage->getFramePrintArea().Left();
+ tools::Long nGutterTwips = o3tl::toTwips(nGutterMm100, o3tl::Length::mm100);
+ CPPUNIT_ASSERT_EQUAL(nGutterTwips, nNewLeft - nOldLeft);
+ tools::Long nNewRight = pPage2->getFramePrintArea().Right();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 1134
+ // - Actual : 0
+ // i.e. the gutter was missing on the second, mirrored page.
+ CPPUNIT_ASSERT_EQUAL(nGutterTwips, nOldRight - nNewRight);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testRtlGutterMargin)
+{
+ // Given a document with a right margin:
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ uno::Reference<beans::XPropertySet> xStandard(getStyles("PageStyles")->getByName("Standard"),
+ uno::UNO_QUERY);
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ SwFrame* pPage = pLayout->GetLower();
+ tools::Long nOldRight = pPage->getFramePrintArea().Right();
+
+ // When setting enable RTL gutter mode and setting a gutter margin:
+ xStandard->setPropertyValue("RtlGutter", uno::Any(true));
+ sal_Int32 nGutterMm100 = 2000;
+ xStandard->setPropertyValue("GutterMargin", uno::Any(nGutterMm100));
+
+ // Then make sure the new right edge of the print area is decreased:
+ tools::Long nNewRight = pPage->getFramePrintArea().Right();
+ tools::Long nGutterTwips = o3tl::toTwips(nGutterMm100, o3tl::Length::mm100);
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 1134
+ // - Actual : 0
+ // i.e. the gutter was missing on the right side.
+ CPPUNIT_ASSERT_EQUAL(nGutterTwips, nOldRight - nNewRight);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testGutterMarginPageBorder)
+{
+// FIXME this is 3369 on macOS -- calculate this number dynamically?
+// FIXME this is random on Windows at the moment (in two subsequent tests without any scaling,
+// the actual values were 6346, 10066) - something broke metafile generation on Windows?
+#if !defined(MACOSX) && !defined(_WIN32)
+ // Given a document with a non-0 gutter margin.
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ uno::Reference<beans::XPropertySet> xStandard(getStyles("PageStyles")->getByName("Standard"),
+ uno::UNO_QUERY);
+ sal_Int32 nGutterMm100 = 2000;
+ xStandard->setPropertyValue("GutterMargin", uno::Any(nGutterMm100));
+
+ // When setting a left border.
+ table::BorderLine2 aBorder;
+ aBorder.LineWidth = 2;
+ aBorder.OuterLineWidth = 2;
+ xStandard->setPropertyValue("LeftBorder", uno::Any(aBorder));
+
+ // Then make sure border is at the left edge of the text area.
+ SwDocShell* pShell = pDoc->GetDocShell();
+ std::shared_ptr<GDIMetaFile> xMetaFile = pShell->GetPreviewMetaFile();
+ MetafileXmlDump dumper;
+ xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile);
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 2565
+ // - Actual : 1425
+ // Where 2565 is close to the left edge of the text area (2553).
+ assertXPath(pXmlDoc, "//polyline[@style='solid']/point[1]"_ostr, "x"_ostr, "2565");
+#endif
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testTdf45908_invoice)
+{
+ // without the fix, this was hanging (and slowly consuming memory) on fileopen.
+ createSwDoc("tdf45908_invoice.odt");
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testVerticallyMergedCellBorder)
+{
+ // Given a document with a table: 2 columns, 5 rows. B2 -> B5 is merged:
+ createSwDoc("vmerge-cell-border.docx");
+ SwDoc* pDoc = getSwDoc();
+ SwDocShell* pShell = pDoc->GetDocShell();
+
+ // When rendering the table:
+ std::shared_ptr<GDIMetaFile> xMetaFile = pShell->GetPreviewMetaFile();
+
+ // Make sure that B4->B5 has no borders.
+ MetafileXmlDump dumper;
+ xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile);
+ // Collect vertical positions of all border points.
+ xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "//polyline[@style='solid']/point"_ostr);
+ xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval;
+ std::vector<sal_Int32> aBorderPositions;
+ for (int i = 0; i < xmlXPathNodeSetGetLength(pXmlNodes); ++i)
+ {
+ xmlNodePtr pXmlNode = pXmlNodes->nodeTab[i];
+ xmlChar* pValue = xmlGetProp(pXmlNode, BAD_CAST("y"));
+ sal_Int32 nValue = o3tl::toInt32(reinterpret_cast<char const*>(pValue));
+ aBorderPositions.push_back(nValue);
+ }
+ xmlXPathFreeObject(pXmlObj);
+ // Collect top and bottom of the B1->B3 rows.
+ xmlDocUniquePtr pLayout = parseLayoutDump();
+ pXmlObj = getXPathNode(pLayout, "//tab/row/infos/bounds"_ostr);
+ pXmlNodes = pXmlObj->nodesetval;
+ std::vector<sal_Int32> aLayoutPositions;
+ for (int i = 0; i < 3; ++i)
+ {
+ xmlNodePtr pXmlNode = pXmlNodes->nodeTab[i];
+ if (i == 0)
+ {
+ xmlChar* pValue = xmlGetProp(pXmlNode, BAD_CAST("top"));
+ sal_Int32 nValue = o3tl::toInt32(reinterpret_cast<char const*>(pValue));
+ aLayoutPositions.push_back(nValue);
+ }
+ xmlChar* pValue = xmlGetProp(pXmlNode, BAD_CAST("bottom"));
+ sal_Int32 nValue = o3tl::toInt32(reinterpret_cast<char const*>(pValue));
+ aLayoutPositions.push_back(nValue);
+ }
+ xmlXPathFreeObject(pXmlObj);
+ // Check if any border is outside the B1->B3 range.
+ for (const auto nBorderPosition : aBorderPositions)
+ {
+ bool bFound = false;
+ for (const auto nLayoutPosition : aLayoutPositions)
+ {
+ if (std::abs(nBorderPosition - nLayoutPosition) <= 30)
+ {
+ bFound = true;
+ break;
+ }
+ }
+ std::stringstream ss;
+ ss << "Bad vertical position for border point: " << nBorderPosition;
+ ss << " Expected positions: ";
+ for (size_t i = 0; i < aLayoutPositions.size(); ++i)
+ {
+ if (i > 0)
+ {
+ ss << ", ";
+ }
+ ss << aLayoutPositions[i];
+ }
+
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Bad vertical position for border point: 5624 Expected positions: 3022, 3540, 4059, 4578
+ // i.e. the middle vertical border end was the bottom of B5, not bottom of B3.
+ CPPUNIT_ASSERT_MESSAGE(ss.str(), bFound);
+ }
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testCrashRemoveFromLayout)
+{
+ createSwDoc("tdf122894-4.doc");
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testLinkedBullet)
+{
+ // Given a document with a graphic bullet, where the image is a linked one:
+ createSwDoc("linked-bullet.odt");
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ SwDocShell* pShell = pTextDoc->GetDocShell();
+
+ // When rendering that document:
+ std::shared_ptr<GDIMetaFile> xMetaFile = pShell->GetPreviewMetaFile();
+
+ // Then make sure the render result contains exactly one bitmap:
+ MetafileXmlDump aDumper;
+ xmlDocUniquePtr pXmlDoc = dumpAndParse(aDumper, *xMetaFile);
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 1
+ // - Actual : 0
+ // i.e. the bullet's bitmap was lost.
+ assertXPath(pXmlDoc, "//bmpexscale"_ostr, 1);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testInnerCellBorderIntersect)
+{
+ // Given a table with both outer and inner borders:
+ createSwDoc("inner-border.docx");
+ SwDoc* pDoc = getSwDoc();
+ SwDocShell* pShell = pDoc->GetDocShell();
+
+ // When rendering table borders:
+ std::shared_ptr<GDIMetaFile> xMetaFile = pShell->GetPreviewMetaFile();
+
+ // Then make sure that inner and outer borders don't overlap in Word compatibility mode,
+ // and inner borders are reduced to prevent an overlap:
+ MetafileXmlDump dumper;
+ xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile);
+ // Collect start/end (vertical) positions of horizontal borders.
+ xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "//polyline[@style='solid']/point"_ostr);
+ xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval;
+ std::vector<std::pair<sal_Int32, sal_Int32>> aBorderStartEnds;
+ for (int i = 0; i < xmlXPathNodeSetGetLength(pXmlNodes); i += 2)
+ {
+ xmlNodePtr pStart = pXmlNodes->nodeTab[i];
+ xmlNodePtr pEnd = pXmlNodes->nodeTab[i + 1];
+ xmlChar* pStartY = xmlGetProp(pStart, BAD_CAST("y"));
+ xmlChar* pEndY = xmlGetProp(pEnd, BAD_CAST("y"));
+ sal_Int32 nStartY = o3tl::toInt32(reinterpret_cast<char const*>(pStartY));
+ sal_Int32 nEndY = o3tl::toInt32(reinterpret_cast<char const*>(pEndY));
+ if (nStartY != nEndY)
+ {
+ // Vertical border.
+ continue;
+ }
+ xmlChar* pStartX = xmlGetProp(pStart, BAD_CAST("x"));
+ xmlChar* pEndX = xmlGetProp(pEnd, BAD_CAST("x"));
+ sal_Int32 nStartX = o3tl::toInt32(reinterpret_cast<char const*>(pStartX));
+ sal_Int32 nEndX = o3tl::toInt32(reinterpret_cast<char const*>(pEndX));
+ aBorderStartEnds.emplace_back(nStartX, nEndX);
+ }
+ xmlXPathFreeObject(pXmlObj);
+ // We have 3 lines: top, middle and bottom. The top and the bottom one is a full line, since
+ // it's an outer border. The middle one has increased start and decreased end to avoid an
+ // overlap.
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(3), aBorderStartEnds.size());
+ CPPUNIT_ASSERT_EQUAL(aBorderStartEnds[0].first, aBorderStartEnds[2].first);
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected greater than: 1724
+ // - Actual : 1724
+ // i.e. the middle line's start was the same as the top line start, while what we want is a
+ // larger X position, so the start of the middle line doesn't overlap with the thick vertical
+ // outer border on the left of the table.
+ CPPUNIT_ASSERT_GREATER(aBorderStartEnds[0].first, aBorderStartEnds[1].first);
+ CPPUNIT_ASSERT_EQUAL(aBorderStartEnds[0].second, aBorderStartEnds[2].second);
+ CPPUNIT_ASSERT_LESS(aBorderStartEnds[0].second, aBorderStartEnds[1].second);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testInnerCellBorderNocompatIntersect)
+{
+ // Given a table with both outer and inner borders:
+ createSwDoc();
+ SwDocShell* pShell = getSwDocShell();
+ SwDoc* pDoc = pShell->GetDoc();
+ // Set the default page style's writing direction to vertical:
+ SwPageDesc aStandard(pDoc->GetPageDesc(0));
+ SvxFrameDirectionItem aDirection(SvxFrameDirection::Vertical_RL_TB, RES_FRAMEDIR);
+ aStandard.GetMaster().SetFormatAttr(aDirection);
+ pDoc->ChgPageDesc(0, aStandard);
+ // Insert a 4x4 table:
+ SwWrtShell* pWrtShell = pShell->GetWrtShell();
+ SwInsertTableOptions aTableOptions(SwInsertTableFlags::DefaultBorder, 0);
+ pWrtShell->InsertTable(aTableOptions, 4, 4);
+
+ // When rendering table borders:
+ std::shared_ptr<GDIMetaFile> xMetaFile = pShell->GetPreviewMetaFile();
+
+ // Then make sure that all horizontal lines have the same length:
+ MetafileXmlDump dumper;
+ xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile);
+ // Collect start/end (vertical) positions of horizontal borders.
+ xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "//polyline[@style='solid']/point"_ostr);
+ xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval;
+ std::vector<std::pair<sal_Int32, sal_Int32>> aBorderStartEnds;
+ for (int i = 0; i < xmlXPathNodeSetGetLength(pXmlNodes); i += 2)
+ {
+ xmlNodePtr pStart = pXmlNodes->nodeTab[i];
+ xmlNodePtr pEnd = pXmlNodes->nodeTab[i + 1];
+ xmlChar* pStartY = xmlGetProp(pStart, BAD_CAST("y"));
+ xmlChar* pEndY = xmlGetProp(pEnd, BAD_CAST("y"));
+ sal_Int32 nStartY = o3tl::toInt32(reinterpret_cast<char const*>(pStartY));
+ sal_Int32 nEndY = o3tl::toInt32(reinterpret_cast<char const*>(pEndY));
+ if (nStartY != nEndY)
+ {
+ // Vertical border.
+ continue;
+ }
+ xmlChar* pStartX = xmlGetProp(pStart, BAD_CAST("x"));
+ xmlChar* pEndX = xmlGetProp(pEnd, BAD_CAST("x"));
+ sal_Int32 nStartX = o3tl::toInt32(reinterpret_cast<char const*>(pStartX));
+ sal_Int32 nEndX = o3tl::toInt32(reinterpret_cast<char const*>(pEndX));
+ aBorderStartEnds.emplace_back(nStartX, nEndX);
+ }
+ xmlXPathFreeObject(pXmlObj);
+ // We have 5 lines: top of 4 cells + bottom.
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(5), aBorderStartEnds.size());
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 9719
+ // - Actual : 10064
+ // i.e. the 2nd line started later than the first one, which is incorrect.
+ CPPUNIT_ASSERT_EQUAL(aBorderStartEnds[0].first, aBorderStartEnds[1].first);
+ CPPUNIT_ASSERT_EQUAL(aBorderStartEnds[0].first, aBorderStartEnds[2].first);
+ CPPUNIT_ASSERT_EQUAL(aBorderStartEnds[0].first, aBorderStartEnds[3].first);
+ CPPUNIT_ASSERT_EQUAL(aBorderStartEnds[0].first, aBorderStartEnds[4].first);
+ CPPUNIT_ASSERT_EQUAL(aBorderStartEnds[0].second, aBorderStartEnds[1].second);
+ CPPUNIT_ASSERT_EQUAL(aBorderStartEnds[0].second, aBorderStartEnds[2].second);
+ CPPUNIT_ASSERT_EQUAL(aBorderStartEnds[0].second, aBorderStartEnds[3].second);
+ CPPUNIT_ASSERT_EQUAL(aBorderStartEnds[0].second, aBorderStartEnds[4].second);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testDoubleBorderVertical)
+{
+ // Given a table with a left and right double border, outer is thick, inner is thin:
+ createSwDoc("double-border-vertical.docx");
+ SwDoc* pDoc = getSwDoc();
+ SwDocShell* pShell = pDoc->GetDocShell();
+
+ // When rendering that document:
+ std::shared_ptr<GDIMetaFile> xMetaFile = pShell->GetPreviewMetaFile();
+
+ // Then make sure the left border is thick+thin and the right border is thin+thick (from left to
+ // right):
+ MetafileXmlDump dumper;
+ xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile);
+ // Collect widths of vertical lines.
+ xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "//polyline[@style='solid']/point"_ostr);
+ xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval;
+ // Horizontal position -> width.
+ std::map<sal_Int32, sal_Int32> aBorderWidths;
+ for (int i = 0; i < xmlXPathNodeSetGetLength(pXmlNodes); i += 2)
+ {
+ xmlNodePtr pStart = pXmlNodes->nodeTab[i];
+ xmlNodePtr pEnd = pXmlNodes->nodeTab[i + 1];
+ xmlChar* pStartX = xmlGetProp(pStart, BAD_CAST("x"));
+ xmlChar* pEndX = xmlGetProp(pEnd, BAD_CAST("x"));
+ sal_Int32 nStartX = o3tl::toInt32(reinterpret_cast<char const*>(pStartX));
+ sal_Int32 nEndX = o3tl::toInt32(reinterpret_cast<char const*>(pEndX));
+ if (nStartX != nEndX)
+ {
+ // Horizontal border.
+ continue;
+ }
+ xmlChar* pWidth = xmlGetProp(pStart->parent, BAD_CAST("width"));
+ sal_Int32 nWidth = o3tl::toInt32(reinterpret_cast<char const*>(pWidth));
+ aBorderWidths[nStartX] = nWidth;
+ }
+ xmlXPathFreeObject(pXmlObj);
+ std::vector<sal_Int32> aBorderWidthVec;
+ std::transform(aBorderWidths.begin(), aBorderWidths.end(), std::back_inserter(aBorderWidthVec),
+ [](const std::pair<sal_Int32, sal_Int32>& rPair) { return rPair.second; });
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(4), aBorderWidthVec.size());
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected greater than: 120
+ // - Actual : 60
+ // i.e. the left border was thin+thick, not thick+thin.
+ CPPUNIT_ASSERT_GREATER(aBorderWidthVec[1], aBorderWidthVec[0]);
+ CPPUNIT_ASSERT_GREATER(aBorderWidthVec[2], aBorderWidthVec[3]);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testDoubleBorderHorizontal)
+{
+ // Given a table with a top and bottom double border, outer is thin, inner is thick:
+ createSwDoc("double-border-horizontal.docx");
+ SwDoc* pDoc = getSwDoc();
+ SwDocShell* pShell = pDoc->GetDocShell();
+
+ // When rendering table borders:
+ std::shared_ptr<GDIMetaFile> xMetaFile = pShell->GetPreviewMetaFile();
+
+ // Then make sure the top border is thin+thick and the bottom border is thick+thin (from top to
+ // bottom):
+ MetafileXmlDump dumper;
+ xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile);
+ // Collect widths of horizontal lines.
+ xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "//polyline[@style='solid']/point"_ostr);
+ xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval;
+ // Vertical position -> width.
+ std::map<sal_Int32, sal_Int32> aBorderWidths;
+ for (int i = 0; i < xmlXPathNodeSetGetLength(pXmlNodes); i += 2)
+ {
+ xmlNodePtr pStart = pXmlNodes->nodeTab[i];
+ xmlNodePtr pEnd = pXmlNodes->nodeTab[i + 1];
+ xmlChar* pStartY = xmlGetProp(pStart, BAD_CAST("y"));
+ xmlChar* pEndY = xmlGetProp(pEnd, BAD_CAST("y"));
+ sal_Int32 nStartY = o3tl::toInt32(reinterpret_cast<char const*>(pStartY));
+ sal_Int32 nEndY = o3tl::toInt32(reinterpret_cast<char const*>(pEndY));
+ if (nStartY != nEndY)
+ {
+ // Vertical border.
+ continue;
+ }
+ xmlChar* pWidth = xmlGetProp(pStart->parent, BAD_CAST("width"));
+ sal_Int32 nWidth = o3tl::toInt32(reinterpret_cast<char const*>(pWidth));
+ aBorderWidths[nStartY] = nWidth;
+ }
+ xmlXPathFreeObject(pXmlObj);
+ std::vector<sal_Int32> aBorderWidthVec;
+ std::transform(aBorderWidths.begin(), aBorderWidths.end(), std::back_inserter(aBorderWidthVec),
+ [](const std::pair<sal_Int32, sal_Int32>& rPair) { return rPair.second; });
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(4), aBorderWidthVec.size());
+ CPPUNIT_ASSERT_GREATER(aBorderWidthVec[0], aBorderWidthVec[1]);
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected greater than: 120
+ // - Actual : 60
+ // i.e. the bottom border was thin+thick, not thick+thin.
+ CPPUNIT_ASSERT_GREATER(aBorderWidthVec[3], aBorderWidthVec[2]);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testParaBorderInCellClip)
+{
+ // Given a document which has outside-cell borders defined, which should not be visible:
+ createSwDoc("para-border-in-cell-clip.docx");
+ SwDoc* pDoc = getSwDoc();
+ SwDocShell* pShell = pDoc->GetDocShell();
+
+ // When rendering those borders:
+ std::shared_ptr<GDIMetaFile> xMetaFile = pShell->GetPreviewMetaFile();
+
+ // Then make sure that we have clipping setup for both paragraphs inside the table cell:
+ MetafileXmlDump dumper;
+ xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile);
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 2
+ // - Actual : 0
+ // - XPath '//clipregion/polygon' number of nodes is incorrect
+ // i.e. there was no clipping applied, leading to unexpected left/right borders.
+ assertXPath(pXmlDoc, "//clipregion/polygon"_ostr, 2);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testDoublePageBorder)
+{
+ // Given a page with a top and bottom double border, outer is thick, inner is thin:
+ createSwDoc("double-page-border.docx");
+ SwDoc* pDoc = getSwDoc();
+ SwDocShell* pShell = pDoc->GetDocShell();
+
+ // When rendering that document:
+ std::shared_ptr<GDIMetaFile> xMetaFile = pShell->GetPreviewMetaFile();
+
+ // Then make sure the top border is thick+thing and the bottom border is thin+thick (from top to
+ // bottom):
+ MetafileXmlDump dumper;
+ xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile);
+ // Collect widths of horizontal lines.
+ xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "//polyline[@style='solid']/point"_ostr);
+ xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval;
+ // Vertical position -> width.
+ std::map<sal_Int32, sal_Int32> aBorderWidths;
+ for (int i = 0; i < xmlXPathNodeSetGetLength(pXmlNodes); i += 2)
+ {
+ xmlNodePtr pStart = pXmlNodes->nodeTab[i];
+ xmlNodePtr pEnd = pXmlNodes->nodeTab[i + 1];
+ xmlChar* pStartY = xmlGetProp(pStart, BAD_CAST("y"));
+ xmlChar* pEndY = xmlGetProp(pEnd, BAD_CAST("y"));
+ sal_Int32 nStartY = o3tl::toInt32(reinterpret_cast<char const*>(pStartY));
+ sal_Int32 nEndY = o3tl::toInt32(reinterpret_cast<char const*>(pEndY));
+ if (nStartY != nEndY)
+ {
+ // Vertical border.
+ continue;
+ }
+ xmlChar* pWidth = xmlGetProp(pStart->parent, BAD_CAST("width"));
+ sal_Int32 nWidth = o3tl::toInt32(reinterpret_cast<char const*>(pWidth));
+ aBorderWidths[nStartY] = nWidth;
+ }
+ xmlXPathFreeObject(pXmlObj);
+ std::vector<sal_Int32> aBorderWidthVec;
+ std::transform(aBorderWidths.begin(), aBorderWidths.end(), std::back_inserter(aBorderWidthVec),
+ [](const std::pair<sal_Int32, sal_Int32>& rPair) { return rPair.second; });
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(4), aBorderWidthVec.size());
+ CPPUNIT_ASSERT_GREATER(aBorderWidthVec[1], aBorderWidthVec[0]);
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected greater than: 60
+ // - Actual : 15
+ // i.e. the bottom border was thick+thin, not thin+thick.
+ CPPUNIT_ASSERT_GREATER(aBorderWidthVec[2], aBorderWidthVec[3]);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testNegativePageBorder)
+{
+ // FIXME: the DPI check should be removed when either (1) the test is fixed to work with
+ // non-default DPI; or (2) unit tests on Windows are made to use svp VCL plugin.
+ if (!IsDefaultDPI())
+ return;
+
+ // Given a document with a top margin and a negative border distance:
+ createSwDoc();
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ SwDocShell* pDocShell = pTextDoc->GetDocShell();
+ SwWrtShell* pWrtShell = pDocShell->GetWrtShell();
+ pWrtShell->Insert("test");
+ uno::Reference<beans::XPropertySet> xPageStyle(getStyles("PageStyles")->getByName("Standard"),
+ uno::UNO_QUERY);
+ xPageStyle->setPropertyValue("TopMargin", uno::Any(static_cast<sal_Int32>(501))); // 284 twips
+ table::BorderLine2 aBorder;
+ aBorder.LineWidth = 159; // 90 twips
+ aBorder.OuterLineWidth = 159;
+ xPageStyle->setPropertyValue("TopBorder", uno::Any(aBorder));
+ sal_Int32 nTopBorderDistance = -646; // -366 twips
+ xPageStyle->setPropertyValue("TopBorderDistance", uno::Any(nTopBorderDistance));
+ nTopBorderDistance = 0;
+ xPageStyle->getPropertyValue("TopBorderDistance") >>= nTopBorderDistance;
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(-646), nTopBorderDistance);
+
+ // When rendering that border:
+ std::shared_ptr<GDIMetaFile> xMetaFile = pDocShell->GetPreviewMetaFile();
+
+ // Then make sure that the negative distance pushes the horizontal borderline down:
+ MetafileXmlDump aDumper;
+ xmlDocUniquePtr pXmlDoc = dumpAndParse(aDumper, *xMetaFile);
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 899
+ // - Actual : 524
+ // i.e. the negative border distance was rounded up to 0 in lcl_CalcBorderRect().
+ // Ideally this would be 284 (top of first page) + 284 (top margin) + 366 (border distance) =
+ // 934.
+ assertXPath(pXmlDoc, "//polyline[@style='solid']/point[1]"_ostr, "y"_ostr, "899");
+ assertXPath(pXmlDoc, "//polyline[@style='solid']/point[2]"_ostr, "y"_ostr, "899");
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testNegativePageBorderNoMargin)
+{
+ // FIXME: the DPI check should be removed when either (1) the test is fixed to work with
+ // non-default DPI; or (2) unit tests on Windows are made to use svp VCL plugin.
+ if (!IsDefaultDPI())
+ return;
+
+ // Given a document with no top margin and a negative border distance:
+ createSwDoc();
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ SwDocShell* pDocShell = pTextDoc->GetDocShell();
+ SwWrtShell* pWrtShell = pDocShell->GetWrtShell();
+ pWrtShell->Insert("test");
+ uno::Reference<beans::XPropertySet> xPageStyle(getStyles("PageStyles")->getByName("Standard"),
+ uno::UNO_QUERY);
+ xPageStyle->setPropertyValue("TopMargin", uno::Any(static_cast<sal_Int32>(0))); // 0 twips
+ table::BorderLine2 aBorder;
+ aBorder.LineWidth = 159; // 90 twips
+ aBorder.OuterLineWidth = 159;
+ xPageStyle->setPropertyValue("TopBorder", uno::Any(aBorder));
+ sal_Int32 nTopBorderDistance = -1147; // -650 twips
+ xPageStyle->setPropertyValue("TopBorderDistance", uno::Any(nTopBorderDistance));
+
+ // When rendering that border:
+ std::shared_ptr<GDIMetaFile> xMetaFile = pDocShell->GetPreviewMetaFile();
+
+ // Then make sure that the negative distance pushes the horizontal borderline down:
+ MetafileXmlDump aDumper;
+ xmlDocUniquePtr pXmlDoc = dumpAndParse(aDumper, *xMetaFile);
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 899
+ // - Actual : 329
+ // i.e. this failed differently: the lack of top margin caused a second problem.
+ // Ideally this would be 284 (top of first page) + 650 (border distance) =
+ // 934.
+ assertXPath(pXmlDoc, "//polyline[@style='solid']/point[1]"_ostr, "y"_ostr, "899");
+ assertXPath(pXmlDoc, "//polyline[@style='solid']/point[2]"_ostr, "y"_ostr, "899");
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testFollowTextFlowWrapInBackground)
+{
+ // Given a document with a table, and a graphic inside that table -- anchored, wrap set to
+ // through and follow-text-flow set to true:
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ pDoc->getIDocumentSettingAccess().set(DocumentSettingId::USE_FORMER_TEXT_WRAPPING, true);
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ SwInsertTableOptions aTableOptions(SwInsertTableFlags::DefaultBorder, 0);
+ pWrtShell->InsertTable(aTableOptions, 1, 1);
+ pWrtShell->MoveTable(GotoPrevTable, fnTableStart);
+ SfxItemSet aFrameSet(pDoc->GetAttrPool(), svl::Items<RES_FRMATR_BEGIN, RES_FRMATR_END - 1>);
+ SwFormatAnchor aAnchor(RndStdIds::FLY_AT_CHAR);
+ aFrameSet.Put(aAnchor);
+ SwFormatSurround aSurround(text::WrapTextMode_THROUGH);
+ aFrameSet.Put(aSurround);
+ SwFormatFrameSize aSize(SwFrameSize::Fixed, 1000, 1000);
+ aFrameSet.Put(aSize);
+ SwFormatFollowTextFlow aFlow(true);
+ aFrameSet.Put(aFlow);
+ Graphic aGrf;
+
+ // When inserting that image:
+ pWrtShell->SwFEShell::Insert(OUString(), OUString(), &aGrf, &aFrameSet);
+
+ // Then make sure that the cell height grows to have space for the graphic, given that
+ // background=true is not specified.
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+ sal_Int32 nCellHeight
+ = getXPath(pXmlDoc, "//cell[1]/infos/bounds"_ostr, "height"_ostr).toInt32();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected greater than: 1000
+ // - Actual : 396
+ // i.e. the image was larger than the containing cell.
+ CPPUNIT_ASSERT_GREATER(static_cast<sal_Int32>(1000), nCellHeight);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testPageRemoveFlyTable)
+{
+ // Given a document with a ToC and several tables, one table marked with a bookmark:
+ createSwDoc("page-remove-fly-table.odt");
+ SwDoc* pDoc = getSwDoc();
+
+ // When updating the ToC and incrementally formatting the document:
+ SwView* pView = pDoc->GetDocShell()->GetView();
+ SfxDispatcher& rDispatcher = *pView->GetViewFrame().GetDispatcher();
+ rDispatcher.Execute(FN_UPDATE_TOX);
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ pWrtShell->Reformat();
+
+ // Then make sure that the 2nd table below the bookmark has no unwanted top margin:
+ pWrtShell->GotoMark("test");
+ pWrtShell->Down(/*bSelect=*/false, /*nCount=*/1, /*bBasicCall=*/false);
+ pWrtShell->Down(/*bSelect=*/false, /*nCount=*/1, /*bBasicCall=*/false);
+ SwCursor* pCursor = pWrtShell->GetCursor();
+ SwTextNode* pTextNode = pCursor->GetPoint()->GetNode().GetTextNode();
+ SwFrame* pTextFrame = pTextNode->getLayoutFrame(nullptr);
+ SwTabFrame* pInnerTable = pTextFrame->FindTabFrame();
+ SwTabFrame* pOuterTable = pInnerTable->GetUpper()->FindTabFrame();
+ tools::Long nActual = pOuterTable->getFramePrintArea().Top();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 0
+ // - Actual : 5879
+ // i.e. the problematic table had a large, unwanted/leftover top margin.
+ CPPUNIT_ASSERT_EQUAL(static_cast<tools::Long>(0), nActual);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testPageRemoveFlyNoTable)
+{
+ createSwDoc("page-remove-fly-no-table.fodt");
+ // This never returned.
+ calcLayout();
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreLayoutTest, testNewFollowTextFlowWrapInBackground)
+{
+ // Given a document with a table, and a graphic inside that table -- anchored, wrap set to
+ // through and follow-text-flow set to true, legacy USE_FORMER_TEXT_WRAPPING is not set:
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ SwInsertTableOptions aTableOptions(SwInsertTableFlags::DefaultBorder, 0);
+ pWrtShell->InsertTable(aTableOptions, 1, 1);
+ pWrtShell->MoveTable(GotoPrevTable, fnTableStart);
+ SfxItemSet aFrameSet(pDoc->GetAttrPool(), svl::Items<RES_FRMATR_BEGIN, RES_FRMATR_END - 1>);
+ SwFormatAnchor aAnchor(RndStdIds::FLY_AT_CHAR);
+ aFrameSet.Put(aAnchor);
+ SwFormatSurround aSurround(text::WrapTextMode_THROUGH);
+ aFrameSet.Put(aSurround);
+ SwFormatFrameSize aSize(SwFrameSize::Fixed, 1000, 1000);
+ aFrameSet.Put(aSize);
+ SwFormatFollowTextFlow aFlow(true);
+ aFrameSet.Put(aFlow);
+ Graphic aGrf;
+
+ // When inserting that image:
+ pWrtShell->SwFEShell::Insert(OUString(), OUString(), &aGrf, &aFrameSet);
+
+ // Then make sure that the cell height grows to have space for the graphic, given that
+ // background=true is not specified.
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+ sal_Int32 nCellHeight
+ = getXPath(pXmlDoc, "//cell[1]/infos/bounds"_ostr, "height"_ostr).toInt32();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected less than: 1000
+ // - Actual : 1120
+ // i.e. the cell height was too large, the image influenced it, which is not expected.
+ CPPUNIT_ASSERT_LESS(static_cast<sal_Int32>(1000), nCellHeight);
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/layout/paintfrm.cxx b/sw/qa/core/layout/paintfrm.cxx
new file mode 100644
index 0000000000..b5990648b2
--- /dev/null
+++ b/sw/qa/core/layout/paintfrm.cxx
@@ -0,0 +1,163 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <swmodeltestbase.hxx>
+
+#include <o3tl/string_view.hxx>
+
+#include <docsh.hxx>
+#include <unotxdoc.hxx>
+
+namespace
+{
+/// Covers sw/source/core/layout/paintfrm.cxx fixes.
+class Test : public SwModelTestBase
+{
+public:
+ Test()
+ : SwModelTestBase("/sw/qa/core/layout/data/")
+ {
+ }
+};
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitTableBorder)
+{
+ // Given a document with a split table, table borders are defined, but cell borders are not:
+ createSwDoc("split-table-border.odt");
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ SwDocShell* pShell = pTextDoc->GetDocShell();
+
+ // When rendering that document:
+ std::shared_ptr<GDIMetaFile> xMetaFile = pShell->GetPreviewMetaFile();
+
+ // Then make sure that the master table has a bottom border and the follow table has a top
+ // border:
+ MetafileXmlDump aDumper;
+ xmlDocUniquePtr pXmlDoc = dumpAndParse(aDumper, *xMetaFile);
+ xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "//polyline[@style='solid']/point"_ostr);
+ xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval;
+ int nHorizontalBorders = 0;
+ // Count the horizontal borders:
+ for (int i = 0; i < xmlXPathNodeSetGetLength(pXmlNodes); i += 2)
+ {
+ xmlNodePtr pStart = pXmlNodes->nodeTab[i];
+ xmlNodePtr pEnd = pXmlNodes->nodeTab[i + 1];
+ xmlChar* pStartY = xmlGetProp(pStart, BAD_CAST("y"));
+ xmlChar* pEndY = xmlGetProp(pEnd, BAD_CAST("y"));
+ sal_Int32 nStartY = o3tl::toInt32(reinterpret_cast<char const*>(pStartY));
+ sal_Int32 nEndY = o3tl::toInt32(reinterpret_cast<char const*>(pEndY));
+ if (nStartY != nEndY)
+ {
+ // Vertical border.
+ continue;
+ }
+
+ ++nHorizontalBorders;
+ }
+ xmlXPathFreeObject(pXmlObj);
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 4
+ // - Actual : 2
+ // i.e. the bottom border in the master table and the top border in the follow table were
+ // missing.
+ CPPUNIT_ASSERT_EQUAL(4, nHorizontalBorders);
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testRTLBorderMerge)
+{
+ // Given a document with an RTL table:
+ createSwDoc("rtl-table.docx");
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ SwDocShell* pShell = pTextDoc->GetDocShell();
+
+ // When rendering that document:
+ std::shared_ptr<GDIMetaFile> xMetaFile = pShell->GetPreviewMetaFile();
+
+ // Then make sure the 5 columns all have left and right vertical borders:
+ MetafileXmlDump aDumper;
+ xmlDocUniquePtr pXmlDoc = dumpAndParse(aDumper, *xMetaFile);
+ xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "//polyline[@style='solid']/point"_ostr);
+ xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval;
+ int nVerticalBorders = 0;
+ // Count the vertical borders:
+ for (int i = 0; i < xmlXPathNodeSetGetLength(pXmlNodes); i += 2)
+ {
+ xmlNodePtr pStart = pXmlNodes->nodeTab[i];
+ xmlNodePtr pEnd = pXmlNodes->nodeTab[i + 1];
+ xmlChar* pStartY = xmlGetProp(pStart, BAD_CAST("y"));
+ xmlChar* pEndY = xmlGetProp(pEnd, BAD_CAST("y"));
+ sal_Int32 nStartY = o3tl::toInt32(reinterpret_cast<char const*>(pStartY));
+ sal_Int32 nEndY = o3tl::toInt32(reinterpret_cast<char const*>(pEndY));
+ if (nStartY == nEndY)
+ {
+ // Horizontal border.
+ continue;
+ }
+
+ ++nVerticalBorders;
+ }
+ xmlXPathFreeObject(pXmlObj);
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 6
+ // - Actual : 4
+ // i.e. the 2nd and 5th vertical border was missing.
+ CPPUNIT_ASSERT_EQUAL(6, nVerticalBorders);
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitTableMergedBorder)
+{
+ // Given a document with a split table, first row in frame 1 has merged cells:
+ createSwDoc("split-table-merged-border.odt");
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ SwDocShell* pShell = pTextDoc->GetDocShell();
+
+ // When rendering that document:
+ std::shared_ptr<GDIMetaFile> xMetaFile = pShell->GetPreviewMetaFile();
+
+ // Then make sure that the master table has a bottom border with the correct widths:
+ MetafileXmlDump aDumper;
+ xmlDocUniquePtr pXmlDoc = dumpAndParse(aDumper, *xMetaFile);
+ xmlXPathObjectPtr pXmlObj = getXPathNode(pXmlDoc, "//polyline[@style='solid']/point"_ostr);
+ xmlNodeSetPtr pXmlNodes = pXmlObj->nodesetval;
+ std::set<int> aHorizontalBorderStarts;
+ std::set<int> aHorizontalBorderEnds;
+ // Collect the horizontal borders:
+ for (int i = 0; i < xmlXPathNodeSetGetLength(pXmlNodes); i += 2)
+ {
+ xmlNodePtr pStart = pXmlNodes->nodeTab[i];
+ xmlNodePtr pEnd = pXmlNodes->nodeTab[i + 1];
+ xmlChar* pStartY = xmlGetProp(pStart, BAD_CAST("y"));
+ xmlChar* pEndY = xmlGetProp(pEnd, BAD_CAST("y"));
+ sal_Int32 nStartY = o3tl::toInt32(reinterpret_cast<char const*>(pStartY));
+ sal_Int32 nEndY = o3tl::toInt32(reinterpret_cast<char const*>(pEndY));
+ if (nStartY != nEndY)
+ {
+ // Vertical border.
+ continue;
+ }
+
+ xmlChar* pStartX = xmlGetProp(pStart, BAD_CAST("x"));
+ xmlChar* pEndX = xmlGetProp(pEnd, BAD_CAST("x"));
+ sal_Int32 nStartX = o3tl::toInt32(reinterpret_cast<char const*>(pStartX));
+ sal_Int32 nEndX = o3tl::toInt32(reinterpret_cast<char const*>(pEndX));
+ aHorizontalBorderStarts.insert(nStartX);
+ aHorizontalBorderEnds.insert(nEndX);
+ }
+ xmlXPathFreeObject(pXmlObj);
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), aHorizontalBorderStarts.size());
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 2
+ // - Actual : 3
+ // i.e. the frame 1 bottom border ended sooner than expected, resulting in a buggy, partial
+ // bottom border.
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), aHorizontalBorderEnds.size());
+}
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/layout/sortedobjs.cxx b/sw/qa/core/layout/sortedobjs.cxx
new file mode 100644
index 0000000000..471dd48a8b
--- /dev/null
+++ b/sw/qa/core/layout/sortedobjs.cxx
@@ -0,0 +1,35 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <swmodeltestbase.hxx>
+
+namespace
+{
+/// Covers sw/source/core/layout/sortedobjs.cxx fixes.
+class Test : public SwModelTestBase
+{
+public:
+ Test()
+ : SwModelTestBase("/sw/qa/core/layout/data/")
+ {
+ }
+};
+
+CPPUNIT_TEST_FIXTURE(Test, testSortedObjsInsert)
+{
+ // Given a document with two anchored objects, one is a fly frame in the header and the other is
+ // a group shape where one inner shape has an associated fly frame:
+ // When importing that document:
+ // Then make sure that we don't try to do binary search on an unsorted container that leads to a
+ // crash in debug builds:
+ createSwDoc("sorted-objs-insert.docx");
+}
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/layout/tabfrm.cxx b/sw/qa/core/layout/tabfrm.cxx
new file mode 100644
index 0000000000..9357fc2df1
--- /dev/null
+++ b/sw/qa/core/layout/tabfrm.cxx
@@ -0,0 +1,204 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <swmodeltestbase.hxx>
+
+#include <IDocumentLayoutAccess.hxx>
+#include <rootfrm.hxx>
+#include <pagefrm.hxx>
+#include <tabfrm.hxx>
+#include <sortedobjs.hxx>
+#include <anchoredobject.hxx>
+#include <flyfrm.hxx>
+#include <flyfrms.hxx>
+
+namespace
+{
+/// Covers sw/source/core/layout/tabfrm.cxx fixes.
+class Test : public SwModelTestBase
+{
+public:
+ Test()
+ : SwModelTestBase("/sw/qa/core/layout/data/")
+ {
+ }
+};
+
+CPPUNIT_TEST_FIXTURE(Test, testTablePrintAreaLeft)
+{
+ // Given a document with a header containing an image, and also with an overlapping table:
+ createSwDoc("table-print-area-left.docx");
+
+ // When laying out that document & parsing the left margin of the table:
+ SwTwips nTablePrintLeft = parseDump("//tab/infos/prtBounds"_ostr, "left"_ostr).toInt32();
+
+ // Then make sure it has ~no left margin:
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 5
+ // - Actual : 10646
+ // i.e. the table was shifted outside the page, was invisible.
+ CPPUNIT_ASSERT_EQUAL(static_cast<SwTwips>(5), nTablePrintLeft);
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testTableMissingJoin)
+{
+ // Given a document with a table on page 2:
+ // When laying out that document:
+ createSwDoc("table-missing-join.docx");
+
+ // Then make sure that the table fits page 2:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = pLayout->Lower()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage1);
+ auto pPage2 = pPage1->GetNext()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage2);
+ SwFrame* pBody = pPage2->FindBodyCont();
+ auto pTab = pBody->GetLower()->DynCastTabFrame();
+ // Without the accompanying fix in place, this test would have failed, the table continued on
+ // page 3.
+ CPPUNIT_ASSERT(!pTab->HasFollow());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyInInlineTable)
+{
+ // Outer inline table on pages 1 -> 2 -> 3, inner floating table on pages 2 -> 3:
+ // When laying out that document:
+ createSwDoc("floattable-in-inlinetable.docx");
+
+ // Then make sure that the outer table is not missing on page 3:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = pLayout->Lower()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage1);
+ {
+ SwFrame* pBody = pPage1->FindBodyCont();
+ auto pTab = pBody->GetLower()->DynCastTabFrame();
+ CPPUNIT_ASSERT(!pTab->GetPrecede());
+ CPPUNIT_ASSERT(pTab->GetFollow());
+ }
+ auto pPage2 = pPage1->GetNext()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage2);
+ {
+ SwFrame* pBody = pPage2->FindBodyCont();
+ auto pTab = pBody->GetLower()->DynCastTabFrame();
+ CPPUNIT_ASSERT(pTab->GetPrecede());
+ // Without the accompanying fix in place, this test would have failed, the outer table was
+ // missing on page 3.
+ CPPUNIT_ASSERT(pTab->GetFollow());
+ }
+ auto pPage3 = pPage2->GetNext()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage3);
+ {
+ SwFrame* pBody = pPage3->FindBodyCont();
+ auto pTab = pBody->GetLower()->DynCastTabFrame();
+ CPPUNIT_ASSERT(pTab->GetPrecede());
+ CPPUNIT_ASSERT(!pTab->GetFollow());
+ }
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyNestedRowSpan)
+{
+ // Given a document with nested floating tables and a row with rowspan cells at page boundary:
+ // When loading that document:
+ // Without the accompanying fix in place, this test would have resulted in a layout loop.
+ createSwDoc("floattable-nested-rowspan.docx");
+
+ // Then make sure the resulting page count matches Word:
+ CPPUNIT_ASSERT_EQUAL(6, getPages());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyTableJoin)
+{
+ // Given a document with a multi-page floating table:
+ // When loading this document:
+ createSwDoc("floattable-table-join.docx");
+
+ // Then make sure this document doesn't crash the layout and has a floating table split on 4
+ // pages:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = pLayout->Lower()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage1);
+ CPPUNIT_ASSERT(pPage1->GetSortedObjs());
+ {
+ SwSortedObjs& rPageObjs = *pPage1->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPageObjs.size());
+ auto pFly = rPageObjs[0]->DynCastFlyFrame()->DynCastFlyAtContentFrame();
+ CPPUNIT_ASSERT(pFly);
+ // Start of the chain.
+ CPPUNIT_ASSERT(!pFly->GetPrecede());
+ CPPUNIT_ASSERT(pFly->HasFollow());
+ }
+ auto pPage2 = pPage1->GetNext()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage2);
+ CPPUNIT_ASSERT(pPage2->GetSortedObjs());
+ {
+ SwSortedObjs& rPageObjs = *pPage2->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPageObjs.size());
+ auto pFly = rPageObjs[0]->DynCastFlyFrame()->DynCastFlyAtContentFrame();
+ CPPUNIT_ASSERT(pFly);
+ CPPUNIT_ASSERT(pFly->GetPrecede());
+ CPPUNIT_ASSERT(pFly->HasFollow());
+ }
+ auto pPage3 = pPage2->GetNext()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage3);
+ CPPUNIT_ASSERT(pPage3->GetSortedObjs());
+ {
+ SwSortedObjs& rPageObjs = *pPage3->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPageObjs.size());
+ auto pFly = rPageObjs[0]->DynCastFlyFrame()->DynCastFlyAtContentFrame();
+ CPPUNIT_ASSERT(pFly);
+ CPPUNIT_ASSERT(pFly->GetPrecede());
+ CPPUNIT_ASSERT(pFly->HasFollow());
+ }
+ auto pPage4 = pPage3->GetNext()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage4);
+ CPPUNIT_ASSERT(pPage4->GetSortedObjs());
+ SwSortedObjs& rPageObjs = *pPage4->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPageObjs.size());
+ auto pFly = rPageObjs[0]->DynCastFlyFrame()->DynCastFlyAtContentFrame();
+ CPPUNIT_ASSERT(pFly);
+ // End of the chain.
+ CPPUNIT_ASSERT(pFly->GetPrecede());
+ CPPUNIT_ASSERT(!pFly->HasFollow());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyWrappedByTable)
+{
+ // Given a document with a floating table, wrapped by an inline table:
+ // When laying out the document:
+ createSwDoc("floattable-wrapped-by-table.docx");
+
+ // Then make sure the inline table wraps around the floating table:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage = pLayout->Lower()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage);
+ // Get the top of the inline table, ignoring margins:
+ CPPUNIT_ASSERT(pPage->GetSortedObjs());
+ SwSortedObjs& rPageObjs = *pPage->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPageObjs.size());
+ auto pFly = rPageObjs[0]->DynCastFlyFrame()->DynCastFlyAtContentFrame();
+ CPPUNIT_ASSERT(pFly);
+ // Get the bottom of the floating table, ignoring margins:
+ SwTwips nFloatingBottom = pFly->getFrameArea().Top() + pFly->getFramePrintArea().Height();
+ SwFrame* pBody = pPage->FindBodyCont();
+ auto pTab = pBody->GetLower()->GetNext()->DynCastTabFrame();
+ SwTwips nInlineTop = pTab->getFrameArea().Top() + pTab->getFramePrintArea().Top();
+ // Make sure the inline table is on the right of the floating one, not below it:
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected less than: 7287
+ // - Actual : 7287
+ // i.e. the inline table was under the floating one, not on the right of it.
+ CPPUNIT_ASSERT_LESS(nFloatingBottom, nInlineTop);
+}
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/layout/trvlfrm.cxx b/sw/qa/core/layout/trvlfrm.cxx
new file mode 100644
index 0000000000..dc8ba54f4f
--- /dev/null
+++ b/sw/qa/core/layout/trvlfrm.cxx
@@ -0,0 +1,56 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <swmodeltestbase.hxx>
+
+#include <wrtsh.hxx>
+#include <docsh.hxx>
+#include <IDocumentLayoutAccess.hxx>
+#include <rootfrm.hxx>
+#include <node.hxx>
+
+namespace
+{
+/// Covers sw/source/core/layout/trvlfrm.cxx fixes.
+class Test : public SwModelTestBase
+{
+public:
+ Test()
+ : SwModelTestBase("/sw/qa/core/layout/data/")
+ {
+ }
+};
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyModelPositionForViewPointCorrection)
+{
+ // Given a 2 page floating table, 40% width, positioned on the left of the page:
+ createSwDoc("floattable-model-position-for-view-point-correction.docx");
+
+ // When clicking on the right side of the table:
+ SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
+ SwDoc* pDoc = getSwDocShell()->GetDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ SwFrame* pPage = pLayout->GetLower();
+ SwFrame* pBody = pPage->GetLower();
+ const SwRect& rBodyRect = pBody->getFrameArea();
+ // 1 line below the top center of the body frame.
+ Point aDocPos(rBodyRect.Left() + rBodyRect.Width() / 2, rBodyRect.Top() + 220);
+ bool bOnlyText = false;
+ pWrtShell->CallSetCursor(&aDocPos, bOnlyText);
+
+ // Then make sure the cursor gets inside the table, and doesn't go to the anchor on page 2:
+ SwCursor& rCursor = pWrtShell->GetCurrentShellCursor();
+ SwTableNode* pTableNode = rCursor.GetPointNode().FindTableNode();
+ // Without the accompanying fix in place, this test would have failed, the cursor was in the
+ // anchor text node, not inside the split fly.
+ CPPUNIT_ASSERT(pTableNode);
+}
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/macros-test.cxx b/sw/qa/core/macros-test.cxx
new file mode 100644
index 0000000000..19e2c81a06
--- /dev/null
+++ b/sw/qa/core/macros-test.cxx
@@ -0,0 +1,542 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/config.h>
+
+#include <string_view>
+
+#include <test/unoapi_test.hxx>
+
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/container/XIndexContainer.hpp>
+#include <com/sun/star/container/XNameContainer.hpp>
+#include <com/sun/star/document/XEmbeddedScripts.hpp>
+#include <com/sun/star/drawing/XControlShape.hpp>
+#include <com/sun/star/drawing/XDrawPageSupplier.hpp>
+#include <com/sun/star/drawing/XShapeGrouper.hpp>
+#include <com/sun/star/drawing/XShape.hpp>
+#include <com/sun/star/drawing/XShapes.hpp>
+#include <com/sun/star/form/XForm.hpp>
+#include <com/sun/star/form/XFormsSupplier.hpp>
+#include <com/sun/star/frame/Desktop.hpp>
+#include <com/sun/star/frame/XStorable.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/script/XLibraryContainer.hpp>
+#include <com/sun/star/script/XLibraryContainerPassword.hpp>
+#include <com/sun/star/text/TextContentAnchorType.hpp>
+#include <com/sun/star/text/XTextDocument.hpp>
+#include <com/sun/star/util/SearchAlgorithms2.hpp>
+#include <com/sun/star/util/SearchFlags.hpp>
+
+#include <i18nutil/searchopt.hxx>
+#include <comphelper/processfactory.hxx>
+#include <comphelper/propertysequence.hxx>
+#include <comphelper/scopeguard.hxx>
+
+#include <unotools/tempfile.hxx>
+
+#include <unocrsr.hxx>
+#include <ndtxt.hxx>
+#include <doc.hxx>
+#include <IDocumentLayoutAccess.hxx>
+#include <IDocumentMarkAccess.hxx>
+#include <IDocumentUndoRedo.hxx>
+#include <IDocumentContentOperations.hxx>
+#include <docsh.hxx>
+#include <unotxdoc.hxx>
+
+typedef tools::SvRef<SwDocShell> SwDocShellRef;
+
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::uno;
+
+/* Implementation of Macros test */
+
+class SwMacrosTest : public UnoApiTest
+{
+public:
+ SwMacrosTest();
+
+ void testVba();
+ void testModernVBADelete();
+ void testBookmarkDeleteAndJoin();
+ void testBookmarkDeleteTdf90816();
+ void testControlShapeGrouping();
+ void testTdf151846();
+ void testFdo55289();
+ void testFdo68983();
+ void testFdo87530();
+ void testFindReplace();
+
+ CPPUNIT_TEST_SUITE(SwMacrosTest);
+ CPPUNIT_TEST(testVba);
+ CPPUNIT_TEST(testModernVBADelete);
+ CPPUNIT_TEST(testBookmarkDeleteAndJoin);
+ CPPUNIT_TEST(testBookmarkDeleteTdf90816);
+ CPPUNIT_TEST(testControlShapeGrouping);
+ CPPUNIT_TEST(testTdf151846);
+ CPPUNIT_TEST(testFdo55289);
+ CPPUNIT_TEST(testFdo68983);
+ CPPUNIT_TEST(testFdo87530);
+ CPPUNIT_TEST(testFindReplace);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+void SwMacrosTest::testVba()
+{
+ TestMacroInfo testInfo[] = {
+ {
+ OUString("testVBA.docm"),
+ OUString("vnd.sun.Star.script:Project.ThisDocument.testAll?language=Basic&location=document")
+ },
+ {
+ OUString("testModernVBA.docm"),
+ OUString("vnd.sun.Star.script:Project.ThisDocument.testAll?language=Basic&location=document")
+ },
+ {
+ OUString("testFind.docm"),
+ OUString("vnd.sun.Star.script:Project.Module1.testAll?language=Basic&location=document")
+ },
+ {
+ OUString("testDocumentRange.docm"),
+ OUString("vnd.sun.Star.script:Project.Module1.testAll?language=Basic&location=document")
+ },
+ /*{
+ OUString("testSelectionFind.docm"),
+ OUString("vnd.sun.Star.script:Project.Module1.testAll?language=Basic&location=document")
+ },
+ {
+ //current working tests here!
+
+ OUString("testFontColor.docm"),
+ OUString("vnd.sun.Star.script:Project.ThisDocument.testAll?language=Basic&location=document")
+ }
+ // TODO - make these pass in Writer
+ {
+ OUString("testSentences.docm"),
+ OUString("vnd.sun.Star.script:Project.ThisDocument.TestAll?language=Basic&location=document")
+ },
+ {
+ OUString("testWords.docm"),
+ OUString("vnd.sun.Star.script:Project.ThisDocument.TestAll?language=Basic&location=document")
+ },
+ {
+ OUString("testParagraphFormat.docm"),
+ OUString("vnd.sun.Star.script:Project.ThisDocument.TestAll?language=Basic&location=document")
+ },*/
+ {
+ OUString("testTables.docm"),
+ OUString("vnd.sun.Star.script:Project.ThisDocument.TestAll?language=Basic&location=document")
+ }
+
+ };
+ for (auto const & [ sFileBaseName, sMacroUrl ] : testInfo)
+ {
+ OUString sFileName("docm/" + sFileBaseName);
+ loadFromFile(sFileName);
+
+ uno::Any aRet = executeMacro(sMacroUrl);
+ OUString aStringRes;
+ CPPUNIT_ASSERT_MESSAGE(sFileName.toUtf8().getStr(), aRet >>= aStringRes);
+ CPPUNIT_ASSERT_EQUAL(OUString("OK"), aStringRes);
+ }
+}
+
+void SwMacrosTest::testModernVBADelete()
+{
+ TestMacroInfo testInfo =
+ {
+ OUString("testModernVBADelete.docm"),
+ OUString("vnd.sun.Star.script:Project.ThisDocument.testAll?language=Basic&location=document")
+ };
+
+ OUString sFileName("docm/" + testInfo.sFileBaseName);
+ loadFromFile(sFileName);
+
+ SwXTextDocument *const pTextDoc = dynamic_cast<SwXTextDocument *>(mxComponent.get());
+ SwDoc *const pDoc = pTextDoc->GetDocShell()->GetDoc();
+ pDoc->GetIDocumentUndoRedo().DoUndo(true);
+ CPPUNIT_ASSERT(!pDoc->GetIDocumentUndoRedo().GetUndoActionCount());
+
+ uno::Any aRet = executeMacro(testInfo.sMacroUrl);
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), pDoc->GetIDocumentUndoRedo().GetUndoActionCount());
+
+ OUString aStringRes;
+ CPPUNIT_ASSERT(aRet >>= aStringRes);
+ CPPUNIT_ASSERT_EQUAL(OUString("OK"), aStringRes);
+}
+
+void SwMacrosTest::testBookmarkDeleteAndJoin()
+{
+ rtl::Reference<SwDoc> const pDoc(new SwDoc);
+ pDoc->GetIDocumentUndoRedo().DoUndo(true); // bug is in SwUndoDelete
+ SwNodeIndex aIdx(pDoc->GetNodes().GetEndOfContent(), -1);
+ SwPaM aPaM(aIdx);
+
+ IDocumentContentOperations & rIDCO(pDoc->getIDocumentContentOperations());
+ rIDCO.AppendTextNode(*aPaM.GetPoint());
+ rIDCO.InsertString(aPaM, "A");
+ rIDCO.AppendTextNode(*aPaM.GetPoint());
+ rIDCO.InsertString(aPaM, "A");
+ rIDCO.AppendTextNode(*aPaM.GetPoint());
+ aPaM.Move(fnMoveBackward, GoInNode);
+ aPaM.Move(fnMoveBackward, GoInNode);
+ aPaM.Move(fnMoveBackward, GoInContent);
+ aPaM.SetMark();
+ aPaM.Move(fnMoveForward, GoInDoc);
+ IDocumentMarkAccess & rIDMA = *pDoc->getIDocumentMarkAccess();
+ sw::mark::IMark *pMark =
+ rIDMA.makeMark(aPaM, "test", IDocumentMarkAccess::MarkType::BOOKMARK,
+ ::sw::mark::InsertMode::New);
+ CPPUNIT_ASSERT(pMark);
+ // select so pMark start position is on a node that is fully deleted
+ aPaM.Move(fnMoveBackward, GoInNode);
+ // must leave un-selected content in last node to get the bJoinPrev flag!
+ aPaM.Move(fnMoveBackward, GoInContent);
+ aPaM.Exchange();
+ aPaM.Move(fnMoveBackward, GoInDoc);
+ // delete
+ rIDCO.DeleteAndJoin(aPaM);
+
+ for (IDocumentMarkAccess::const_iterator_t i = rIDMA.getAllMarksBegin(); i != rIDMA.getAllMarksEnd(); ++i)
+ {
+ // problem was that the nContent was pointing at deleted node
+ CPPUNIT_ASSERT_EQUAL((*i)->GetMarkStart().GetContentNode(),
+ static_cast<const SwContentNode*>((*i)->GetMarkStart().GetNode().GetContentNode()));
+ }
+}
+
+void SwMacrosTest::testBookmarkDeleteTdf90816()
+{
+ rtl::Reference<SwDoc> const pDoc(new SwDoc);
+ pDoc->GetIDocumentUndoRedo().DoUndo(true); // bug is in SwUndoDelete
+ SwNodeIndex aIdx(pDoc->GetNodes().GetEndOfContent(), -1);
+ SwPaM aPaM(aIdx);
+
+ IDocumentContentOperations & rIDCO(pDoc->getIDocumentContentOperations());
+ rIDCO.AppendTextNode(*aPaM.GetPoint());
+ rIDCO.InsertString(aPaM, "ABC");
+ aPaM.Move(fnMoveBackward, GoInContent);
+ aPaM.SetMark();
+ aPaM.Move(fnMoveBackward, GoInContent);
+ IDocumentMarkAccess & rIDMA = *pDoc->getIDocumentMarkAccess();
+ sw::mark::IMark *pMark =
+ rIDMA.makeMark(aPaM, "test", IDocumentMarkAccess::MarkType::BOOKMARK,
+ ::sw::mark::InsertMode::New);
+ CPPUNIT_ASSERT(pMark);
+
+ // delete the same selection as the bookmark
+ rIDCO.DeleteAndJoin(aPaM);
+
+ // bookmark still there?
+ auto iter = rIDMA.getAllMarksBegin();
+ CPPUNIT_ASSERT_MESSAGE("the bookmark was deleted",
+ iter != rIDMA.getAllMarksEnd());
+ CPPUNIT_ASSERT_EQUAL((*iter)->GetMarkPos(), *aPaM.Start());
+ CPPUNIT_ASSERT_EQUAL((*iter)->GetOtherMarkPos(), *aPaM.End());
+}
+
+void SwMacrosTest::testControlShapeGrouping()
+{
+ loadFromFile(u"odt/testControlShapeGrouping.odt");
+
+ uno::Reference<frame::XModel> const xModel(mxComponent, UNO_QUERY);
+ CPPUNIT_ASSERT(xModel.is());
+ uno::Reference<lang::XMultiServiceFactory> xFactory(xModel, UNO_QUERY);
+ uno::Reference<drawing::XDrawPageSupplier> const xDPS(xModel, UNO_QUERY);
+ uno::Reference<drawing::XDrawPage> const xDP = xDPS->getDrawPage();
+ CPPUNIT_ASSERT(xDP.is());
+ uno::Reference<drawing::XShapes> const xDPShapes = xDP;
+ CPPUNIT_ASSERT(xDPShapes.is());
+ uno::Reference<drawing::XShapes> const xShapes(getMultiServiceFactory()->createInstance("com.sun.star.drawing.ShapeCollection"),
+ UNO_QUERY);
+ CPPUNIT_ASSERT(xShapes.is());
+ uno::Reference<container::XIndexAccess> xShapesIC = xShapes;
+ CPPUNIT_ASSERT(xShapesIC.is());
+
+ // uno::Reference<beans::XPropertySet> xFormProps(xForm, UNO_QUERY);
+ // xFormProps->setPropertyValue("Name", makeAny("aForm"));
+ uno::Reference<form::XFormsSupplier> const xFS(xDP, UNO_QUERY);
+ CPPUNIT_ASSERT(xFS.is());
+ uno::Reference<container::XIndexContainer> const xForms(xFS->getForms(), UNO_QUERY);
+ CPPUNIT_ASSERT(xForms.is());
+ uno::Reference<form::XForm> xForm(xForms->getByIndex(0), UNO_QUERY);
+ CPPUNIT_ASSERT(xForm.is());
+ uno::Reference<container::XNameContainer> xFormNC(xForm, UNO_QUERY);
+
+ uno::Reference<drawing::XControlShape> const xDateShape(
+ xFactory->createInstance("com.sun.star.drawing.ControlShape"),
+ UNO_QUERY);
+ uno::Reference<awt::XControlModel> const xDateControlModel(
+ xFactory->createInstance("com.sun.star.form.component.DateField"),
+ UNO_QUERY);
+ xDateShape->setControl(xDateControlModel);
+ uno::Reference<beans::XPropertySet> xDateShapeProps(xDateShape, UNO_QUERY);
+ xDateShapeProps->setPropertyValue("AnchorType", Any(text::TextContentAnchorType_AT_PARAGRAPH));
+
+ uno::Reference<drawing::XControlShape> const xTimeShape(
+ xFactory->createInstance("com.sun.star.drawing.ControlShape"),
+ UNO_QUERY);
+ uno::Reference<awt::XControlModel> const xTimeControlModel(
+ xFactory->createInstance("com.sun.star.form.component.TimeField"),
+ UNO_QUERY);
+ xTimeShape->setControl(xTimeControlModel);
+ uno::Reference<beans::XPropertySet> xTimeShapeProps(xTimeShape, UNO_QUERY);
+ xTimeShapeProps->setPropertyValue("AnchorType", Any(text::TextContentAnchorType_AT_PARAGRAPH));
+
+ xFormNC->insertByName("aDateCntrl", Any(xDateControlModel));
+ xDPShapes->add(xDateShape);
+ xFormNC->insertByName("aTimeCntrl", Any(xTimeControlModel));
+ xDPShapes->add(xTimeShape);
+
+ xShapes->add(xDateShape);
+ xShapes->add(xTimeShape);
+ uno::Reference<drawing::XShapeGrouper> const xDPGrouper(xDP, UNO_QUERY);
+ CPPUNIT_ASSERT(xDPGrouper.is());
+ uno::Reference<drawing::XShapeGroup> xGroup(xDPGrouper->group(xShapes));
+ CPPUNIT_ASSERT(xGroup.is());
+
+#if 0
+ uno::Reference<container::XIndexAccess> xGroupIC(xGroup, UNO_QUERY);
+ CPPUNIT_ASSERT(xDateShape->getControl().is());
+ CPPUNIT_ASSERT_EQUAL(xDateShape->getControl(), xDateControlModel);
+ CPPUNIT_ASSERT(xTimeShape->getControl().is());
+ CPPUNIT_ASSERT_EQUAL(xTimeShape->getControl(), xTimeControlModel);
+
+ {
+ uno::Reference< uno::XInterface > xDI;
+ xGroupIC->getByIndex(0) >>= xDI;
+ CPPUNIT_ASSERT(xDI.is());
+ uno::Reference< drawing::XControlShape > xDS(xDI, UNO_QUERY);
+ CPPUNIT_ASSERT(xDS.is());
+ CPPUNIT_ASSERT_EQUAL(xDS->getControl(), xDateControlModel);
+
+ uno::Reference< uno::XInterface > xTI;
+ xGroupIC->getByIndex(1) >>= xTI;
+ CPPUNIT_ASSERT(xTI.is());
+ uno::Reference< drawing::XControlShape > xTS(xTI, UNO_QUERY);
+ CPPUNIT_ASSERT(xTS.is());
+ CPPUNIT_ASSERT_EQUAL(xTS->getControl(), xTimeControlModel);
+ }
+ {
+ uno::Reference< uno::XInterface > xDI;
+ xShapesIC->getByIndex(0) >>= xDI;
+ CPPUNIT_ASSERT(xDI.is());
+ uno::Reference< drawing::XControlShape > xDS(xDI, UNO_QUERY);
+ CPPUNIT_ASSERT(xDS.is());
+ CPPUNIT_ASSERT_EQUAL(xDS->getControl(), xDateControlModel);
+
+ uno::Reference< uno::XInterface > xTI;
+ xShapesIC->getByIndex(1) >>= xTI;
+ CPPUNIT_ASSERT(xTI.is());
+ uno::Reference< drawing::XControlShape > xTS(xTI, UNO_QUERY);
+ CPPUNIT_ASSERT(xTS.is());
+ CPPUNIT_ASSERT_EQUAL(xTS->getControl(), xTimeControlModel);
+ }
+#endif
+}
+
+void SwMacrosTest::testTdf151846()
+{
+ loadFromFile(u"odt/tdf151846.odt");
+
+ // Without the fix in place, this test would have failed with
+ // Property or method not found: createDiagramByDataSource.
+ executeMacro("vnd.sun.Star.script:Standard.Module1.Main?language=Basic&location=document");
+
+ uno::Reference<text::XTextEmbeddedObjectsSupplier> xTEOSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XNameAccess> xAccess(xTEOSupplier->getEmbeddedObjects());
+ uno::Sequence<OUString> aSeq(xAccess->getElementNames());
+
+ // Check number of embedded objects.
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), aSeq.getLength());
+}
+
+void SwMacrosTest::testFdo55289()
+{
+ SwDoc* const pDoc = new SwDoc;
+ SwDocShellRef pDocShell = new SwDocShell(*pDoc, SfxObjectCreateMode::EMBEDDED);
+ // this needs to run with no layout to tickle the bugs in the special
+ // cases in SwXShape re-anchoring
+ assert(!pDoc->getIDocumentLayoutAccess().GetCurrentLayout());
+
+ uno::Reference<frame::XModel> const xModel(pDocShell->GetModel());
+ uno::Reference<drawing::XDrawPageSupplier> const xDPS(xModel, UNO_QUERY);
+ uno::Reference<drawing::XShapes> const xShapes = xDPS->getDrawPage();
+ uno::Reference<beans::XPropertySet> const xShape(
+ uno::Reference<lang::XMultiServiceFactory>(xModel, UNO_QUERY_THROW)->
+ createInstance("com.sun.star.drawing.GraphicObjectShape"),
+ UNO_QUERY);
+ xShape->setPropertyValue("AnchorType",
+ Any(text::TextContentAnchorType_AT_PAGE));
+ xShapes->add(uno::Reference<drawing::XShape>(xShape, UNO_QUERY));
+ xShape->setPropertyValue("AnchorType",
+ Any(text::TextContentAnchorType_AT_CHARACTER));
+ xShape->setPropertyValue("AnchorType",
+ Any(text::TextContentAnchorType_AS_CHARACTER));
+ xShape->setPropertyValue("AnchorType",
+ Any(text::TextContentAnchorType_AT_CHARACTER));
+ xShape->setPropertyValue("AnchorType",
+ Any(text::TextContentAnchorType_AS_CHARACTER));
+ uno::Reference<text::XTextRange> const xEnd =
+ uno::Reference<text::XTextDocument>(xModel, UNO_QUERY_THROW)->getText()->getEnd();
+ uno::Reference<text::XTextContent> const xShapeContent(xShape, UNO_QUERY);
+ xShapeContent->attach(xEnd);
+ pDocShell->DoClose();
+}
+
+void SwMacrosTest::testFdo68983()
+{
+ loadFromFile(u"odt/fdo68983.odt");
+ Reference< frame::XStorable > xDocStorable(mxComponent, UNO_QUERY_THROW);
+
+ saveAndReload("writer8");
+
+ // check that password-protected library survived store and re-load
+ Reference<document::XEmbeddedScripts> xDocScr(mxComponent, UNO_QUERY_THROW);
+ Reference<script::XStorageBasedLibraryContainer> xStorBasLib(xDocScr->getBasicLibraries());
+ Reference<script::XLibraryContainer> xBasLib(xStorBasLib, UNO_QUERY_THROW);
+ Reference<script::XLibraryContainerPassword> xBasLibPwd(xStorBasLib, UNO_QUERY_THROW);
+ CPPUNIT_ASSERT(xBasLibPwd->isLibraryPasswordProtected("Library1"));
+ CPPUNIT_ASSERT(xBasLibPwd->verifyLibraryPassword("Library1", "foo"));
+ xBasLib->loadLibrary("Library1");
+ CPPUNIT_ASSERT(xBasLib->isLibraryLoaded("Library1"));
+}
+
+void SwMacrosTest::testFdo87530()
+{
+ mxComponent = loadFromDesktop("private:factory/swriter", "com.sun.star.text.TextDocument");
+
+ {
+ // insert initial password protected library
+ Reference<document::XEmbeddedScripts> xDocScr(mxComponent, UNO_QUERY_THROW);
+ Reference<script::XStorageBasedLibraryContainer> xStorBasLib(xDocScr->getBasicLibraries());
+ Reference<script::XLibraryContainer> xBasLib(xStorBasLib, UNO_QUERY_THROW);
+ Reference<script::XLibraryContainerPassword> xBasLibPwd(xStorBasLib, UNO_QUERY_THROW);
+ Reference<container::XNameContainer> xLibrary(xBasLib->createLibrary("BarLibrary"));
+ xLibrary->insertByName("BarModule",
+ uno::Any(OUString("Sub Main\nEnd Sub\n")));
+ xBasLibPwd->changeLibraryPassword("BarLibrary", "", "foo");
+ }
+
+ saveAndReload("writer8");
+
+ {
+ // check that password-protected library survived store and re-load
+ Reference<document::XEmbeddedScripts> xDocScr(mxComponent, UNO_QUERY_THROW);
+ Reference<script::XStorageBasedLibraryContainer> xStorBasLib(xDocScr->getBasicLibraries());
+ Reference<script::XLibraryContainer> xBasLib(xStorBasLib, UNO_QUERY_THROW);
+ Reference<script::XLibraryContainerPassword> xBasLibPwd(xStorBasLib, UNO_QUERY_THROW);
+ CPPUNIT_ASSERT(xBasLibPwd->isLibraryPasswordProtected("BarLibrary"));
+ CPPUNIT_ASSERT(xBasLibPwd->verifyLibraryPassword("BarLibrary", "foo"));
+ xBasLib->loadLibrary("BarLibrary");
+ CPPUNIT_ASSERT(xBasLib->isLibraryLoaded("BarLibrary"));
+ Reference<container::XNameContainer> xLibrary(xBasLib->getByName("BarLibrary"), UNO_QUERY);
+ Any module(xLibrary->getByName("BarModule"));
+ CPPUNIT_ASSERT_EQUAL(OUString("Sub Main\nEnd Sub\n"), module.get<OUString>());
+
+ // add a second module now - tdf#87530 happened here
+ Reference<container::XNameContainer> xFooLib(xBasLib->createLibrary("FooLibrary"));
+ xFooLib->insertByName("FooModule",
+ uno::Any(OUString("Sub Main\nEnd Sub\n")));
+ xBasLibPwd->changeLibraryPassword("FooLibrary", "", "foo");
+ }
+
+ saveAndReload("writer8");
+
+ // check that password-protected library survived store and re-load
+ Reference<document::XEmbeddedScripts> xDocScr(mxComponent, UNO_QUERY_THROW);
+ Reference<script::XStorageBasedLibraryContainer> xStorBasLib(xDocScr->getBasicLibraries());
+ Reference<script::XLibraryContainer> xBasLib(xStorBasLib, UNO_QUERY_THROW);
+ Reference<script::XLibraryContainerPassword> xBasLibPwd(xStorBasLib, UNO_QUERY_THROW);
+ CPPUNIT_ASSERT(xBasLibPwd->isLibraryPasswordProtected("FooLibrary"));
+ CPPUNIT_ASSERT(xBasLibPwd->verifyLibraryPassword("FooLibrary", "foo"));
+ xBasLib->loadLibrary("FooLibrary");
+ CPPUNIT_ASSERT(xBasLib->isLibraryLoaded("FooLibrary"));
+ Reference<container::XNameContainer> xLibrary(xBasLib->getByName("FooLibrary"), UNO_QUERY);
+ Any module(xLibrary->getByName("FooModule"));
+ CPPUNIT_ASSERT_EQUAL(OUString("Sub Main\nEnd Sub\n"), module.get<OUString>());
+}
+
+
+void SwMacrosTest::testFindReplace()
+{
+ // we need a full document with view and layout etc. because ::GetNode()
+ mxComponent =
+ loadFromDesktop("private:factory/swriter", "com.sun.star.text.TextDocument");
+
+ SwXTextDocument *const pTextDoc = dynamic_cast<SwXTextDocument *>(mxComponent.get());
+ CPPUNIT_ASSERT(pTextDoc);
+ SwDoc *const pDoc = pTextDoc->GetDocShell()->GetDoc();
+ SwNodeIndex aIdx(pDoc->GetNodes().GetEndOfContent(), -1);
+ // use a UnoCursor so it will be corrected when deleting nodes
+ auto pPaM(pDoc->CreateUnoCursor(SwPosition(aIdx)));
+
+ IDocumentContentOperations & rIDCO(pDoc->getIDocumentContentOperations());
+ rIDCO.InsertString(*pPaM, "foo");
+ rIDCO.AppendTextNode(*pPaM->GetPoint());
+ rIDCO.InsertString(*pPaM, "bar");
+ rIDCO.AppendTextNode(*pPaM->GetPoint());
+ rIDCO.InsertString(*pPaM, "baz");
+ pPaM->Move(fnMoveBackward, GoInDoc);
+
+ bool bCancel(false);
+ i18nutil::SearchOptions2 opts(
+ css::util::SearchFlags::LEV_RELAXED,
+ "$",
+ "",
+ lang::Locale("en", "US", ""),
+ 2,
+ 2,
+ 2,
+ TransliterationFlags::IGNORE_CASE | TransliterationFlags::IGNORE_WIDTH |
+ TransliterationFlags::IGNORE_KASHIDA_CTL | TransliterationFlags::IGNORE_DIACRITICS_CTL,
+ util::SearchAlgorithms2::REGEXP,
+ '\\');
+
+ // find newline on 1st paragraph
+ bool bFound = pPaM->Find_Text(
+ opts, false, SwDocPositions::Curr, SwDocPositions::End, bCancel, FindRanges::InBody);
+ CPPUNIT_ASSERT(bFound);
+ CPPUNIT_ASSERT(pPaM->HasMark());
+ CPPUNIT_ASSERT(pPaM->GetPoint()->GetNode() != pPaM->GetMark()->GetNode());
+ CPPUNIT_ASSERT_EQUAL(OUString(OUStringChar(CH_TXTATR_NEWLINE)), pPaM->GetText());
+
+ // now do another Find, inside the selection from the first Find
+// opts.searchFlags = 71680;
+ bFound = pPaM->Find_Text(
+ opts, false, SwDocPositions::Curr, SwDocPositions::End, bCancel, FindRanges::InSel);
+ CPPUNIT_ASSERT(bFound);
+ CPPUNIT_ASSERT(pPaM->HasMark());
+ CPPUNIT_ASSERT(pPaM->GetPoint()->GetNode() != pPaM->GetMark()->GetNode());
+ CPPUNIT_ASSERT_EQUAL(OUString(OUStringChar(CH_TXTATR_NEWLINE)), pPaM->GetText());
+
+ rIDCO.ReplaceRange(*pPaM, " ", true);
+
+ pPaM->DeleteMark();
+ pPaM->Move(fnMoveBackward, GoInDoc);
+
+ // problem was that after the 2nd Find, the wrong newline was selected
+ CPPUNIT_ASSERT_EQUAL(OUString("foo bar"),
+ pPaM->Start()->GetNode().GetTextNode()->GetText());
+ pPaM->Move(fnMoveForward, GoInNode);
+ CPPUNIT_ASSERT_EQUAL(OUString("baz"),
+ pPaM->End()->GetNode().GetTextNode()->GetText());
+}
+
+SwMacrosTest::SwMacrosTest()
+ : UnoApiTest("/sw/qa/core/data/")
+{
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(SwMacrosTest);
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/objectpositioning/data/bottom-margin-with-footer.docx b/sw/qa/core/objectpositioning/data/bottom-margin-with-footer.docx
new file mode 100644
index 0000000000..bb48ae4a74
--- /dev/null
+++ b/sw/qa/core/objectpositioning/data/bottom-margin-with-footer.docx
Binary files differ
diff --git a/sw/qa/core/objectpositioning/data/floattable-follow-on-wrong-page.odt b/sw/qa/core/objectpositioning/data/floattable-follow-on-wrong-page.odt
new file mode 100644
index 0000000000..6401747fd9
--- /dev/null
+++ b/sw/qa/core/objectpositioning/data/floattable-follow-on-wrong-page.odt
Binary files differ
diff --git a/sw/qa/core/objectpositioning/data/floattable-overlap-cell.docx b/sw/qa/core/objectpositioning/data/floattable-overlap-cell.docx
new file mode 100644
index 0000000000..50ec605ed7
--- /dev/null
+++ b/sw/qa/core/objectpositioning/data/floattable-overlap-cell.docx
Binary files differ
diff --git a/sw/qa/core/objectpositioning/data/floattable-tbl-overlap.docx b/sw/qa/core/objectpositioning/data/floattable-tbl-overlap.docx
new file mode 100644
index 0000000000..b5b23931a2
--- /dev/null
+++ b/sw/qa/core/objectpositioning/data/floattable-tbl-overlap.docx
Binary files differ
diff --git a/sw/qa/core/objectpositioning/data/floattable-vert-orient-top.odt b/sw/qa/core/objectpositioning/data/floattable-vert-orient-top.odt
new file mode 100644
index 0000000000..b10f0b7188
--- /dev/null
+++ b/sw/qa/core/objectpositioning/data/floattable-vert-orient-top.odt
Binary files differ
diff --git a/sw/qa/core/objectpositioning/data/inside-outside-vert-align.docx b/sw/qa/core/objectpositioning/data/inside-outside-vert-align.docx
new file mode 100644
index 0000000000..1308e1f6a8
--- /dev/null
+++ b/sw/qa/core/objectpositioning/data/inside-outside-vert-align.docx
Binary files differ
diff --git a/sw/qa/core/objectpositioning/data/overlap-crash.odt b/sw/qa/core/objectpositioning/data/overlap-crash.odt
new file mode 100644
index 0000000000..a756c85dd6
--- /dev/null
+++ b/sw/qa/core/objectpositioning/data/overlap-crash.odt
Binary files differ
diff --git a/sw/qa/core/objectpositioning/data/vml-vertical-alignment.docx b/sw/qa/core/objectpositioning/data/vml-vertical-alignment.docx
new file mode 100644
index 0000000000..36ed5fdfb0
--- /dev/null
+++ b/sw/qa/core/objectpositioning/data/vml-vertical-alignment.docx
Binary files differ
diff --git a/sw/qa/core/objectpositioning/objectpositioning.cxx b/sw/qa/core/objectpositioning/objectpositioning.cxx
new file mode 100644
index 0000000000..bf560cbdaf
--- /dev/null
+++ b/sw/qa/core/objectpositioning/objectpositioning.cxx
@@ -0,0 +1,411 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <swmodeltestbase.hxx>
+
+#include <com/sun/star/text/VertOrientation.hpp>
+#include <com/sun/star/drawing/XDrawPageSupplier.hpp>
+
+#include <editeng/ulspitem.hxx>
+
+#include <wrtsh.hxx>
+#include <unotxdoc.hxx>
+#include <docsh.hxx>
+#include <IDocumentLayoutAccess.hxx>
+#include <rootfrm.hxx>
+#include <pagefrm.hxx>
+#include <sortedobjs.hxx>
+#include <anchoredobject.hxx>
+#include <flyfrm.hxx>
+#include <frmatr.hxx>
+
+namespace
+{
+/// Covers sw/source/core/objectpositioning/ fixes.
+class Test : public SwModelTestBase
+{
+public:
+ Test()
+ : SwModelTestBase("/sw/qa/core/objectpositioning/data/")
+ {
+ }
+};
+
+CPPUNIT_TEST_FIXTURE(Test, testOverlapCrash)
+{
+ // Load a document with 2 images.
+ createSwDoc("overlap-crash.odt");
+
+ // Change their anchor type to to-char.
+ uno::Reference<beans::XPropertySet> xShape1(getShape(1), uno::UNO_QUERY);
+ xShape1->setPropertyValue("AnchorType", uno::Any(text::TextContentAnchorType_AT_CHARACTER));
+ uno::Reference<beans::XPropertySet> xShape2(getShape(1), uno::UNO_QUERY);
+ xShape2->setPropertyValue("AnchorType", uno::Any(text::TextContentAnchorType_AT_CHARACTER));
+
+ // Insert a new paragraph at the start.
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ SwDocShell* pDocShell = pTextDoc->GetDocShell();
+ SwWrtShell* pWrtShell = pDocShell->GetWrtShell();
+ // Without the accompanying fix in place, this test would have crashed.
+ pWrtShell->SplitNode();
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testVertPosFromBottom)
+{
+ // Create a document, insert a shape and position it 1cm above the bottom of the body area.
+ createSwDoc();
+ uno::Reference<css::lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+ uno::Reference<drawing::XShape> xShape(
+ xFactory->createInstance("com.sun.star.drawing.RectangleShape"), uno::UNO_QUERY);
+ xShape->setSize(awt::Size(10000, 10000));
+ uno::Reference<beans::XPropertySet> xShapeProps(xShape, uno::UNO_QUERY);
+ xShapeProps->setPropertyValue("AnchorType", uno::Any(text::TextContentAnchorType_AT_CHARACTER));
+ xShapeProps->setPropertyValue("VertOrient", uno::Any(text::VertOrientation::NONE));
+ xShapeProps->setPropertyValue("VertOrientRelation",
+ uno::Any(text::RelOrientation::PAGE_PRINT_AREA_BOTTOM));
+ xShapeProps->setPropertyValue("VertOrientPosition", uno::Any(static_cast<sal_Int32>(-11000)));
+ uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(mxComponent, uno::UNO_QUERY);
+ xDrawPageSupplier->getDrawPage()->add(xShape);
+
+ // Verify that the distance between the body and anchored object bottom is indeed around 1cm.
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+ sal_Int32 nBodyBottom = getXPath(pXmlDoc, "//body/infos/bounds"_ostr, "bottom"_ostr).toInt32();
+ sal_Int32 nAnchoredBottom
+ = getXPath(pXmlDoc, "//anchored/SwAnchoredDrawObject/bounds"_ostr, "bottom"_ostr).toInt32();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 565
+ // - Actual : 9035
+ // i.e. the vertical position was from-top, not from-bottom.
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(565), nBodyBottom - nAnchoredBottom);
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testVertAlignBottomMargin)
+{
+ // Create a document, insert three shapes and align it the bottom,center,top of page print area bottom.
+ // The size of shapes are 284 ~ 0.5cm
+ // The height of page print area bottom is 1134 ~ 2cm
+ createSwDoc();
+ uno::Reference<css::lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+
+ //Create first shape and align bottom of page print area bottom.
+ uno::Reference<drawing::XShape> xShapeBottom(
+ xFactory->createInstance("com.sun.star.drawing.RectangleShape"), uno::UNO_QUERY);
+ xShapeBottom->setSize(awt::Size(500, 500));
+ uno::Reference<beans::XPropertySet> xShapePropsBottom(xShapeBottom, uno::UNO_QUERY);
+ xShapePropsBottom->setPropertyValue("AnchorType",
+ uno::Any(text::TextContentAnchorType_AT_CHARACTER));
+ xShapePropsBottom->setPropertyValue("VertOrient", uno::Any(text::VertOrientation::BOTTOM));
+ xShapePropsBottom->setPropertyValue("VertOrientRelation",
+ uno::Any(text::RelOrientation::PAGE_PRINT_AREA_BOTTOM));
+ uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplierBottom(mxComponent, uno::UNO_QUERY);
+ xDrawPageSupplierBottom->getDrawPage()->add(xShapeBottom);
+
+ //Create second shape and align center of page print area bottom.
+ uno::Reference<drawing::XShape> xShapeCenter(
+ xFactory->createInstance("com.sun.star.drawing.RectangleShape"), uno::UNO_QUERY);
+ xShapeCenter->setSize(awt::Size(500, 500));
+ uno::Reference<beans::XPropertySet> xShapePropsCenter(xShapeCenter, uno::UNO_QUERY);
+ xShapePropsCenter->setPropertyValue("AnchorType",
+ uno::Any(text::TextContentAnchorType_AT_CHARACTER));
+ xShapePropsCenter->setPropertyValue("VertOrient", uno::Any(text::VertOrientation::CENTER));
+ xShapePropsCenter->setPropertyValue("VertOrientRelation",
+ uno::Any(text::RelOrientation::PAGE_PRINT_AREA_BOTTOM));
+ uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplierCenter(mxComponent, uno::UNO_QUERY);
+ xDrawPageSupplierCenter->getDrawPage()->add(xShapeCenter);
+
+ //Create third shape and align top of page print area bottom.
+ uno::Reference<drawing::XShape> xShapeTop(
+ xFactory->createInstance("com.sun.star.drawing.RectangleShape"), uno::UNO_QUERY);
+ xShapeTop->setSize(awt::Size(500, 500));
+ uno::Reference<beans::XPropertySet> xShapePropsTop(xShapeTop, uno::UNO_QUERY);
+ xShapePropsTop->setPropertyValue("AnchorType",
+ uno::Any(text::TextContentAnchorType_AT_CHARACTER));
+ xShapePropsTop->setPropertyValue("VertOrient", uno::Any(text::VertOrientation::TOP));
+ xShapePropsTop->setPropertyValue("VertOrientRelation",
+ uno::Any(text::RelOrientation::PAGE_PRINT_AREA_BOTTOM));
+ uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplierTop(mxComponent, uno::UNO_QUERY);
+ xDrawPageSupplierTop->getDrawPage()->add(xShapeTop);
+
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+ sal_Int32 nBodyBottom
+ = getXPath(pXmlDoc, "//body/infos/bounds"_ostr, "bottom"_ostr).toInt32(); //14989
+ sal_Int32 nPageBottom
+ = getXPath(pXmlDoc, "//page/infos/bounds"_ostr, "bottom"_ostr).toInt32(); //16123
+ sal_Int32 nFirstShapeBottom
+ = getXPath(pXmlDoc, "//anchored/SwAnchoredDrawObject[1]/bounds"_ostr, "bottom"_ostr)
+ .toInt32(); //16124
+ sal_Int32 nSecondShapeBottom
+ = getXPath(pXmlDoc, "//anchored/SwAnchoredDrawObject[2]/bounds"_ostr, "bottom"_ostr)
+ .toInt32(); //15699
+ sal_Int32 nSecondShapeTop
+ = getXPath(pXmlDoc, "//anchored/SwAnchoredDrawObject[2]/bounds"_ostr, "top"_ostr)
+ .toInt32(); //15414
+ sal_Int32 nThirdShapeTop
+ = getXPath(pXmlDoc, "//anchored/SwAnchoredDrawObject[3]/bounds"_ostr, "top"_ostr)
+ .toInt32(); //14989
+
+ // Verify that the distance between the bottom of page and bottom of first shape is around 0cm. (align=bottom)
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1), nFirstShapeBottom - nPageBottom);
+ // Verify that the distance between the bottom of page and bottom of second shape is around 0.75cm and
+ // verify that the distance between the bottom of body and top of second shape is around 0.75cm.(align=center)
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(424), nPageBottom - nSecondShapeBottom);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(425), nSecondShapeTop - nBodyBottom);
+ // Verify that the distance between the bottom of body and top of third shape is around 0cm. (align=top)
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), nThirdShapeTop - nBodyBottom);
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testVertAlignBottomMarginWithFooter)
+{
+ // Load an empty document with footer.
+ createSwDoc("bottom-margin-with-footer.docx");
+ uno::Reference<css::lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+
+ // Insert three shapes and align it the bottom,center,top of page print area bottom.
+ // The height of page print area bottom is 2268 ~ 4cm.
+ // The size of shapes are 567 ~ 1cm
+ // Create first shape and align bottom of page print area bottom.
+ uno::Reference<drawing::XShape> xShapeBottom(
+ xFactory->createInstance("com.sun.star.drawing.RectangleShape"), uno::UNO_QUERY);
+ xShapeBottom->setSize(awt::Size(1000, 1000));
+ uno::Reference<beans::XPropertySet> xShapePropsBottom(xShapeBottom, uno::UNO_QUERY);
+ xShapePropsBottom->setPropertyValue("AnchorType",
+ uno::Any(text::TextContentAnchorType_AT_CHARACTER));
+ xShapePropsBottom->setPropertyValue("VertOrient", uno::Any(text::VertOrientation::BOTTOM));
+ xShapePropsBottom->setPropertyValue("VertOrientRelation",
+ uno::Any(text::RelOrientation::PAGE_PRINT_AREA_BOTTOM));
+ uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplierBottom(mxComponent, uno::UNO_QUERY);
+ xDrawPageSupplierBottom->getDrawPage()->add(xShapeBottom);
+
+ // Create second shape and align center of page print area bottom.
+ uno::Reference<drawing::XShape> xShapeCenter(
+ xFactory->createInstance("com.sun.star.drawing.RectangleShape"), uno::UNO_QUERY);
+ xShapeCenter->setSize(awt::Size(1000, 1000));
+ uno::Reference<beans::XPropertySet> xShapePropsCenter(xShapeCenter, uno::UNO_QUERY);
+ xShapePropsCenter->setPropertyValue("AnchorType",
+ uno::Any(text::TextContentAnchorType_AT_CHARACTER));
+ xShapePropsCenter->setPropertyValue("VertOrient", uno::Any(text::VertOrientation::CENTER));
+ xShapePropsCenter->setPropertyValue("VertOrientRelation",
+ uno::Any(text::RelOrientation::PAGE_PRINT_AREA_BOTTOM));
+ uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplierCenter(mxComponent, uno::UNO_QUERY);
+ xDrawPageSupplierCenter->getDrawPage()->add(xShapeCenter);
+
+ // Create third shape and align top of page print area bottom.
+ uno::Reference<drawing::XShape> xShapeTop(
+ xFactory->createInstance("com.sun.star.drawing.RectangleShape"), uno::UNO_QUERY);
+ xShapeTop->setSize(awt::Size(1000, 1000));
+ uno::Reference<beans::XPropertySet> xShapePropsTop(xShapeTop, uno::UNO_QUERY);
+ xShapePropsTop->setPropertyValue("AnchorType",
+ uno::Any(text::TextContentAnchorType_AT_CHARACTER));
+ xShapePropsTop->setPropertyValue("VertOrient", uno::Any(text::VertOrientation::TOP));
+ xShapePropsTop->setPropertyValue("VertOrientRelation",
+ uno::Any(text::RelOrientation::PAGE_PRINT_AREA_BOTTOM));
+ uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplierTop(mxComponent, uno::UNO_QUERY);
+ xDrawPageSupplierTop->getDrawPage()->add(xShapeTop);
+
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+ sal_Int32 nBodyBottom
+ = getXPath(pXmlDoc, "//body/infos/bounds"_ostr, "bottom"_ostr).toInt32(); //14853
+ sal_Int32 nPageBottom
+ = getXPath(pXmlDoc, "//page/infos/bounds"_ostr, "bottom"_ostr).toInt32(); //17121
+ sal_Int32 nFirstShapeBottom
+ = getXPath(pXmlDoc, "//anchored/SwAnchoredDrawObject[1]/bounds"_ostr, "bottom"_ostr)
+ .toInt32(); //17122
+ sal_Int32 nSecondShapeTop
+ = getXPath(pXmlDoc, "//anchored/SwAnchoredDrawObject[2]/bounds"_ostr, "top"_ostr)
+ .toInt32(); //15703
+ sal_Int32 nSecondShapeBottom
+ = getXPath(pXmlDoc, "//anchored/SwAnchoredDrawObject[2]/bounds"_ostr, "bottom"_ostr)
+ .toInt32(); //16272
+ sal_Int32 nThirdShapeTop
+ = getXPath(pXmlDoc, "//anchored/SwAnchoredDrawObject[3]/bounds"_ostr, "top"_ostr)
+ .toInt32(); //14853
+
+ // Verify that the distance between the bottom of page and bottom of first shape is around 0cm. (align=bottom)
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1), nFirstShapeBottom - nPageBottom);
+ // Verify that the distance between the bottom of page and bottom of second shape is around 1.5cm and
+ // verify that the distance between the bottom of body and top of second shape is around 1.5cm.(align=center)
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(849), nPageBottom - nSecondShapeBottom);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(850), nSecondShapeTop - nBodyBottom);
+ // Verify that the distance between the bottom of body and top of third shape is around 0cm. (align=top)
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), nThirdShapeTop - nBodyBottom);
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testInsideOutsideVertAlignBottomMargin)
+{
+ // Load a document, with two shapes.
+ // The shapes align the outside and inside of page print area bottom.
+ createSwDoc("inside-outside-vert-align.docx");
+
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+ sal_Int32 nBodyBottom
+ = getXPath(pXmlDoc, "//body/infos/bounds"_ostr, "bottom"_ostr).toInt32(); //15704
+ sal_Int32 nPageBottom
+ = getXPath(pXmlDoc, "//page/infos/bounds"_ostr, "bottom"_ostr).toInt32(); //17121
+ sal_Int32 nFirstShapeOutside
+ = getXPath(pXmlDoc, "//anchored/SwAnchoredDrawObject[1]/bounds"_ostr, "bottom"_ostr)
+ .toInt32(); //17098
+ sal_Int32 nSecondShapeInside
+ = getXPath(pXmlDoc, "//anchored/SwAnchoredDrawObject[2]/bounds"_ostr, "top"_ostr)
+ .toInt32(); //15694
+
+ // Verify that the distance between the bottom of page and bottom of first shape is around 0cm. (align=outside)
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(3), nPageBottom - nFirstShapeOutside);
+ // Verify that the distance between the bottom of body and top of second shape is around 0cm. (align=inside)
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), nBodyBottom - nSecondShapeInside);
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testVMLVertAlignBottomMargin)
+{
+ // Load a document, with five shapes.
+ // The shapes align the top,center,bottom,outside and inside of page print area bottom.
+ // The height of page print area bottom is 4320 ~ 7.62cm.
+ // The size of shapes are 442 ~ 0.78cm
+ createSwDoc("vml-vertical-alignment.docx");
+
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+ sal_Int32 nBodyBottom
+ = getXPath(pXmlDoc, "//body/infos/bounds"_ostr, "bottom"_ostr).toInt32(); //11803
+ sal_Int32 nPageBottom
+ = getXPath(pXmlDoc, "//page/infos/bounds"_ostr, "bottom"_ostr).toInt32(); //16123
+
+ sal_Int32 nFirstVMLShapeInside
+ = getXPath(pXmlDoc, "//anchored/SwAnchoredDrawObject[1]/bounds"_ostr, "top"_ostr)
+ .toInt32(); //11802
+ sal_Int32 nSecondVMLShapeBottom
+ = getXPath(pXmlDoc, "//anchored/SwAnchoredDrawObject[2]/bounds"_ostr, "bottom"_ostr)
+ .toInt32(); //16124
+ sal_Int32 nThirdVMLShapeCenterBottom
+ = getXPath(pXmlDoc, "//anchored/SwAnchoredDrawObject[3]/bounds"_ostr, "bottom"_ostr)
+ .toInt32(); //14185
+ sal_Int32 nThirdVMLShapeCenterTop
+ = getXPath(pXmlDoc, "//anchored/SwAnchoredDrawObject[3]/bounds"_ostr, "top"_ostr)
+ .toInt32(); //13741
+ sal_Int32 nFourthVMLShapeTop
+ = getXPath(pXmlDoc, "//anchored/SwAnchoredDrawObject[4]/bounds"_ostr, "top"_ostr)
+ .toInt32(); //11802
+ sal_Int32 nFifthVMLShapeOutside
+ = getXPath(pXmlDoc, "//anchored/SwAnchoredDrawObject[5]/bounds"_ostr, "bottom"_ostr)
+ .toInt32(); //16124
+
+ // Verify that the distance between the bottom of body and top of first VMLshape is around 0cm. (align=inside)
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1), nBodyBottom - nFirstVMLShapeInside);
+ // Verify that the distance between the bottom of page and bottom of second VMLshape is around 0cm. (align=bottom)
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1), nSecondVMLShapeBottom - nPageBottom);
+ // Verify that the distance between the bottom of page and bottom of third VMLshape is around 3.4cm and
+ // verify that the distance between the bottom of body and top of third shape is around 3.4cm.(align=center)
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1938), nPageBottom - nThirdVMLShapeCenterBottom);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1938), nThirdVMLShapeCenterTop - nBodyBottom);
+ // Verify that the distance between the bottom of body and top of fourth VMLshape is around 0cm. (align=top)
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1), nBodyBottom - nFourthVMLShapeTop);
+ // Verify that the distance between the bottom of page and bottom of fifth shape is around 0cm. (align=outside)
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1), nFifthVMLShapeOutside - nPageBottom);
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testFloatingTableOverlapNever)
+{
+ // Given a document with two floating tables, positioned in a way that normally these would
+ // overlap, but SwFormatWrapInfluenceOnObjPos::mbAllowOverlap == false explicitly asks to avoid
+ // overlaps:
+ createSwDoc("floattable-tbl-overlap.docx");
+
+ // When laying out that document:
+ calcLayout();
+
+ // Then make sure no overlap happens:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage1);
+ CPPUNIT_ASSERT(pPage1->GetSortedObjs());
+ const SwSortedObjs& rPage1Objs = *pPage1->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), rPage1Objs.size());
+ auto pFlyFrame1 = rPage1Objs[0]->DynCastFlyFrame();
+ auto pFlyFrame2 = rPage1Objs[1]->DynCastFlyFrame();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected greater than: 2291
+ // - Actual : 2175
+ // i.e. the 2nd floating table overlapped with the first one.
+ CPPUNIT_ASSERT_GREATER(pFlyFrame1->getFrameArea().Bottom(), pFlyFrame2->getFrameArea().Top());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testFloatingTableVertOrientTop)
+{
+ // Given a document with a vert-orient=from-top anchored floating table:
+ createSwDoc("floattable-vert-orient-top.odt");
+
+ // When laying out that document:
+ calcLayout();
+
+ // Then make sure we correctly split the table to two pages:
+ // Without the accompanying fix in place, this test would have produced a layout loop.
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = pLayout->Lower()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage1);
+ CPPUNIT_ASSERT(pPage1->GetSortedObjs());
+ const SwSortedObjs& rPage1Objs = *pPage1->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage1Objs.size());
+ auto pPage2 = pPage1->GetNext()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage2);
+ CPPUNIT_ASSERT(pPage2->GetSortedObjs());
+ const SwSortedObjs& rPage2Objs = *pPage2->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage2Objs.size());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testFloatingTableFollowWrongPage)
+{
+ // Given a document with text on 2 pages, the first page has a fly frame that can split:
+ createSwDoc("floattable-follow-on-wrong-page.odt");
+
+ // When increasing the top and bottom margins from 0.5cm to 2.5cm:
+ SwDoc* pDoc = getSwDoc();
+ SwPageDesc aStandard(pDoc->GetPageDesc(0));
+ SvxULSpaceItem aPageMargin(aStandard.GetMaster().GetULSpace());
+ aPageMargin.SetUpper(1417);
+ aPageMargin.SetLower(1417);
+ aStandard.GetMaster().SetFormatAttr(aPageMargin);
+ pDoc->ChgPageDesc(0, aStandard);
+
+ // Then make sure the first and second page has fly frames:
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = pLayout->Lower()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage1);
+ CPPUNIT_ASSERT(pPage1->GetSortedObjs());
+ const SwSortedObjs& rPage1Objs = *pPage1->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage1Objs.size());
+ auto pPage2 = pPage1->GetNext()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage2);
+ // Without the accompanying fix in place, this test would have failed, page 2 had no fly frame
+ // (page 3 had one).
+ CPPUNIT_ASSERT(pPage2->GetSortedObjs());
+ const SwSortedObjs& rPage2Objs = *pPage2->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPage2Objs.size());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testFloatingTableOverlapCell)
+{
+ // Given a document with floating tables, overlapping, but anchored to different table cells:
+ createSwDoc("floattable-overlap-cell.docx");
+
+ // When laying out the document:
+ // Without the accompanying fix in place, this resulted in a layout loop.
+ calcLayout();
+
+ // Then make sure the layout doesn't loop and results in a single page:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = pLayout->Lower()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage1);
+ CPPUNIT_ASSERT(!pPage1->GetNext());
+}
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/performance-jobfile b/sw/qa/core/performance-jobfile
new file mode 100644
index 0000000000..9e33d3c858
--- /dev/null
+++ b/sw/qa/core/performance-jobfile
@@ -0,0 +1,9 @@
+BigPtrArrayPerformanceTest.BigPtrArrayPerformanceTest.test_insert_at_end_1000
+BigPtrArrayPerformanceTest.BigPtrArrayPerformanceTest.test_insert_at_end_10000
+BigPtrArrayPerformanceTest.BigPtrArrayPerformanceTest.test_insert_at_end_100000
+BigPtrArrayPerformanceTest.BigPtrArrayPerformanceTest.test_insert_at_end_1000000
+BigPtrArrayPerformanceTest.BigPtrArrayPerformanceTest.test_insert_at_front_1000
+BigPtrArrayPerformanceTest.BigPtrArrayPerformanceTest.test_insert_at_front_10000
+BigPtrArrayPerformanceTest.BigPtrArrayPerformanceTest.test_insert_at_front_100000
+BigPtrArrayPerformanceTest.BigPtrArrayPerformanceTest.test_insert_at_front_1000000
+
diff --git a/sw/qa/core/test_ToxLinkProcessor.cxx b/sw/qa/core/test_ToxLinkProcessor.cxx
new file mode 100644
index 0000000000..a47762912c
--- /dev/null
+++ b/sw/qa/core/test_ToxLinkProcessor.cxx
@@ -0,0 +1,148 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/types.h>
+
+#include <rtl/ustring.hxx>
+
+#include <ToxLinkProcessor.hxx>
+
+#include <cppunit/TestAssert.h>
+#include <cppunit/extensions/HelperMacros.h>
+#include <test/bootstrapfixture.hxx>
+
+#include <swdll.hxx>
+
+using namespace sw;
+
+class ToxLinkProcessorTest : public test::BootstrapFixture
+{
+ void NoExceptionIsThrownIfTooManyLinksAreClosed();
+ void AddingAndClosingTwoOverlappingLinksResultsInOneClosedLink();
+ void LinkIsCreatedCorrectly();
+ void LinkSequenceIsPreserved();
+
+ CPPUNIT_TEST_SUITE(ToxLinkProcessorTest);
+ CPPUNIT_TEST(NoExceptionIsThrownIfTooManyLinksAreClosed);
+ CPPUNIT_TEST(AddingAndClosingTwoOverlappingLinksResultsInOneClosedLink);
+ CPPUNIT_TEST(LinkIsCreatedCorrectly);
+ CPPUNIT_TEST(LinkSequenceIsPreserved);
+ CPPUNIT_TEST_SUITE_END();
+public:
+ void setUp() override {
+ BootstrapFixture::setUp();
+ SwGlobals::ensure();
+ }
+
+ static constexpr OUString STYLE_NAME_1 = u"anyStyle1"_ustr;
+ static constexpr OUString STYLE_NAME_2 = u"anyStyle2"_ustr;
+ static const sal_uInt16 POOL_ID_1;
+ static const sal_uInt16 POOL_ID_2;
+ static constexpr OUString URL_1 = u"#anyUrl1"_ustr;
+ static constexpr OUString URL_2 = u"#anyUrl2"_ustr;
+};
+
+const sal_uInt16 ToxLinkProcessorTest::POOL_ID_1 = 42;
+const sal_uInt16 ToxLinkProcessorTest::POOL_ID_2 = 43;
+
+void
+ToxLinkProcessorTest::NoExceptionIsThrownIfTooManyLinksAreClosed()
+{
+ ToxLinkProcessor sut;
+ sut.StartNewLink(0, STYLE_NAME_1);
+ sut.CloseLink(1, URL_1, /*bRelative=*/true);
+ // fdo#85872 actually it turns out the UI does something like this
+ // so an exception must not be thrown!
+ // should not succeed either (for backward compatibility)
+ sut.CloseLink(2, URL_1, /*bRelative=*/true);
+ CPPUNIT_ASSERT_EQUAL(1u, static_cast<unsigned>(sut.m_ClosedLinks.size()));
+ CPPUNIT_ASSERT_EQUAL(1u, static_cast<unsigned>(sut.m_ClosedLinks.at(0)->mEndTextPos));
+ CPPUNIT_ASSERT_MESSAGE("no links are open", !sut.m_oStartedLink);
+}
+
+void
+ToxLinkProcessorTest::AddingAndClosingTwoOverlappingLinksResultsInOneClosedLink()
+{
+ ToxLinkProcessor sut;
+ sut.StartNewLink(0, STYLE_NAME_1);
+ sut.StartNewLink(0, STYLE_NAME_2);
+ sut.CloseLink(1, URL_1, /*bRelative=*/true);
+ // this should not cause an error, and should not succeed either
+ // (for backward compatibility)
+ sut.CloseLink(1, URL_2, /*bRelative=*/true);
+ CPPUNIT_ASSERT_EQUAL(1u, static_cast<unsigned>(sut.m_ClosedLinks.size()));
+ CPPUNIT_ASSERT_MESSAGE("no links are open", !sut.m_oStartedLink);
+ // backward compatibility: the last start is closed by the first end
+ CPPUNIT_ASSERT_EQUAL(STYLE_NAME_2, sut.m_ClosedLinks[0]->mINetFormat.GetINetFormat());
+ CPPUNIT_ASSERT_EQUAL(URL_1, sut.m_ClosedLinks[0]->mINetFormat.GetValue());
+}
+
+namespace {
+
+class ToxLinkProcessorWithOverriddenObtainPoolId : public ToxLinkProcessor {
+public:
+ virtual sal_uInt16
+ ObtainPoolId(const OUString& characterStyle) const override {
+ if (characterStyle == ToxLinkProcessorTest::STYLE_NAME_1) {
+ return ToxLinkProcessorTest::POOL_ID_1;
+ }
+ if (characterStyle == ToxLinkProcessorTest::STYLE_NAME_2) {
+ return ToxLinkProcessorTest::POOL_ID_2;
+ }
+ return 0;
+ }
+};
+
+}
+
+void
+ToxLinkProcessorTest::LinkIsCreatedCorrectly()
+{
+ // obtainpoolid needs to be overridden to check what we are
+ ToxLinkProcessorWithOverriddenObtainPoolId sut;
+
+ sut.StartNewLink(0, STYLE_NAME_1);
+ sut.CloseLink(1, URL_1, /*bRelative=*/true);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Style is stored correctly in link", STYLE_NAME_1, sut.m_ClosedLinks.at(0)->mINetFormat.GetVisitedFormat());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Url is stored correctly in link", URL_1, sut.m_ClosedLinks.at(0)->mINetFormat.GetValue());
+}
+
+void
+ToxLinkProcessorTest::LinkSequenceIsPreserved()
+{
+
+ // obtainpoolid needs to be overridden to check what we are
+ ToxLinkProcessorWithOverriddenObtainPoolId sut;
+
+ sut.StartNewLink(0, STYLE_NAME_2);
+ sut.CloseLink(1, URL_2, /*bRelative=*/true);
+ sut.StartNewLink(1, STYLE_NAME_1);
+ sut.CloseLink(2, URL_1, /*bRelative=*/true);
+
+ // check first closed element
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Style is stored correctly in link",
+ STYLE_NAME_2, sut.m_ClosedLinks.at(0)->mINetFormat.GetVisitedFormat());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Pool id is stored correctly in link",
+ POOL_ID_2, sut.m_ClosedLinks.at(0)->mINetFormat.GetINetFormatId());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Url is stored correctly in link",
+ URL_2, sut.m_ClosedLinks.at(0)->mINetFormat.GetValue());
+ // check second closed element
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Style is stored correctly in link",
+ STYLE_NAME_1, sut.m_ClosedLinks.at(1)->mINetFormat.GetVisitedFormat());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Pool id is stored correctly in link",
+ POOL_ID_1, sut.m_ClosedLinks.at(1)->mINetFormat.GetINetFormatId());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Url is stored correctly in link",
+ URL_1, sut.m_ClosedLinks.at(1)->mINetFormat.GetValue());
+}
+
+// Put the test suite in the registry
+CPPUNIT_TEST_SUITE_REGISTRATION(ToxLinkProcessorTest);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/test_ToxMiscTest.cxx b/sw/qa/core/test_ToxMiscTest.cxx
new file mode 100644
index 0000000000..c7e6223b92
--- /dev/null
+++ b/sw/qa/core/test_ToxMiscTest.cxx
@@ -0,0 +1,71 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <tox.hxx>
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+using namespace sw;
+
+class ToxMiscTest : public CppUnit::TestFixture
+{
+public:
+ void testTdf73162();
+ CPPUNIT_TEST_SUITE(ToxMiscTest);
+ CPPUNIT_TEST(testTdf73162);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+void ToxMiscTest::testTdf73162()
+{
+ //create Tokens with the help of input string
+ SwFormTokensHelper tokensHelper(
+ u"<LS Index Link,65535,><E# ,65535,0,10><X ,65535,\001.\001><ET ,65535,><T "
+ ",65535,0,5,.,1><# ,65535,><LE ,65535,>"); //input token string
+ SwFormTokens formTokens = tokensHelper.GetTokens();
+
+ //check the size of token vector / count of tokens
+ CPPUNIT_ASSERT_EQUAL(std::vector<SwFormToken>::size_type(7), formTokens.size());
+
+ //check individual tokens for proper values
+ //first token
+ SwFormToken token1 = formTokens.at(0);
+ CPPUNIT_ASSERT_EQUAL(FormTokenType::TOKEN_LINK_START, token1.eTokenType);
+ CPPUNIT_ASSERT_EQUAL(OUString("<LS Index Link,65535,>"), token1.GetString());
+ //second token
+ SwFormToken token2 = formTokens.at(1);
+ CPPUNIT_ASSERT_EQUAL(FormTokenType::TOKEN_ENTRY_NO, token2.eTokenType);
+ CPPUNIT_ASSERT_EQUAL(OUString("<E# ,65535,0,10>"), token2.GetString());
+ //third token
+ SwFormToken token3 = formTokens.at(2);
+ CPPUNIT_ASSERT_EQUAL(FormTokenType::TOKEN_TEXT, token3.eTokenType);
+ CPPUNIT_ASSERT_EQUAL(OUString("<X ,65535,\001.\001>"), token3.GetString());
+ //fourth token
+ SwFormToken token4 = formTokens.at(3);
+ CPPUNIT_ASSERT_EQUAL(FormTokenType::TOKEN_ENTRY_TEXT, token4.eTokenType);
+ CPPUNIT_ASSERT_EQUAL(OUString("<ET ,65535,>"), token4.GetString());
+ //fifth token
+ SwFormToken token5 = formTokens.at(4);
+ CPPUNIT_ASSERT_EQUAL(FormTokenType::TOKEN_TAB_STOP, token5.eTokenType);
+ CPPUNIT_ASSERT_EQUAL(OUString("<T ,65535,0,5,.,1>"), token5.GetString());
+ //sixth token
+ SwFormToken token6 = formTokens.at(5);
+ CPPUNIT_ASSERT_EQUAL(FormTokenType::TOKEN_PAGE_NUMS, token6.eTokenType);
+ CPPUNIT_ASSERT_EQUAL(OUString("<# ,65535,>"), token6.GetString());
+ //seventh token
+ SwFormToken token7 = formTokens.at(6);
+ CPPUNIT_ASSERT_EQUAL(FormTokenType::TOKEN_LINK_END, token7.eTokenType);
+ CPPUNIT_ASSERT_EQUAL(OUString("<LE ,65535,>"), token7.GetString());
+}
+
+// Put the test suite in the registry
+CPPUNIT_TEST_SUITE_REGISTRATION(ToxMiscTest);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/test_ToxTextGenerator.cxx b/sw/qa/core/test_ToxTextGenerator.cxx
new file mode 100644
index 0000000000..c0b667a273
--- /dev/null
+++ b/sw/qa/core/test_ToxTextGenerator.cxx
@@ -0,0 +1,200 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <rtl/ustring.hxx>
+#include <chpfld.hxx>
+#include <tox.hxx>
+#include <txmsrt.hxx>
+#include <ToxTextGenerator.hxx>
+#include <ToxTabStopTokenHandler.hxx>
+
+#include <memory>
+
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <swdll.hxx>
+
+using namespace sw;
+
+class ToxTextGeneratorTest : public CppUnit::TestFixture {
+public:
+ virtual void setUp() override
+ {
+ SwGlobals::ensure();
+ }
+
+ void EmptyStringIsReturnedForPageNumberPlaceholderOfZeroItems();
+ void OneAtSignIsReturnedForPageNumberPlaceholderOfOneItem();
+ void TwoAtSignsAreReturnedForPageNumberPlaceholderOfOneItem();
+ void EmptyStringIsReturnedAsNumStringIfNoTextMarkIsSet();
+ void EmptyStringIsReturnedAsNumStringIfToxSourcesIsEmpty();
+ void ChapterNumberWithoutTextIsGeneratedForNoprepstTitle();
+ void ChapterNumberWithTitleIsGeneratedForNumberNoPrepst();
+
+ CPPUNIT_TEST_SUITE(ToxTextGeneratorTest);
+ CPPUNIT_TEST(EmptyStringIsReturnedForPageNumberPlaceholderOfZeroItems);
+ CPPUNIT_TEST(OneAtSignIsReturnedForPageNumberPlaceholderOfOneItem);
+ CPPUNIT_TEST(TwoAtSignsAreReturnedForPageNumberPlaceholderOfOneItem);
+ CPPUNIT_TEST(EmptyStringIsReturnedAsNumStringIfNoTextMarkIsSet);
+ CPPUNIT_TEST(EmptyStringIsReturnedAsNumStringIfToxSourcesIsEmpty);
+ CPPUNIT_TEST(ChapterNumberWithoutTextIsGeneratedForNoprepstTitle);
+ CPPUNIT_TEST(ChapterNumberWithTitleIsGeneratedForNumberNoPrepst);
+ CPPUNIT_TEST_SUITE_END();
+
+};
+
+namespace {
+
+struct MockedSortTab : public SwTOXSortTabBase {
+ MockedSortTab()
+ : SwTOXSortTabBase(TOX_SORT_INDEX,nullptr,nullptr,nullptr) {}
+
+ virtual TextAndReading GetText_Impl(SwRootFrame const*) const override {
+ return TextAndReading();
+ }
+ virtual sal_uInt16 GetLevel() const override {
+ return 0;
+ }
+};
+
+}
+
+void
+ToxTextGeneratorTest::EmptyStringIsReturnedForPageNumberPlaceholderOfZeroItems()
+{
+ OUString actual = ToxTextGenerator::ConstructPageNumberPlaceholder(0);
+ CPPUNIT_ASSERT_EQUAL(OUString(""), actual);
+}
+
+void
+ToxTextGeneratorTest::OneAtSignIsReturnedForPageNumberPlaceholderOfOneItem()
+{
+ OUString actual = ToxTextGenerator::ConstructPageNumberPlaceholder(1);
+ CPPUNIT_ASSERT_EQUAL(OUString("@~"), actual);
+}
+
+void
+ToxTextGeneratorTest::TwoAtSignsAreReturnedForPageNumberPlaceholderOfOneItem()
+{
+ OUString actual = ToxTextGenerator::ConstructPageNumberPlaceholder(2);
+ CPPUNIT_ASSERT_EQUAL(OUString("@, @~"), actual);
+}
+
+void
+ToxTextGeneratorTest::EmptyStringIsReturnedAsNumStringIfNoTextMarkIsSet()
+{
+ MockedSortTab sortTab;
+ sortTab.pTextMark = nullptr;
+
+ OUString actual = ToxTextGenerator::GetNumStringOfFirstNode(sortTab, false, 0, nullptr);
+ CPPUNIT_ASSERT_EQUAL(OUString(""), actual);
+}
+
+void
+ToxTextGeneratorTest::EmptyStringIsReturnedAsNumStringIfToxSourcesIsEmpty()
+{
+ MockedSortTab sortTab;
+ sortTab.pTextMark = reinterpret_cast<SwTextTOXMark*>(1);
+
+ OUString actual = ToxTextGenerator::GetNumStringOfFirstNode(sortTab, false, 0, nullptr);
+ CPPUNIT_ASSERT_EQUAL(OUString(""), actual);
+}
+
+namespace {
+
+class MockedToxTabStopTokenHandler : public ToxTabStopTokenHandler {
+public:
+ virtual HandledTabStopToken
+ HandleTabStopToken(const SwFormToken&, const SwTextNode&,
+ const SwRootFrame *) const override {
+ return HandledTabStopToken();
+ }
+};
+
+class ToxTextGeneratorWithMockedChapterField : public ToxTextGenerator {
+public:
+ explicit ToxTextGeneratorWithMockedChapterField(SwForm const &form)
+ : ToxTextGenerator(form, std::make_shared<MockedToxTabStopTokenHandler>()),
+ mChapterFieldType(), mChapterField(&mChapterFieldType) {}
+
+ SwChapterField&
+ GetChapterField() {
+ return mChapterField;
+ }
+
+private:
+ SwChapterField
+ ObtainChapterField(SwChapterFieldType*, const SwFormToken*,
+ const SwContentFrame*, const SwContentNode *) const override {
+ return mChapterField;
+ }
+
+ SwChapterFieldType mChapterFieldType;
+ SwChapterField mChapterField;
+};
+
+}
+
+void
+ToxTextGeneratorTest::ChapterNumberWithoutTextIsGeneratedForNoprepstTitle()
+{
+ SwForm form;
+ ToxTextGeneratorWithMockedChapterField ttg(form);
+ // set all values to make sure they are not used
+ ttg.GetChapterField().m_State.sNumber = "1";
+ ttg.GetChapterField().m_State.sPre = "PRE";
+ ttg.GetChapterField().m_State.sPost = "POST";
+ ttg.GetChapterField().m_State.sTitle = "TITLE";
+
+ SwFormToken token(TOKEN_CHAPTER_INFO);
+ token.nChapterFormat = CF_NUM_NOPREPST_TITLE;
+
+ OUString expected("1");
+ OUString actual = ttg.GenerateTextForChapterToken(token, nullptr, nullptr, nullptr);
+ CPPUNIT_ASSERT_EQUAL(expected, actual);
+
+ // we cannot mock the pre- and suffix generation in the chapterfield. We just test that sNumber and
+ // sTitle are used and hope that the pre- and suffix addition works.
+ token.nChapterFormat = CF_NUMBER;
+ expected = ttg.GenerateTextForChapterToken(token, nullptr, nullptr, nullptr);
+ CPPUNIT_ASSERT_EQUAL(expected, actual);
+}
+
+
+void
+ToxTextGeneratorTest::ChapterNumberWithTitleIsGeneratedForNumberNoPrepst()
+{
+ SwForm form;
+ ToxTextGeneratorWithMockedChapterField ttg(form);
+ // set all values to make sure they are not used
+ ttg.GetChapterField().m_State.sNumber = "5";
+ ttg.GetChapterField().m_State.sPre = "PRE";
+ ttg.GetChapterField().m_State.sPost = "POST";
+ ttg.GetChapterField().m_State.sTitle = "myTitle";
+
+ SwFormToken token(TOKEN_CHAPTER_INFO);
+ token.nChapterFormat = CF_NUMBER_NOPREPST;
+
+ OUString expected("5 myTitle");
+ OUString actual = ttg.GenerateTextForChapterToken(token, nullptr, nullptr, nullptr);
+ CPPUNIT_ASSERT_EQUAL(expected, actual);
+
+ // we cannot mock the pre- and suffix generation in the chapterfield. We just test that sNumber and
+ // sTitle are used and hope that the pre- and suffix addition works.
+ token.nChapterFormat = CF_NUM_TITLE;
+ expected = ttg.GenerateTextForChapterToken(token, nullptr, nullptr, nullptr);
+ CPPUNIT_ASSERT_EQUAL(expected, actual);
+}
+
+// Put the test suite in the registry
+CPPUNIT_TEST_SUITE_REGISTRATION(ToxTextGeneratorTest);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/test_ToxWhitespaceStripper.cxx b/sw/qa/core/test_ToxWhitespaceStripper.cxx
new file mode 100644
index 0000000000..f3c2de9467
--- /dev/null
+++ b/sw/qa/core/test_ToxWhitespaceStripper.cxx
@@ -0,0 +1,134 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/types.h>
+
+#include <rtl/ustring.hxx>
+
+#include <ToxWhitespaceStripper.hxx>
+
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+using namespace sw;
+
+class ToxWhitespaceStripperTest : public CppUnit::TestFixture
+{
+ void MappingCharactersToVariousStrippedStringsWorks();
+
+ void StrippingWhitespacesFromVariousStringsWorks();
+
+ void PositionAfterStringCanBeRequested();
+
+ void InvalidPositionIsMappedToLastEntry();
+
+ CPPUNIT_TEST_SUITE(ToxWhitespaceStripperTest);
+ CPPUNIT_TEST(MappingCharactersToVariousStrippedStringsWorks);
+ CPPUNIT_TEST(StrippingWhitespacesFromVariousStringsWorks);
+ CPPUNIT_TEST(PositionAfterStringCanBeRequested);
+ CPPUNIT_TEST(InvalidPositionIsMappedToLastEntry);
+
+ CPPUNIT_TEST_SUITE_END();
+};
+
+void ToxWhitespaceStripperTest::MappingCharactersToVariousStrippedStringsWorks()
+{
+ {
+ ToxWhitespaceStripper sut(u"abc\n");
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), sut.GetPositionInStrippedString(0));
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1), sut.GetPositionInStrippedString(1));
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(2), sut.GetPositionInStrippedString(2));
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(3), sut.GetPositionInStrippedString(3));
+ }
+ {
+ ToxWhitespaceStripper sut(u"abc\n\n");
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), sut.GetPositionInStrippedString(0));
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1), sut.GetPositionInStrippedString(1));
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(2), sut.GetPositionInStrippedString(2));
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(3), sut.GetPositionInStrippedString(3));
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(3), sut.GetPositionInStrippedString(4));
+ }
+ {
+ ToxWhitespaceStripper sut(u"abc\ndef");
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), sut.GetPositionInStrippedString(0));
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1), sut.GetPositionInStrippedString(1));
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(2), sut.GetPositionInStrippedString(2));
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(3), sut.GetPositionInStrippedString(3));
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(4), sut.GetPositionInStrippedString(4));
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(5), sut.GetPositionInStrippedString(5));
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(6), sut.GetPositionInStrippedString(6));
+ }
+ {
+ // 012345 6789
+ // 01234567
+ // " abc def"
+ ToxWhitespaceStripper sut(u" abc \ndef");
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), sut.GetPositionInStrippedString(0));
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), sut.GetPositionInStrippedString(1));
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(1), sut.GetPositionInStrippedString(2));
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(2), sut.GetPositionInStrippedString(3));
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(3), sut.GetPositionInStrippedString(4));
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(4), sut.GetPositionInStrippedString(5));
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(4), sut.GetPositionInStrippedString(6));
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(5), sut.GetPositionInStrippedString(7));
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(6), sut.GetPositionInStrippedString(8));
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(7), sut.GetPositionInStrippedString(9));
+ }
+}
+
+void ToxWhitespaceStripperTest::StrippingWhitespacesFromVariousStringsWorks()
+{
+ {
+ ToxWhitespaceStripper sut(u"abc\n");
+ CPPUNIT_ASSERT_EQUAL(OUString("abc"), sut.GetStrippedString());
+ }
+ {
+ ToxWhitespaceStripper sut(u"abc\n\n");
+ CPPUNIT_ASSERT_EQUAL(OUString("abc"), sut.GetStrippedString());
+ }
+ {
+ ToxWhitespaceStripper sut(u"abc\ndef");
+ CPPUNIT_ASSERT_EQUAL(OUString("abc def"), sut.GetStrippedString());
+ }
+ {
+ ToxWhitespaceStripper sut(u" abc \ndef");
+ CPPUNIT_ASSERT_EQUAL(OUString(" abc def"), sut.GetStrippedString());
+ }
+ {
+ ToxWhitespaceStripper sut(u" ");
+ CPPUNIT_ASSERT_EQUAL(OUString(""), sut.GetStrippedString());
+ }
+ {
+ ToxWhitespaceStripper sut(u"d ");
+ CPPUNIT_ASSERT_EQUAL(OUString("d"), sut.GetStrippedString());
+ }
+}
+
+void ToxWhitespaceStripperTest::PositionAfterStringCanBeRequested()
+{
+ OUString constexpr test(u"abc"_ustr);
+ ToxWhitespaceStripper sut(test);
+ sal_Int32 expected = test.getLength();
+ CPPUNIT_ASSERT_EQUAL(expected, sut.GetPositionInStrippedString(test.getLength()));
+}
+
+void ToxWhitespaceStripperTest::InvalidPositionIsMappedToLastEntry()
+{
+ ToxWhitespaceStripper sut(u"ab c");
+ sal_Int32 const expected = 4; // the length of the string after merging the two whitespaces
+ sal_Int32 result
+ = sut.GetPositionInStrippedString(40); // a value past the original string length
+ CPPUNIT_ASSERT_EQUAL(expected, result);
+}
+
+// Put the test suite in the registry
+CPPUNIT_TEST_SUITE_REGISTRATION(ToxWhitespaceStripperTest);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/test_rect.cxx b/sw/qa/core/test_rect.cxx
new file mode 100644
index 0000000000..cfb9fa63a0
--- /dev/null
+++ b/sw/qa/core/test_rect.cxx
@@ -0,0 +1,107 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ */
+
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <swrect.hxx>
+
+class RectUnittest : public CppUnit::TestFixture
+{
+public:
+ void testBasic();
+ void testUnion();
+ void testIntersection();
+
+ CPPUNIT_TEST_SUITE(RectUnittest);
+ CPPUNIT_TEST(testBasic);
+ CPPUNIT_TEST(testUnion);
+ CPPUNIT_TEST(testIntersection);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+void RectUnittest::testBasic()
+{
+ SwRect rect(Point(10, 15), Size(20, 25));
+
+ CPPUNIT_ASSERT_EQUAL(rect, SwRect(10, 15, 20, 25));
+ CPPUNIT_ASSERT_EQUAL(rect, SwRect(Point(10, 15), Point(10 + 20 - 1, 15 + 25 - 1)));
+
+ CPPUNIT_ASSERT_EQUAL(tools::Long(20), rect.Width());
+ CPPUNIT_ASSERT_EQUAL(tools::Long(25), rect.Height());
+ CPPUNIT_ASSERT_EQUAL(tools::Long(10), rect.Left());
+ CPPUNIT_ASSERT_EQUAL(tools::Long(15), rect.Top());
+ CPPUNIT_ASSERT_EQUAL(tools::Long(10 + 20 - 1), rect.Right());
+ CPPUNIT_ASSERT_EQUAL(tools::Long(15 + 25 - 1), rect.Bottom());
+
+ CPPUNIT_ASSERT_EQUAL(Point(rect.Left(), rect.Top()), rect.TopLeft());
+ CPPUNIT_ASSERT_EQUAL(Point(rect.Right(), rect.Top()), rect.TopRight());
+ CPPUNIT_ASSERT_EQUAL(Point(rect.Left(), rect.Bottom()), rect.BottomLeft());
+ CPPUNIT_ASSERT_EQUAL(Point(rect.Right(), rect.Bottom()), rect.BottomRight());
+}
+
+void RectUnittest::testUnion()
+{
+ SwRect rect1(Point(10, 10), Size(10, 10));
+ SwRect rect2(Point(15, 15), Size(10, 10));
+ SwRect rect3(Point(30, 30), Size(10, 10));
+ SwRect tmp;
+
+ tmp = rect1;
+ tmp.Union(rect2);
+ CPPUNIT_ASSERT_EQUAL(SwRect(Point(10, 10), Size(15, 15)), tmp);
+ CPPUNIT_ASSERT_EQUAL(SwRect(Point(10, 10), Size(15, 15)), rect1.GetUnion(rect2));
+
+ tmp = rect1;
+ tmp.Union(rect3);
+ CPPUNIT_ASSERT_EQUAL(SwRect(Point(10, 10), Size(30, 30)), tmp);
+ CPPUNIT_ASSERT_EQUAL(SwRect(Point(10, 10), Size(30, 30)), rect1.GetUnion(rect3));
+
+ tmp = rect1;
+ tmp.Union(SwRect());
+ CPPUNIT_ASSERT_EQUAL(rect1, tmp);
+ CPPUNIT_ASSERT_EQUAL(rect1, rect1.GetUnion(SwRect()));
+ tmp = SwRect();
+ tmp.Union(rect1);
+ CPPUNIT_ASSERT_EQUAL(rect1, tmp);
+ CPPUNIT_ASSERT_EQUAL(rect1, SwRect().GetUnion(rect1));
+}
+
+void RectUnittest::testIntersection()
+{
+ SwRect rect1(Point(10, 10), Size(10, 10));
+ SwRect rect2(Point(15, 15), Size(10, 10));
+ SwRect rect3(Point(30, 30), Size(10, 10));
+ SwRect tmp;
+
+ tmp = rect1;
+ tmp.Intersection(rect2);
+ CPPUNIT_ASSERT_EQUAL(SwRect(Point(15, 15), Size(5, 5)), tmp);
+ CPPUNIT_ASSERT_EQUAL(SwRect(Point(15, 15), Size(5, 5)), rect1.GetIntersection(rect2));
+
+ tmp = rect1;
+ tmp.Intersection(rect3);
+ CPPUNIT_ASSERT(tmp.IsEmpty());
+ CPPUNIT_ASSERT(rect1.GetIntersection(rect3).IsEmpty());
+
+ tmp = rect1;
+ tmp.Intersection(SwRect());
+ CPPUNIT_ASSERT(tmp.IsEmpty());
+ CPPUNIT_ASSERT(rect1.GetIntersection(SwRect()).IsEmpty());
+ tmp = SwRect();
+ tmp.Intersection(rect1);
+ CPPUNIT_ASSERT(tmp.IsEmpty());
+ CPPUNIT_ASSERT(SwRect().GetIntersection(rect1).IsEmpty());
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(RectUnittest);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/test_region.cxx b/sw/qa/core/test_region.cxx
new file mode 100644
index 0000000000..15fa398c7e
--- /dev/null
+++ b/sw/qa/core/test_region.cxx
@@ -0,0 +1,108 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ */
+
+#include <cppunit/TestAssert.h>
+#include <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <swregion.hxx>
+#include <vcl/region.hxx>
+
+class RegionUnittest : public CppUnit::TestFixture
+{
+public:
+ void testCompress();
+ void testInvert();
+
+ CPPUNIT_TEST_SUITE(RegionUnittest);
+ CPPUNIT_TEST(testCompress);
+ CPPUNIT_TEST(testInvert);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+void RegionUnittest::testCompress()
+{
+ SwRegionRects region;
+
+ // All inside each other, check it'll compress them to the largest one.
+ region = SwRegionRects();
+ region += SwRect(Point(10, 10), Size(10, 10));
+ region += SwRect(Point(10, 10), Size(20, 20));
+ region += SwRect(Point(10, 10), Size(100, 100));
+ region += SwRect(Point(10, 10), Size(50, 50));
+ region.Compress(SwRegionRects::CompressExact);
+ CPPUNIT_ASSERT_EQUAL(size_t(1), region.size());
+ CPPUNIT_ASSERT_EQUAL(SwRect(Point(10, 10), Size(100, 100)), region[0]);
+
+ // Check merging of adjacent rectangles. This will merge first two groups
+ // and then those two merged rects only in the next iteration.
+ region = SwRegionRects();
+ region += SwRect(Point(10, 10), Size(10000, 10000));
+ region += SwRect(Point(10010, 10), Size(10000, 10000));
+ region += SwRect(Point(10, 10010), Size(10000, 10000));
+ region += SwRect(Point(10010, 10010), Size(10000, 10000));
+ region.Compress(SwRegionRects::CompressExact);
+ CPPUNIT_ASSERT_EQUAL(size_t(1), region.size());
+ CPPUNIT_ASSERT_EQUAL(SwRect(Point(10, 10), Size(20000, 20000)), region[0]);
+
+ // Check fuzzy compress, two almost aligned rects will be compressed to one.
+ region = SwRegionRects();
+ region += SwRect(Point(10, 10), Size(100, 100));
+ region += SwRect(Point(110, 10), Size(100, 90));
+ region.Compress(SwRegionRects::CompressExact);
+ CPPUNIT_ASSERT_EQUAL(size_t(2), region.size());
+ region.Compress(SwRegionRects::CompressFuzzy);
+ CPPUNIT_ASSERT_EQUAL(size_t(1), region.size());
+ CPPUNIT_ASSERT_EQUAL(SwRect(Point(10, 10), Size(200, 100)), region[0]);
+
+ // Check it doesn't crash because of empty size.
+ region = SwRegionRects();
+ region += SwRect(Point(0, 0), Size(0, 0));
+ region += SwRect(Point(10, 10), Size(0, 0));
+ region += SwRect(Point(100, 100), Size(0, 0));
+ region.Compress(SwRegionRects::CompressExact);
+ region.Compress(SwRegionRects::CompressFuzzy);
+}
+
+void RegionUnittest::testInvert()
+{
+ // Check that punching holes and inverting has the same result as adding up rects.
+ const SwRect fullRect(Point(100, 100), Size(1000, 1000));
+ const SwRect rects[]
+ = { { Point(200, 200), Size(200, 200) },
+ { Point(0, 0), Size(200, 200) }, // this one is intentionally partially out of bounds
+ { Point(700, 760), Size(20, 150) },
+ { Point(100, 300), Size(200, 200) },
+ { Point(100, 800), Size(10, 10) }, // these two partially overlap
+ { Point(105, 805), Size(10, 10) } };
+ SwRegionRects region1(fullRect);
+ for (const SwRect& rect : rects)
+ region1 -= rect;
+ region1.Invert();
+ region1.Compress(SwRegionRects::CompressExact);
+ SwRegionRects region2;
+ region2.ChangeOrigin(fullRect);
+ for (const SwRect& rect : rects)
+ region2 += rect;
+ region2.LimitToOrigin();
+ region2.Compress(SwRegionRects::CompressExact);
+ // The regions should be the same area, but not necessarily the same representation.
+ // SwRegionRects cannot compare those easily, but vcl::Region can.
+ vcl::Region vclRegion1, vclRegion2;
+ for (const SwRect& rect : region1)
+ vclRegion1.Union(tools::Rectangle(rect.Pos(), rect.SSize()));
+ for (const SwRect& rect : region2)
+ vclRegion2.Union(tools::Rectangle(rect.Pos(), rect.SSize()));
+ CPPUNIT_ASSERT_EQUAL(vclRegion1, vclRegion2);
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(RegionUnittest);
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/text/data/clearing-break-header.fodt b/sw/qa/core/text/data/clearing-break-header.fodt
new file mode 100644
index 0000000000..2bdbcd3c75
--- /dev/null
+++ b/sw/qa/core/text/data/clearing-break-header.fodt
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<office:document xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:automatic-styles>
+ <style:style style:name="gr1" style:family="graphic">
+ <style:graphic-properties fo:margin-left="0.318cm" fo:margin-right="0.318cm" fo:margin-top="0cm" fo:margin-bottom="0cm" style:run-through="background" style:wrap="run-through" style:number-wrapped-paragraphs="no-limit" style:vertical-pos="from-top" style:vertical-rel="page" style:horizontal-pos="from-left" style:horizontal-rel="page" draw:wrap-influence-on-position="once-concurrent" loext:allow-overlap="true" style:flow-with-text="false"/>
+ </style:style>
+ <style:style style:name="gr2" style:family="graphic">
+ <style:graphic-properties draw:stroke="none" svg:stroke-width="0cm" draw:fill="none" draw:textarea-horizontal-align="center" draw:textarea-vertical-align="bottom" draw:auto-grow-height="false" style:run-through="background"/>
+ </style:style>
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" fo:margin-top="1.251cm" fo:margin-bottom="2.54cm" fo:margin-left="2.501cm" fo:margin-right="2.501cm">
+ </style:page-layout-properties>
+ <style:header-style>
+ <style:header-footer-properties fo:min-height="1.289cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-bottom="1.189cm" style:dynamic-spacing="true"/>
+ </style:header-style>
+ </style:page-layout>
+ </office:automatic-styles>
+ <office:master-styles>
+ <style:master-page style:name="Standard" style:page-layout-name="pm1">
+ <style:header>
+ <text:p><draw:g text:anchor-type="char" draw:z-index="1" draw:style-name="gr1"><draw:rect draw:style-name="gr2" svg:width="8.347cm" svg:height="8.908cm" svg:x="11.871cm" svg:y="21.243cm"><text:p/></draw:rect></draw:g></text:p>
+ <text:p/>
+ </style:header>
+ </style:master-page>
+ </office:master-styles>
+ <office:body>
+ <office:text>
+ <text:p><text:line-break loext:clear="all"/></text:p>
+ </office:text>
+ </office:body>
+</office:document>
diff --git a/sw/qa/core/text/data/clearing-break-start.fodt b/sw/qa/core/text/data/clearing-break-start.fodt
new file mode 100644
index 0000000000..f2df00fadd
--- /dev/null
+++ b/sw/qa/core/text/data/clearing-break-start.fodt
@@ -0,0 +1,28 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<office:document xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:automatic-styles>
+ <style:style style:name="fr1" style:family="graphic">
+ <style:graphic-properties fo:margin-left="0.318cm" fo:margin-right="0.318cm" fo:margin-top="0cm" fo:margin-bottom="0cm" style:wrap="parallel" style:vertical-pos="from-top" style:vertical-rel="paragraph" style:horizontal-pos="from-left" style:horizontal-rel="paragraph"/>
+ </style:style>
+ </office:automatic-styles>
+ <office:body>
+ <office:text>
+ <text:p><draw:frame draw:style-name="fr1" draw:name="Picture 1" text:anchor-type="char" svg:x="0cm" svg:y="0cm" svg:width="1.806cm" svg:height="1.806cm" draw:z-index="0"><draw:image draw:mime-type="image/png"><office:binary-data>iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAQAAAAAYLlVAAAABGdBTUEAALGPC/xhBQAAAAFz
+ UkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAA
+ AAJiS0dEAACqjSMyAAAACW9GRnMAAAAGAAAAAAAMc1XTAAAACXBIWXMAAA3XAAAN1wFCKJt4
+ AAAACXZwQWcAAABMAAAAQACdMTgbAAABzUlEQVRo3u3ZPU/CQBjA8X+Jxs3ESUDj4iK+LA5+
+ BBfjqBE1cXB2MlFAEqMgxvhNNL4sLsK3UPQL6ObkoAETz+FKW2mxCPRYnucWUu76/OC59C49
+ cGOCKqrD9kHRc6ddPv7oW2WCwMh0nF63Myz7Tm8hPTNu0pgHMER3scepTbgK6enJNND83RLn
+ /878yRaPmgBZFDuMsNLeWB9gmFQHP77MIg9gsYciR50NFKvtjIy10yk84pSZA7DYpwR8scmF
+ QQCMuoQMpzbh0iAARrlnVn90CWHTsZcAiHPPdINQAuqsc2MQAAnKDUKWEhZ10twaBEDSJWQo
+ YlFj7S9CzwEegkXWIbQsRAQASFJhpplwbRAACS+hANRJBxMiAkDcJeQ4sQkBhYgMoJ+Ozlwo
+ 2YQ7AJ6CRxyiUGnVy3hVKb0Af9v7hUG2Wy9TEQCUelFTDULB2S+YKYGOMcpM6UIccOQnRA6A
+ cSp6ibfI+wkGADBGpTEd8xz1AaAfTQ7huA8AvUw5hVjuA0D/C5OaMN8XACRZ8F0zCggKAQhA
+ AAIQgAAEIAABCEAAAhCAAAQgAAH4zg3feY4w3Xs44M5+oW0qvCWoGcvaIlM3x/f/ab+O738A
+ hOCNQr34oD4AAAAldEVYdGNyZWF0ZS1kYXRlADIwMTAtMTItMjBUMTc6MDg6MzYrMDE6MDB6
+ 5RscAAAAJXRFWHRtb2RpZnktZGF0ZQAyMDEwLTEyLTIwVDE3OjA4OjM3KzAxOjAwgyNmnAAA
+ AABJRU5ErkJggg==
+ </office:binary-data></draw:image></draw:frame>X</text:p>
+ </office:text>
+ </office:body>
+</office:document>
diff --git a/sw/qa/core/text/data/clearing-break.fodt b/sw/qa/core/text/data/clearing-break.fodt
new file mode 100644
index 0000000000..a2f1285064
--- /dev/null
+++ b/sw/qa/core/text/data/clearing-break.fodt
@@ -0,0 +1,28 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<office:document xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:automatic-styles>
+ <style:style style:name="fr1" style:family="graphic">
+ <style:graphic-properties fo:margin-left="0.318cm" fo:margin-right="0.318cm" fo:margin-top="0cm" fo:margin-bottom="0cm" style:wrap="parallel" style:vertical-pos="from-top" style:vertical-rel="paragraph" style:horizontal-pos="from-left" style:horizontal-rel="paragraph"/>
+ </style:style>
+ </office:automatic-styles>
+ <office:body>
+ <office:text>
+ <text:p><draw:frame draw:style-name="fr1" draw:name="Picture 1" text:anchor-type="char" svg:x="0cm" svg:y="0cm" svg:width="1.806cm" svg:height="1.806cm" draw:z-index="0"><draw:image draw:mime-type="image/png"><office:binary-data>iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAQAAAAAYLlVAAAABGdBTUEAALGPC/xhBQAAAAFz
+ UkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAA
+ AAJiS0dEAACqjSMyAAAACW9GRnMAAAAGAAAAAAAMc1XTAAAACXBIWXMAAA3XAAAN1wFCKJt4
+ AAAACXZwQWcAAABMAAAAQACdMTgbAAABzUlEQVRo3u3ZPU/CQBjA8X+Jxs3ESUDj4iK+LA5+
+ BBfjqBE1cXB2MlFAEqMgxvhNNL4sLsK3UPQL6ObkoAETz+FKW2mxCPRYnucWUu76/OC59C49
+ cGOCKqrD9kHRc6ddPv7oW2WCwMh0nF63Myz7Tm8hPTNu0pgHMER3scepTbgK6enJNND83RLn
+ /878yRaPmgBZFDuMsNLeWB9gmFQHP77MIg9gsYciR50NFKvtjIy10yk84pSZA7DYpwR8scmF
+ QQCMuoQMpzbh0iAARrlnVn90CWHTsZcAiHPPdINQAuqsc2MQAAnKDUKWEhZ10twaBEDSJWQo
+ YlFj7S9CzwEegkXWIbQsRAQASFJhpplwbRAACS+hANRJBxMiAkDcJeQ4sQkBhYgMoJ+Ozlwo
+ 2YQ7AJ6CRxyiUGnVy3hVKb0Af9v7hUG2Wy9TEQCUelFTDULB2S+YKYGOMcpM6UIccOQnRA6A
+ cSp6ibfI+wkGADBGpTEd8xz1AaAfTQ7huA8AvUw5hVjuA0D/C5OaMN8XACRZ8F0zCggKAQhA
+ AAIQgAAEIAABCEAAAhCAAAQgAAH4zg3feY4w3Xs44M5+oW0qvCWoGcvaIlM3x/f/ab+O738A
+ hOCNQr34oD4AAAAldEVYdGNyZWF0ZS1kYXRlADIwMTAtMTItMjBUMTc6MDg6MzYrMDE6MDB6
+ 5RscAAAAJXRFWHRtb2RpZnktZGF0ZQAyMDEwLTEyLTIwVDE3OjA4OjM3KzAxOjAwgyNmnAAA
+ AABJRU5ErkJggg==
+ </office:binary-data></draw:image></draw:frame>AB</text:p>
+ </office:text>
+ </office:body>
+</office:document>
diff --git a/sw/qa/core/text/data/content-control-header.docx b/sw/qa/core/text/data/content-control-header.docx
new file mode 100644
index 0000000000..c65ac1d41c
--- /dev/null
+++ b/sw/qa/core/text/data/content-control-header.docx
Binary files differ
diff --git a/sw/qa/core/text/data/empty-numbering-page-split.fodt b/sw/qa/core/text/data/empty-numbering-page-split.fodt
new file mode 100644
index 0000000000..517ad2e0fb
--- /dev/null
+++ b/sw/qa/core/text/data/empty-numbering-page-split.fodt
@@ -0,0 +1,62 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<office:document xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:styles>
+ <style:default-style style:family="paragraph">
+ <style:text-properties fo:font-size="12pt"/>
+ </style:default-style>
+ <style:style style:name="Standard" style:family="paragraph" style:class="text"/>
+ <style:style style:name="Heading" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text_20_body" style:class="text">
+ <style:paragraph-properties fo:margin-top="0.423cm" fo:margin-bottom="0.212cm" style:contextual-spacing="false" fo:keep-with-next="always"/>
+ <style:text-properties fo:font-size="14pt"/>
+ </style:style>
+ <style:style style:name="Text_20_body" style:display-name="Text body" style:family="paragraph" style:parent-style-name="Standard" style:class="text">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.212cm"/>
+ </style:style>
+ <style:style style:name="Heading_20_1" style:display-name="Heading 1" style:family="paragraph" style:parent-style-name="Heading" style:class="text">
+ <style:paragraph-properties fo:margin-top="0.423cm" fo:margin-bottom="0.212cm" fo:break-before="page"/>
+ </style:style>
+ <text:outline-style style:name="Outline">
+ <text:outline-level-style text:level="1" style:num-format="">
+ <style:list-level-properties text:min-label-distance="0.381cm"/>
+ </text:outline-level-style>
+ </text:outline-style>
+ </office:styles>
+ <office:automatic-styles>
+ <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Standard" style:master-page-name="Intro">
+ <style:paragraph-properties style:page-number="1"/>
+ </style:style>
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm"/>
+ <style:header-style>
+ <style:header-footer-properties fo:min-height="0cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-bottom="0cm"/>
+ </style:header-style>
+ <style:footer-style>
+ <style:header-footer-properties fo:min-height="0.6cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.499cm" style:dynamic-spacing="false"/>
+ </style:footer-style>
+ </style:page-layout>
+ <style:page-layout style:name="pm2">
+ <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm"/>
+ <style:header-style>
+ <style:header-footer-properties fo:min-height="0cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-bottom="0.499cm"/>
+ </style:header-style>
+ <style:footer-style/>
+ </style:page-layout>
+ </office:automatic-styles>
+ <office:master-styles>
+ <style:master-page style:name="Standard" style:page-layout-name="pm1" style:next-style-name="Intro">
+ <style:header>
+ <text:p/>
+ </style:header>
+ <style:footer>
+ <text:p/>
+ </style:footer>
+ </style:master-page>
+ <style:master-page style:name="Intro" style:page-layout-name="pm2"/>
+ </office:master-styles>
+ <office:body>
+ <office:text text:use-soft-page-breaks="true">
+ <text:h text:style-name="Heading_20_1" text:outline-level="1"/>
+ <text:p text:style-name="P1"/>
+ </office:text>
+ </office:body>
+</office:document>
diff --git a/sw/qa/core/text/data/empty-superscript.docx b/sw/qa/core/text/data/empty-superscript.docx
new file mode 100644
index 0000000000..2eea0b0871
--- /dev/null
+++ b/sw/qa/core/text/data/empty-superscript.docx
Binary files differ
diff --git a/sw/qa/core/text/data/firstLineIndent-withFlag.fodt b/sw/qa/core/text/data/firstLineIndent-withFlag.fodt
new file mode 100644
index 0000000000..069b960b9d
--- /dev/null
+++ b/sw/qa/core/text/data/firstLineIndent-withFlag.fodt
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<office:document xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:settings>
+ <config:config-item-set config:name="ooo:configuration-settings">
+ <config:config-item config:name="AutoFirstLineIndentDisregardLineSpace" config:type="boolean">true</config:config-item>
+ </config:config-item-set>
+ </office:settings>
+ <office:font-face-decls>
+ <style:font-face style:name="Liberation Serif" svg:font-family="&apos;Liberation Serif&apos;" style:font-family-generic="roman" style:font-pitch="variable"/>
+ </office:font-face-decls>
+ <office:styles>
+ <style:default-style style:family="paragraph">
+ <style:text-properties style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="en" fo:country="US" style:letter-kerning="true" fo:hyphenate="false"/>
+ </style:default-style>
+ <style:style style:name="Standard" style:family="paragraph" style:class="text"/>
+ </office:styles>
+ <office:automatic-styles>
+ <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Standard">
+ <style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-bottom="5.5mm" fo:line-height="100%" fo:text-indent="0cm" style:auto-text-indent="true"/>
+ </style:style>
+ <style:style style:name="P2" style:family="paragraph" style:parent-style-name="Standard">
+ <style:paragraph-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:line-height="200%" fo:text-indent="0cm" style:auto-text-indent="true"/>
+ </style:style>
+ </office:automatic-styles>
+ <office:body>
+ <office:text>
+ <text:p text:style-name="P1">LibreOffice is a free and powerful office suite, and a successor to OpenOffice.org (commonly known as OpenOffice). Its clean interface and feature-rich tools help you unleash your creativity and enhance your productivity. LibreOffice is one of the friendliest and fastest-growing projects in the free and open source software world.</text:p>
+ <text:p text:style-name="P2">LibreOffice is a free and powerful office suite, and a successor to OpenOffice.org (commonly known as OpenOffice). Its clean interface and feature-rich tools help you unleash your creativity and enhance your productivity. LibreOffice is one of the friendliest and fastest-growing projects in the free and open source software world.</text:p>
+ </office:text>
+ </office:body>
+</office:document>
diff --git a/sw/qa/core/text/data/floattable-anchor-height.docx b/sw/qa/core/text/data/floattable-anchor-height.docx
new file mode 100644
index 0000000000..3052f0daef
--- /dev/null
+++ b/sw/qa/core/text/data/floattable-anchor-height.docx
Binary files differ
diff --git a/sw/qa/core/text/data/floattable-anchor-left-margin.docx b/sw/qa/core/text/data/floattable-anchor-left-margin.docx
new file mode 100644
index 0000000000..aa55a0ce30
--- /dev/null
+++ b/sw/qa/core/text/data/floattable-anchor-left-margin.docx
Binary files differ
diff --git a/sw/qa/core/text/data/floattable-anchor-next-page.docx b/sw/qa/core/text/data/floattable-anchor-next-page.docx
new file mode 100644
index 0000000000..898c5514c5
--- /dev/null
+++ b/sw/qa/core/text/data/floattable-anchor-next-page.docx
Binary files differ
diff --git a/sw/qa/core/text/data/floattable-avoid-last-manip-ofst.docx b/sw/qa/core/text/data/floattable-avoid-last-manip-ofst.docx
new file mode 100644
index 0000000000..017b3001b8
--- /dev/null
+++ b/sw/qa/core/text/data/floattable-avoid-last-manip-ofst.docx
Binary files differ
diff --git a/sw/qa/core/text/data/floattable-avoid-manip-ofst.docx b/sw/qa/core/text/data/floattable-avoid-manip-ofst.docx
new file mode 100644
index 0000000000..b4d85b5f8a
--- /dev/null
+++ b/sw/qa/core/text/data/floattable-avoid-manip-ofst.docx
Binary files differ
diff --git a/sw/qa/core/text/data/floattable-bad-fly-pos.docx b/sw/qa/core/text/data/floattable-bad-fly-pos.docx
new file mode 100644
index 0000000000..a0a8bb4dbd
--- /dev/null
+++ b/sw/qa/core/text/data/floattable-bad-fly-pos.docx
Binary files differ
diff --git a/sw/qa/core/text/data/floattable-leftover-para-portion.docx b/sw/qa/core/text/data/floattable-leftover-para-portion.docx
new file mode 100644
index 0000000000..51eee56cf0
--- /dev/null
+++ b/sw/qa/core/text/data/floattable-leftover-para-portion.docx
Binary files differ
diff --git a/sw/qa/core/text/data/floattable-negative-vert-offset-empty.docx b/sw/qa/core/text/data/floattable-negative-vert-offset-empty.docx
new file mode 100644
index 0000000000..132fde5538
--- /dev/null
+++ b/sw/qa/core/text/data/floattable-negative-vert-offset-empty.docx
Binary files differ
diff --git a/sw/qa/core/text/data/floattable-negative-vert-offset.docx b/sw/qa/core/text/data/floattable-negative-vert-offset.docx
new file mode 100644
index 0000000000..688b5b8c11
--- /dev/null
+++ b/sw/qa/core/text/data/floattable-negative-vert-offset.docx
Binary files differ
diff --git a/sw/qa/core/text/data/floattable-overlap.docx b/sw/qa/core/text/data/floattable-overlap.docx
new file mode 100644
index 0000000000..cc0dbd077f
--- /dev/null
+++ b/sw/qa/core/text/data/floattable-overlap.docx
Binary files differ
diff --git a/sw/qa/core/text/data/floattable-wrap-empty-para-legacy.docx b/sw/qa/core/text/data/floattable-wrap-empty-para-legacy.docx
new file mode 100644
index 0000000000..c62a25a193
--- /dev/null
+++ b/sw/qa/core/text/data/floattable-wrap-empty-para-legacy.docx
Binary files differ
diff --git a/sw/qa/core/text/data/floattable-wrap-empty-para.docx b/sw/qa/core/text/data/floattable-wrap-empty-para.docx
new file mode 100644
index 0000000000..91e8a141c1
--- /dev/null
+++ b/sw/qa/core/text/data/floattable-wrap-empty-para.docx
Binary files differ
diff --git a/sw/qa/core/text/data/fly-minimal-wrap.docx b/sw/qa/core/text/data/fly-minimal-wrap.docx
new file mode 100644
index 0000000000..f5955d29d0
--- /dev/null
+++ b/sw/qa/core/text/data/fly-minimal-wrap.docx
Binary files differ
diff --git a/sw/qa/core/text/data/footnote-connect.fodt b/sw/qa/core/text/data/footnote-connect.fodt
new file mode 100644
index 0000000000..dd26db98c9
--- /dev/null
+++ b/sw/qa/core/text/data/footnote-connect.fodt
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<office:document xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ooo="http://openoffice.org/2004/office" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" office:version="1.2" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:settings>
+ <config:config-item-set config:name="ooo:configuration-settings">
+ <config:config-item config:name="UseFormerTextWrapping" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ContinuousEndnotes" config:type="boolean">true</config:config-item>
+ </config:config-item-set>
+ </office:settings>
+ <office:font-face-decls>
+ <style:font-face style:name="Liberation Sans" svg:font-family="&apos;Liberation Sans&apos;" style:font-family-generic="roman" style:font-pitch="variable"/>
+ </office:font-face-decls>
+ <office:styles>
+ <style:default-style style:family="graphic">
+ </style:default-style>
+ <style:default-style style:family="paragraph">
+ <style:text-properties style:font-name="Liberation Sans" fo:font-size="12pt"/>
+ </style:default-style>
+ <style:default-style style:family="table">
+ <style:table-properties table:border-model="collapsing"/>
+ </style:default-style>
+ <style:default-style style:family="table-row">
+ <style:table-row-properties fo:keep-together="auto"/>
+ </style:default-style>
+ <style:style style:name="Standard" style:family="paragraph" style:class="text">
+ <style:text-properties style:font-name="Liberation Sans" fo:font-size="12pt"/>
+ </style:style>
+ <style:style style:name="Endnote" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
+ <style:text-properties fo:font-size="10pt" style:font-size-asian="10pt"/>
+ </style:style>
+ <style:style style:name="Frame" style:family="graphic">
+ </style:style>
+ </office:styles>
+ <office:automatic-styles>
+ <style:style style:name="Table6" style:family="table">
+ <style:table-properties style:width="15.983cm" table:align="margins" style:writing-mode="lr-tb"/>
+ </style:style>
+ <style:style style:name="Table6.A" style:family="table-column">
+ <style:table-column-properties style:column-width="15.983cm" style:rel-column-width="65535*"/>
+ </style:style>
+ <style:style style:name="Table6.1" style:family="table-row">
+ <style:table-row-properties fo:keep-together="auto"/>
+ </style:style>
+ <style:style style:name="Table6.A1" style:family="table-cell">
+ <style:table-cell-properties style:vertical-align="top" fo:padding-left="0cm" fo:padding-right="0cm" fo:padding-top="0cm" fo:padding-bottom="0.199cm" fo:border="none" style:writing-mode="lr-tb"/>
+ </style:style>
+ <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Standard" style:master-page-name="Standard">
+ </style:style>
+ <style:style style:name="P3" style:family="paragraph" style:parent-style-name="Standard">
+ <style:paragraph-properties fo:break-before="page"/>
+ </style:style>
+ <style:style style:name="fr1" style:family="graphic" style:parent-style-name="Frame">
+ <style:graphic-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" style:wrap="parallel" style:number-wrapped-paragraphs="no-limit" style:vertical-pos="from-top" style:vertical-rel="page" style:horizontal-pos="left" style:horizontal-rel="page-content" fo:background-color="#ffffff" style:background-transparency="100%" draw:fill="solid" draw:fill-color="#ffffff" draw:opacity="0%" fo:padding="0cm" fo:border="none" style:writing-mode="lr-tb" draw:wrap-influence-on-position="once-successive" loext:allow-overlap="true"/>
+ </style:style>
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="1.27cm" fo:margin-bottom="3.071cm" fo:margin-left="3cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" style:layout-grid-lines="39" style:layout-grid-base-height="0.635cm" style:layout-grid-ruby-height="0cm" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="false" style:layout-grid-display="false" style:layout-grid-base-width="0.423cm" style:layout-grid-snap-to="true" style:footnote-max-height="0cm">
+ <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style>
+ <style:header-footer-properties fo:min-height="0.653cm" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0.554cm" style:dynamic-spacing="true"/>
+ </style:footer-style>
+ </style:page-layout>
+ </office:automatic-styles>
+ <office:master-styles>
+ <style:master-page style:name="Standard" style:page-layout-name="pm1">
+ <style:footer>
+ <text:p></text:p>
+ </style:footer>
+ <loext:footer-first>
+ <text:p text:style-name="Footer"><draw:frame draw:style-name="fr1" draw:name="Frame1" text:anchor-type="paragraph" svg:y="25.506cm" svg:width="15.983cm" draw:z-index="0"><draw:text-box fo:min-height="0.058cm"><table:table table:name="Table6" table:style-name="Table6"><table:table-column table:style-name="Table6.A"/><table:table-row table:style-name="Table6.1"><table:table-cell table:style-name="Table6.A1" office:value-type="string"><text:p text:style-name="Standard">A1</text:p></table:table-cell></table:table-row></table:table></draw:text-box></draw:frame></text:p>
+ </loext:footer-first>
+ </style:master-page>
+ </office:master-styles>
+ <office:body>
+ <office:text text:use-soft-page-breaks="true">
+ <text:p text:style-name="P1">P01</text:p>
+ <text:p text:style-name="Standard">P02</text:p>
+ <text:p text:style-name="Standard">P03</text:p>
+ <text:p text:style-name="Standard">P04</text:p>
+ <text:p text:style-name="Standard">P05</text:p>
+ <text:p text:style-name="Standard">P06</text:p>
+ <text:p text:style-name="Standard">P07</text:p>
+ <text:p text:style-name="Standard">P08</text:p>
+ <text:p text:style-name="Standard">P09</text:p>
+ <text:p text:style-name="Standard">P10</text:p>
+ <text:p text:style-name="Standard">P11</text:p>
+ <text:p text:style-name="Standard">P12</text:p>
+ <text:p text:style-name="Standard">P13</text:p>
+ <text:p text:style-name="Standard">P14</text:p>
+ <text:p text:style-name="Standard">P15</text:p>
+ <text:p text:style-name="Standard">P16</text:p>
+ <text:p text:style-name="Standard">P17</text:p>
+ <text:p text:style-name="Standard">P18</text:p>
+ <text:p text:style-name="Standard">P19</text:p>
+ <text:p text:style-name="Standard">P20</text:p>
+ <text:p text:style-name="Standard">P21</text:p>
+ <text:p text:style-name="Standard">P22</text:p>
+ <text:p text:style-name="Standard">P23</text:p>
+ <text:p text:style-name="Standard">P24</text:p>
+ <text:p text:style-name="Standard">P25</text:p>
+ <text:p text:style-name="Standard">P26</text:p>
+ <text:p text:style-name="Standard">P27</text:p>
+ <text:p text:style-name="Standard">P28</text:p>
+ <text:p text:style-name="Standard">P29</text:p>
+ <text:p text:style-name="Standard">P30</text:p>
+ <text:p text:style-name="Standard">P31</text:p>
+ <text:p text:style-name="Standard">P32</text:p>
+ <text:p text:style-name="Standard">P33</text:p>
+ <text:p text:style-name="Standard">P34</text:p>
+ <text:p text:style-name="Standard">P35</text:p>
+ <text:p text:style-name="Standard">P36</text:p>
+ <text:p text:style-name="Standard">P37</text:p>
+ <text:p text:style-name="Standard">P38</text:p>
+ <text:p text:style-name="Standard"/>
+ <text:p text:style-name="Standard"/>
+ <text:p text:style-name="Standard"/>
+ <text:p text:style-name="P3">P2P01</text:p>
+ <text:p text:style-name="Standard">P2P02</text:p>
+ <text:p text:style-name="Standard">P2P03</text:p>
+ <text:p text:style-name="Standard">P2P04</text:p>
+ <text:p text:style-name="Standard">P2P05</text:p>
+ <text:p text:style-name="Standard">P2P06</text:p>
+ <text:p text:style-name="Standard">P2P07</text:p>
+ <text:p text:style-name="Standard">P2P08</text:p>
+ <text:p text:style-name="Standard">P2P09</text:p>
+ <text:p text:style-name="Standard">P2P10</text:p>
+ <text:p text:style-name="Standard">P2P11</text:p>
+ <text:p text:style-name="Standard">P2P12<text:note text:id="ftn1" text:note-class="endnote"><text:note-citation>1</text:note-citation><text:note-body></text:note-body></text:note> First line<text:line-break/>second line</text:p>
+ <text:p text:style-name="P3"/>
+ </office:text>
+ </office:body>
+</office:document>
diff --git a/sw/qa/core/text/data/image.png b/sw/qa/core/text/data/image.png
new file mode 100644
index 0000000000..49e71b07ae
--- /dev/null
+++ b/sw/qa/core/text/data/image.png
Binary files differ
diff --git a/sw/qa/core/text/data/line-height.fodt b/sw/qa/core/text/data/line-height.fodt
new file mode 100644
index 0000000000..d784ec241b
--- /dev/null
+++ b/sw/qa/core/text/data/line-height.fodt
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<office:document xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:automatic-styles>
+ <style:style style:name="fr1" style:family="graphic" style:parent-style-name="Graphics"/>
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-width="84.1cm" fo:page-height="118.9cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:margin-left="0cm" fo:margin-right="0cm"/>
+ </style:page-layout>
+ </office:automatic-styles>
+ <office:master-styles>
+ <style:master-page style:name="Standard" style:page-layout-name="pm1"/>
+ </office:master-styles>
+ <office:body>
+ <office:text>
+ <text:p><draw:frame draw:style-name="fr1" draw:name="Image1" text:anchor-type="as-char" svg:width="84.1cm" svg:height="118.9cm" draw:z-index="0"><draw:image draw:mime-type="image/png"><office:binary-data>iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAQAAAAAYLlVAAAABGdBTUEAALGPC/xhBQAAAAFz
+ UkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAA
+ AAJiS0dEAACqjSMyAAAACW9GRnMAAAAGAAAAAAAMc1XTAAAACXBIWXMAAA3XAAAN1wFCKJt4
+ AAAACXZwQWcAAABMAAAAQACdMTgbAAABzUlEQVRo3u3ZPU/CQBjA8X+Jxs3ESUDj4iK+LA5+
+ BBfjqBE1cXB2MlFAEqMgxvhNNL4sLsK3UPQL6ObkoAETz+FKW2mxCPRYnucWUu76/OC59C49
+ cGOCKqrD9kHRc6ddPv7oW2WCwMh0nF63Myz7Tm8hPTNu0pgHMER3scepTbgK6enJNND83RLn
+ /878yRaPmgBZFDuMsNLeWB9gmFQHP77MIg9gsYciR50NFKvtjIy10yk84pSZA7DYpwR8scmF
+ QQCMuoQMpzbh0iAARrlnVn90CWHTsZcAiHPPdINQAuqsc2MQAAnKDUKWEhZ10twaBEDSJWQo
+ YlFj7S9CzwEegkXWIbQsRAQASFJhpplwbRAACS+hANRJBxMiAkDcJeQ4sQkBhYgMoJ+Ozlwo
+ 2YQ7AJ6CRxyiUGnVy3hVKb0Af9v7hUG2Wy9TEQCUelFTDULB2S+YKYGOMcpM6UIccOQnRA6A
+ cSp6ibfI+wkGADBGpTEd8xz1AaAfTQ7huA8AvUw5hVjuA0D/C5OaMN8XACRZ8F0zCggKAQhA
+ AAIQgAAEIAABCEAAAhCAAAQgAAH4zg3feY4w3Xs44M5+oW0qvCWoGcvaIlM3x/f/ab+O738A
+ hOCNQr34oD4AAAAldEVYdGNyZWF0ZS1kYXRlADIwMTAtMTItMjBUMTc6MDg6MzYrMDE6MDB6
+ 5RscAAAAJXRFWHRtb2RpZnktZGF0ZQAyMDEwLTEyLTIwVDE3OjA4OjM3KzAxOjAwgyNmnAAA
+ AABJRU5ErkJggg==
+ </office:binary-data></draw:image></draw:frame></text:p>
+ </office:text>
+ </office:body>
+</office:document>
diff --git a/sw/qa/core/text/data/line-width.fodt b/sw/qa/core/text/data/line-width.fodt
new file mode 100644
index 0000000000..a6b2b2f5c6
--- /dev/null
+++ b/sw/qa/core/text/data/line-width.fodt
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<office:document xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:automatic-styles>
+ <style:style style:name="fr1" style:family="graphic" style:parent-style-name="Graphics"/>
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-height="84.1cm" fo:page-width="118.9cm" fo:margin-top="0cm" fo:margin-bottom="0cm" fo:margin-left="0cm" fo:margin-right="0cm"/>
+ </style:page-layout>
+ </office:automatic-styles>
+ <office:master-styles>
+ <style:master-page style:name="Standard" style:page-layout-name="pm1"/>
+ </office:master-styles>
+ <office:body>
+ <office:text>
+ <text:p><draw:frame draw:style-name="fr1" draw:name="Image1" text:anchor-type="as-char" svg:height="84.1cm" svg:width="118.9cm" draw:z-index="0"><draw:image draw:mime-type="image/png"><office:binary-data>iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAQAAAAAYLlVAAAABGdBTUEAALGPC/xhBQAAAAFz
+ UkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAA
+ AAJiS0dEAACqjSMyAAAACW9GRnMAAAAGAAAAAAAMc1XTAAAACXBIWXMAAA3XAAAN1wFCKJt4
+ AAAACXZwQWcAAABMAAAAQACdMTgbAAABzUlEQVRo3u3ZPU/CQBjA8X+Jxs3ESUDj4iK+LA5+
+ BBfjqBE1cXB2MlFAEqMgxvhNNL4sLsK3UPQL6ObkoAETz+FKW2mxCPRYnucWUu76/OC59C49
+ cGOCKqrD9kHRc6ddPv7oW2WCwMh0nF63Myz7Tm8hPTNu0pgHMER3scepTbgK6enJNND83RLn
+ /878yRaPmgBZFDuMsNLeWB9gmFQHP77MIg9gsYciR50NFKvtjIy10yk84pSZA7DYpwR8scmF
+ QQCMuoQMpzbh0iAARrlnVn90CWHTsZcAiHPPdINQAuqsc2MQAAnKDUKWEhZ10twaBEDSJWQo
+ YlFj7S9CzwEegkXWIbQsRAQASFJhpplwbRAACS+hANRJBxMiAkDcJeQ4sQkBhYgMoJ+Ozlwo
+ 2YQ7AJ6CRxyiUGnVy3hVKb0Af9v7hUG2Wy9TEQCUelFTDULB2S+YKYGOMcpM6UIccOQnRA6A
+ cSp6ibfI+wkGADBGpTEd8xz1AaAfTQ7huA8AvUw5hVjuA0D/C5OaMN8XACRZ8F0zCggKAQhA
+ AAIQgAAEIAABCEAAAhCAAAQgAAH4zg3feY4w3Xs44M5+oW0qvCWoGcvaIlM3x/f/ab+O738A
+ hOCNQr34oD4AAAAldEVYdGNyZWF0ZS1kYXRlADIwMTAtMTItMjBUMTc6MDg6MzYrMDE6MDB6
+ 5RscAAAAJXRFWHRtb2RpZnktZGF0ZQAyMDEwLTEyLTIwVDE3OjA4OjM3KzAxOjAwgyNmnAAA
+ AABJRU5ErkJggg==
+ </office:binary-data></draw:image></draw:frame></text:p>
+ </office:text>
+ </office:body>
+</office:document>
diff --git a/sw/qa/core/text/data/number-portion-format.odt b/sw/qa/core/text/data/number-portion-format.odt
new file mode 100644
index 0000000000..19b23ae844
--- /dev/null
+++ b/sw/qa/core/text/data/number-portion-format.odt
Binary files differ
diff --git a/sw/qa/core/text/data/number-portion-noformat.docx b/sw/qa/core/text/data/number-portion-noformat.docx
new file mode 100644
index 0000000000..b289b9c69e
--- /dev/null
+++ b/sw/qa/core/text/data/number-portion-noformat.docx
Binary files differ
diff --git a/sw/qa/core/text/data/para-upper-margin-fly-intersect.docx b/sw/qa/core/text/data/para-upper-margin-fly-intersect.docx
new file mode 100644
index 0000000000..e8e767fb38
--- /dev/null
+++ b/sw/qa/core/text/data/para-upper-margin-fly-intersect.docx
Binary files differ
diff --git a/sw/qa/core/text/data/placeholder.fodt b/sw/qa/core/text/data/placeholder.fodt
new file mode 100644
index 0000000000..01cb604376
--- /dev/null
+++ b/sw/qa/core/text/data/placeholder.fodt
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:body>
+ <office:text>
+ <text:p><text:placeholder text:placeholder-type="text" text:description="reference text">&lt;placeholder text&gt;</text:placeholder></text:p>
+ </office:text>
+ </office:body>
+</office:document> \ No newline at end of file
diff --git a/sw/qa/core/text/data/ruby.fodt b/sw/qa/core/text/data/ruby.fodt
new file mode 100644
index 0000000000..b5a0e23d2c
--- /dev/null
+++ b/sw/qa/core/text/data/ruby.fodt
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<office:document xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:font-face-decls>
+ </office:font-face-decls>
+ <office:styles>
+ </office:styles>
+ <office:automatic-styles>
+ <style:style style:name="Ru1" style:family="ruby">
+ <style:ruby-properties style:ruby-align="left" style:ruby-position="above" loext:ruby-position="above"/>
+ </style:style>
+ <style:style style:name="Ru2" style:family="ruby">
+ <style:ruby-properties style:ruby-align="center" style:ruby-position="above" loext:ruby-position="above"/>
+ </style:style>
+ <style:style style:name="Ru3" style:family="ruby">
+ <style:ruby-properties style:ruby-align="right" style:ruby-position="above" loext:ruby-position="above"/>
+ </style:style>
+ </office:automatic-styles>
+ <office:master-styles>
+ </office:master-styles>
+ <office:body>
+ <office:text>
+ <text:p text:style-name="P1">Ruby test: <text:ruby text:style-name="Ru1"><text:ruby-base>base text</text:ruby-base><text:ruby-text text:style-name="Rubies">ruby (left)</text:ruby-text></text:ruby> <text:ruby text:style-name="Ru2"><text:ruby-base>base text</text:ruby-base><text:ruby-text>ruby (center)</text:ruby-text></text:ruby> <text:ruby text:style-name="Ru3"><text:ruby-base>base text</text:ruby-base><text:ruby-text>ruby (right)</text:ruby-text></text:ruby></text:p>
+ </office:text>
+ </office:body>
+</office:document>
diff --git a/sw/qa/core/text/data/scriptinfo-surrogate-pairs.fodt b/sw/qa/core/text/data/scriptinfo-surrogate-pairs.fodt
new file mode 100644
index 0000000000..ceee84b55f
--- /dev/null
+++ b/sw/qa/core/text/data/scriptinfo-surrogate-pairs.fodt
@@ -0,0 +1,293 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<office:document xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:meta><meta:creation-date>2023-07-27T18:43:02.537801624</meta:creation-date><dc:date>2023-07-27T18:43:53.298342476</dc:date><meta:editing-duration>PT51S</meta:editing-duration><meta:editing-cycles>1</meta:editing-cycles><meta:document-statistic meta:table-count="0" meta:image-count="0" meta:object-count="0" meta:page-count="1" meta:paragraph-count="1" meta:word-count="1" meta:character-count="3" meta:non-whitespace-character-count="3"/><meta:generator>LibreOfficeDev/24.2.0.0.alpha0$MacOSX_X86_64 LibreOffice_project/cf8f7b91f41821b79495c0388359c4cb1156ea67</meta:generator></office:meta>
+ <office:settings>
+ <config:config-item-set config:name="ooo:view-settings">
+ <config:config-item config:name="ViewAreaTop" config:type="long">0</config:config-item>
+ <config:config-item config:name="ViewAreaLeft" config:type="long">0</config:config-item>
+ <config:config-item config:name="ViewAreaWidth" config:type="long">17805</config:config-item>
+ <config:config-item config:name="ViewAreaHeight" config:type="long">9950</config:config-item>
+ <config:config-item config:name="ShowRedlineChanges" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="InBrowseMode" config:type="boolean">false</config:config-item>
+ <config:config-item-map-indexed config:name="Views">
+ <config:config-item-map-entry>
+ <config:config-item config:name="ViewId" config:type="string">view2</config:config-item>
+ <config:config-item config:name="ViewLeft" config:type="long">3332</config:config-item>
+ <config:config-item config:name="ViewTop" config:type="long">2501</config:config-item>
+ <config:config-item config:name="VisibleLeft" config:type="long">0</config:config-item>
+ <config:config-item config:name="VisibleTop" config:type="long">0</config:config-item>
+ <config:config-item config:name="VisibleRight" config:type="long">17803</config:config-item>
+ <config:config-item config:name="VisibleBottom" config:type="long">9948</config:config-item>
+ <config:config-item config:name="ZoomType" config:type="short">0</config:config-item>
+ <config:config-item config:name="ViewLayoutColumns" config:type="short">1</config:config-item>
+ <config:config-item config:name="ViewLayoutBookMode" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ZoomFactor" config:type="short">200</config:config-item>
+ <config:config-item config:name="IsSelectedFrame" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="KeepRatio" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="LegacySingleLineFontwork" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ConnectorUseSnapRect" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IgnoreBreakAfterMultilineField" config:type="boolean">false</config:config-item>
+ </config:config-item-map-entry>
+ </config:config-item-map-indexed>
+ </config:config-item-set>
+ <config:config-item-set config:name="ooo:configuration-settings">
+ <config:config-item config:name="PrintPageBackground" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintGraphics" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintTables" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintProspectRTL" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintFaxName" config:type="string"/>
+ <config:config-item config:name="PrintProspect" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintReversed" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintRightPages" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintEmptyPages" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintControls" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="UseVariableWidthNBSP" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="NoNumberingShowFollowBy" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintSingleJobs" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="DisableOffPagePositioning" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="HyphenateURLs" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="MsWordCompMinLineHeightByFly" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AutoFirstLineIndentDisregardLineSpace" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="FrameAutowidthWithMorePara" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="HeaderSpacingBelowLastPara" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintAnnotationMode" config:type="short">0</config:config-item>
+ <config:config-item config:name="ImagePreferredDPI" config:type="int">0</config:config-item>
+ <config:config-item config:name="LoadReadonly" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ProtectBookmarks" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ContinuousEndnotes" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UnbreakableNumberings" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SubtractFlysAnchoredAtFlys" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PropLineSpacingShrinksFirstLine" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ApplyParagraphMarkFormatToNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TreatSingleColumnBreakAsPageBreak" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedComplexScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ProtectFields" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedOnlyUsedFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrinterSetup" config:type="base64Binary"/>
+ <config:config-item config:name="StylesNoDefault" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="OutlineLevelYieldsNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="RedlineProtectionKey" config:type="base64Binary"/>
+ <config:config-item config:name="CollapseEmptyCellPara" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintBlackFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="MsWordCompTrailingBlanks" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedSystemFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IgnoreTabsAndBlanksForLineCalculation" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="InvertBorderSpacing" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SmallCapsPercentage66" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="MathBaselineAlignment" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmptyDbFieldHidesPara" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ClippedPictures" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TabAtLeftIndentForParagraphsInList" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ProtectForm" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ConsiderTextWrapOnObjPos" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TabOverflow" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="DropCapPunctuation" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="IsLabelDocument" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbeddedDatabaseName" config:type="string"/>
+ <config:config-item config:name="UnxForceZeroExtLeading" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="FloattableNomargins" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="DoNotCaptureDrawObjsOnPage" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="GutterAtTop" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SurroundTextWrapSmall" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SaveGlobalDocumentLinks" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="CurrentDatabaseCommandType" config:type="int">0</config:config-item>
+ <config:config-item config:name="TableRowKeep" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="DoNotResetParaAttrsForNumFont" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TabOverMargin" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IgnoreFirstLineIndentInNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AlignTabStopPosition" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="UseFormerTextWrapping" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UseOldNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="BackgroundParaOverDrawings" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UseFormerObjectPositioning" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UseOldPrinterMetrics" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintTextPlaceholder" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TabOverSpacing" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="CurrentDatabaseCommand" config:type="string"/>
+ <config:config-item config:name="AddParaLineSpacingToTableCells" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="FootnoteInColumnToPageEnd" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AddParaSpacingToTableCells" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AddParaTableSpacingAtStart" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AddVerticalFrameOffsets" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ApplyUserData" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AllowPrintJobCancel" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintHiddenText" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="RsidRoot" config:type="int">162604</config:config-item>
+ <config:config-item config:name="TabsRelativeToIndent" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="UpdateFromTemplate" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="SaveVersionOnClose" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="CurrentDatabaseDataSource" config:type="string"/>
+ <config:config-item config:name="PrinterPaperFromSetup" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedAsianScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintPaperFromSetup" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrinterIndependentLayout" config:type="string">high-resolution</config:config-item>
+ <config:config-item config:name="LinkUpdateMode" config:type="short">1</config:config-item>
+ <config:config-item config:name="CharacterCompressionType" config:type="short">1</config:config-item>
+ <config:config-item config:name="FieldAutoUpdate" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="UseFormerLineSpacing" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IsKernAsianPunctuation" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintLeftPages" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="SaveThumbnail" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AddParaTableSpacing" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintDrawings" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmbedLatinScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ClipAsCharacterAnchoredWriterFlyFrames" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AddExternalLeading" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrinterName" config:type="string"/>
+ <config:config-item config:name="DoNotJustifyLinesWithManualBreak" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ChartAutoUpdate" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="Rsid" config:type="int">162604</config:config-item>
+ <config:config-item config:name="AddFrameOffsets" config:type="boolean">false</config:config-item>
+ </config:config-item-set>
+ </office:settings>
+ <office:scripts>
+ <office:script script:language="ooo:Basic">
+ <ooo:libraries xmlns:ooo="http://openoffice.org/2004/office" xmlns:xlink="http://www.w3.org/1999/xlink"/>
+ </office:script>
+ </office:scripts>
+ <office:font-face-decls>
+ <style:font-face style:name="Arial Unicode MS" svg:font-family="&apos;Arial Unicode MS&apos;" style:font-family-generic="swiss"/>
+ <style:font-face style:name="Arial Unicode MS1" svg:font-family="&apos;Arial Unicode MS&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="Liberation Sans" svg:font-family="&apos;Liberation Sans&apos;" style:font-family-generic="swiss" style:font-pitch="variable"/>
+ <style:font-face style:name="Liberation Serif" svg:font-family="&apos;Liberation Serif&apos;" style:font-family-generic="roman" style:font-pitch="variable"/>
+ <style:font-face style:name="PingFang SC" svg:font-family="&apos;PingFang SC&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="Songti SC" svg:font-family="&apos;Songti SC&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ </office:font-face-decls>
+ <office:styles>
+ <style:default-style style:family="graphic">
+ <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="8.5pt" draw:shadow-offset-y="8.5pt" draw:start-line-spacing-horizontal="8.02pt" draw:start-line-spacing-vertical="8.02pt" draw:end-line-spacing-horizontal="8.02pt" draw:end-line-spacing-vertical="8.02pt" style:flow-with-text="false"/>
+ <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" loext:tab-stop-distance="0pt" style:writing-mode="lr-tb" style:font-independent-line-spacing="false">
+ <style:tab-stops/>
+ </style:paragraph-properties>
+ <style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="en" fo:country="EG" style:letter-kerning="true" style:font-name-asian="Songti SC" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Arial Unicode MS1" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/>
+ </style:default-style>
+ <style:default-style style:family="paragraph">
+ <style:paragraph-properties fo:orphans="2" fo:widows="2" fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="35.46pt" style:writing-mode="page"/>
+ <style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="en" fo:country="EG" style:letter-kerning="true" style:font-name-asian="Songti SC" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Arial Unicode MS1" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2" loext:hyphenation-no-caps="false" loext:hyphenation-no-last-word="false" loext:hyphenation-word-char-count="5" loext:hyphenation-zone="no-limit"/>
+ </style:default-style>
+ <style:default-style style:family="table">
+ <style:table-properties table:border-model="collapsing"/>
+ </style:default-style>
+ <style:default-style style:family="table-row">
+ <style:table-row-properties fo:keep-together="auto"/>
+ </style:default-style>
+ <style:style style:name="Standard" style:family="paragraph" style:class="text"/>
+ <style:style style:name="Heading" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text_20_body" style:class="text">
+ <style:paragraph-properties fo:margin-top="11.99pt" fo:margin-bottom="6.01pt" style:contextual-spacing="false" fo:keep-with-next="always"/>
+ <style:text-properties style:font-name="Liberation Sans" fo:font-family="&apos;Liberation Sans&apos;" style:font-family-generic="swiss" style:font-pitch="variable" fo:font-size="14pt" style:font-name-asian="PingFang SC" style:font-family-asian="&apos;PingFang SC&apos;" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="14pt" style:font-name-complex="Arial Unicode MS1" style:font-family-complex="&apos;Arial Unicode MS&apos;" style:font-family-generic-complex="system" style:font-pitch-complex="variable" style:font-size-complex="14pt"/>
+ </style:style>
+ <style:style style:name="Text_20_body" style:display-name="Text body" style:family="paragraph" style:parent-style-name="Standard" style:class="text">
+ <style:paragraph-properties fo:margin-top="0pt" fo:margin-bottom="7pt" style:contextual-spacing="false" fo:line-height="115%"/>
+ </style:style>
+ <style:style style:name="List" style:family="paragraph" style:parent-style-name="Text_20_body" style:class="list">
+ <style:text-properties style:font-size-asian="12pt" style:font-name-complex="Arial Unicode MS" style:font-family-complex="&apos;Arial Unicode MS&apos;" style:font-family-generic-complex="swiss"/>
+ </style:style>
+ <style:style style:name="Caption" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
+ <style:paragraph-properties fo:margin-top="6.01pt" fo:margin-bottom="6.01pt" style:contextual-spacing="false" text:number-lines="false" text:line-number="0"/>
+ <style:text-properties fo:font-size="12pt" fo:font-style="italic" style:font-size-asian="12pt" style:font-style-asian="italic" style:font-name-complex="Arial Unicode MS" style:font-family-complex="&apos;Arial Unicode MS&apos;" style:font-family-generic-complex="swiss" style:font-size-complex="12pt" style:font-style-complex="italic"/>
+ </style:style>
+ <style:style style:name="Index" style:family="paragraph" style:parent-style-name="Standard" style:class="index">
+ <style:paragraph-properties text:number-lines="false" text:line-number="0"/>
+ <style:text-properties style:font-size-asian="12pt" style:font-name-complex="Arial Unicode MS" style:font-family-complex="&apos;Arial Unicode MS&apos;" style:font-family-generic-complex="swiss"/>
+ </style:style>
+ <text:outline-style style:name="Outline">
+ <text:outline-level-style text:level="1" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="2" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="3" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="4" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="5" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="6" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="7" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="8" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="9" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="10" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ </text:outline-style>
+ <text:notes-configuration text:note-class="footnote" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/>
+ <text:notes-configuration text:note-class="endnote" style:num-format="i" text:start-value="0"/>
+ <text:linenumbering-configuration text:number-lines="false" text:offset="14.14pt" style:num-format="1" text:number-position="left" text:increment="5"/>
+ <loext:theme loext:name="Office Theme">
+ <loext:theme-colors loext:name="LibreOffice">
+ <loext:color loext:name="dark1" loext:color="#000000"/>
+ <loext:color loext:name="light1" loext:color="#ffffff"/>
+ <loext:color loext:name="dark2" loext:color="#000000"/>
+ <loext:color loext:name="light2" loext:color="#ffffff"/>
+ <loext:color loext:name="accent1" loext:color="#18a303"/>
+ <loext:color loext:name="accent2" loext:color="#0369a3"/>
+ <loext:color loext:name="accent3" loext:color="#a33e03"/>
+ <loext:color loext:name="accent4" loext:color="#8e03a3"/>
+ <loext:color loext:name="accent5" loext:color="#c99c00"/>
+ <loext:color loext:name="accent6" loext:color="#c9211e"/>
+ <loext:color loext:name="hyperlink" loext:color="#0000ee"/>
+ <loext:color loext:name="followed-hyperlink" loext:color="#551a8b"/>
+ </loext:theme-colors>
+ </loext:theme>
+ </office:styles>
+ <office:automatic-styles>
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-width="595.3pt" fo:page-height="841.89pt" style:num-format="1" style:print-orientation="portrait" fo:margin-top="56.69pt" fo:margin-bottom="56.69pt" fo:margin-left="56.69pt" fo:margin-right="56.69pt" style:writing-mode="lr-tb" style:footnote-max-height="0pt" loext:margin-gutter="0pt">
+ <style:footnote-sep style:width="0.51pt" style:distance-before-sep="2.86pt" style:distance-after-sep="2.86pt" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style/>
+ </style:page-layout>
+ </office:automatic-styles>
+ <office:master-styles>
+ <style:master-page style:name="Standard" style:page-layout-name="pm1"/>
+ </office:master-styles>
+ <office:body>
+ <office:text>
+ <text:sequence-decls>
+ <text:sequence-decl text:display-outline-level="0" text:name="Illustration"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Table"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Text"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Figure"/>
+ </text:sequence-decls>
+ <text:p text:style-name="Standard">11â—Œð¨</text:p>
+ <text:p text:style-name="Standard">11ð€ÙŽ</text:p>
+ </office:text>
+ </office:body>
+</office:document> \ No newline at end of file
diff --git a/sw/qa/core/text/data/tabovermargin-section.fodt b/sw/qa/core/text/data/tabovermargin-section.fodt
new file mode 100644
index 0000000000..6fd39c4712
--- /dev/null
+++ b/sw/qa/core/text/data/tabovermargin-section.fodt
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<office:document xmlns:officeooo="http://openoffice.org/2009/office" xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rpt="http://openoffice.org/2005/report" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:xforms="http://www.w3.org/2002/xforms" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:settings>
+ <config:config-item-set config:name="ooo:configuration-settings">
+ <config:config-item config:name="TabOverMargin" config:type="boolean">true</config:config-item>
+ </config:config-item-set>
+ </office:settings>
+ <office:styles>
+ <style:default-style style:family="paragraph">
+ </style:default-style>
+ </office:styles>
+ <office:automatic-styles>
+ <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Index_20_1">
+ <style:paragraph-properties>
+ <style:tab-stops>
+ <style:tab-stop style:position="17.59cm" style:type="right" style:leader-style="dotted" style:leader-text="."/>
+ </style:tab-stops>
+ </style:paragraph-properties>
+ </style:style>
+ <style:style style:name="Sect1" style:family="section">
+ <style:section-properties style:editable="false">
+ <style:columns fo:column-count="2" fo:column-gap="0cm">
+ <style:column style:rel-width="32767*" fo:start-indent="0cm" fo:end-indent="0cm"/>
+ <style:column style:rel-width="32768*" fo:start-indent="0cm" fo:end-indent="0cm"/>
+ </style:columns>
+ </style:section-properties>
+ </style:style>
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-width="21.59cm" fo:page-height="27.94cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" fo:background-color="#ffffff" style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" style:layout-grid-lines="37" style:layout-grid-base-height="0.635cm" style:layout-grid-ruby-height="0cm" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="false" style:layout-grid-display="false" style:layout-grid-base-width="0.423cm" style:layout-grid-snap-to="true" draw:fill="solid" draw:fill-color="#ffffff" draw:opacity="0%" style:footnote-max-height="0cm" loext:margin-gutter="0cm">
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style/>
+ </style:page-layout>
+ <style:style style:name="dp1" style:family="drawing-page">
+ <style:drawing-page-properties draw:fill="solid" draw:background-size="full" draw:fill-color="#ffffff" draw:opacity="0%"/>
+ </style:style>
+ </office:automatic-styles>
+ <office:master-styles>
+ <style:master-page style:name="Standard" style:page-layout-name="pm1" draw:style-name="dp1"/>
+ </office:master-styles>
+ <office:body>
+ <office:text>
+ <text:p>before</text:p>
+ <text:section text:style-name="Sect1" text:name="Section1">
+ <text:p text:style-name="P1">hello<text:tab/>1</text:p>
+ </text:section>
+ <text:p>after</text:p>
+ </office:text>
+ </office:body>
+</office:document>
diff --git a/sw/qa/core/text/data/tdf112594.fodt b/sw/qa/core/text/data/tdf112594.fodt
new file mode 100644
index 0000000000..2c3157c395
--- /dev/null
+++ b/sw/qa/core/text/data/tdf112594.fodt
@@ -0,0 +1,301 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<office:document xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:meta><meta:creation-date>2023-07-27T19:10:14.987836034</meta:creation-date><dc:date>2023-07-27T19:26:21.769944388</dc:date><meta:editing-duration>PT1M22S</meta:editing-duration><meta:editing-cycles>3</meta:editing-cycles><meta:generator>LibreOfficeDev/24.2.0.0.alpha0$MacOSX_X86_64 LibreOffice_project/cf8f7b91f41821b79495c0388359c4cb1156ea67</meta:generator><meta:document-statistic meta:table-count="0" meta:image-count="0" meta:object-count="0" meta:page-count="1" meta:paragraph-count="1" meta:word-count="2" meta:character-count="4" meta:non-whitespace-character-count="3"/></office:meta>
+ <office:settings>
+ <config:config-item-set config:name="ooo:view-settings">
+ <config:config-item config:name="ViewAreaTop" config:type="long">0</config:config-item>
+ <config:config-item config:name="ViewAreaLeft" config:type="long">0</config:config-item>
+ <config:config-item config:name="ViewAreaWidth" config:type="long">32373</config:config-item>
+ <config:config-item config:name="ViewAreaHeight" config:type="long">18410</config:config-item>
+ <config:config-item config:name="ShowRedlineChanges" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="InBrowseMode" config:type="boolean">false</config:config-item>
+ <config:config-item-map-indexed config:name="Views">
+ <config:config-item-map-entry>
+ <config:config-item config:name="ViewId" config:type="string">view2</config:config-item>
+ <config:config-item config:name="ViewLeft" config:type="long">8280</config:config-item>
+ <config:config-item config:name="ViewTop" config:type="long">2501</config:config-item>
+ <config:config-item config:name="VisibleLeft" config:type="long">0</config:config-item>
+ <config:config-item config:name="VisibleTop" config:type="long">0</config:config-item>
+ <config:config-item config:name="VisibleRight" config:type="long">32371</config:config-item>
+ <config:config-item config:name="VisibleBottom" config:type="long">18408</config:config-item>
+ <config:config-item config:name="ZoomType" config:type="short">0</config:config-item>
+ <config:config-item config:name="ViewLayoutColumns" config:type="short">1</config:config-item>
+ <config:config-item config:name="ViewLayoutBookMode" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ZoomFactor" config:type="short">110</config:config-item>
+ <config:config-item config:name="IsSelectedFrame" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="KeepRatio" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="LegacySingleLineFontwork" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ConnectorUseSnapRect" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IgnoreBreakAfterMultilineField" config:type="boolean">false</config:config-item>
+ </config:config-item-map-entry>
+ </config:config-item-map-indexed>
+ </config:config-item-set>
+ <config:config-item-set config:name="ooo:configuration-settings">
+ <config:config-item config:name="PrintPageBackground" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintGraphics" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintTables" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintProspectRTL" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintFaxName" config:type="string"/>
+ <config:config-item config:name="PrintProspect" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintReversed" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintRightPages" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintEmptyPages" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintControls" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="UseVariableWidthNBSP" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="NoNumberingShowFollowBy" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintSingleJobs" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="DisableOffPagePositioning" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="HyphenateURLs" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="MsWordCompMinLineHeightByFly" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AutoFirstLineIndentDisregardLineSpace" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="FrameAutowidthWithMorePara" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="HeaderSpacingBelowLastPara" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintAnnotationMode" config:type="short">0</config:config-item>
+ <config:config-item config:name="ImagePreferredDPI" config:type="int">0</config:config-item>
+ <config:config-item config:name="LoadReadonly" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ProtectBookmarks" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ContinuousEndnotes" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UnbreakableNumberings" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SubtractFlysAnchoredAtFlys" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PropLineSpacingShrinksFirstLine" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ApplyParagraphMarkFormatToNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TreatSingleColumnBreakAsPageBreak" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedComplexScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ProtectFields" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedOnlyUsedFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrinterSetup" config:type="base64Binary"/>
+ <config:config-item config:name="StylesNoDefault" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="OutlineLevelYieldsNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="RedlineProtectionKey" config:type="base64Binary"/>
+ <config:config-item config:name="CollapseEmptyCellPara" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintBlackFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="MsWordCompTrailingBlanks" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedSystemFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IgnoreTabsAndBlanksForLineCalculation" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="InvertBorderSpacing" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SmallCapsPercentage66" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="MathBaselineAlignment" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmptyDbFieldHidesPara" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ClippedPictures" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TabAtLeftIndentForParagraphsInList" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ProtectForm" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ConsiderTextWrapOnObjPos" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TabOverflow" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="DropCapPunctuation" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="IsLabelDocument" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbeddedDatabaseName" config:type="string"/>
+ <config:config-item config:name="UnxForceZeroExtLeading" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="FloattableNomargins" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="DoNotCaptureDrawObjsOnPage" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="GutterAtTop" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SurroundTextWrapSmall" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SaveGlobalDocumentLinks" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="CurrentDatabaseCommandType" config:type="int">0</config:config-item>
+ <config:config-item config:name="TableRowKeep" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="DoNotResetParaAttrsForNumFont" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TabOverMargin" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IgnoreFirstLineIndentInNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AlignTabStopPosition" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="UseFormerTextWrapping" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UseOldNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="BackgroundParaOverDrawings" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UseFormerObjectPositioning" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UseOldPrinterMetrics" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintTextPlaceholder" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TabOverSpacing" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="CurrentDatabaseCommand" config:type="string"/>
+ <config:config-item config:name="AddParaLineSpacingToTableCells" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="FootnoteInColumnToPageEnd" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AddParaSpacingToTableCells" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AddParaTableSpacingAtStart" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AddVerticalFrameOffsets" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ApplyUserData" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AllowPrintJobCancel" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintHiddenText" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="RsidRoot" config:type="int">233235</config:config-item>
+ <config:config-item config:name="TabsRelativeToIndent" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="UpdateFromTemplate" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="SaveVersionOnClose" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="CurrentDatabaseDataSource" config:type="string"/>
+ <config:config-item config:name="PrinterPaperFromSetup" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedAsianScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintPaperFromSetup" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrinterIndependentLayout" config:type="string">high-resolution</config:config-item>
+ <config:config-item config:name="LinkUpdateMode" config:type="short">1</config:config-item>
+ <config:config-item config:name="CharacterCompressionType" config:type="short">0</config:config-item>
+ <config:config-item config:name="FieldAutoUpdate" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="UseFormerLineSpacing" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IsKernAsianPunctuation" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintLeftPages" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="SaveThumbnail" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AddParaTableSpacing" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintDrawings" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmbedLatinScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ClipAsCharacterAnchoredWriterFlyFrames" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AddExternalLeading" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrinterName" config:type="string"/>
+ <config:config-item config:name="DoNotJustifyLinesWithManualBreak" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ChartAutoUpdate" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="Rsid" config:type="int">428527</config:config-item>
+ <config:config-item config:name="AddFrameOffsets" config:type="boolean">false</config:config-item>
+ </config:config-item-set>
+ </office:settings>
+ <office:scripts>
+ <office:script script:language="ooo:Basic">
+ <ooo:libraries xmlns:ooo="http://openoffice.org/2004/office" xmlns:xlink="http://www.w3.org/1999/xlink"/>
+ </office:script>
+ </office:scripts>
+ <office:font-face-decls>
+ <style:font-face style:name="Amiri" svg:font-family="Amiri"/>
+ <style:font-face style:name="Liberation Sans" svg:font-family="&apos;Liberation Sans&apos;" style:font-family-generic="swiss" style:font-pitch="variable"/>
+ <style:font-face style:name="Liberation Serif" svg:font-family="&apos;Liberation Serif&apos;" style:font-family-generic="roman" style:font-pitch="variable"/>
+ <style:font-face style:name="Mongolian Baiti" svg:font-family="&apos;Mongolian Baiti&apos;" style:font-pitch="variable"/>
+ <style:font-face style:name="PingFang SC" svg:font-family="&apos;PingFang SC&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="Songti SC" svg:font-family="&apos;Songti SC&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ </office:font-face-decls>
+ <office:styles>
+ <style:default-style style:family="graphic">
+ <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="8.5pt" draw:shadow-offset-y="8.5pt" draw:start-line-spacing-horizontal="8.02pt" draw:start-line-spacing-vertical="8.02pt" draw:end-line-spacing-horizontal="8.02pt" draw:end-line-spacing-vertical="8.02pt" style:writing-mode="lr-tb" style:flow-with-text="false"/>
+ <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" loext:tab-stop-distance="0pt" style:writing-mode="lr-tb" style:font-independent-line-spacing="false">
+ <style:tab-stops/>
+ </style:paragraph-properties>
+ <style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="en" fo:country="US" style:letter-kerning="true" style:font-name-asian="Songti SC" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Amiri" style:font-size-complex="12pt" style:language-complex="ar" style:country-complex="EG"/>
+ </style:default-style>
+ <style:default-style style:family="paragraph">
+ <style:paragraph-properties fo:orphans="2" fo:widows="2" fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="35.46pt" style:writing-mode="page"/>
+ <style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="en" fo:country="US" style:letter-kerning="true" style:font-name-asian="Songti SC" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Amiri" style:font-size-complex="12pt" style:language-complex="ar" style:country-complex="EG" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2" loext:hyphenation-no-caps="false" loext:hyphenation-no-last-word="false" loext:hyphenation-word-char-count="5" loext:hyphenation-zone="no-limit"/>
+ </style:default-style>
+ <style:default-style style:family="table">
+ <style:table-properties table:border-model="collapsing"/>
+ </style:default-style>
+ <style:default-style style:family="table-row">
+ <style:table-row-properties fo:keep-together="auto"/>
+ </style:default-style>
+ <style:style style:name="Standard" style:family="paragraph" style:class="text"/>
+ <style:style style:name="Heading" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text_20_body" style:class="text">
+ <style:paragraph-properties fo:margin-top="11.99pt" fo:margin-bottom="6.01pt" style:contextual-spacing="false" fo:keep-with-next="always"/>
+ <style:text-properties style:font-name="Liberation Sans" fo:font-family="&apos;Liberation Sans&apos;" style:font-family-generic="swiss" style:font-pitch="variable" fo:font-size="14pt" style:font-name-asian="PingFang SC" style:font-family-asian="&apos;PingFang SC&apos;" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="14pt" style:font-name-complex="Amiri" style:font-family-complex="Amiri" style:font-size-complex="14pt"/>
+ </style:style>
+ <style:style style:name="Text_20_body" style:display-name="Text body" style:family="paragraph" style:parent-style-name="Standard" style:class="text">
+ <style:paragraph-properties fo:margin-top="0pt" fo:margin-bottom="7pt" style:contextual-spacing="false" fo:line-height="115%"/>
+ </style:style>
+ <style:style style:name="List" style:family="paragraph" style:parent-style-name="Text_20_body" style:class="list">
+ <style:text-properties style:font-size-asian="12pt" style:font-name-complex="Amiri" style:font-family-complex="Amiri"/>
+ </style:style>
+ <style:style style:name="Caption" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
+ <style:paragraph-properties fo:margin-top="6.01pt" fo:margin-bottom="6.01pt" style:contextual-spacing="false" text:number-lines="false" text:line-number="0"/>
+ <style:text-properties fo:font-size="12pt" fo:font-style="italic" style:font-size-asian="12pt" style:font-style-asian="italic" style:font-name-complex="Amiri" style:font-family-complex="Amiri" style:font-size-complex="12pt" style:font-style-complex="italic"/>
+ </style:style>
+ <style:style style:name="Index" style:family="paragraph" style:parent-style-name="Standard" style:class="index">
+ <style:paragraph-properties text:number-lines="false" text:line-number="0"/>
+ <style:text-properties style:font-size-asian="12pt" style:font-name-complex="Amiri" style:font-family-complex="Amiri"/>
+ </style:style>
+ <text:outline-style style:name="Outline">
+ <text:outline-level-style text:level="1" loext:num-list-format="%1%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="2" loext:num-list-format="%2%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="3" loext:num-list-format="%3%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="4" loext:num-list-format="%4%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="5" loext:num-list-format="%5%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="6" loext:num-list-format="%6%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="7" loext:num-list-format="%7%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="8" loext:num-list-format="%8%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="9" loext:num-list-format="%9%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="10" loext:num-list-format="%10%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ </text:outline-style>
+ <text:notes-configuration text:note-class="footnote" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/>
+ <text:notes-configuration text:note-class="endnote" style:num-format="i" text:start-value="0"/>
+ <text:linenumbering-configuration text:number-lines="false" text:offset="14.14pt" style:num-format="1" text:number-position="left" text:increment="5"/>
+ <loext:theme loext:name="Office Theme">
+ <loext:theme-colors loext:name="LibreOffice">
+ <loext:color loext:name="dark1" loext:color="#000000"/>
+ <loext:color loext:name="light1" loext:color="#ffffff"/>
+ <loext:color loext:name="dark2" loext:color="#000000"/>
+ <loext:color loext:name="light2" loext:color="#ffffff"/>
+ <loext:color loext:name="accent1" loext:color="#18a303"/>
+ <loext:color loext:name="accent2" loext:color="#0369a3"/>
+ <loext:color loext:name="accent3" loext:color="#a33e03"/>
+ <loext:color loext:name="accent4" loext:color="#8e03a3"/>
+ <loext:color loext:name="accent5" loext:color="#c99c00"/>
+ <loext:color loext:name="accent6" loext:color="#c9211e"/>
+ <loext:color loext:name="hyperlink" loext:color="#0000ee"/>
+ <loext:color loext:name="followed-hyperlink" loext:color="#551a8b"/>
+ </loext:theme-colors>
+ </loext:theme>
+ </office:styles>
+ <office:automatic-styles>
+ <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Standard">
+ <style:text-properties style:rfc-language-tag-complex="mn-Mong-MN" style:language-complex="mn" style:script-complex="Mong" style:country-complex="MN"/>
+ </style:style>
+ <style:style style:name="P2" style:family="paragraph" style:parent-style-name="Standard">
+ <style:text-properties style:font-name="Mongolian Baiti" style:font-name-complex="Mongolian Baiti" style:rfc-language-tag-complex="mn-Mong-MN" style:language-complex="mn" style:script-complex="Mong" style:country-complex="MN"/>
+ </style:style>
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-width="595.3pt" fo:page-height="841.89pt" style:num-format="1" style:print-orientation="portrait" fo:margin-top="56.69pt" fo:margin-bottom="56.69pt" fo:margin-left="56.69pt" fo:margin-right="56.69pt" style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" style:layout-grid-lines="20" style:layout-grid-base-height="20.01pt" style:layout-grid-ruby-height="10.01pt" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="false" style:layout-grid-display="false" style:footnote-max-height="0pt" loext:margin-gutter="0pt">
+ <style:footnote-sep style:width="0.51pt" style:distance-before-sep="2.86pt" style:distance-after-sep="2.86pt" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style/>
+ </style:page-layout>
+ <style:style style:name="dp1" style:family="drawing-page">
+ <style:drawing-page-properties draw:background-size="full"/>
+ </style:style>
+ </office:automatic-styles>
+ <office:master-styles>
+ <style:master-page style:name="Standard" style:page-layout-name="pm1" draw:style-name="dp1"/>
+ </office:master-styles>
+ <office:body>
+ <office:text>
+ <text:sequence-decls>
+ <text:sequence-decl text:display-outline-level="0" text:name="Illustration"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Table"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Text"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Figure"/>
+ </text:sequence-decls>
+ <text:p text:style-name="P2">11 ᠤ</text:p>
+ </office:text>
+ </office:body>
+</office:document> \ No newline at end of file
diff --git a/sw/qa/core/text/data/tdf129810.odt b/sw/qa/core/text/data/tdf129810.odt
new file mode 100644
index 0000000000..b5a482b52c
--- /dev/null
+++ b/sw/qa/core/text/data/tdf129810.odt
Binary files differ
diff --git a/sw/qa/core/text/data/tdf139863.fodt b/sw/qa/core/text/data/tdf139863.fodt
new file mode 100644
index 0000000000..f930a5dafc
--- /dev/null
+++ b/sw/qa/core/text/data/tdf139863.fodt
@@ -0,0 +1,302 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<office:document xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:meta><meta:creation-date>2021-01-23T17:39:50.685073764</meta:creation-date><dc:date>2023-06-14T13:26:20.254164867</dc:date><meta:editing-duration>PT16M5S</meta:editing-duration><meta:editing-cycles>8</meta:editing-cycles><meta:generator>LibreOfficeDev/24.2.0.0.alpha0$MacOSX_X86_64 LibreOffice_project/bb582ae40e03e1729635b0f02331fe61f9cafea8</meta:generator><meta:document-statistic meta:table-count="0" meta:image-count="0" meta:object-count="0" meta:page-count="1" meta:paragraph-count="2" meta:word-count="3" meta:character-count="5" meta:non-whitespace-character-count="6"/></office:meta>
+ <office:settings>
+ <config:config-item-set config:name="ooo:view-settings">
+ <config:config-item config:name="ViewAreaTop" config:type="long">0</config:config-item>
+ <config:config-item config:name="ViewAreaLeft" config:type="long">0</config:config-item>
+ <config:config-item config:name="ViewAreaWidth" config:type="long">9694</config:config-item>
+ <config:config-item config:name="ViewAreaHeight" config:type="long">5487</config:config-item>
+ <config:config-item config:name="ShowRedlineChanges" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="InBrowseMode" config:type="boolean">false</config:config-item>
+ <config:config-item-map-indexed config:name="Views">
+ <config:config-item-map-entry>
+ <config:config-item config:name="ViewId" config:type="string">view2</config:config-item>
+ <config:config-item config:name="ViewLeft" config:type="long">3614</config:config-item>
+ <config:config-item config:name="ViewTop" config:type="long">3286</config:config-item>
+ <config:config-item config:name="VisibleLeft" config:type="long">0</config:config-item>
+ <config:config-item config:name="VisibleTop" config:type="long">0</config:config-item>
+ <config:config-item config:name="VisibleRight" config:type="long">9693</config:config-item>
+ <config:config-item config:name="VisibleBottom" config:type="long">5486</config:config-item>
+ <config:config-item config:name="ZoomType" config:type="short">0</config:config-item>
+ <config:config-item config:name="ViewLayoutColumns" config:type="short">1</config:config-item>
+ <config:config-item config:name="ViewLayoutBookMode" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ZoomFactor" config:type="short">334</config:config-item>
+ <config:config-item config:name="IsSelectedFrame" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="KeepRatio" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="LegacySingleLineFontwork" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ConnectorUseSnapRect" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IgnoreBreakAfterMultilineField" config:type="boolean">false</config:config-item>
+ </config:config-item-map-entry>
+ </config:config-item-map-indexed>
+ </config:config-item-set>
+ <config:config-item-set config:name="ooo:configuration-settings">
+ <config:config-item config:name="PrintPageBackground" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintGraphics" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintTables" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintProspectRTL" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintFaxName" config:type="string"/>
+ <config:config-item config:name="PrintProspect" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintReversed" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintRightPages" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintEmptyPages" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintControls" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="UseVariableWidthNBSP" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="NoNumberingShowFollowBy" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintSingleJobs" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="DisableOffPagePositioning" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="HyphenateURLs" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="MsWordCompMinLineHeightByFly" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AutoFirstLineIndentDisregardLineSpace" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="FrameAutowidthWithMorePara" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="HeaderSpacingBelowLastPara" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintAnnotationMode" config:type="short">0</config:config-item>
+ <config:config-item config:name="ImagePreferredDPI" config:type="int">0</config:config-item>
+ <config:config-item config:name="LoadReadonly" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ProtectBookmarks" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ContinuousEndnotes" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UnbreakableNumberings" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SubtractFlysAnchoredAtFlys" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PropLineSpacingShrinksFirstLine" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ApplyParagraphMarkFormatToNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TreatSingleColumnBreakAsPageBreak" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedComplexScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ProtectFields" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedOnlyUsedFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrinterSetup" config:type="base64Binary"/>
+ <config:config-item config:name="StylesNoDefault" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="OutlineLevelYieldsNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="RedlineProtectionKey" config:type="base64Binary"/>
+ <config:config-item config:name="CollapseEmptyCellPara" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintBlackFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="MsWordCompTrailingBlanks" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedSystemFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IgnoreTabsAndBlanksForLineCalculation" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="InvertBorderSpacing" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SmallCapsPercentage66" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="MathBaselineAlignment" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmptyDbFieldHidesPara" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ClippedPictures" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TabAtLeftIndentForParagraphsInList" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ProtectForm" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ConsiderTextWrapOnObjPos" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TabOverflow" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="DropCapPunctuation" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IsLabelDocument" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbeddedDatabaseName" config:type="string"/>
+ <config:config-item config:name="UnxForceZeroExtLeading" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="FloattableNomargins" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="DoNotCaptureDrawObjsOnPage" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="GutterAtTop" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SurroundTextWrapSmall" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SaveGlobalDocumentLinks" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="CurrentDatabaseCommandType" config:type="int">0</config:config-item>
+ <config:config-item config:name="TableRowKeep" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="DoNotResetParaAttrsForNumFont" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TabOverMargin" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IgnoreFirstLineIndentInNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AlignTabStopPosition" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="UseFormerTextWrapping" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UseOldNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="BackgroundParaOverDrawings" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UseFormerObjectPositioning" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UseOldPrinterMetrics" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintTextPlaceholder" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TabOverSpacing" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="CurrentDatabaseCommand" config:type="string"/>
+ <config:config-item config:name="AddParaLineSpacingToTableCells" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="FootnoteInColumnToPageEnd" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AddParaSpacingToTableCells" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AddParaTableSpacingAtStart" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AddVerticalFrameOffsets" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ApplyUserData" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AllowPrintJobCancel" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintHiddenText" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="RsidRoot" config:type="int">1789074</config:config-item>
+ <config:config-item config:name="TabsRelativeToIndent" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="UpdateFromTemplate" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="SaveVersionOnClose" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="CurrentDatabaseDataSource" config:type="string"/>
+ <config:config-item config:name="PrinterPaperFromSetup" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedAsianScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintPaperFromSetup" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrinterIndependentLayout" config:type="string">high-resolution</config:config-item>
+ <config:config-item config:name="LinkUpdateMode" config:type="short">1</config:config-item>
+ <config:config-item config:name="CharacterCompressionType" config:type="short">0</config:config-item>
+ <config:config-item config:name="FieldAutoUpdate" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="UseFormerLineSpacing" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IsKernAsianPunctuation" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintLeftPages" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="SaveThumbnail" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AddParaTableSpacing" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintDrawings" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmbedLatinScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ClipAsCharacterAnchoredWriterFlyFrames" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AddExternalLeading" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrinterName" config:type="string"/>
+ <config:config-item config:name="DoNotJustifyLinesWithManualBreak" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ChartAutoUpdate" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="Rsid" config:type="int">2307350</config:config-item>
+ <config:config-item config:name="AddFrameOffsets" config:type="boolean">false</config:config-item>
+ </config:config-item-set>
+ </office:settings>
+ <office:scripts>
+ <office:script script:language="ooo:Basic">
+ <ooo:libraries xmlns:ooo="http://openoffice.org/2004/office" xmlns:xlink="http://www.w3.org/1999/xlink"/>
+ </office:script>
+ </office:scripts>
+ <office:font-face-decls>
+ <style:font-face style:name="Liberation Sans" svg:font-family="&apos;Liberation Sans&apos;" style:font-family-generic="swiss" style:font-pitch="variable"/>
+ <style:font-face style:name="Liberation Serif" svg:font-family="&apos;Liberation Serif&apos;" style:font-family-generic="roman" style:font-pitch="variable"/>
+ <style:font-face style:name="Lohit Devanagari" svg:font-family="&apos;Lohit Devanagari&apos;"/>
+ <style:font-face style:name="Lohit Devanagari1" svg:font-family="&apos;Lohit Devanagari&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="Noto Sans CJK SC" svg:font-family="&apos;Noto Sans CJK SC&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="Noto Serif CJK SC" svg:font-family="&apos;Noto Serif CJK SC&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ </office:font-face-decls>
+ <office:styles>
+ <style:default-style style:family="graphic">
+ <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.1181in" draw:shadow-offset-y="0.1181in" draw:start-line-spacing-horizontal="0.1114in" draw:start-line-spacing-vertical="0.1114in" draw:end-line-spacing-horizontal="0.1114in" draw:end-line-spacing-vertical="0.1114in" style:writing-mode="lr-tb" style:flow-with-text="false"/>
+ <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" loext:tab-stop-distance="0in" style:writing-mode="lr-tb" style:font-independent-line-spacing="false">
+ <style:tab-stops/>
+ </style:paragraph-properties>
+ <style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="en" fo:country="IN" style:letter-kerning="true" style:font-name-asian="Noto Serif CJK SC" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Lohit Devanagari1" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/>
+ </style:default-style>
+ <style:default-style style:family="paragraph">
+ <style:paragraph-properties fo:orphans="2" fo:widows="2" fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="0.5in" style:writing-mode="page"/>
+ <style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="en" fo:country="IN" style:letter-kerning="true" style:font-name-asian="Noto Serif CJK SC" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Lohit Devanagari1" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2" loext:hyphenation-no-caps="false" loext:hyphenation-no-last-word="false" loext:hyphenation-word-char-count="no-limit" loext:hyphenation-zone="no-limit"/>
+ </style:default-style>
+ <style:default-style style:family="table">
+ <style:table-properties table:border-model="collapsing"/>
+ </style:default-style>
+ <style:default-style style:family="table-row">
+ <style:table-row-properties fo:keep-together="auto"/>
+ </style:default-style>
+ <style:style style:name="Standard" style:family="paragraph" style:class="text"/>
+ <style:style style:name="Heading" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text_20_body" style:class="text">
+ <style:paragraph-properties fo:margin-top="0.1665in" fo:margin-bottom="0.0835in" style:contextual-spacing="false" fo:keep-with-next="always"/>
+ <style:text-properties style:font-name="Liberation Sans" fo:font-family="&apos;Liberation Sans&apos;" style:font-family-generic="swiss" style:font-pitch="variable" fo:font-size="14pt" style:font-name-asian="Noto Sans CJK SC" style:font-family-asian="&apos;Noto Sans CJK SC&apos;" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="14pt" style:font-name-complex="Lohit Devanagari1" style:font-family-complex="&apos;Lohit Devanagari&apos;" style:font-family-generic-complex="system" style:font-pitch-complex="variable" style:font-size-complex="14pt"/>
+ </style:style>
+ <style:style style:name="Text_20_body" style:display-name="Text body" style:family="paragraph" style:parent-style-name="Standard" style:class="text">
+ <style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0.0972in" style:contextual-spacing="false" fo:line-height="115%"/>
+ </style:style>
+ <style:style style:name="List" style:family="paragraph" style:parent-style-name="Text_20_body" style:class="list">
+ <style:text-properties style:font-size-asian="12pt" style:font-name-complex="Lohit Devanagari" style:font-family-complex="&apos;Lohit Devanagari&apos;"/>
+ </style:style>
+ <style:style style:name="Caption" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
+ <style:paragraph-properties fo:margin-top="0.0835in" fo:margin-bottom="0.0835in" style:contextual-spacing="false" text:number-lines="false" text:line-number="0"/>
+ <style:text-properties fo:font-size="12pt" fo:font-style="italic" style:font-size-asian="12pt" style:font-style-asian="italic" style:font-name-complex="Lohit Devanagari" style:font-family-complex="&apos;Lohit Devanagari&apos;" style:font-size-complex="12pt" style:font-style-complex="italic"/>
+ </style:style>
+ <style:style style:name="Index" style:family="paragraph" style:parent-style-name="Standard" style:class="index">
+ <style:paragraph-properties text:number-lines="false" text:line-number="0"/>
+ <style:text-properties style:font-size-asian="12pt" style:font-name-complex="Lohit Devanagari" style:font-family-complex="&apos;Lohit Devanagari&apos;"/>
+ </style:style>
+ <style:style style:name="Addressee" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
+ <style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0.0417in" style:contextual-spacing="false" text:number-lines="false" text:line-number="0"/>
+ </style:style>
+ <text:outline-style style:name="Outline">
+ <text:outline-level-style text:level="1" loext:num-list-format="%1%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="2" loext:num-list-format="%2%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="3" loext:num-list-format="%3%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="4" loext:num-list-format="%4%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="5" loext:num-list-format="%5%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="6" loext:num-list-format="%6%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="7" loext:num-list-format="%7%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="8" loext:num-list-format="%8%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="9" loext:num-list-format="%9%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="10" loext:num-list-format="%10%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ </text:outline-style>
+ <text:notes-configuration text:note-class="footnote" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/>
+ <text:notes-configuration text:note-class="endnote" style:num-format="i" text:start-value="0"/>
+ <text:linenumbering-configuration text:number-lines="false" text:offset="0.1965in" style:num-format="1" text:number-position="left" text:increment="5"/>
+ <loext:theme loext:name="Office Theme">
+ <loext:theme-colors loext:name="LibreOffice">
+ <loext:color loext:name="dark1" loext:color="#000000"/>
+ <loext:color loext:name="light1" loext:color="#ffffff"/>
+ <loext:color loext:name="dark2" loext:color="#000000"/>
+ <loext:color loext:name="light2" loext:color="#ffffff"/>
+ <loext:color loext:name="accent1" loext:color="#18a303"/>
+ <loext:color loext:name="accent2" loext:color="#0369a3"/>
+ <loext:color loext:name="accent3" loext:color="#a33e03"/>
+ <loext:color loext:name="accent4" loext:color="#8e03a3"/>
+ <loext:color loext:name="accent5" loext:color="#c99c00"/>
+ <loext:color loext:name="accent6" loext:color="#c9211e"/>
+ <loext:color loext:name="hyperlink" loext:color="#0000ee"/>
+ <loext:color loext:name="followed-hyperlink" loext:color="#551a8b"/>
+ </loext:theme-colors>
+ </loext:theme>
+ </office:styles>
+ <office:automatic-styles>
+ <style:style style:name="T1" style:family="text">
+ <style:text-properties officeooo:rsid="0021d0d3"/>
+ </style:style>
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-width="8.2681in" fo:page-height="11.6929in" style:num-format="1" style:print-orientation="portrait" fo:margin-top="0.7874in" fo:margin-bottom="0.7874in" fo:margin-left="0.7874in" fo:margin-right="0.7874in" style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" style:layout-grid-lines="20" style:layout-grid-base-height="0.278in" style:layout-grid-ruby-height="0.139in" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="false" style:layout-grid-display="false" style:footnote-max-height="0in" loext:margin-gutter="0in">
+ <style:footnote-sep style:width="0.0071in" style:distance-before-sep="0.0398in" style:distance-after-sep="0.0398in" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style/>
+ </style:page-layout>
+ <style:style style:name="dp1" style:family="drawing-page">
+ <style:drawing-page-properties draw:background-size="full"/>
+ </style:style>
+ </office:automatic-styles>
+ <office:master-styles>
+ <style:master-page style:name="Standard" style:page-layout-name="pm1" draw:style-name="dp1"/>
+ </office:master-styles>
+ <office:body>
+ <office:text>
+ <text:sequence-decls>
+ <text:sequence-decl text:display-outline-level="0" text:name="Illustration"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Table"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Text"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Figure"/>
+ </text:sequence-decls>
+ <text:p text:style-name="Standard">𑌅॒𑌗ð‘</text:p>
+ <text:p text:style-name="Standard">నమ॑సà±à°¤à±‡</text:p>
+ </office:text>
+ </office:body>
+</office:document> \ No newline at end of file
diff --git a/sw/qa/core/text/data/tdf153040.docx b/sw/qa/core/text/data/tdf153040.docx
new file mode 100644
index 0000000000..27dc07601a
--- /dev/null
+++ b/sw/qa/core/text/data/tdf153040.docx
Binary files differ
diff --git a/sw/qa/core/text/data/tdf158505.odt b/sw/qa/core/text/data/tdf158505.odt
new file mode 100644
index 0000000000..c9a71033a2
--- /dev/null
+++ b/sw/qa/core/text/data/tdf158505.odt
Binary files differ
diff --git a/sw/qa/core/text/data/tdf41652_legacy.fodt b/sw/qa/core/text/data/tdf41652_legacy.fodt
new file mode 100644
index 0000000000..07761f24be
--- /dev/null
+++ b/sw/qa/core/text/data/tdf41652_legacy.fodt
@@ -0,0 +1,300 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<office:document xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:meta><meta:creation-date>2023-03-31T21:00:03.692629322</meta:creation-date><dc:date>2023-03-31T21:03:03.389379879</dc:date><meta:editing-duration>PT3M8S</meta:editing-duration><meta:editing-cycles>1</meta:editing-cycles><meta:document-statistic meta:table-count="0" meta:image-count="0" meta:object-count="0" meta:page-count="1" meta:paragraph-count="2" meta:word-count="8" meta:character-count="448" meta:non-whitespace-character-count="442"/><meta:generator>LibreOfficeDev/7.6.0.0.alpha0$Linux_X86_64 LibreOffice_project/34216608eb7387c697a92f1d64ea5ca7d26a292f</meta:generator></office:meta>
+ <office:settings>
+ <config:config-item-set config:name="ooo:view-settings">
+ <config:config-item config:name="ViewAreaTop" config:type="long">0</config:config-item>
+ <config:config-item config:name="ViewAreaLeft" config:type="long">0</config:config-item>
+ <config:config-item config:name="ViewAreaWidth" config:type="long">26615</config:config-item>
+ <config:config-item config:name="ViewAreaHeight" config:type="long">15436</config:config-item>
+ <config:config-item config:name="ShowRedlineChanges" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="InBrowseMode" config:type="boolean">false</config:config-item>
+ <config:config-item-map-indexed config:name="Views">
+ <config:config-item-map-entry>
+ <config:config-item config:name="ViewId" config:type="string">view2</config:config-item>
+ <config:config-item config:name="ViewLeft" config:type="long">16088</config:config-item>
+ <config:config-item config:name="ViewTop" config:type="long">3962</config:config-item>
+ <config:config-item config:name="VisibleLeft" config:type="long">0</config:config-item>
+ <config:config-item config:name="VisibleTop" config:type="long">0</config:config-item>
+ <config:config-item config:name="VisibleRight" config:type="long">26614</config:config-item>
+ <config:config-item config:name="VisibleBottom" config:type="long">15434</config:config-item>
+ <config:config-item config:name="ZoomType" config:type="short">0</config:config-item>
+ <config:config-item config:name="ViewLayoutColumns" config:type="short">1</config:config-item>
+ <config:config-item config:name="ViewLayoutBookMode" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ZoomFactor" config:type="short">120</config:config-item>
+ <config:config-item config:name="IsSelectedFrame" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="KeepRatio" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="LegacySingleLineFontwork" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ConnectorUseSnapRect" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IgnoreBreakAfterMultilineField" config:type="boolean">false</config:config-item>
+ </config:config-item-map-entry>
+ </config:config-item-map-indexed>
+ </config:config-item-set>
+ <config:config-item-set config:name="ooo:configuration-settings">
+ <config:config-item config:name="PrintRightPages" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintProspectRTL" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintLeftPages" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintPaperFromSetup" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintControls" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintProspect" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintBlackFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintEmptyPages" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintSingleJobs" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintAnnotationMode" config:type="short">0</config:config-item>
+ <config:config-item config:name="WordLikeWrapForAsCharFlys" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AutoFirstLineIndentDisregardLineSpace" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="HeaderSpacingBelowLastPara" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ProtectBookmarks" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ContinuousEndnotes" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="DisableOffPagePositioning" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintTables" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="SubtractFlysAnchoredAtFlys" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ApplyParagraphMarkFormatToNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintFaxName" config:type="string"/>
+ <config:config-item config:name="SurroundTextWrapSmall" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TreatSingleColumnBreakAsPageBreak" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PropLineSpacingShrinksFirstLine" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="TabOverSpacing" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TabOverMargin" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedComplexScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmbedLatinScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmbedOnlyUsedFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ClippedPictures" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="FrameAutowidthWithMorePara" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="FloattableNomargins" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UnbreakableNumberings" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AllowPrintJobCancel" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="UseFormerObjectPositioning" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UseOldNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="RsidRoot" config:type="int">204352</config:config-item>
+ <config:config-item config:name="PrinterPaperFromSetup" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="CurrentDatabaseDataSource" config:type="string"/>
+ <config:config-item config:name="UpdateFromTemplate" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AddFrameOffsets" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="LoadReadonly" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="Rsid" config:type="int">204352</config:config-item>
+ <config:config-item config:name="FootnoteInColumnToPageEnd" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ProtectFields" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SaveGlobalDocumentLinks" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ClipAsCharacterAnchoredWriterFlyFrames" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="LinkUpdateMode" config:type="short">1</config:config-item>
+ <config:config-item config:name="AddExternalLeading" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintGraphics" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmbedSystemFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IsLabelDocument" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AddParaLineSpacingToTableCells" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="UseFormerTextWrapping" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="HyphenateURLs" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AddParaTableSpacingAtStart" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="TabsRelativeToIndent" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="FieldAutoUpdate" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="SaveVersionOnClose" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ChartAutoUpdate" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ImagePreferredDPI" config:type="int">0</config:config-item>
+ <config:config-item config:name="PrinterSetup" config:type="base64Binary"/>
+ <config:config-item config:name="SmallCapsPercentage66" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AlignTabStopPosition" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="DropCapPunctuation" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="MathBaselineAlignment" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrinterName" config:type="string"/>
+ <config:config-item config:name="CharacterCompressionType" config:type="short">0</config:config-item>
+ <config:config-item config:name="AddParaTableSpacing" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="DoNotJustifyLinesWithManualBreak" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintHiddenText" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IsKernAsianPunctuation" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrinterIndependentLayout" config:type="string">high-resolution</config:config-item>
+ <config:config-item config:name="TabOverflow" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AddParaSpacingToTableCells" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AddVerticalFrameOffsets" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TabAtLeftIndentForParagraphsInList" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ApplyUserData" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="MsWordCompMinLineHeightByFly" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintTextPlaceholder" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IgnoreFirstLineIndentInNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UseFormerLineSpacing" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintPageBackground" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="RedlineProtectionKey" config:type="base64Binary"/>
+ <config:config-item config:name="EmbedAsianScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="BackgroundParaOverDrawings" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SaveThumbnail" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ConsiderTextWrapOnObjPos" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbeddedDatabaseName" config:type="string"/>
+ <config:config-item config:name="ProtectForm" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="DoNotResetParaAttrsForNumFont" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="MsWordCompTrailingBlanks" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmptyDbFieldHidesPara" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="TableRowKeep" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="NoNumberingShowFollowBy" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="InvertBorderSpacing" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IgnoreTabsAndBlanksForLineCalculation" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="DoNotCaptureDrawObjsOnPage" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="GutterAtTop" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="StylesNoDefault" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UnxForceZeroExtLeading" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintReversed" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UseOldPrinterMetrics" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="CurrentDatabaseCommandType" config:type="int">0</config:config-item>
+ <config:config-item config:name="PrintDrawings" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="OutlineLevelYieldsNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="CurrentDatabaseCommand" config:type="string"/>
+ <config:config-item config:name="CollapseEmptyCellPara" config:type="boolean">true</config:config-item>
+ </config:config-item-set>
+ </office:settings>
+ <office:scripts>
+ <office:script script:language="ooo:Basic">
+ <ooo:libraries xmlns:ooo="http://openoffice.org/2004/office" xmlns:xlink="http://www.w3.org/1999/xlink"/>
+ </office:script>
+ </office:scripts>
+ <office:font-face-decls>
+ <style:font-face style:name="Droid Sans Devanagari" svg:font-family="&apos;Droid Sans Devanagari&apos;" style:font-family-generic="swiss"/>
+ <style:font-face style:name="Droid Sans Devanagari1" svg:font-family="&apos;Droid Sans Devanagari&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="Droid Sans Fallback" svg:font-family="&apos;Droid Sans Fallback&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="Liberation Sans" svg:font-family="&apos;Liberation Sans&apos;" style:font-family-generic="swiss" style:font-pitch="variable"/>
+ <style:font-face style:name="Liberation Serif" svg:font-family="&apos;Liberation Serif&apos;" style:font-family-generic="roman" style:font-pitch="variable"/>
+ <style:font-face style:name="Source Han Sans CN" svg:font-family="&apos;Source Han Sans CN&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ </office:font-face-decls>
+ <office:styles>
+ <style:default-style style:family="graphic">
+ <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:flow-with-text="false"/>
+ <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" loext:tab-stop-distance="0cm" style:writing-mode="lr-tb" style:font-independent-line-spacing="false">
+ <style:tab-stops/>
+ </style:paragraph-properties>
+ <style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="cs" fo:country="CZ" style:letter-kerning="true" style:font-name-asian="Droid Sans Fallback" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Droid Sans Devanagari1" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/>
+ </style:default-style>
+ <style:default-style style:family="paragraph">
+ <style:paragraph-properties fo:orphans="2" fo:widows="2" fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="1.251cm" style:writing-mode="page"/>
+ <style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="cs" fo:country="CZ" style:letter-kerning="true" style:font-name-asian="Droid Sans Fallback" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Droid Sans Devanagari1" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2" loext:hyphenation-no-caps="false" loext:hyphenation-no-last-word="false" loext:hyphenation-word-char-count="5" loext:hyphenation-zone="no-limit"/>
+ </style:default-style>
+ <style:default-style style:family="table">
+ <style:table-properties table:border-model="collapsing"/>
+ </style:default-style>
+ <style:default-style style:family="table-row">
+ <style:table-row-properties fo:keep-together="auto"/>
+ </style:default-style>
+ <style:style style:name="Standard" style:family="paragraph" style:class="text"/>
+ <style:style style:name="Heading" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text_20_body" style:class="text">
+ <style:paragraph-properties fo:margin-top="0.423cm" fo:margin-bottom="0.212cm" style:contextual-spacing="false" fo:keep-with-next="always"/>
+ <style:text-properties style:font-name="Liberation Sans" fo:font-family="&apos;Liberation Sans&apos;" style:font-family-generic="swiss" style:font-pitch="variable" fo:font-size="14pt" style:font-name-asian="Source Han Sans CN" style:font-family-asian="&apos;Source Han Sans CN&apos;" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="14pt" style:font-name-complex="Droid Sans Devanagari1" style:font-family-complex="&apos;Droid Sans Devanagari&apos;" style:font-family-generic-complex="system" style:font-pitch-complex="variable" style:font-size-complex="14pt"/>
+ </style:style>
+ <style:style style:name="Text_20_body" style:display-name="Text body" style:family="paragraph" style:parent-style-name="Standard" style:class="text">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.247cm" style:contextual-spacing="false" fo:line-height="115%"/>
+ </style:style>
+ <style:style style:name="List" style:family="paragraph" style:parent-style-name="Text_20_body" style:class="list">
+ <style:text-properties style:font-size-asian="12pt" style:font-name-complex="Droid Sans Devanagari" style:font-family-complex="&apos;Droid Sans Devanagari&apos;" style:font-family-generic-complex="swiss"/>
+ </style:style>
+ <style:style style:name="Caption" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
+ <style:paragraph-properties fo:margin-top="0.212cm" fo:margin-bottom="0.212cm" style:contextual-spacing="false" text:number-lines="false" text:line-number="0"/>
+ <style:text-properties fo:font-size="12pt" fo:font-style="italic" style:font-size-asian="12pt" style:font-style-asian="italic" style:font-name-complex="Droid Sans Devanagari" style:font-family-complex="&apos;Droid Sans Devanagari&apos;" style:font-family-generic-complex="swiss" style:font-size-complex="12pt" style:font-style-complex="italic"/>
+ </style:style>
+ <style:style style:name="Index" style:family="paragraph" style:parent-style-name="Standard" style:class="index">
+ <style:paragraph-properties text:number-lines="false" text:line-number="0"/>
+ <style:text-properties style:font-size-asian="12pt" style:font-name-complex="Droid Sans Devanagari" style:font-family-complex="&apos;Droid Sans Devanagari&apos;" style:font-family-generic-complex="swiss"/>
+ </style:style>
+ <text:outline-style style:name="Outline">
+ <text:outline-level-style text:level="1" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="2" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="3" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="4" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="5" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="6" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="7" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="8" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="9" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="10" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ </text:outline-style>
+ <text:notes-configuration text:note-class="footnote" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/>
+ <text:notes-configuration text:note-class="endnote" style:num-format="i" text:start-value="0"/>
+ <text:linenumbering-configuration text:number-lines="false" text:offset="0.499cm" style:num-format="1" text:number-position="left" text:increment="5"/>
+ <loext:theme loext:name="Office">
+ <loext:color-table loext:name="LibreOffice">
+ <loext:color loext:name="dk1" loext:color="#000000"/>
+ <loext:color loext:name="lt1" loext:color="#ffffff"/>
+ <loext:color loext:name="dk2" loext:color="#000000"/>
+ <loext:color loext:name="lt2" loext:color="#ffffff"/>
+ <loext:color loext:name="accent1" loext:color="#18a303"/>
+ <loext:color loext:name="accent2" loext:color="#0369a3"/>
+ <loext:color loext:name="accent3" loext:color="#a33e03"/>
+ <loext:color loext:name="accent4" loext:color="#8e03a3"/>
+ <loext:color loext:name="accent5" loext:color="#c99c00"/>
+ <loext:color loext:name="accent6" loext:color="#c9211e"/>
+ <loext:color loext:name="hlink" loext:color="#0000ee"/>
+ <loext:color loext:name="folHlink" loext:color="#551a8b"/>
+ </loext:color-table>
+ </loext:theme>
+ </office:styles>
+ <office:automatic-styles>
+ <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Standard">
+ <style:text-properties officeooo:rsid="00031e40" officeooo:paragraph-rsid="00031e40"/>
+ </style:style>
+ <style:style style:name="P2" style:family="paragraph" style:parent-style-name="Standard">
+ <style:paragraph-properties fo:text-align="justify" style:justify-single-word="false"/>
+ <style:text-properties officeooo:rsid="00031e40" officeooo:paragraph-rsid="00031e40"/>
+ </style:style>
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-width="21.59cm" fo:page-height="27.94cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm" loext:margin-gutter="0cm">
+ <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style/>
+ </style:page-layout>
+ </office:automatic-styles>
+ <office:master-styles>
+ <style:master-page style:name="Standard" style:page-layout-name="pm1"/>
+ </office:master-styles>
+ <office:body>
+ <office:text>
+ <text:sequence-decls>
+ <text:sequence-decl text:display-outline-level="0" text:name="Illustration"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Table"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Text"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Figure"/>
+ </text:sequence-decls>
+ <text:p text:style-name="P1">Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</text:p>
+ <text:p text:style-name="P2">Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</text:p>
+ </office:text>
+ </office:body>
+</office:document> \ No newline at end of file
diff --git a/sw/qa/core/text/data/tdf41652_variableNBSPdisabled.fodt b/sw/qa/core/text/data/tdf41652_variableNBSPdisabled.fodt
new file mode 100644
index 0000000000..ced23ccf63
--- /dev/null
+++ b/sw/qa/core/text/data/tdf41652_variableNBSPdisabled.fodt
@@ -0,0 +1,301 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<office:document xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:meta><meta:creation-date>2023-03-31T21:00:03.692629322</meta:creation-date><dc:date>2023-03-31T21:03:03.389379879</dc:date><meta:editing-duration>PT3M8S</meta:editing-duration><meta:editing-cycles>1</meta:editing-cycles><meta:document-statistic meta:table-count="0" meta:image-count="0" meta:object-count="0" meta:page-count="1" meta:paragraph-count="2" meta:word-count="8" meta:character-count="448" meta:non-whitespace-character-count="442"/><meta:generator>LibreOfficeDev/7.6.0.0.alpha0$Linux_X86_64 LibreOffice_project/34216608eb7387c697a92f1d64ea5ca7d26a292f</meta:generator></office:meta>
+ <office:settings>
+ <config:config-item-set config:name="ooo:view-settings">
+ <config:config-item config:name="ViewAreaTop" config:type="long">0</config:config-item>
+ <config:config-item config:name="ViewAreaLeft" config:type="long">0</config:config-item>
+ <config:config-item config:name="ViewAreaWidth" config:type="long">26615</config:config-item>
+ <config:config-item config:name="ViewAreaHeight" config:type="long">15436</config:config-item>
+ <config:config-item config:name="ShowRedlineChanges" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="InBrowseMode" config:type="boolean">false</config:config-item>
+ <config:config-item-map-indexed config:name="Views">
+ <config:config-item-map-entry>
+ <config:config-item config:name="ViewId" config:type="string">view2</config:config-item>
+ <config:config-item config:name="ViewLeft" config:type="long">18978</config:config-item>
+ <config:config-item config:name="ViewTop" config:type="long">4935</config:config-item>
+ <config:config-item config:name="VisibleLeft" config:type="long">0</config:config-item>
+ <config:config-item config:name="VisibleTop" config:type="long">0</config:config-item>
+ <config:config-item config:name="VisibleRight" config:type="long">26614</config:config-item>
+ <config:config-item config:name="VisibleBottom" config:type="long">15434</config:config-item>
+ <config:config-item config:name="ZoomType" config:type="short">0</config:config-item>
+ <config:config-item config:name="ViewLayoutColumns" config:type="short">1</config:config-item>
+ <config:config-item config:name="ViewLayoutBookMode" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ZoomFactor" config:type="short">120</config:config-item>
+ <config:config-item config:name="IsSelectedFrame" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="KeepRatio" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="LegacySingleLineFontwork" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ConnectorUseSnapRect" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IgnoreBreakAfterMultilineField" config:type="boolean">false</config:config-item>
+ </config:config-item-map-entry>
+ </config:config-item-map-indexed>
+ </config:config-item-set>
+ <config:config-item-set config:name="ooo:configuration-settings">
+ <config:config-item config:name="PrintRightPages" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintProspectRTL" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintLeftPages" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintPaperFromSetup" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintControls" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintProspect" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintBlackFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintEmptyPages" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintSingleJobs" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintAnnotationMode" config:type="short">0</config:config-item>
+ <config:config-item config:name="WordLikeWrapForAsCharFlys" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AutoFirstLineIndentDisregardLineSpace" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="HeaderSpacingBelowLastPara" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ProtectBookmarks" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ContinuousEndnotes" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="DisableOffPagePositioning" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintTables" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="SubtractFlysAnchoredAtFlys" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ApplyParagraphMarkFormatToNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintFaxName" config:type="string"/>
+ <config:config-item config:name="SurroundTextWrapSmall" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TreatSingleColumnBreakAsPageBreak" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PropLineSpacingShrinksFirstLine" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="TabOverSpacing" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TabOverMargin" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedComplexScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmbedLatinScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmbedOnlyUsedFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ClippedPictures" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="FrameAutowidthWithMorePara" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="FloattableNomargins" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UnbreakableNumberings" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AllowPrintJobCancel" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="UseVariableWidthNBSP" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UseFormerObjectPositioning" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UseOldNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="RsidRoot" config:type="int">204352</config:config-item>
+ <config:config-item config:name="PrinterPaperFromSetup" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="CurrentDatabaseDataSource" config:type="string"/>
+ <config:config-item config:name="UpdateFromTemplate" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AddFrameOffsets" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="LoadReadonly" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="Rsid" config:type="int">204352</config:config-item>
+ <config:config-item config:name="FootnoteInColumnToPageEnd" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ProtectFields" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SaveGlobalDocumentLinks" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ClipAsCharacterAnchoredWriterFlyFrames" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="LinkUpdateMode" config:type="short">1</config:config-item>
+ <config:config-item config:name="AddExternalLeading" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintGraphics" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmbedSystemFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IsLabelDocument" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AddParaLineSpacingToTableCells" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="UseFormerTextWrapping" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="HyphenateURLs" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AddParaTableSpacingAtStart" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="TabsRelativeToIndent" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="FieldAutoUpdate" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="SaveVersionOnClose" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ChartAutoUpdate" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ImagePreferredDPI" config:type="int">0</config:config-item>
+ <config:config-item config:name="PrinterSetup" config:type="base64Binary"/>
+ <config:config-item config:name="SmallCapsPercentage66" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AlignTabStopPosition" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="DropCapPunctuation" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="MathBaselineAlignment" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrinterName" config:type="string"/>
+ <config:config-item config:name="CharacterCompressionType" config:type="short">0</config:config-item>
+ <config:config-item config:name="AddParaTableSpacing" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="DoNotJustifyLinesWithManualBreak" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintHiddenText" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IsKernAsianPunctuation" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrinterIndependentLayout" config:type="string">high-resolution</config:config-item>
+ <config:config-item config:name="TabOverflow" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AddParaSpacingToTableCells" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AddVerticalFrameOffsets" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TabAtLeftIndentForParagraphsInList" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ApplyUserData" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="MsWordCompMinLineHeightByFly" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintTextPlaceholder" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IgnoreFirstLineIndentInNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UseFormerLineSpacing" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintPageBackground" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="RedlineProtectionKey" config:type="base64Binary"/>
+ <config:config-item config:name="EmbedAsianScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="BackgroundParaOverDrawings" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SaveThumbnail" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ConsiderTextWrapOnObjPos" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbeddedDatabaseName" config:type="string"/>
+ <config:config-item config:name="ProtectForm" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="DoNotResetParaAttrsForNumFont" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="MsWordCompTrailingBlanks" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmptyDbFieldHidesPara" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="TableRowKeep" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="NoNumberingShowFollowBy" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="InvertBorderSpacing" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IgnoreTabsAndBlanksForLineCalculation" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="DoNotCaptureDrawObjsOnPage" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="GutterAtTop" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="StylesNoDefault" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UnxForceZeroExtLeading" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintReversed" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UseOldPrinterMetrics" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="CurrentDatabaseCommandType" config:type="int">0</config:config-item>
+ <config:config-item config:name="PrintDrawings" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="OutlineLevelYieldsNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="CurrentDatabaseCommand" config:type="string"/>
+ <config:config-item config:name="CollapseEmptyCellPara" config:type="boolean">true</config:config-item>
+ </config:config-item-set>
+ </office:settings>
+ <office:scripts>
+ <office:script script:language="ooo:Basic">
+ <ooo:libraries xmlns:ooo="http://openoffice.org/2004/office" xmlns:xlink="http://www.w3.org/1999/xlink"/>
+ </office:script>
+ </office:scripts>
+ <office:font-face-decls>
+ <style:font-face style:name="Droid Sans Devanagari" svg:font-family="&apos;Droid Sans Devanagari&apos;" style:font-family-generic="swiss"/>
+ <style:font-face style:name="Droid Sans Devanagari1" svg:font-family="&apos;Droid Sans Devanagari&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="Droid Sans Fallback" svg:font-family="&apos;Droid Sans Fallback&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="Liberation Sans" svg:font-family="&apos;Liberation Sans&apos;" style:font-family-generic="swiss" style:font-pitch="variable"/>
+ <style:font-face style:name="Liberation Serif" svg:font-family="&apos;Liberation Serif&apos;" style:font-family-generic="roman" style:font-pitch="variable"/>
+ <style:font-face style:name="Source Han Sans CN" svg:font-family="&apos;Source Han Sans CN&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ </office:font-face-decls>
+ <office:styles>
+ <style:default-style style:family="graphic">
+ <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:flow-with-text="false"/>
+ <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" loext:tab-stop-distance="0cm" style:writing-mode="lr-tb" style:font-independent-line-spacing="false">
+ <style:tab-stops/>
+ </style:paragraph-properties>
+ <style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="cs" fo:country="CZ" style:letter-kerning="true" style:font-name-asian="Droid Sans Fallback" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Droid Sans Devanagari1" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/>
+ </style:default-style>
+ <style:default-style style:family="paragraph">
+ <style:paragraph-properties fo:orphans="2" fo:widows="2" fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="1.251cm" style:writing-mode="page"/>
+ <style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="cs" fo:country="CZ" style:letter-kerning="true" style:font-name-asian="Droid Sans Fallback" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Droid Sans Devanagari1" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2" loext:hyphenation-no-caps="false" loext:hyphenation-no-last-word="false" loext:hyphenation-word-char-count="5" loext:hyphenation-zone="no-limit"/>
+ </style:default-style>
+ <style:default-style style:family="table">
+ <style:table-properties table:border-model="collapsing"/>
+ </style:default-style>
+ <style:default-style style:family="table-row">
+ <style:table-row-properties fo:keep-together="auto"/>
+ </style:default-style>
+ <style:style style:name="Standard" style:family="paragraph" style:class="text"/>
+ <style:style style:name="Heading" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text_20_body" style:class="text">
+ <style:paragraph-properties fo:margin-top="0.423cm" fo:margin-bottom="0.212cm" style:contextual-spacing="false" fo:keep-with-next="always"/>
+ <style:text-properties style:font-name="Liberation Sans" fo:font-family="&apos;Liberation Sans&apos;" style:font-family-generic="swiss" style:font-pitch="variable" fo:font-size="14pt" style:font-name-asian="Source Han Sans CN" style:font-family-asian="&apos;Source Han Sans CN&apos;" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="14pt" style:font-name-complex="Droid Sans Devanagari1" style:font-family-complex="&apos;Droid Sans Devanagari&apos;" style:font-family-generic-complex="system" style:font-pitch-complex="variable" style:font-size-complex="14pt"/>
+ </style:style>
+ <style:style style:name="Text_20_body" style:display-name="Text body" style:family="paragraph" style:parent-style-name="Standard" style:class="text">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.247cm" style:contextual-spacing="false" fo:line-height="115%"/>
+ </style:style>
+ <style:style style:name="List" style:family="paragraph" style:parent-style-name="Text_20_body" style:class="list">
+ <style:text-properties style:font-size-asian="12pt" style:font-name-complex="Droid Sans Devanagari" style:font-family-complex="&apos;Droid Sans Devanagari&apos;" style:font-family-generic-complex="swiss"/>
+ </style:style>
+ <style:style style:name="Caption" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
+ <style:paragraph-properties fo:margin-top="0.212cm" fo:margin-bottom="0.212cm" style:contextual-spacing="false" text:number-lines="false" text:line-number="0"/>
+ <style:text-properties fo:font-size="12pt" fo:font-style="italic" style:font-size-asian="12pt" style:font-style-asian="italic" style:font-name-complex="Droid Sans Devanagari" style:font-family-complex="&apos;Droid Sans Devanagari&apos;" style:font-family-generic-complex="swiss" style:font-size-complex="12pt" style:font-style-complex="italic"/>
+ </style:style>
+ <style:style style:name="Index" style:family="paragraph" style:parent-style-name="Standard" style:class="index">
+ <style:paragraph-properties text:number-lines="false" text:line-number="0"/>
+ <style:text-properties style:font-size-asian="12pt" style:font-name-complex="Droid Sans Devanagari" style:font-family-complex="&apos;Droid Sans Devanagari&apos;" style:font-family-generic-complex="swiss"/>
+ </style:style>
+ <text:outline-style style:name="Outline">
+ <text:outline-level-style text:level="1" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="2" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="3" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="4" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="5" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="6" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="7" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="8" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="9" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="10" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ </text:outline-style>
+ <text:notes-configuration text:note-class="footnote" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/>
+ <text:notes-configuration text:note-class="endnote" style:num-format="i" text:start-value="0"/>
+ <text:linenumbering-configuration text:number-lines="false" text:offset="0.499cm" style:num-format="1" text:number-position="left" text:increment="5"/>
+ <loext:theme loext:name="Office">
+ <loext:color-table loext:name="LibreOffice">
+ <loext:color loext:name="dk1" loext:color="#000000"/>
+ <loext:color loext:name="lt1" loext:color="#ffffff"/>
+ <loext:color loext:name="dk2" loext:color="#000000"/>
+ <loext:color loext:name="lt2" loext:color="#ffffff"/>
+ <loext:color loext:name="accent1" loext:color="#18a303"/>
+ <loext:color loext:name="accent2" loext:color="#0369a3"/>
+ <loext:color loext:name="accent3" loext:color="#a33e03"/>
+ <loext:color loext:name="accent4" loext:color="#8e03a3"/>
+ <loext:color loext:name="accent5" loext:color="#c99c00"/>
+ <loext:color loext:name="accent6" loext:color="#c9211e"/>
+ <loext:color loext:name="hlink" loext:color="#0000ee"/>
+ <loext:color loext:name="folHlink" loext:color="#551a8b"/>
+ </loext:color-table>
+ </loext:theme>
+ </office:styles>
+ <office:automatic-styles>
+ <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Standard">
+ <style:text-properties officeooo:rsid="00031e40" officeooo:paragraph-rsid="00031e40"/>
+ </style:style>
+ <style:style style:name="P2" style:family="paragraph" style:parent-style-name="Standard">
+ <style:paragraph-properties fo:text-align="justify" style:justify-single-word="false"/>
+ <style:text-properties officeooo:rsid="00031e40" officeooo:paragraph-rsid="00031e40"/>
+ </style:style>
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-width="21.59cm" fo:page-height="27.94cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm" loext:margin-gutter="0cm">
+ <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style/>
+ </style:page-layout>
+ </office:automatic-styles>
+ <office:master-styles>
+ <style:master-page style:name="Standard" style:page-layout-name="pm1"/>
+ </office:master-styles>
+ <office:body>
+ <office:text>
+ <text:sequence-decls>
+ <text:sequence-decl text:display-outline-level="0" text:name="Illustration"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Table"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Text"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Figure"/>
+ </text:sequence-decls>
+ <text:p text:style-name="P1">Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</text:p>
+ <text:p text:style-name="P2">Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</text:p>
+ </office:text>
+ </office:body>
+</office:document> \ No newline at end of file
diff --git a/sw/qa/core/text/data/tdf41652_variableNBSPenabled.fodt b/sw/qa/core/text/data/tdf41652_variableNBSPenabled.fodt
new file mode 100644
index 0000000000..60432ade34
--- /dev/null
+++ b/sw/qa/core/text/data/tdf41652_variableNBSPenabled.fodt
@@ -0,0 +1,301 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<office:document xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:meta><meta:creation-date>2023-03-31T21:00:03.692629322</meta:creation-date><dc:date>2023-03-31T21:04:31.905519901</dc:date><meta:editing-duration>PT4M36S</meta:editing-duration><meta:editing-cycles>2</meta:editing-cycles><meta:generator>LibreOfficeDev/7.6.0.0.alpha0$Linux_X86_64 LibreOffice_project/34216608eb7387c697a92f1d64ea5ca7d26a292f</meta:generator><meta:document-statistic meta:table-count="0" meta:image-count="0" meta:object-count="0" meta:page-count="1" meta:paragraph-count="2" meta:word-count="8" meta:character-count="448" meta:non-whitespace-character-count="442"/></office:meta>
+ <office:settings>
+ <config:config-item-set config:name="ooo:view-settings">
+ <config:config-item config:name="ViewAreaTop" config:type="long">0</config:config-item>
+ <config:config-item config:name="ViewAreaLeft" config:type="long">0</config:config-item>
+ <config:config-item config:name="ViewAreaWidth" config:type="long">26615</config:config-item>
+ <config:config-item config:name="ViewAreaHeight" config:type="long">15436</config:config-item>
+ <config:config-item config:name="ShowRedlineChanges" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="InBrowseMode" config:type="boolean">false</config:config-item>
+ <config:config-item-map-indexed config:name="Views">
+ <config:config-item-map-entry>
+ <config:config-item config:name="ViewId" config:type="string">view2</config:config-item>
+ <config:config-item config:name="ViewLeft" config:type="long">18907</config:config-item>
+ <config:config-item config:name="ViewTop" config:type="long">3962</config:config-item>
+ <config:config-item config:name="VisibleLeft" config:type="long">0</config:config-item>
+ <config:config-item config:name="VisibleTop" config:type="long">0</config:config-item>
+ <config:config-item config:name="VisibleRight" config:type="long">26614</config:config-item>
+ <config:config-item config:name="VisibleBottom" config:type="long">15434</config:config-item>
+ <config:config-item config:name="ZoomType" config:type="short">0</config:config-item>
+ <config:config-item config:name="ViewLayoutColumns" config:type="short">1</config:config-item>
+ <config:config-item config:name="ViewLayoutBookMode" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ZoomFactor" config:type="short">120</config:config-item>
+ <config:config-item config:name="IsSelectedFrame" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="KeepRatio" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="LegacySingleLineFontwork" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ConnectorUseSnapRect" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IgnoreBreakAfterMultilineField" config:type="boolean">false</config:config-item>
+ </config:config-item-map-entry>
+ </config:config-item-map-indexed>
+ </config:config-item-set>
+ <config:config-item-set config:name="ooo:configuration-settings">
+ <config:config-item config:name="PrintRightPages" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintProspectRTL" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintLeftPages" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintPaperFromSetup" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintControls" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintProspect" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintBlackFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintEmptyPages" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintSingleJobs" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintAnnotationMode" config:type="short">0</config:config-item>
+ <config:config-item config:name="WordLikeWrapForAsCharFlys" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AutoFirstLineIndentDisregardLineSpace" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="HeaderSpacingBelowLastPara" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ProtectBookmarks" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ContinuousEndnotes" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="DisableOffPagePositioning" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintTables" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="SubtractFlysAnchoredAtFlys" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ApplyParagraphMarkFormatToNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintFaxName" config:type="string"/>
+ <config:config-item config:name="SurroundTextWrapSmall" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TreatSingleColumnBreakAsPageBreak" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PropLineSpacingShrinksFirstLine" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="TabOverSpacing" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TabOverMargin" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedComplexScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmbedLatinScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmbedOnlyUsedFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ClippedPictures" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="FrameAutowidthWithMorePara" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="FloattableNomargins" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UnbreakableNumberings" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AllowPrintJobCancel" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="UseVariableWidthNBSP" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="UseFormerObjectPositioning" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UseOldNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="RsidRoot" config:type="int">204352</config:config-item>
+ <config:config-item config:name="PrinterPaperFromSetup" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="CurrentDatabaseDataSource" config:type="string"/>
+ <config:config-item config:name="UpdateFromTemplate" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AddFrameOffsets" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="LoadReadonly" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="Rsid" config:type="int">204352</config:config-item>
+ <config:config-item config:name="FootnoteInColumnToPageEnd" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ProtectFields" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SaveGlobalDocumentLinks" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ClipAsCharacterAnchoredWriterFlyFrames" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="LinkUpdateMode" config:type="short">1</config:config-item>
+ <config:config-item config:name="AddExternalLeading" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintGraphics" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmbedSystemFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IsLabelDocument" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AddParaLineSpacingToTableCells" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="UseFormerTextWrapping" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="HyphenateURLs" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AddParaTableSpacingAtStart" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="TabsRelativeToIndent" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="FieldAutoUpdate" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="SaveVersionOnClose" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ChartAutoUpdate" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ImagePreferredDPI" config:type="int">0</config:config-item>
+ <config:config-item config:name="PrinterSetup" config:type="base64Binary"/>
+ <config:config-item config:name="SmallCapsPercentage66" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AlignTabStopPosition" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="DropCapPunctuation" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="MathBaselineAlignment" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrinterName" config:type="string"/>
+ <config:config-item config:name="CharacterCompressionType" config:type="short">0</config:config-item>
+ <config:config-item config:name="AddParaTableSpacing" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="DoNotJustifyLinesWithManualBreak" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintHiddenText" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IsKernAsianPunctuation" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrinterIndependentLayout" config:type="string">high-resolution</config:config-item>
+ <config:config-item config:name="TabOverflow" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AddParaSpacingToTableCells" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AddVerticalFrameOffsets" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TabAtLeftIndentForParagraphsInList" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ApplyUserData" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="MsWordCompMinLineHeightByFly" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintTextPlaceholder" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IgnoreFirstLineIndentInNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UseFormerLineSpacing" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintPageBackground" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="RedlineProtectionKey" config:type="base64Binary"/>
+ <config:config-item config:name="EmbedAsianScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="BackgroundParaOverDrawings" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SaveThumbnail" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ConsiderTextWrapOnObjPos" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbeddedDatabaseName" config:type="string"/>
+ <config:config-item config:name="ProtectForm" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="DoNotResetParaAttrsForNumFont" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="MsWordCompTrailingBlanks" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmptyDbFieldHidesPara" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="TableRowKeep" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="NoNumberingShowFollowBy" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="InvertBorderSpacing" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IgnoreTabsAndBlanksForLineCalculation" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="DoNotCaptureDrawObjsOnPage" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="GutterAtTop" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="StylesNoDefault" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UnxForceZeroExtLeading" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintReversed" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UseOldPrinterMetrics" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="CurrentDatabaseCommandType" config:type="int">0</config:config-item>
+ <config:config-item config:name="PrintDrawings" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="OutlineLevelYieldsNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="CurrentDatabaseCommand" config:type="string"/>
+ <config:config-item config:name="CollapseEmptyCellPara" config:type="boolean">true</config:config-item>
+ </config:config-item-set>
+ </office:settings>
+ <office:scripts>
+ <office:script script:language="ooo:Basic">
+ <ooo:libraries xmlns:ooo="http://openoffice.org/2004/office" xmlns:xlink="http://www.w3.org/1999/xlink"/>
+ </office:script>
+ </office:scripts>
+ <office:font-face-decls>
+ <style:font-face style:name="Droid Sans Devanagari" svg:font-family="&apos;Droid Sans Devanagari&apos;" style:font-family-generic="swiss"/>
+ <style:font-face style:name="Droid Sans Devanagari1" svg:font-family="&apos;Droid Sans Devanagari&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="Droid Sans Fallback" svg:font-family="&apos;Droid Sans Fallback&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="Liberation Sans" svg:font-family="&apos;Liberation Sans&apos;" style:font-family-generic="swiss" style:font-pitch="variable"/>
+ <style:font-face style:name="Liberation Serif" svg:font-family="&apos;Liberation Serif&apos;" style:font-family-generic="roman" style:font-pitch="variable"/>
+ <style:font-face style:name="Source Han Sans CN" svg:font-family="&apos;Source Han Sans CN&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ </office:font-face-decls>
+ <office:styles>
+ <style:default-style style:family="graphic">
+ <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:flow-with-text="false"/>
+ <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" loext:tab-stop-distance="0cm" style:writing-mode="lr-tb" style:font-independent-line-spacing="false">
+ <style:tab-stops/>
+ </style:paragraph-properties>
+ <style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="cs" fo:country="CZ" style:letter-kerning="true" style:font-name-asian="Droid Sans Fallback" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Droid Sans Devanagari1" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN"/>
+ </style:default-style>
+ <style:default-style style:family="paragraph">
+ <style:paragraph-properties fo:orphans="2" fo:widows="2" fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="1.251cm" style:writing-mode="page"/>
+ <style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="cs" fo:country="CZ" style:letter-kerning="true" style:font-name-asian="Droid Sans Fallback" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Droid Sans Devanagari1" style:font-size-complex="12pt" style:language-complex="hi" style:country-complex="IN" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2" loext:hyphenation-no-caps="false" loext:hyphenation-no-last-word="false" loext:hyphenation-word-char-count="5" loext:hyphenation-zone="no-limit"/>
+ </style:default-style>
+ <style:default-style style:family="table">
+ <style:table-properties table:border-model="collapsing"/>
+ </style:default-style>
+ <style:default-style style:family="table-row">
+ <style:table-row-properties fo:keep-together="auto"/>
+ </style:default-style>
+ <style:style style:name="Standard" style:family="paragraph" style:class="text"/>
+ <style:style style:name="Heading" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text_20_body" style:class="text">
+ <style:paragraph-properties fo:margin-top="0.423cm" fo:margin-bottom="0.212cm" style:contextual-spacing="false" fo:keep-with-next="always"/>
+ <style:text-properties style:font-name="Liberation Sans" fo:font-family="&apos;Liberation Sans&apos;" style:font-family-generic="swiss" style:font-pitch="variable" fo:font-size="14pt" style:font-name-asian="Source Han Sans CN" style:font-family-asian="&apos;Source Han Sans CN&apos;" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="14pt" style:font-name-complex="Droid Sans Devanagari1" style:font-family-complex="&apos;Droid Sans Devanagari&apos;" style:font-family-generic-complex="system" style:font-pitch-complex="variable" style:font-size-complex="14pt"/>
+ </style:style>
+ <style:style style:name="Text_20_body" style:display-name="Text body" style:family="paragraph" style:parent-style-name="Standard" style:class="text">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.247cm" style:contextual-spacing="false" fo:line-height="115%"/>
+ </style:style>
+ <style:style style:name="List" style:family="paragraph" style:parent-style-name="Text_20_body" style:class="list">
+ <style:text-properties style:font-size-asian="12pt" style:font-name-complex="Droid Sans Devanagari" style:font-family-complex="&apos;Droid Sans Devanagari&apos;" style:font-family-generic-complex="swiss"/>
+ </style:style>
+ <style:style style:name="Caption" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
+ <style:paragraph-properties fo:margin-top="0.212cm" fo:margin-bottom="0.212cm" style:contextual-spacing="false" text:number-lines="false" text:line-number="0"/>
+ <style:text-properties fo:font-size="12pt" fo:font-style="italic" style:font-size-asian="12pt" style:font-style-asian="italic" style:font-name-complex="Droid Sans Devanagari" style:font-family-complex="&apos;Droid Sans Devanagari&apos;" style:font-family-generic-complex="swiss" style:font-size-complex="12pt" style:font-style-complex="italic"/>
+ </style:style>
+ <style:style style:name="Index" style:family="paragraph" style:parent-style-name="Standard" style:class="index">
+ <style:paragraph-properties text:number-lines="false" text:line-number="0"/>
+ <style:text-properties style:font-size-asian="12pt" style:font-name-complex="Droid Sans Devanagari" style:font-family-complex="&apos;Droid Sans Devanagari&apos;" style:font-family-generic-complex="swiss"/>
+ </style:style>
+ <text:outline-style style:name="Outline">
+ <text:outline-level-style text:level="1" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="2" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="3" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="4" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="5" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="6" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="7" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="8" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="9" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="10" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ </text:outline-style>
+ <text:notes-configuration text:note-class="footnote" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/>
+ <text:notes-configuration text:note-class="endnote" style:num-format="i" text:start-value="0"/>
+ <text:linenumbering-configuration text:number-lines="false" text:offset="0.499cm" style:num-format="1" text:number-position="left" text:increment="5"/>
+ <loext:theme loext:name="Office">
+ <loext:color-table loext:name="LibreOffice">
+ <loext:color loext:name="dk1" loext:color="#000000"/>
+ <loext:color loext:name="lt1" loext:color="#ffffff"/>
+ <loext:color loext:name="dk2" loext:color="#000000"/>
+ <loext:color loext:name="lt2" loext:color="#ffffff"/>
+ <loext:color loext:name="accent1" loext:color="#18a303"/>
+ <loext:color loext:name="accent2" loext:color="#0369a3"/>
+ <loext:color loext:name="accent3" loext:color="#a33e03"/>
+ <loext:color loext:name="accent4" loext:color="#8e03a3"/>
+ <loext:color loext:name="accent5" loext:color="#c99c00"/>
+ <loext:color loext:name="accent6" loext:color="#c9211e"/>
+ <loext:color loext:name="hlink" loext:color="#0000ee"/>
+ <loext:color loext:name="folHlink" loext:color="#551a8b"/>
+ </loext:color-table>
+ </loext:theme>
+ </office:styles>
+ <office:automatic-styles>
+ <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Standard">
+ <style:text-properties officeooo:rsid="00031e40" officeooo:paragraph-rsid="00031e40"/>
+ </style:style>
+ <style:style style:name="P2" style:family="paragraph" style:parent-style-name="Standard">
+ <style:paragraph-properties fo:text-align="justify" style:justify-single-word="false"/>
+ <style:text-properties officeooo:rsid="00031e40" officeooo:paragraph-rsid="00031e40"/>
+ </style:style>
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-width="21.59cm" fo:page-height="27.94cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm" loext:margin-gutter="0cm">
+ <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style/>
+ </style:page-layout>
+ </office:automatic-styles>
+ <office:master-styles>
+ <style:master-page style:name="Standard" style:page-layout-name="pm1"/>
+ </office:master-styles>
+ <office:body>
+ <office:text>
+ <text:sequence-decls>
+ <text:sequence-decl text:display-outline-level="0" text:name="Illustration"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Table"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Text"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Figure"/>
+ </text:sequence-decls>
+ <text:p text:style-name="P1">Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</text:p>
+ <text:p text:style-name="P2">Aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</text:p>
+ </office:text>
+ </office:body>
+</office:document> \ No newline at end of file
diff --git a/sw/qa/core/text/data/tdf43100_tdf120715_cursorOnSpacesOverMargin.docx b/sw/qa/core/text/data/tdf43100_tdf120715_cursorOnSpacesOverMargin.docx
new file mode 100644
index 0000000000..474d805d89
--- /dev/null
+++ b/sw/qa/core/text/data/tdf43100_tdf120715_cursorOnSpacesOverMargin.docx
Binary files differ
diff --git a/sw/qa/core/text/data/tdf89288.fodt b/sw/qa/core/text/data/tdf89288.fodt
new file mode 100644
index 0000000000..05f702738b
--- /dev/null
+++ b/sw/qa/core/text/data/tdf89288.fodt
@@ -0,0 +1,307 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<office:document xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:meta><meta:creation-date>2023-06-14T11:31:39.179780521</meta:creation-date><dc:date>2023-06-14T12:06:47.703038749</dc:date><meta:editing-duration>PT5M47S</meta:editing-duration><meta:editing-cycles>8</meta:editing-cycles><meta:generator>LibreOfficeDev/24.2.0.0.alpha0$MacOSX_X86_64 LibreOffice_project/ee76ed70e97448082f4c00c5c4207a44e1a91617</meta:generator><meta:document-statistic meta:table-count="0" meta:image-count="0" meta:object-count="0" meta:page-count="1" meta:paragraph-count="4" meta:word-count="14" meta:character-count="26" meta:non-whitespace-character-count="26"/></office:meta>
+ <office:settings>
+ <config:config-item-set config:name="ooo:view-settings">
+ <config:config-item config:name="ViewAreaTop" config:type="long">1323</config:config-item>
+ <config:config-item config:name="ViewAreaLeft" config:type="long">0</config:config-item>
+ <config:config-item config:name="ViewAreaWidth" config:type="long">8915</config:config-item>
+ <config:config-item config:name="ViewAreaHeight" config:type="long">4406</config:config-item>
+ <config:config-item config:name="ShowRedlineChanges" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="InBrowseMode" config:type="boolean">false</config:config-item>
+ <config:config-item-map-indexed config:name="Views">
+ <config:config-item-map-entry>
+ <config:config-item config:name="ViewId" config:type="string">view2</config:config-item>
+ <config:config-item config:name="ViewLeft" config:type="long">2501</config:config-item>
+ <config:config-item config:name="ViewTop" config:type="long">2501</config:config-item>
+ <config:config-item config:name="VisibleLeft" config:type="long">0</config:config-item>
+ <config:config-item config:name="VisibleTop" config:type="long">1323</config:config-item>
+ <config:config-item config:name="VisibleRight" config:type="long">8913</config:config-item>
+ <config:config-item config:name="VisibleBottom" config:type="long">5727</config:config-item>
+ <config:config-item config:name="ZoomType" config:type="short">0</config:config-item>
+ <config:config-item config:name="ViewLayoutColumns" config:type="short">1</config:config-item>
+ <config:config-item config:name="ViewLayoutBookMode" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ZoomFactor" config:type="short">416</config:config-item>
+ <config:config-item config:name="IsSelectedFrame" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="KeepRatio" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="LegacySingleLineFontwork" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ConnectorUseSnapRect" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IgnoreBreakAfterMultilineField" config:type="boolean">false</config:config-item>
+ </config:config-item-map-entry>
+ </config:config-item-map-indexed>
+ </config:config-item-set>
+ <config:config-item-set config:name="ooo:configuration-settings">
+ <config:config-item config:name="PrintPageBackground" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintGraphics" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintTables" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintProspectRTL" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintFaxName" config:type="string"/>
+ <config:config-item config:name="PrintProspect" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintReversed" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintRightPages" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintEmptyPages" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintControls" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="UseVariableWidthNBSP" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="NoNumberingShowFollowBy" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintSingleJobs" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="DisableOffPagePositioning" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="HyphenateURLs" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="MsWordCompMinLineHeightByFly" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AutoFirstLineIndentDisregardLineSpace" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="FrameAutowidthWithMorePara" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="HeaderSpacingBelowLastPara" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintAnnotationMode" config:type="short">0</config:config-item>
+ <config:config-item config:name="ImagePreferredDPI" config:type="int">0</config:config-item>
+ <config:config-item config:name="LoadReadonly" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ProtectBookmarks" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ContinuousEndnotes" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UnbreakableNumberings" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SubtractFlysAnchoredAtFlys" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PropLineSpacingShrinksFirstLine" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ApplyParagraphMarkFormatToNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TreatSingleColumnBreakAsPageBreak" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedComplexScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ProtectFields" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedOnlyUsedFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrinterSetup" config:type="base64Binary"/>
+ <config:config-item config:name="StylesNoDefault" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="OutlineLevelYieldsNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="RedlineProtectionKey" config:type="base64Binary"/>
+ <config:config-item config:name="CollapseEmptyCellPara" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintBlackFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="MsWordCompTrailingBlanks" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedSystemFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IgnoreTabsAndBlanksForLineCalculation" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="InvertBorderSpacing" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SmallCapsPercentage66" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="MathBaselineAlignment" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmptyDbFieldHidesPara" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ClippedPictures" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TabAtLeftIndentForParagraphsInList" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ProtectForm" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ConsiderTextWrapOnObjPos" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TabOverflow" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="DropCapPunctuation" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="IsLabelDocument" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbeddedDatabaseName" config:type="string"/>
+ <config:config-item config:name="UnxForceZeroExtLeading" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="FloattableNomargins" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="DoNotCaptureDrawObjsOnPage" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="GutterAtTop" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SurroundTextWrapSmall" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SaveGlobalDocumentLinks" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="CurrentDatabaseCommandType" config:type="int">0</config:config-item>
+ <config:config-item config:name="TableRowKeep" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="DoNotResetParaAttrsForNumFont" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TabOverMargin" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IgnoreFirstLineIndentInNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AlignTabStopPosition" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="UseFormerTextWrapping" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UseOldNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="BackgroundParaOverDrawings" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UseFormerObjectPositioning" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UseOldPrinterMetrics" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintTextPlaceholder" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="TabOverSpacing" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="CurrentDatabaseCommand" config:type="string"/>
+ <config:config-item config:name="AddParaLineSpacingToTableCells" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="FootnoteInColumnToPageEnd" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AddParaSpacingToTableCells" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AddParaTableSpacingAtStart" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AddVerticalFrameOffsets" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ApplyUserData" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AllowPrintJobCancel" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintHiddenText" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="RsidRoot" config:type="int">1807769</config:config-item>
+ <config:config-item config:name="TabsRelativeToIndent" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="UpdateFromTemplate" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="SaveVersionOnClose" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="CurrentDatabaseDataSource" config:type="string"/>
+ <config:config-item config:name="PrinterPaperFromSetup" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedAsianScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintPaperFromSetup" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrinterIndependentLayout" config:type="string">high-resolution</config:config-item>
+ <config:config-item config:name="LinkUpdateMode" config:type="short">1</config:config-item>
+ <config:config-item config:name="CharacterCompressionType" config:type="short">0</config:config-item>
+ <config:config-item config:name="FieldAutoUpdate" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="UseFormerLineSpacing" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IsKernAsianPunctuation" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintLeftPages" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="SaveThumbnail" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AddParaTableSpacing" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintDrawings" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmbedLatinScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ClipAsCharacterAnchoredWriterFlyFrames" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AddExternalLeading" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrinterName" config:type="string"/>
+ <config:config-item config:name="DoNotJustifyLinesWithManualBreak" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ChartAutoUpdate" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="Rsid" config:type="int">2146757</config:config-item>
+ <config:config-item config:name="AddFrameOffsets" config:type="boolean">false</config:config-item>
+ </config:config-item-set>
+ </office:settings>
+ <office:scripts>
+ <office:script script:language="ooo:Basic">
+ <ooo:libraries xmlns:ooo="http://openoffice.org/2004/office" xmlns:xlink="http://www.w3.org/1999/xlink"/>
+ </office:script>
+ </office:scripts>
+ <office:font-face-decls>
+ <style:font-face style:name="Liberation Sans" svg:font-family="&apos;Liberation Sans&apos;" style:font-family-generic="swiss" style:font-pitch="variable"/>
+ <style:font-face style:name="Liberation Serif" svg:font-family="&apos;Liberation Serif&apos;" style:font-family-generic="roman" style:font-pitch="variable"/>
+ <style:font-face style:name="Noto Sans Lao" svg:font-family="&apos;Noto Sans Lao&apos;" style:font-adornments="Regular" style:font-family-generic="swiss" style:font-pitch="variable"/>
+ <style:font-face style:name="PingFang SC" svg:font-family="&apos;PingFang SC&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="Songti SC" svg:font-family="&apos;Songti SC&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="Tahoma" svg:font-family="Tahoma" style:font-family-generic="swiss"/>
+ <style:font-face style:name="Tahoma1" svg:font-family="Tahoma" style:font-family-generic="system" style:font-pitch="variable"/>
+ </office:font-face-decls>
+ <office:styles>
+ <style:default-style style:family="graphic">
+ <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.1181in" draw:shadow-offset-y="0.1181in" draw:start-line-spacing-horizontal="0.1114in" draw:start-line-spacing-vertical="0.1114in" draw:end-line-spacing-horizontal="0.1114in" draw:end-line-spacing-vertical="0.1114in" style:writing-mode="lr-tb" style:flow-with-text="false"/>
+ <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" loext:tab-stop-distance="0in" style:font-independent-line-spacing="false">
+ <style:tab-stops/>
+ </style:paragraph-properties>
+ <style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="en" fo:country="US" style:letter-kerning="true" style:font-name-asian="Songti SC" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Tahoma1" style:font-size-complex="12pt" style:language-complex="ar" style:country-complex="EG"/>
+ </style:default-style>
+ <style:default-style style:family="paragraph">
+ <style:paragraph-properties fo:orphans="2" fo:widows="2" fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="0.4925in" style:writing-mode="page"/>
+ <style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Liberation Serif" fo:font-size="12pt" fo:language="en" fo:country="US" style:letter-kerning="true" style:font-name-asian="Songti SC" style:font-size-asian="10.5pt" style:language-asian="zh" style:country-asian="CN" style:font-name-complex="Tahoma1" style:font-size-complex="12pt" style:language-complex="ar" style:country-complex="EG" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2" loext:hyphenation-no-caps="false" loext:hyphenation-no-last-word="false" loext:hyphenation-word-char-count="5" loext:hyphenation-zone="no-limit"/>
+ </style:default-style>
+ <style:default-style style:family="table">
+ <style:table-properties table:border-model="collapsing"/>
+ </style:default-style>
+ <style:default-style style:family="table-row">
+ <style:table-row-properties fo:keep-together="auto"/>
+ </style:default-style>
+ <style:style style:name="Standard" style:family="paragraph" style:class="text">
+ <style:text-properties style:font-name-complex="Noto Sans Lao" style:font-family-complex="&apos;Noto Sans Lao&apos;" style:font-style-name-complex="Regular" style:font-family-generic-complex="swiss" style:font-pitch-complex="variable" style:language-complex="lo" style:country-complex="LA"/>
+ </style:style>
+ <style:style style:name="Heading" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text_20_body" style:class="text">
+ <style:paragraph-properties fo:margin-top="0.1665in" fo:margin-bottom="0.0835in" style:contextual-spacing="false" fo:keep-with-next="always"/>
+ <style:text-properties style:font-name="Liberation Sans" fo:font-family="&apos;Liberation Sans&apos;" style:font-family-generic="swiss" style:font-pitch="variable" fo:font-size="14pt" style:font-name-asian="PingFang SC" style:font-family-asian="&apos;PingFang SC&apos;" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="14pt" style:font-name-complex="Tahoma1" style:font-family-complex="Tahoma" style:font-family-generic-complex="system" style:font-pitch-complex="variable" style:font-size-complex="14pt"/>
+ </style:style>
+ <style:style style:name="Text_20_body" style:display-name="Text body" style:family="paragraph" style:parent-style-name="Standard" style:class="text">
+ <style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0.0972in" style:contextual-spacing="false" fo:line-height="115%"/>
+ </style:style>
+ <style:style style:name="List" style:family="paragraph" style:parent-style-name="Text_20_body" style:class="list">
+ <style:text-properties style:font-size-asian="12pt" style:font-name-complex="Tahoma" style:font-family-complex="Tahoma" style:font-family-generic-complex="swiss"/>
+ </style:style>
+ <style:style style:name="Caption" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
+ <style:paragraph-properties fo:margin-top="0.0835in" fo:margin-bottom="0.0835in" style:contextual-spacing="false" text:number-lines="false" text:line-number="0"/>
+ <style:text-properties fo:font-size="12pt" fo:font-style="italic" style:font-size-asian="12pt" style:font-style-asian="italic" style:font-name-complex="Tahoma" style:font-family-complex="Tahoma" style:font-family-generic-complex="swiss" style:font-size-complex="12pt" style:font-style-complex="italic"/>
+ </style:style>
+ <style:style style:name="Index" style:family="paragraph" style:parent-style-name="Standard" style:class="index">
+ <style:paragraph-properties text:number-lines="false" text:line-number="0"/>
+ <style:text-properties style:font-size-asian="12pt" style:font-name-complex="Tahoma" style:font-family-complex="Tahoma" style:font-family-generic-complex="swiss"/>
+ </style:style>
+ <text:outline-style style:name="Outline">
+ <text:outline-level-style text:level="1" loext:num-list-format="%1%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="2" loext:num-list-format="%2%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="3" loext:num-list-format="%3%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="4" loext:num-list-format="%4%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="5" loext:num-list-format="%5%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="6" loext:num-list-format="%6%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="7" loext:num-list-format="%7%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="8" loext:num-list-format="%8%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="9" loext:num-list-format="%9%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="10" loext:num-list-format="%10%" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ </text:outline-style>
+ <text:notes-configuration text:note-class="footnote" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/>
+ <text:notes-configuration text:note-class="endnote" style:num-format="i" text:start-value="0"/>
+ <text:linenumbering-configuration text:number-lines="false" text:offset="0.1965in" style:num-format="1" text:number-position="left" text:increment="5"/>
+ <loext:theme loext:name="Office Theme">
+ <loext:theme-colors loext:name="LibreOffice">
+ <loext:color loext:name="dark1" loext:color="#000000"/>
+ <loext:color loext:name="light1" loext:color="#ffffff"/>
+ <loext:color loext:name="dark2" loext:color="#000000"/>
+ <loext:color loext:name="light2" loext:color="#ffffff"/>
+ <loext:color loext:name="accent1" loext:color="#18a303"/>
+ <loext:color loext:name="accent2" loext:color="#0369a3"/>
+ <loext:color loext:name="accent3" loext:color="#a33e03"/>
+ <loext:color loext:name="accent4" loext:color="#8e03a3"/>
+ <loext:color loext:name="accent5" loext:color="#c99c00"/>
+ <loext:color loext:name="accent6" loext:color="#c9211e"/>
+ <loext:color loext:name="hyperlink" loext:color="#0000ee"/>
+ <loext:color loext:name="followed-hyperlink" loext:color="#551a8b"/>
+ </loext:theme-colors>
+ </loext:theme>
+ </office:styles>
+ <office:automatic-styles>
+ <style:style style:name="P1" style:family="paragraph" style:parent-style-name="Standard">
+ <style:text-properties officeooo:paragraph-rsid="001e6693"/>
+ </style:style>
+ <style:style style:name="T1" style:family="text">
+ <style:text-properties officeooo:rsid="001e6693"/>
+ </style:style>
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-width="8.5in" fo:page-height="11in" style:num-format="1" style:print-orientation="portrait" fo:margin-top="0.7874in" fo:margin-bottom="0.7874in" fo:margin-left="0.7874in" fo:margin-right="0.7874in" style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" style:layout-grid-lines="20" style:layout-grid-base-height="0.278in" style:layout-grid-ruby-height="0.139in" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="false" style:layout-grid-display="false" style:footnote-max-height="0in" loext:margin-gutter="0in">
+ <style:footnote-sep style:width="0.0071in" style:distance-before-sep="0.0398in" style:distance-after-sep="0.0398in" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style/>
+ </style:page-layout>
+ <style:style style:name="dp1" style:family="drawing-page">
+ <style:drawing-page-properties draw:background-size="full"/>
+ </style:style>
+ </office:automatic-styles>
+ <office:master-styles>
+ <style:master-page style:name="Standard" style:page-layout-name="pm1" draw:style-name="dp1"/>
+ </office:master-styles>
+ <office:body>
+ <office:text>
+ <text:sequence-decls>
+ <text:sequence-decl text:display-outline-level="0" text:name="Illustration"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Table"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Text"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Figure"/>
+ </text:sequence-decls>
+ <text:p text:style-name="Standard">1ພາສາລາວ1</text:p>
+ <text:p text:style-name="Standard">bພາສາລາວb</text:p>
+ <text:p text:style-name="Standard">1汉语1</text:p>
+ <text:p text:style-name="Standard">b汉语b</text:p>
+ </office:text>
+ </office:body>
+</office:document> \ No newline at end of file
diff --git a/sw/qa/core/text/frmform.cxx b/sw/qa/core/text/frmform.cxx
new file mode 100644
index 0000000000..3d43bde6aa
--- /dev/null
+++ b/sw/qa/core/text/frmform.cxx
@@ -0,0 +1,154 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <swmodeltestbase.hxx>
+
+#include <memory>
+
+#include <IDocumentLayoutAccess.hxx>
+#include <rootfrm.hxx>
+#include <sortedobjs.hxx>
+#include <anchoredobject.hxx>
+#include <pagefrm.hxx>
+#include <txtfrm.hxx>
+#include <docsh.hxx>
+#include <wrtsh.hxx>
+
+namespace
+{
+/// Covers sw/source/core/text/frmform.cxx fixes.
+class Test : public SwModelTestBase
+{
+public:
+ Test()
+ : SwModelTestBase("/sw/qa/core/text/data/")
+ {
+ }
+};
+
+CPPUNIT_TEST_FIXTURE(Test, testFloattableNegativeVertOffset)
+{
+ // Given a document with 2 paragraphs, floating table is between the two (so anchored to the
+ // 2nd) and with a negative vertical offset:
+ createSwDoc("floattable-negative-vert-offset.docx");
+
+ // When laying out that document:
+ calcLayout();
+
+ // Then make sure that the negative vertical offset shifts both paragraphs down:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage);
+ CPPUNIT_ASSERT(pPage->GetSortedObjs());
+ const SwSortedObjs& rPageObjs = *pPage->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPageObjs.size());
+ SwAnchoredObject* pPageObj = rPageObjs[0];
+ const SwRect& rFlyRect = pPageObj->GetObjRectWithSpaces();
+ SwFrame* pBody = pPage->FindBodyCont();
+ SwFrame* pPara1 = pBody->GetLower();
+ SwFrame* pPara2 = pPara1->GetNext();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected less than: 993
+ // - Actual : 2709
+ // i.e. the expectation that the fly doesn't overlap with the 2nd paragraph was not true.
+ // Instead we got a layout loop, aborted by the loop control, and the fly overlapped with the
+ // 2nd paragraph.
+ CPPUNIT_ASSERT_LESS(pPara2->getFrameArea().Top(), rFlyRect.Bottom());
+}
+
+// FIXME: because breaking the lines at the right place, test document became obsolete
+#if 0
+CPPUNIT_TEST_FIXTURE(Test, testFloattableAvoidManipOfst)
+{
+ // Given a document with a 6-page floating table and some anchor text:
+ createSwDoc("floattable-avoid-manip-ofst.docx");
+
+ // When laying out that document:
+ calcLayout();
+
+ // Then make sure all anchor text is on the last page:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ SwPageFrame* pLastPage = pLayout->GetLastPage();
+ SwLayoutFrame* pBodyFrame = pLastPage->FindBodyCont();
+ SwTextFrame* pAnchor = pBodyFrame->GetLower()->DynCastTextFrame();
+ // If this is not 0, that means some of the anchor text is shifted to a previous page, while
+ // anchors of non-last split fly frames should contain no text.
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), pAnchor->GetOffset().get());
+}
+#endif
+
+CPPUNIT_TEST_FIXTURE(Test, testFloattableAvoidLastManipOfst)
+{
+ // Given a document with a 5-page floating table and some anchor text:
+ createSwDoc("floattable-avoid-last-manip-ofst.docx");
+ SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
+ pWrtShell->SttEndDoc(/*bStt=*/false);
+ pWrtShell->Insert2("dt");
+
+ // When expanding dummy text on the last page:
+ dispatchCommand(mxComponent, ".uno:ExpandGlossary", {});
+
+ // Then make sure the expanded text starts on page 5:
+ SwDoc* pDoc = getSwDocShell()->GetDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage1);
+ auto pPage2 = dynamic_cast<SwPageFrame*>(pPage1->GetNext());
+ CPPUNIT_ASSERT(pPage2);
+ auto pPage3 = dynamic_cast<SwPageFrame*>(pPage2->GetNext());
+ CPPUNIT_ASSERT(pPage3);
+ auto pPage4 = dynamic_cast<SwPageFrame*>(pPage3->GetNext());
+ CPPUNIT_ASSERT(pPage4);
+ auto pPage5 = dynamic_cast<SwPageFrame*>(pPage4->GetNext());
+ CPPUNIT_ASSERT(pPage5);
+ SwContentFrame* pAnchor = pPage5->FindFirstBodyContent();
+ SwTextFrame* pAnchorText = pAnchor->DynCastTextFrame();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 0
+ // - Actual : 1123
+ // i.e. the expand result went to page 4 and page 5 (page 5's content had no zero offset),
+ // instead of starting on page 5 (and creating a 6th page).
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0),
+ static_cast<sal_Int32>(pAnchorText->GetOffset()));
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testFloattableBadFlyPos)
+{
+ // Given a document with an inner floating table on page 2 -> 4:
+ // When laying out that document:
+ createSwDoc("floattable-bad-fly-pos.docx");
+
+ // Then make sure that pages 2 -> 4 get the 3 fly frames:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = pLayout->Lower()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage1);
+ CPPUNIT_ASSERT(!pPage1->GetSortedObjs());
+ auto pPage2 = pPage1->GetNext()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage2);
+ CPPUNIT_ASSERT(pPage2->GetSortedObjs());
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), pPage2->GetSortedObjs()->size());
+ auto pPage3 = pPage2->GetNext()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage3);
+ CPPUNIT_ASSERT(pPage3->GetSortedObjs());
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 1
+ // - Actual : 2
+ // i.e. the fly on page 4 was still on page 3.
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), pPage3->GetSortedObjs()->size());
+ auto pPage4 = pPage3->GetNext()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage4);
+ CPPUNIT_ASSERT(pPage4->GetSortedObjs());
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), pPage4->GetSortedObjs()->size());
+}
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/text/itratr.cxx b/sw/qa/core/text/itratr.cxx
new file mode 100644
index 0000000000..6913d0037d
--- /dev/null
+++ b/sw/qa/core/text/itratr.cxx
@@ -0,0 +1,58 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <swmodeltestbase.hxx>
+
+#include <memory>
+
+#include <IDocumentLayoutAccess.hxx>
+#include <doc.hxx>
+#include <frame.hxx>
+#include <pagefrm.hxx>
+#include <rootfrm.hxx>
+#include <sortedobjs.hxx>
+
+namespace
+{
+/// Covers sw/source/core/text/itratr.cxx fixes.
+class Test : public SwModelTestBase
+{
+public:
+ Test()
+ : SwModelTestBase("/sw/qa/core/text/data/")
+ {
+ }
+};
+
+CPPUNIT_TEST_FIXTURE(Test, testFloattableNegativeVertOffsetEmptyAnchor)
+{
+ // Given a document with 3 floating tables, all of them on page 1, but the anchor of the last
+ // floating table is on page 2, but that anchor has no own text:
+ createSwDoc("floattable-negative-vert-offset-empty.docx");
+
+ // When laying out that document:
+ calcLayout();
+
+ // Then make sure the that 3rd floating table is not shifted to page 2:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage1);
+ CPPUNIT_ASSERT(pPage1->GetSortedObjs());
+ const SwSortedObjs& rPage1Objs = *pPage1->GetSortedObjs();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 3
+ // - Actual : 2
+ // i.e. the last floating table was shifted to page 2, which lead to overlapping text in the
+ // original document.
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(3), rPage1Objs.size());
+}
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/text/itrform2.cxx b/sw/qa/core/text/itrform2.cxx
new file mode 100644
index 0000000000..fc8e981dcf
--- /dev/null
+++ b/sw/qa/core/text/itrform2.cxx
@@ -0,0 +1,171 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <swmodeltestbase.hxx>
+
+#include <memory>
+
+#include <IDocumentLayoutAccess.hxx>
+#include <rootfrm.hxx>
+#include <sortedobjs.hxx>
+#include <pagefrm.hxx>
+#include <cntfrm.hxx>
+
+namespace
+{
+/// Covers sw/source/core/text/itrform2.cxx fixes.
+class Test : public SwModelTestBase
+{
+public:
+ Test()
+ : SwModelTestBase("/sw/qa/core/text/data/")
+ {
+ }
+};
+
+CPPUNIT_TEST_FIXTURE(Test, testFloattableWrapEmptyParagraph)
+{
+ // Given a document with 2 pages, a floating table on both pages:
+ createSwDoc("floattable-wrap-empty-para.docx");
+
+ // When calculating the layout:
+ calcLayout();
+
+ // Then make sure that each page has exactly 1 floating table:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage);
+ CPPUNIT_ASSERT(pPage->GetSortedObjs());
+ const SwSortedObjs& rPageObjs = *pPage->GetSortedObjs();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 1
+ // - Actual : 2
+ // i.e. both tables were on page 1, leading to an overlap.
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPageObjs.size());
+ auto pPage2 = dynamic_cast<SwPageFrame*>(pPage->GetNext());
+ CPPUNIT_ASSERT(pPage2);
+ CPPUNIT_ASSERT(pPage2->GetSortedObjs());
+ const SwSortedObjs& rPageObjs2 = *pPage2->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPageObjs2.size());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testFloattableLegacyWrapEmptyParagraph)
+{
+ // Given a document with 2 pages, a floating table on both pages (from DOC, so the table is
+ // shifted towards the left page edge slightly):
+ createSwDoc("floattable-wrap-empty-para-legacy.docx");
+
+ // When calculating the layout:
+ calcLayout();
+
+ // Then make sure that each page has exactly 1 floating table:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage);
+ CPPUNIT_ASSERT(pPage->GetSortedObjs());
+ const SwSortedObjs& rPageObjs = *pPage->GetSortedObjs();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 1
+ // - Actual : 2
+ // i.e. both tables were on page 1, leading to an overlap.
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPageObjs.size());
+ auto pPage2 = dynamic_cast<SwPageFrame*>(pPage->GetNext());
+ CPPUNIT_ASSERT(pPage2);
+ CPPUNIT_ASSERT(pPage2->GetSortedObjs());
+ const SwSortedObjs& rPageObjs2 = *pPage2->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), rPageObjs2.size());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testFlyMinimalWrap)
+{
+ // Given a document with a first page that has a shape and a table in it (not floating table),
+ // some empty paragraphs wrapping around the shape:
+ createSwDoc("fly-minimal-wrap.docx");
+
+ // When calculating the layout:
+ calcLayout();
+
+ // Then make sure the wrap happens, so the 2nd page only has 2 paragraphs:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage);
+ CPPUNIT_ASSERT(pPage->GetSortedObjs());
+ const SwSortedObjs& rPageObjs = *pPage->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), rPageObjs.size());
+ auto pPage2 = dynamic_cast<SwPageFrame*>(pPage->GetNext());
+ CPPUNIT_ASSERT(pPage2);
+ CPPUNIT_ASSERT(!pPage2->GetSortedObjs());
+ SwLayoutFrame* pBody2 = pPage2->FindBodyCont();
+ SwFrame* pPage2Para1 = pBody2->GetLower();
+ CPPUNIT_ASSERT(pPage2Para1);
+ SwFrame* pPage2Para2 = pPage2Para1->GetNext();
+ CPPUNIT_ASSERT(pPage2Para2);
+ // Without the accompanying fix in place, this test would have failed, the second page had 19
+ // text frames in the body frame, not 2.
+ CPPUNIT_ASSERT(!pPage2Para2->GetNext());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testContentControlHeaderPDFExport)
+{
+ // Given a document with a content control in the header:
+ createSwDoc("content-control-header.docx");
+
+ // When exporting to PDF:
+ save("writer_pdf_Export");
+
+ // Then make sure all the expected text is there on page 2:
+ std::unique_ptr<vcl::pdf::PDFiumDocument> pPdfDocument = parsePDFExport();
+ if (!pPdfDocument)
+ {
+ return;
+ }
+ std::unique_ptr<vcl::pdf::PDFiumPage> pPage2 = pPdfDocument->openPage(1);
+ int nTextCount = 0;
+ for (int i = 0; i < pPage2->getObjectCount(); ++i)
+ {
+ std::unique_ptr<vcl::pdf::PDFiumPageObject> pObject = pPage2->getObject(i);
+ if (pObject->getType() == vcl::pdf::PDFPageObjectType::Text)
+ {
+ ++nTextCount;
+ }
+ }
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 3
+ // - Actual : 2
+ // i.e. not all of header, heading and body text was there on page 2, content was lost.
+ CPPUNIT_ASSERT_EQUAL(3, nTextCount);
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testSplitFlyAnchorLeftMargin)
+{
+ // Given a document with a floating table, anchor para is followed by another para with a left
+ // margin:
+ createSwDoc("floattable-anchor-left-margin.docx");
+
+ // When laying out that document:
+ calcLayout();
+
+ // Then make sure that the left margin of this last paragraph is not lost:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage);
+ SwContentFrame* pLastPara = pPage->FindLastBodyContent();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 6480
+ // - Actual : 0
+ // i.e. the left margin was lost.
+ CPPUNIT_ASSERT_EQUAL(static_cast<SwTwips>(6480), pLastPara->getFramePrintArea().Left());
+}
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/text/porlay.cxx b/sw/qa/core/text/porlay.cxx
new file mode 100644
index 0000000000..a2e94c5865
--- /dev/null
+++ b/sw/qa/core/text/porlay.cxx
@@ -0,0 +1,60 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <swmodeltestbase.hxx>
+
+#include <memory>
+
+#include <IDocumentLayoutAccess.hxx>
+#include <doc.hxx>
+#include <frame.hxx>
+#include <pagefrm.hxx>
+#include <rootfrm.hxx>
+#include <txtfrm.hxx>
+
+namespace
+{
+/// Covers sw/source/core/text/porlay.cxx fixes.
+class Test : public SwModelTestBase
+{
+public:
+ Test()
+ : SwModelTestBase("/sw/qa/core/text/data/")
+ {
+ }
+};
+
+CPPUNIT_TEST_FIXTURE(Test, testEmptySuperscript)
+{
+ // Given a document with 4 paragraphs, the 2nd is empty and is marked as superscript:
+ createSwDoc("empty-superscript.docx");
+
+ // When laying out that document:
+ calcLayout();
+
+ // Then make sure all 4 text frames have visible heights:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage = pLayout->GetLower()->DynCastPageFrame();
+ auto pText1 = pPage->FindFirstBodyContent()->DynCastTextFrame();
+ CPPUNIT_ASSERT_GREATER(static_cast<SwTwips>(0), pText1->getFrameArea().Height());
+ auto pText2 = pText1->GetNext()->DynCastTextFrame();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected greater than: 0
+ // - Actual : 0
+ // i.e. the 2nd paragraph was not visible.
+ CPPUNIT_ASSERT_GREATER(static_cast<SwTwips>(0), pText2->getFrameArea().Height());
+ auto pText3 = pText2->GetNext()->DynCastTextFrame();
+ CPPUNIT_ASSERT_GREATER(static_cast<SwTwips>(0), pText3->getFrameArea().Height());
+ auto pText4 = pText3->GetNext()->DynCastTextFrame();
+ CPPUNIT_ASSERT_GREATER(static_cast<SwTwips>(0), pText4->getFrameArea().Height());
+}
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/text/porrst.cxx b/sw/qa/core/text/porrst.cxx
new file mode 100644
index 0000000000..f2e14e7f7f
--- /dev/null
+++ b/sw/qa/core/text/porrst.cxx
@@ -0,0 +1,94 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <swmodeltestbase.hxx>
+
+#include <memory>
+
+#include <IDocumentLayoutAccess.hxx>
+#include <doc.hxx>
+#include <frame.hxx>
+#include <layfrm.hxx>
+#include <pagefrm.hxx>
+#include <rootfrm.hxx>
+#include <txtfrm.hxx>
+#include <sortedobjs.hxx>
+
+namespace
+{
+/// Covers sw/source/core/text/porrst.cxx fixes.
+class Test : public SwModelTestBase
+{
+public:
+ Test()
+ : SwModelTestBase("/sw/qa/core/text/data/")
+ {
+ }
+};
+
+CPPUNIT_TEST_FIXTURE(Test, testFloattableLeftoverParaPortion)
+{
+ // Given a document with a multi-page floating table, the anchor of the table has some text:
+ createSwDoc("floattable-leftover-para-portion.docx");
+
+ // When laying out that document:
+ calcLayout();
+
+ // Then make sure all anchor text goes to the second page:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage);
+ SwFrame* pBody = pPage->FindBodyCont();
+ SwFrame* pPara1 = pBody->GetLower();
+ auto pPara2 = pPara1->GetNext()->DynCastTextFrame();
+ CPPUNIT_ASSERT(pPara2);
+ // Without the accompanying fix in place, this test would have failed, the first page's anchor
+ // also had some (duplicated) anchor text.
+ CPPUNIT_ASSERT(!pPara2->GetPara());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testFloattableAnchorHeight)
+{
+#if !defined(MACOSX) // FIXME fails on macOS
+ // Given 3 tables, innermost table on pages 2-3-4:
+ createSwDoc("floattable-anchor-height.docx");
+
+ // When laying out the document:
+ calcLayout();
+
+ // Then make sure the flys are on the expected pages:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = pLayout->Lower()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage1);
+ CPPUNIT_ASSERT(!pPage1->GetSortedObjs());
+ auto pPage2 = pPage1->GetNext()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage2);
+ SwSortedObjs* pPage2Objs = pPage2->GetSortedObjs();
+ CPPUNIT_ASSERT(pPage2Objs);
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), pPage2Objs->size());
+ auto pPage3 = pPage2->GetNext()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage3);
+ SwSortedObjs* pPage3Objs = pPage3->GetSortedObjs();
+ CPPUNIT_ASSERT(pPage3Objs);
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 1
+ // - Actual : 2
+ // i.e. page 3 also had the fly frame of page 4 as well.
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), pPage3Objs->size());
+ auto pPage4 = pPage3->GetNext()->DynCastPageFrame();
+ SwSortedObjs* pPage4Objs = pPage4->GetSortedObjs();
+ CPPUNIT_ASSERT(pPage4Objs);
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), pPage4Objs->size());
+#endif
+}
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/text/text.cxx b/sw/qa/core/text/text.cxx
new file mode 100644
index 0000000000..666e6d29f2
--- /dev/null
+++ b/sw/qa/core/text/text.cxx
@@ -0,0 +1,1568 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <swmodeltestbase.hxx>
+
+#include <memory>
+
+#include <com/sun/star/text/BibliographyDataField.hpp>
+#include <com/sun/star/text/BibliographyDataType.hpp>
+#include <com/sun/star/text/ControlCharacter.hpp>
+#include <com/sun/star/text/WritingMode2.hpp>
+#include <com/sun/star/text/XDocumentIndex.hpp>
+
+#include <vcl/gdimtf.hxx>
+#include <vcl/metaact.hxx>
+#include <vcl/filter/PDFiumLibrary.hxx>
+#include <comphelper/propertyvalue.hxx>
+#include <editeng/fhgtitem.hxx>
+#include <editeng/wghtitem.hxx>
+
+#include <docsh.hxx>
+#include <unotxdoc.hxx>
+#include <wrtsh.hxx>
+#include <IDocumentLayoutAccess.hxx>
+#include <rootfrm.hxx>
+#include <txtfrm.hxx>
+#include <porlay.hxx>
+#include <pormulti.hxx>
+#include <formatlinebreak.hxx>
+#include <sortedobjs.hxx>
+#include <anchoredobject.hxx>
+#include <fmtcntnt.hxx>
+#include <fmtfsize.hxx>
+#include <IDocumentRedlineAccess.hxx>
+#include <formatcontentcontrol.hxx>
+#include <strings.hrc>
+#include <ndtxt.hxx>
+#include <txatbase.hxx>
+#include <textcontentcontrol.hxx>
+#include <pagefrm.hxx>
+
+/// Covers sw/source/core/text/ fixes.
+class SwCoreTextTest : public SwModelTestBase
+{
+public:
+ SwCoreTextTest()
+ : SwModelTestBase("/sw/qa/core/text/data/")
+ {
+ }
+};
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testFootnoteConnect)
+{
+ createSwDoc("footnote-connect.fodt");
+ SwDoc* pDoc = getSwDoc();
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ // Jump to the start of the next page.
+ pWrtShell->SttNxtPg();
+ // Remove the page break.
+ pWrtShell->DelLeft();
+ // Split the multi-line text frame, containing an endnote.
+ pWrtShell->DelLeft();
+ // Join the split text frame.
+ pWrtShell->DelLeft();
+ // Turn the 3 page document into a 2 page one, so the endnote frame is moved.
+ // Without the accompanying fix in place, this test would have crashed due to a use-after-free
+ // in SwFootnoteFrame::GetRef().
+ pWrtShell->DelLeft();
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testSemiTransparentText)
+{
+ // Create an in-memory empty document.
+ createSwDoc();
+
+ // Set text to half-transparent and type a character.
+ uno::Reference<beans::XPropertySet> xParagraph(getParagraph(1), uno::UNO_QUERY);
+ CPPUNIT_ASSERT(xParagraph.is());
+ sal_Int16 nTransparence = 50;
+ xParagraph->setPropertyValue("CharTransparence", uno::Any(nTransparence));
+ uno::Reference<text::XTextRange> xTextRange(xParagraph, uno::UNO_QUERY);
+ CPPUNIT_ASSERT(xTextRange.is());
+ xTextRange->setString("x");
+
+ // Render the document to a metafile.
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ CPPUNIT_ASSERT(pTextDoc);
+ SwDocShell* pDocShell = pTextDoc->GetDocShell();
+ CPPUNIT_ASSERT(pDocShell);
+ std::shared_ptr<GDIMetaFile> xMetaFile = pDocShell->GetPreviewMetaFile();
+ CPPUNIT_ASSERT(xMetaFile);
+
+ // Make sure that DrawTransparent() was used during rendering.
+ MetafileXmlDump dumper;
+ xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile);
+ CPPUNIT_ASSERT(pXmlDoc);
+ assertXPath(pXmlDoc, "//floattransparent"_ostr);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testLastBibliographyPdfExport)
+{
+ // Given a document with a bibliography as the last paragraph:
+ createSwDoc("tdf158505.odt");
+
+ // It should be possible to export to PDF:
+ save("writer_pdf_Export");
+
+ // Without the accompanying fix, the export to PDF would get stuck in an infinite loop
+ CPPUNIT_ASSERT(true);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testBibliographyUrlPdfExport)
+{
+ // Given a document with a bibliography entry field:
+ std::shared_ptr<vcl::pdf::PDFium> pPDFium = vcl::pdf::PDFiumLibrary::get();
+ if (!pPDFium)
+ {
+ return;
+ }
+ createSwDoc();
+ uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xField(
+ xFactory->createInstance("com.sun.star.text.TextField.Bibliography"), uno::UNO_QUERY);
+ uno::Sequence<beans::PropertyValue> aFields = {
+ comphelper::makePropertyValue("BibiliographicType", text::BibliographyDataType::WWW),
+ comphelper::makePropertyValue("Identifier", OUString("AT")),
+ comphelper::makePropertyValue("Author", OUString("Author")),
+ comphelper::makePropertyValue("Title", OUString("Title")),
+ comphelper::makePropertyValue("URL", OUString("http://www.example.com/test.pdf#page=1")),
+ };
+ xField->setPropertyValue("Fields", uno::Any(aFields));
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xTextDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ uno::Reference<text::XTextContent> xContent(xField, uno::UNO_QUERY);
+ xText->insertTextContent(xCursor, xContent, /*bAbsorb=*/false);
+
+ // When exporting to PDF:
+ save("writer_pdf_Export");
+
+ // Then make sure the field links the source.
+ std::unique_ptr<vcl::pdf::PDFiumDocument> pPdfDocument = parsePDFExport();
+ std::unique_ptr<vcl::pdf::PDFiumPage> pPdfPage = pPdfDocument->openPage(/*nIndex=*/0);
+ // Without the accompanying fix in place, this test would have failed, the field was not
+ // clickable (while it was clickable on the UI).
+ CPPUNIT_ASSERT(pPdfPage->hasLinks());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testBibliographyUrlPdfExport2)
+{
+ // Given a document with a bibliography entry field:
+ std::shared_ptr<vcl::pdf::PDFium> pPDFium = vcl::pdf::PDFiumLibrary::get();
+ if (!pPDFium)
+ {
+ return;
+ }
+ createSwDoc();
+ uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xField(
+ xFactory->createInstance("com.sun.star.text.TextField.Bibliography"), uno::UNO_QUERY);
+ uno::Sequence<beans::PropertyValue> aFields = {
+ comphelper::makePropertyValue("BibiliographicType", text::BibliographyDataType::WWW),
+ comphelper::makePropertyValue("Identifier", OUString("AT")),
+ comphelper::makePropertyValue("Author", OUString("Author")),
+ comphelper::makePropertyValue("Title", OUString("Title")),
+ comphelper::makePropertyValue("URL", OUString("#page=1")),
+ };
+ xField->setPropertyValue("Fields", uno::Any(aFields));
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xTextDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ uno::Reference<text::XTextContent> xContent(xField, uno::UNO_QUERY);
+ xText->insertTextContent(xCursor, xContent, /*bAbsorb=*/false);
+
+ // When exporting to PDF:
+ save("writer_pdf_Export");
+
+ // Then make sure the field links when the Target URL is set
+ // (this test is important, isn't the same as the one above)
+ std::unique_ptr<vcl::pdf::PDFiumDocument> pPdfDocument = parsePDFExport();
+ std::unique_ptr<vcl::pdf::PDFiumPage> pPdfPage = pPdfDocument->openPage(/*nIndex=*/0);
+ CPPUNIT_ASSERT(pPdfPage->hasLinks());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testBibliographyUrlPdfExport3)
+{
+ // Given a document with a bibliography entry field:
+ std::shared_ptr<vcl::pdf::PDFium> pPDFium = vcl::pdf::PDFiumLibrary::get();
+ if (!pPDFium)
+ {
+ return;
+ }
+ createSwDoc();
+ uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xField(
+ xFactory->createInstance("com.sun.star.text.TextField.Bibliography"), uno::UNO_QUERY);
+ uno::Sequence<beans::PropertyValue> aFields = {
+ comphelper::makePropertyValue("BibiliographicType", text::BibliographyDataType::WWW),
+ comphelper::makePropertyValue("Identifier", OUString("AT")),
+ comphelper::makePropertyValue("Author", OUString("Author")),
+ comphelper::makePropertyValue("Title", OUString("Title")),
+ comphelper::makePropertyValue("TargetURL", OUString("#page=1")),
+ };
+ xField->setPropertyValue("Fields", uno::Any(aFields));
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xTextDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ uno::Reference<text::XTextContent> xContent(xField, uno::UNO_QUERY);
+ xText->insertTextContent(xCursor, xContent, /*bAbsorb=*/false);
+
+ // When exporting to PDF:
+ save("writer_pdf_Export");
+
+ // Then make sure there are no links since UseTargetURL is not set
+ std::unique_ptr<vcl::pdf::PDFiumDocument> pPdfDocument = parsePDFExport();
+ std::unique_ptr<vcl::pdf::PDFiumPage> pPdfPage = pPdfDocument->openPage(/*nIndex=*/0);
+ CPPUNIT_ASSERT(!pPdfPage->hasLinks());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testBibliographyUrlPdfExport4)
+{
+ // Given a document with a bibliography entry field:
+ std::shared_ptr<vcl::pdf::PDFium> pPDFium = vcl::pdf::PDFiumLibrary::get();
+ if (!pPDFium)
+ {
+ return;
+ }
+ createSwDoc();
+ uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xField(
+ xFactory->createInstance("com.sun.star.text.TextField.Bibliography"), uno::UNO_QUERY);
+ uno::Sequence<beans::PropertyValue> aFields = {
+ comphelper::makePropertyValue("BibiliographicType", text::BibliographyDataType::WWW),
+ comphelper::makePropertyValue("Identifier", OUString("AT")),
+ comphelper::makePropertyValue("Author", OUString("Author")),
+ comphelper::makePropertyValue("Title", OUString("Title")),
+ comphelper::makePropertyValue("TargetType", OUString("1")), // 1 == UseTargetURL
+ comphelper::makePropertyValue("TargetURL", OUString("#page=1")),
+ };
+ xField->setPropertyValue("Fields", uno::Any(aFields));
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xTextDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ uno::Reference<text::XTextContent> xContent(xField, uno::UNO_QUERY);
+ xText->insertTextContent(xCursor, xContent, /*bAbsorb=*/false);
+
+ // When exporting to PDF:
+ save("writer_pdf_Export");
+
+ // Then make sure the field links when the Target URL is set
+ std::unique_ptr<vcl::pdf::PDFiumDocument> pPdfDocument = parsePDFExport();
+ std::unique_ptr<vcl::pdf::PDFiumPage> pPdfPage = pPdfDocument->openPage(/*nIndex=*/0);
+ CPPUNIT_ASSERT(pPdfPage->hasLinks());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testBibliographyUrlPdfExport5)
+{
+ // Given a document with a bibliography entry field:
+ std::shared_ptr<vcl::pdf::PDFium> pPDFium = vcl::pdf::PDFiumLibrary::get();
+ if (!pPDFium)
+ {
+ return;
+ }
+ createSwDoc();
+ uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xField(
+ xFactory->createInstance("com.sun.star.text.TextField.Bibliography"), uno::UNO_QUERY);
+ uno::Sequence<beans::PropertyValue> aFields = {
+ comphelper::makePropertyValue("BibiliographicType", text::BibliographyDataType::WWW),
+ comphelper::makePropertyValue("Identifier", OUString("AT")),
+ comphelper::makePropertyValue("Author", OUString("Author")),
+ comphelper::makePropertyValue("Title", OUString("Title")),
+ comphelper::makePropertyValue("TargetType", OUString("3")), // 3 == BibliographyTableRow
+ };
+ xField->setPropertyValue("Fields", uno::Any(aFields));
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xTextDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ uno::Reference<text::XTextContent> xContent(xField, uno::UNO_QUERY);
+ xText->insertTextContent(xCursor, xContent, /*bAbsorb=*/false);
+ // Create a bibliography table.
+ uno::Reference<text::XTextContent> xTable(
+ xFactory->createInstance("com.sun.star.text.Bibliography"), uno::UNO_QUERY);
+ xCursor->gotoEnd(/*bExpand=*/false);
+ xText->insertControlCharacter(xCursor, text::ControlCharacter::APPEND_PARAGRAPH,
+ /*bAbsorb=*/false);
+ xText->insertTextContent(xCursor, xTable, /*bAbsorb=*/false);
+ // Update the table
+ uno::Reference<text::XDocumentIndex> xTableIndex(xTable, uno::UNO_QUERY);
+ xTableIndex->update();
+
+ // When exporting to PDF:
+ save("writer_pdf_Export");
+
+ // Then make sure the mark links to the table when table is present
+ std::unique_ptr<vcl::pdf::PDFiumDocument> pPdfDocument = parsePDFExport();
+ std::unique_ptr<vcl::pdf::PDFiumPage> pPdfPage = pPdfDocument->openPage(/*nIndex=*/0);
+ CPPUNIT_ASSERT(pPdfPage->hasLinks());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testBibliographyUrlPdfExport6)
+{
+ // Given a document with a bibliography entry field:
+ std::shared_ptr<vcl::pdf::PDFium> pPDFium = vcl::pdf::PDFiumLibrary::get();
+ if (!pPDFium)
+ {
+ return;
+ }
+ createSwDoc();
+ uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+
+ // Create a bibliography mark
+ uno::Reference<beans::XPropertySet> xField(
+ xFactory->createInstance("com.sun.star.text.TextField.Bibliography"), uno::UNO_QUERY);
+ uno::Sequence<beans::PropertyValue> aFields = {
+ comphelper::makePropertyValue("BibiliographicType", text::BibliographyDataType::WWW),
+ comphelper::makePropertyValue("Identifier", OUString("AT")),
+ comphelper::makePropertyValue("Author", OUString("AuthorName")),
+ comphelper::makePropertyValue("Title", OUString("Title")),
+ comphelper::makePropertyValue("TargetType", OUString("3")), // 3 == BibliographyTableRow
+ };
+ xField->setPropertyValue("Fields", uno::Any(aFields));
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xTextDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ uno::Reference<text::XTextContent> xContent(xField, uno::UNO_QUERY);
+ xText->insertTextContent(xCursor, xContent, /*bAbsorb=*/false);
+
+ // Create a bibliography table.
+ uno::Reference<text::XTextContent> xTable(
+ xFactory->createInstance("com.sun.star.text.Bibliography"), uno::UNO_QUERY);
+ xCursor->gotoEnd(/*bExpand=*/false);
+ xText->insertControlCharacter(xCursor, text::ControlCharacter::APPEND_PARAGRAPH,
+ /*bAbsorb=*/false);
+ xText->insertTextContent(xCursor, xTable, /*bAbsorb=*/false);
+
+ // Set formatting for AUTH_TYPE_WWW to include tab stop
+ uno::Reference<beans::XPropertySet> xTableAsPropertySet(xTable, uno::UNO_QUERY_THROW);
+ uno::Reference<container::XIndexReplace> aAllPatterns(
+ xTableAsPropertySet->getPropertyValue("LevelFormat"), uno::UNO_QUERY);
+
+ uno::Sequence<uno::Sequence<beans::PropertyValue>> aFormattingPattern
+ = { {
+ comphelper::makePropertyValue("TokenType", OUString("TokenBibliographyDataField")),
+ comphelper::makePropertyValue("BibliographyDataField",
+ text::BibliographyDataField::AUTHOR),
+ comphelper::makePropertyValue("CharacterStyleName", OUString("")),
+ },
+ {
+ comphelper::makePropertyValue("TokenType", OUString("TokenTabStop")),
+ comphelper::makePropertyValue("TabStopRightAligned", true),
+ comphelper::makePropertyValue("CharacterStyleName", OUString("")),
+ },
+ {
+ comphelper::makePropertyValue("TokenType", OUString("TokenBibliographyDataField")),
+ comphelper::makePropertyValue("BibliographyDataField",
+ text::BibliographyDataField::TITLE),
+ comphelper::makePropertyValue("CharacterStyleName", OUString("")),
+ },
+ {
+ comphelper::makePropertyValue("TokenType", OUString("TokenTabStop")),
+ comphelper::makePropertyValue("TabStopRightAligned", false),
+ comphelper::makePropertyValue("TabStopFillCharacter", OUString(".")),
+ comphelper::makePropertyValue("CharacterStyleName", OUString("")),
+ },
+ {
+ comphelper::makePropertyValue("TokenType", OUString("TokenText")),
+ comphelper::makePropertyValue("Text", OUString("FixedText")),
+ comphelper::makePropertyValue("CharacterStyleName", OUString("")),
+ } };
+
+ aAllPatterns->replaceByIndex(AUTH_TYPE_WWW + 1, uno::Any(aFormattingPattern));
+ xTableAsPropertySet->setPropertyValue("LevelFormat", uno::Any(aAllPatterns));
+
+ // Update the table
+ uno::Reference<text::XDocumentIndex> xTableIndex(xTable, uno::UNO_QUERY);
+ xTableIndex->update();
+
+ // Assert the table updated correctly
+ OUString sExpectedPattern("AuthorName\tTitle\tFixedText");
+ OUString sDocumentText = xTextDocument->getText()->getString();
+ sal_Int32 iTabPos = sDocumentText.indexOf(sExpectedPattern);
+ CPPUNIT_ASSERT(iTabPos >= 0);
+ CPPUNIT_ASSERT_EQUAL(iTabPos, sDocumentText.lastIndexOf(sExpectedPattern));
+
+ // When exporting to PDF:
+ save("writer_pdf_Export");
+
+ // Then make sure the mark links to the table even when format contains tab stop
+ std::unique_ptr<vcl::pdf::PDFiumDocument> pPdfDocument = parsePDFExport();
+ std::unique_ptr<vcl::pdf::PDFiumPage> pPdfPage = pPdfDocument->openPage(/*nIndex=*/0);
+ CPPUNIT_ASSERT(pPdfPage->hasLinks());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testTabOverMarginSection)
+{
+ createSwDoc("tabovermargin-section.fodt");
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+ sal_Int32 nWidth
+ = getXPath(pXmlDoc,
+ "//SwParaPortion/SwLineLayout/child::*[@type='PortionType::TabRight']"_ostr,
+ "width"_ostr)
+ .toInt32();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected less than: 5000
+ // - Actual : 9372
+ // i.e. the tab portion width was not the expected 4386, but much larger, so the number after
+ // the tab portion was not visible.
+ CPPUNIT_ASSERT_LESS(static_cast<sal_Int32>(5000), nWidth);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testLineHeight)
+{
+ // Given a document with an as-char image, height in twips not fitting into sal_uInt16:
+ createSwDoc("line-height.fodt");
+
+ // When laying out that document:
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+
+ // Then make sure its top is the top of the page:
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 284
+ // - Actual : -65252
+ // due to various unsigned integer truncations.
+ assertXPath(pXmlDoc, "//fly/infos/bounds"_ostr, "top"_ostr, OUString::number(DOCUMENTBORDER));
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testLineWidth)
+{
+ // Given a document with an as-char image, width in twips not fitting into sal_uInt16:
+ createSwDoc("line-width.fodt");
+ SwDoc* pDoc = getSwDoc();
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ sal_Int32 nOldLeft = pWrtShell->GetCharRect().Left();
+
+ // When moving the cursor to the right:
+ pWrtShell->Right(SwCursorSkipMode::Chars, /*bSelect=*/false, 1, /*bBasicCall=*/false);
+
+ // Then make sure we move to the right by the image width:
+ sal_Int32 nNewLeft = pWrtShell->GetCharRect().Left();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected greater than: 65536
+ // - Actual : 1872
+ // i.e. the width (around 67408 twips) was truncated.
+ CPPUNIT_ASSERT_GREATER(static_cast<sal_Int32>(65536), nNewLeft - nOldLeft);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testChineseAutoFirstLineIndent)
+{
+ // The test document contains two simple multi-line paragraph. For both paragraphs, the first line indent
+ // is set to 'auto'. Line spacing is 100% for the 1st paragraph and 200% for the 2nd paragraph.
+ // Also, there is a "AutoFirstLineIndentDisregardLineSpace" capability flag set in the document.
+ createSwDoc("firstLineIndent-withFlag.fodt");
+
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+
+ // Get the line width of the first line for the 1st paragraph.
+ sal_Int32 nFirstLineWidth
+ = getXPath(pXmlDoc, "//body/txt[1]/SwParaPortion/SwLineLayout[1]"_ostr, "width"_ostr)
+ .toInt32();
+ // Get the line width of the first line for the 2nd paragraph.
+ sal_Int32 nSecondLineWidth
+ = getXPath(pXmlDoc, "//body/txt[2]/SwParaPortion/SwLineLayout[1]"_ostr, "width"_ostr)
+ .toInt32();
+
+ // Tdf#129448: the changing of line-height should not affect the auto first line indent.
+ // As a result, the first line width of the two paragraphs should be the same.
+ CPPUNIT_ASSERT_EQUAL(nSecondLineWidth, nFirstLineWidth);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testRuby)
+{
+ // Given a document with multiple ruby portions:
+ createSwDoc("ruby.fodt");
+ SwDoc* pDoc = getSwDoc();
+
+ // When laying out that document:
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+
+ // Then make sure that no unwanted margin portions are created, making the actual text
+ // invisible:
+ SwFrame* pPageFrame = pLayout->GetLower();
+ SwFrame* pBodyFrame = pPageFrame->GetLower();
+ SwFrame* pFrame = pBodyFrame->GetLower();
+ CPPUNIT_ASSERT(pFrame->IsTextFrame());
+ auto pTextFrame = static_cast<SwTextFrame*>(pFrame);
+ SwParaPortion* pPara = pTextFrame->GetPara();
+ bool bFirst = true;
+ for (SwLinePortion* pPor = pPara->GetFirstPortion(); pPor; pPor = pPor->GetNextPortion())
+ {
+ // Look for multi-portions in the only paragraph of the document.
+ if (pPor->GetWhichPor() != PortionType::Multi)
+ {
+ continue;
+ }
+
+ if (bFirst)
+ {
+ bFirst = false;
+ continue;
+ }
+
+ // The second multi-portion has two lines, check the start of the second line.
+ auto pMulti = static_cast<SwMultiPortion*>(pPor);
+ // Without the accompanying fix in place, this test would have failed, as the portion was a
+ // margin portion, not a text portion. The margin was so large that the actual text portion was
+ // hidden. No margin is needed here at all.
+ CPPUNIT_ASSERT(pMulti->GetRoot().GetNext()->GetFirstPortion()->IsTextPortion());
+ }
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testEmptyNumberingPageSplit)
+{
+ // Given a document with 2 pages: the only para on page 1 is a numbering without a number
+ // portion:
+ createSwDoc("empty-numbering-page-split.fodt");
+
+ // When inserting an image that doesn't fit the body frame:
+ // Then make sure that the layout update after insertion finishes:
+ uno::Sequence<beans::PropertyValue> aArgs = {
+ comphelper::makePropertyValue("FileName", createFileURL(u"image.png")),
+ };
+ // Without the accompanying fix in place, this never finished.
+ dispatchCommand(mxComponent, ".uno:InsertGraphic", aArgs);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testClearingLineBreak)
+{
+ // Given a document with a fly frame and two characters wrapped around it:
+ createSwDoc("clearing-break.fodt");
+ // Insert a clearing break between "A" and "B":
+ uno::Reference<text::XTextDocument> xDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ xCursor->gotoEnd(/*bSelect=*/false);
+ xCursor->goLeft(/*nCount=*/1, /*bSelect=*/false);
+ uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextContent> xLineBreak(
+ xFactory->createInstance("com.sun.star.text.LineBreak"), uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xLineBreakProps(xLineBreak, uno::UNO_QUERY);
+ auto eClear = static_cast<sal_Int16>(SwLineBreakClear::ALL);
+ xLineBreakProps->setPropertyValue("Clear", uno::Any(eClear));
+ xText->insertTextContent(xCursor, xLineBreak, /*bAbsorb=*/false);
+
+ // When laying out that document:
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+
+ // Then make sure that the second line "jumps down", below the fly frame:
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 1024
+ // - Actual : 276
+ // i.e. the line height wasn't the twips value of the 1.806 cm from the file, but was based on
+ // the font size of the text, which is only correct for non-clearing breaks.
+ assertXPath(pXmlDoc, "//SwParaPortion/SwLineLayout[1]"_ostr, "height"_ostr, "1024");
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testClearingLineBreakAtStart)
+{
+ // Given a document with a fly frame and a character wrapped around it:
+ createSwDoc("clearing-break-start.fodt");
+ // Insert a clearing break before "X":
+ uno::Reference<text::XTextDocument> xDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ xCursor->gotoEnd(/*bSelect=*/false);
+ xCursor->goLeft(/*nCount=*/1, /*bSelect=*/false);
+ uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextContent> xLineBreak(
+ xFactory->createInstance("com.sun.star.text.LineBreak"), uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xLineBreakProps(xLineBreak, uno::UNO_QUERY);
+ auto eClear = static_cast<sal_Int16>(SwLineBreakClear::ALL);
+ xLineBreakProps->setPropertyValue("Clear", uno::Any(eClear));
+ xText->insertTextContent(xCursor, xLineBreak, /*bAbsorb=*/false);
+
+ // When laying out that document:
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+
+ // Then make sure that the second line "jumps down", below the fly frame:
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 1024
+ // - Actual : 276
+ // i.e. the line height was too small, but only in case the full line was a fly and a break
+ // portion, without any real content.
+ assertXPath(pXmlDoc, "//SwParaPortion/SwLineLayout[1]"_ostr, "height"_ostr, "1024");
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testClearingLineBreakLeft)
+{
+ // Given a document with two anchored objects (left height is 5cm, right height is 7.5cm) and a
+ // clearing break (type=left):
+ createSwDoc();
+ uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextDocument> xDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ {
+ uno::Reference<drawing::XShape> xShape(
+ xFactory->createInstance("com.sun.star.drawing.RectangleShape"), uno::UNO_QUERY);
+ xShape->setSize(awt::Size(5000, 5000));
+ uno::Reference<beans::XPropertySet> xShapeProps(xShape, uno::UNO_QUERY);
+ xShapeProps->setPropertyValue("AnchorType",
+ uno::Any(text::TextContentAnchorType_AT_CHARACTER));
+ uno::Reference<text::XTextContent> xShapeContent(xShape, uno::UNO_QUERY);
+ xText->insertTextContent(xCursor, xShapeContent, /*bAbsorb=*/false);
+ }
+ {
+ uno::Reference<drawing::XShape> xShape(
+ xFactory->createInstance("com.sun.star.drawing.RectangleShape"), uno::UNO_QUERY);
+ xShape->setSize(awt::Size(5000, 7500));
+ uno::Reference<beans::XPropertySet> xShapeProps(xShape, uno::UNO_QUERY);
+ xShapeProps->setPropertyValue("AnchorType",
+ uno::Any(text::TextContentAnchorType_AT_CHARACTER));
+ xShapeProps->setPropertyValue("HoriOrientPosition", uno::Any(sal_Int32(10000)));
+ uno::Reference<text::XTextContent> xShapeContent2(xShape, uno::UNO_QUERY);
+ xText->insertTextContent(xCursor, xShapeContent2, /*bAbsorb=*/false);
+ }
+ uno::Reference<text::XTextContent> xLineBreak(
+ xFactory->createInstance("com.sun.star.text.LineBreak"), uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xLineBreakProps(xLineBreak, uno::UNO_QUERY);
+ auto eClear = static_cast<sal_Int16>(SwLineBreakClear::LEFT);
+ xLineBreakProps->setPropertyValue("Clear", uno::Any(eClear));
+ xText->insertString(xCursor, "foo", /*bAbsorb=*/false);
+ xText->insertTextContent(xCursor, xLineBreak, /*bAbsorb=*/false);
+ xText->insertString(xCursor, "bar", /*bAbsorb=*/false);
+
+ // When laying out that document:
+ calcLayout();
+
+ // Then make sure the "bar" jumps down below the left shape, but not below the right shape (due
+ // to type=left):
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 2837
+ // - Actual : 4254
+ // i.e. any non-none type was handled as type=all, and this was jumping below both shapes.
+ assertXPath(pXmlDoc, "//SwParaPortion/SwLineLayout[1]"_ostr, "height"_ostr, "2837");
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testClearingLineBreakLeftRTL)
+{
+ // Given a document with an anchored object in an RTL para and a clearing break (type=left):
+ createSwDoc();
+ uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextDocument> xDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ uno::Reference<beans::XPropertySet> xCursorProps(xCursor, uno::UNO_QUERY);
+ xCursorProps->setPropertyValue("WritingMode", uno::Any(text::WritingMode2::RL_TB));
+ {
+ uno::Reference<drawing::XShape> xShape(
+ xFactory->createInstance("com.sun.star.drawing.RectangleShape"), uno::UNO_QUERY);
+ xShape->setSize(awt::Size(5000, 5000));
+ uno::Reference<beans::XPropertySet> xShapeProps(xShape, uno::UNO_QUERY);
+ xShapeProps->setPropertyValue("AnchorType",
+ uno::Any(text::TextContentAnchorType_AT_CHARACTER));
+ uno::Reference<text::XTextContent> xShapeContent(xShape, uno::UNO_QUERY);
+ xText->insertTextContent(xCursor, xShapeContent, /*bAbsorb=*/false);
+ }
+ uno::Reference<text::XTextContent> xLineBreak(
+ xFactory->createInstance("com.sun.star.text.LineBreak"), uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xLineBreakProps(xLineBreak, uno::UNO_QUERY);
+ auto eClear = static_cast<sal_Int16>(SwLineBreakClear::RIGHT);
+ xLineBreakProps->setPropertyValue("Clear", uno::Any(eClear));
+ xText->insertString(xCursor, "foo", /*bAbsorb=*/false);
+ xText->insertTextContent(xCursor, xLineBreak, /*bAbsorb=*/false);
+ xText->insertString(xCursor, "bar", /*bAbsorb=*/false);
+
+ // When laying out that document:
+ calcLayout();
+
+ // Then make sure the "bar" does not jump down (due to type=left && RTL):
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 276
+ // - Actual : 2837
+ // i.e. left/right was not ignored in the RTL case.
+ assertXPath(pXmlDoc, "//SwParaPortion/SwLineLayout[1]"_ostr, "height"_ostr, "276");
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testClearingLineBreakVertical)
+{
+ // Given a document with an anchored object in a vertical page and a clearing break (type=all):
+ createSwDoc();
+ uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextDocument> xDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ uno::Reference<beans::XPropertySet> xStandard(getStyles("PageStyles")->getByName("Standard"),
+ uno::UNO_QUERY);
+ xStandard->setPropertyValue("WritingMode", uno::Any(text::WritingMode2::TB_RL));
+ {
+ uno::Reference<drawing::XShape> xShape(
+ xFactory->createInstance("com.sun.star.drawing.RectangleShape"), uno::UNO_QUERY);
+ xShape->setSize(awt::Size(5000, 5000));
+ uno::Reference<beans::XPropertySet> xShapeProps(xShape, uno::UNO_QUERY);
+ xShapeProps->setPropertyValue("AnchorType",
+ uno::Any(text::TextContentAnchorType_AT_CHARACTER));
+ uno::Reference<text::XTextContent> xShapeContent(xShape, uno::UNO_QUERY);
+ xText->insertTextContent(xCursor, xShapeContent, /*bAbsorb=*/false);
+ }
+ uno::Reference<text::XTextContent> xLineBreak(
+ xFactory->createInstance("com.sun.star.text.LineBreak"), uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xLineBreakProps(xLineBreak, uno::UNO_QUERY);
+ auto eClear = static_cast<sal_Int16>(SwLineBreakClear::ALL);
+ xLineBreakProps->setPropertyValue("Clear", uno::Any(eClear));
+ xText->insertString(xCursor, "foo", /*bAbsorb=*/false);
+ xText->insertTextContent(xCursor, xLineBreak, /*bAbsorb=*/false);
+ xText->insertString(xCursor, "bar", /*bAbsorb=*/false);
+
+ // When laying out that document:
+ calcLayout();
+
+ // Then make sure the "bar" does jump (logic) down the correct amount:
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 2837
+ // - Actual : 7135
+ // i.e. the expected break height is the twips value of the 5cm rectangle size, it was much
+ // more.
+ assertXPath(pXmlDoc, "//SwParaPortion/SwLineLayout[1]/SwBreakPortion"_ostr, "height"_ostr,
+ "2837");
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testClearingLineBreakHeader)
+{
+ // Given a document with a shape in the header and a clearing break in the body text:
+ createSwDoc("clearing-break-header.fodt");
+
+ // When laying out that document:
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+
+ // Then make sure that the shape from the header is ignored while calculating the line height:
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 276
+ // - Actual : 15398
+ // i.e. the shape was in the background, but we failed to ignore it for the break portion.
+ assertXPath(pXmlDoc, "//SwParaPortion/SwLineLayout[1]"_ostr, "height"_ostr, "276");
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testAsCharImageDocModelFromViewPoint)
+{
+ // Given a document with an as-char image:
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xTextGraphic(
+ xFactory->createInstance("com.sun.star.text.TextGraphicObject"), uno::UNO_QUERY);
+ // Only set the anchor type, the actual bitmap content is not interesting.
+ xTextGraphic->setPropertyValue("AnchorType",
+ uno::Any(text::TextContentAnchorType_AS_CHARACTER));
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xBodyText = xTextDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor(xBodyText->createTextCursor());
+ uno::Reference<text::XTextContent> xTextContent(xTextGraphic, uno::UNO_QUERY);
+ xBodyText->insertTextContent(xCursor, xTextContent, false);
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ SwRootFrame* pRootFrame = pWrtShell->GetLayout();
+ SwFrame* pPageFrame = pRootFrame->GetLower();
+ SwFrame* pBodyFrame = pPageFrame->GetLower();
+ SwFrame* pTextFrame = pBodyFrame->GetLower();
+ const SwSortedObjs& rSortedObjs = *pTextFrame->GetDrawObjs();
+ const SwAnchoredObject* pAnchoredObject = rSortedObjs[0];
+ // The content points to the start node, the next node is the graphic node.
+ SwNodeIndex aGraphicNode = *pAnchoredObject->GetFrameFormat().GetContent().GetContentIdx();
+ ++aGraphicNode;
+ tools::Rectangle aFlyFrame = pAnchoredObject->GetDrawObj()->GetLastBoundRect();
+ Point aDocPos = aFlyFrame.Center();
+
+ // When translating the view point to the model position:
+ pWrtShell->SttCursorMove();
+ pWrtShell->CallSetCursor(&aDocPos, /*bOnlyText=*/false);
+ pWrtShell->EndCursorMove();
+
+ // Then make sure that we find the graphic node, and not its anchor:
+ SwShellCursor* pShellCursor = pWrtShell->getShellCursor(/*bBlock=*/false);
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: SwNodeIndex (node 6)
+ // - Actual : SwNodeIndex (node 12)
+ // i.e. the cursor position was the text node hosting the as-char image, not the graphic node of
+ // the image.
+ CPPUNIT_ASSERT_EQUAL(aGraphicNode.GetIndex(), pShellCursor->GetMark()->GetNodeIndex());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testRedlineDelete)
+{
+ // Given a document with A4 paper size, some text, redlining on, but hidden:
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ SwDocShell* pDocShell = pDoc->GetDocShell();
+ SwWrtShell* pWrtShell = pDocShell->GetWrtShell();
+ {
+ // Set page size to A4.
+ size_t nCurIdx = pWrtShell->GetCurPageDesc();
+ SwPageDesc aPageDesc(pWrtShell->GetPageDesc(nCurIdx));
+ SwFrameFormat& rMaster = aPageDesc.GetMaster();
+ SwFormatFrameSize aSize(SwFrameSize::Fixed);
+ aSize.SetSize(Size(11906, 16838));
+ rMaster.SetFormatAttr(aSize);
+ pWrtShell->ChgPageDesc(nCurIdx, aPageDesc);
+ }
+ OUString aBefore("aaaaaaaaa aaaaaaaaaa aa aa aa ");
+ OUString aDelete("delete eeeeeeeeeee ee eeeeeeeeeee ee eeeeee");
+ pWrtShell->Insert(aBefore + " " + aDelete
+ + " zz zzz zzzzzzzzz zzz zzzz zzzz zzzzzzzzz zzzzzz zzz zzzzzzzzzzz zzz");
+ // Enable redlining.
+ pDocShell->SetChangeRecording(/*bActivate=*/true);
+ // Hide redlining.
+ pWrtShell->StartAllAction();
+ pWrtShell->GetLayout()->SetHideRedlines(true);
+ pWrtShell->EndAllAction();
+
+ // When deleting content in the middle of the paragraph:
+ pWrtShell->SttEndDoc(/*bStt=*/true);
+ pWrtShell->Right(SwCursorSkipMode::Chars, /*bSelect=*/false, /*nCount=*/aBefore.getLength(),
+ /*bBasicCall=*/false);
+ pWrtShell->Right(SwCursorSkipMode::Chars, /*bSelect=*/true, /*nCount=*/aDelete.getLength(),
+ /*bBasicCall=*/false);
+ // Without the accompanying fix in place, this test would have crashed:
+ pWrtShell->Delete();
+
+ // Then make sure that the redline is created:
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1),
+ pDoc->getIDocumentRedlineAccess().GetRedlineTable().size());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testTdf120715_CursorMoveWhenTypingSpaceAtCenteredLineEnd)
+{
+ createSwDoc("tdf43100_tdf120715_cursorOnSpacesOverMargin.docx");
+ SwDoc* pDoc = getSwDoc();
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+
+ // Make a paint to force the call of AddExtraBlankWidth, that calculate width for holePortions.
+ pDoc->GetDocShell()->GetPreviewBitmap();
+
+ // Move the cursor to the last character of the document.
+ pWrtShell->EndOfSection();
+
+ //Press space and check if the cursor move right with the additional space.
+ sal_Int32 nOldCursorPos = pWrtShell->GetCharRect().Left();
+ pWrtShell->Insert(" ");
+ sal_Int32 nNewCursorPos = pWrtShell->GetCharRect().Left();
+ CPPUNIT_ASSERT_GREATER(nOldCursorPos, nNewCursorPos);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testTdf43100_CursorMoveToSpacesOverMargin)
+{
+ // Test the cursor movement over the right margin in several different paragraphs.
+ // These differences are based on its paragraphs
+ // - alignment (left, center, right, justified),
+ // - line count (1 line, 2 lines, blank line containing only spaces)
+ createSwDoc("tdf43100_tdf120715_cursorOnSpacesOverMargin.docx");
+ SwDoc* pDoc = getSwDoc();
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+
+ // Make a paint to force the call of AddExtraBlankWidth, that calculate width for holePortions.
+ pDoc->GetDocShell()->GetPreviewBitmap();
+
+ // Move the cursor to the 2. line.
+ pWrtShell->Down(/*bSelect=*/false, 1, /*bBasicCall=*/false);
+ // Move the cursor to the right margin.
+ pWrtShell->RightMargin(false, false);
+
+ sal_Int32 nMarginPos = pWrtShell->GetCharRect().Left();
+ sal_Int32 nLastCursorPos = nMarginPos;
+
+ // Move the cursor right 5 times, every step should increase the cursor x position.
+ // Before this fix, the cursor stopped at the margin.
+ for (int i = 0; i < 5; i++)
+ {
+ pWrtShell->Right(SwCursorSkipMode::Chars, /*bSelect=*/false, 1, /*bBasicCall=*/false);
+ sal_Int32 nNewCursorPos = pWrtShell->GetCharRect().Left();
+ CPPUNIT_ASSERT_GREATER(nLastCursorPos, nNewCursorPos);
+ nLastCursorPos = nNewCursorPos;
+ }
+
+ // Move down the cursor several lines, and check if it will keep nearly its horizontal position.
+ // Some of the lines are not reach beyond the margin, there the cursor won't be able to keep its
+ // original position.
+ bool aLineReachOverMargin[] = { false, true, true, false, false, true, true, false, true,
+ true, true, true, false, true, true, false, false };
+ // Cursor position can be a bit inaccurate, because it can only be positioned on characters,
+ // that is based on the actual line layout, therefore the actual cursor position
+ // is checked against a more distinct position instead of the nMarginPos.
+ sal_Int32 nAvgLeft = (nMarginPos + nLastCursorPos) / 2;
+ for (int i = 2; i < 17; i++)
+ {
+ pWrtShell->Down(/*bSelect=*/false, 1, /*bBasicCall=*/false);
+ sal_Int32 nNewCursorPos = pWrtShell->GetCharRect().Left();
+ if (aLineReachOverMargin[i])
+ CPPUNIT_ASSERT_GREATER(nAvgLeft, nNewCursorPos);
+ else
+ CPPUNIT_ASSERT_LESS(nAvgLeft, nNewCursorPos);
+ }
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testContentControlPDF)
+{
+ std::shared_ptr<vcl::pdf::PDFium> pPDFium = vcl::pdf::PDFiumLibrary::get();
+ if (!pPDFium)
+ return;
+
+ // Given a file with a content control:
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ pWrtShell->InsertContentControl(SwContentControlType::RICH_TEXT);
+ pWrtShell->SttEndDoc(/*bStt=*/true);
+ pWrtShell->Right(SwCursorSkipMode::Chars, /*bSelect=*/false, 1, /*bBasicCall=*/false);
+ sal_Int32 nPlaceHolderLen = SwResId(STR_CONTENT_CONTROL_PLACEHOLDER).getLength();
+ pWrtShell->Right(SwCursorSkipMode::Chars, /*bSelect=*/true, nPlaceHolderLen,
+ /*bBasicCall=*/false);
+ pWrtShell->Insert("mycontent");
+ const SwPosition* pStart = pWrtShell->GetCursor()->Start();
+ SwTextNode* pTextNode = pStart->GetNode().GetTextNode();
+ sal_Int32 nIndex = pStart->GetContentIndex();
+ SwTextAttr* pAttr
+ = pTextNode->GetTextAttrAt(nIndex, RES_TXTATR_CONTENTCONTROL, sw::GetTextAttrMode::Parent);
+ auto pTextContentControl = static_txtattr_cast<SwTextContentControl*>(pAttr);
+ const SwFormatContentControl& rFormatContentControl = pTextContentControl->GetContentControl();
+ std::shared_ptr<SwContentControl> pContentControl = rFormatContentControl.GetContentControl();
+ // Alias/title, to be mapped to PDF's description.
+ pContentControl->SetAlias("mydesc");
+
+ // When exporting to PDF:
+ save("writer_pdf_Export");
+
+ // Then make sure that a fillable form widget is emitted:
+ std::unique_ptr<vcl::pdf::PDFiumDocument> pPdfDocument = parsePDFExport();
+ std::unique_ptr<vcl::pdf::PDFiumPage> pPage = pPdfDocument->openPage(0);
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 1
+ // - Actual : 0
+ // i.e. the content control was just exported as normal text.
+ CPPUNIT_ASSERT_EQUAL(1, pPage->getAnnotationCount());
+ std::unique_ptr<vcl::pdf::PDFiumAnnotation> pAnnotation = pPage->getAnnotation(0);
+ CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::Widget, pAnnotation->getSubType());
+
+ // Also verify that the widget description is correct, it was empty:
+ CPPUNIT_ASSERT_EQUAL(OUString("mydesc"),
+ pAnnotation->getFormFieldAlternateName(pPdfDocument.get()));
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testContentControlPlaceholderPDF)
+{
+ std::shared_ptr<vcl::pdf::PDFium> pPDFium = vcl::pdf::PDFiumLibrary::get();
+ if (!pPDFium)
+ return;
+
+ // Given a file with a content control, in placeholder mode:
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ pWrtShell->InsertContentControl(SwContentControlType::RICH_TEXT);
+
+ // When exporting to PDF:
+ save("writer_pdf_Export");
+
+ // Then make sure that a fillable form widget is emitted with the expected value:
+ std::unique_ptr<vcl::pdf::PDFiumDocument> pPdfDocument = parsePDFExport();
+ std::unique_ptr<vcl::pdf::PDFiumPage> pPage = pPdfDocument->openPage(0);
+ CPPUNIT_ASSERT_EQUAL(1, pPage->getAnnotationCount());
+ std::unique_ptr<vcl::pdf::PDFiumAnnotation> pAnnotation = pPage->getAnnotation(0);
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: Click here to enter text
+ // - Actual :
+ // i.e. the value of the content control was empty, the placeholder value was lost.
+ CPPUNIT_ASSERT_EQUAL(SwResId(STR_CONTENT_CONTROL_PLACEHOLDER),
+ pAnnotation->getFormFieldValue(pPdfDocument.get()));
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testCheckboxContentControlPDF)
+{
+ std::shared_ptr<vcl::pdf::PDFium> pPDFium = vcl::pdf::PDFiumLibrary::get();
+ if (!pPDFium)
+ return;
+
+ // Given a file with a checkbox content control:
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ pWrtShell->InsertContentControl(SwContentControlType::CHECKBOX);
+
+ // When exporting to PDF:
+ save("writer_pdf_Export");
+
+ // Then make sure that a checkbox form widget is emitted:
+ std::unique_ptr<vcl::pdf::PDFiumDocument> pPdfDocument = parsePDFExport();
+ std::unique_ptr<vcl::pdf::PDFiumPage> pPage = pPdfDocument->openPage(0);
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 1
+ // - Actual : 0
+ // i.e. the checkbox content control was just exported as normal text.
+ CPPUNIT_ASSERT_EQUAL(1, pPage->getAnnotationCount());
+ std::unique_ptr<vcl::pdf::PDFiumAnnotation> pAnnotation = pPage->getAnnotation(0);
+ CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::Widget, pAnnotation->getSubType());
+ // Also check the form widget type:
+ CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFFormFieldType::CheckBox,
+ pAnnotation->getFormFieldType(pPdfDocument.get()));
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testDropdownContentControlPDF)
+{
+ std::shared_ptr<vcl::pdf::PDFium> pPDFium = vcl::pdf::PDFiumLibrary::get();
+ if (!pPDFium)
+ return;
+
+ // Given a file with a dropdown content control:
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ pWrtShell->InsertContentControl(SwContentControlType::DROP_DOWN_LIST);
+
+ // When exporting to PDF:
+ save("writer_pdf_Export");
+
+ // Then make sure that a dropdown form widget is emitted:
+ std::unique_ptr<vcl::pdf::PDFiumDocument> pPdfDocument = parsePDFExport();
+ std::unique_ptr<vcl::pdf::PDFiumPage> pPage = pPdfDocument->openPage(0);
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 1
+ // - Actual : 0
+ // i.e. the dropdown content control was just exported as normal text.
+ CPPUNIT_ASSERT_EQUAL(1, pPage->getAnnotationCount());
+ std::unique_ptr<vcl::pdf::PDFiumAnnotation> pAnnotation = pPage->getAnnotation(0);
+ CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::Widget, pAnnotation->getSubType());
+ // Also check the form widget type (our dropdown is called combo in PDF terms):
+ CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFFormFieldType::ComboBox,
+ pAnnotation->getFormFieldType(pPdfDocument.get()));
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testDropdownContentControlPDF2)
+{
+ std::shared_ptr<vcl::pdf::PDFium> pPDFium = vcl::pdf::PDFiumLibrary::get();
+ if (!pPDFium)
+ return;
+
+ createSwDoc("tdf153040.docx");
+
+ save("writer_pdf_Export");
+
+ // Make sure that a dropdown form widget is emitted:
+ std::unique_ptr<vcl::pdf::PDFiumDocument> pPdfDocument = parsePDFExport();
+ std::unique_ptr<vcl::pdf::PDFiumPage> pPage = pPdfDocument->openPage(0);
+
+ CPPUNIT_ASSERT_EQUAL(4, pPage->getAnnotationCount());
+ std::unique_ptr<vcl::pdf::PDFiumAnnotation> pAnnotation = pPage->getAnnotation(0);
+ CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::Widget, pAnnotation->getSubType());
+ // Also check the form widget type (our dropdown is called combo in PDF terms):
+ CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFFormFieldType::ComboBox,
+ pAnnotation->getFormFieldType(pPdfDocument.get()));
+ // Without tdf#153040's fix, this would have been the empty OUString()
+ CPPUNIT_ASSERT_EQUAL(OUString("Apfel"), pAnnotation->getFormFieldValue(pPdfDocument.get()));
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testDateContentControlPDF)
+{
+ std::shared_ptr<vcl::pdf::PDFium> pPDFium = vcl::pdf::PDFiumLibrary::get();
+ if (!pPDFium)
+ return;
+
+ // Given a file with a date content control:
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ pWrtShell->InsertContentControl(SwContentControlType::DATE);
+
+ // When exporting to PDF:
+ save("writer_pdf_Export");
+
+ // Then make sure that a date form widget is emitted:
+ std::unique_ptr<vcl::pdf::PDFiumDocument> pPdfDocument = parsePDFExport();
+ std::unique_ptr<vcl::pdf::PDFiumPage> pPage = pPdfDocument->openPage(0);
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 1
+ // - Actual : 0
+ // i.e. the date content control was just exported as normal text.
+ CPPUNIT_ASSERT_EQUAL(1, pPage->getAnnotationCount());
+ std::unique_ptr<vcl::pdf::PDFiumAnnotation> pAnnotation = pPage->getAnnotation(0);
+ CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::Widget, pAnnotation->getSubType());
+ // Also check the form widget type (our date is a mode of text in PDF terms):
+ CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFFormFieldType::TextField,
+ pAnnotation->getFormFieldType(pPdfDocument.get()));
+ OUString aAction = pAnnotation->getFormAdditionalActionJavaScript(
+ pPdfDocument.get(), vcl::pdf::PDFAnnotAActionType::KeyStroke);
+ CPPUNIT_ASSERT_EQUAL(OUString("AFDate_KeystrokeEx(\"mm/dd/yy\");"), aAction);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testContentControlPDFFont)
+{
+ std::shared_ptr<vcl::pdf::PDFium> pPDFium = vcl::pdf::PDFiumLibrary::get();
+ if (!pPDFium)
+ return;
+
+ // Given a document with a custom 24pt font size and a content control:
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ SfxItemSetFixed<RES_CHRATR_FONTSIZE, RES_CHRATR_FONTSIZE> aSet(pWrtShell->GetAttrPool());
+ SvxFontHeightItem aItem(480, 100, RES_CHRATR_FONTSIZE);
+ aSet.Put(aItem);
+ pWrtShell->SetAttrSet(aSet);
+ pWrtShell->InsertContentControl(SwContentControlType::RICH_TEXT);
+
+ // When exporting that document to PDF:
+ save("writer_pdf_Export");
+
+ // Then make sure that the widget in the PDF result has that custom font size:
+ std::unique_ptr<vcl::pdf::PDFiumDocument> pPdfDocument = parsePDFExport();
+ std::unique_ptr<vcl::pdf::PDFiumPage> pPage = pPdfDocument->openPage(0);
+ pPage->onAfterLoadPage(pPdfDocument.get());
+ CPPUNIT_ASSERT_EQUAL(1, pPage->getAnnotationCount());
+ std::unique_ptr<vcl::pdf::PDFiumAnnotation> pAnnotation = pPage->getAnnotation(0);
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 24
+ // - Actual : 8
+ // i.e. i.e. the font size was some default, not the 24pt specified in the model.
+ CPPUNIT_ASSERT_EQUAL(24.0f, pAnnotation->getFontSize(pPdfDocument.get()));
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testComboContentControlPDF)
+{
+ std::shared_ptr<vcl::pdf::PDFium> pPDFium = vcl::pdf::PDFiumLibrary::get();
+ if (!pPDFium)
+ return;
+
+ // Given a file with a combo box content control:
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ pWrtShell->InsertContentControl(SwContentControlType::COMBO_BOX);
+
+ // When exporting to PDF:
+ save("writer_pdf_Export");
+
+ // Then make sure that a combo box form widget is emitted:
+ std::unique_ptr<vcl::pdf::PDFiumDocument> pPdfDocument = parsePDFExport();
+ std::unique_ptr<vcl::pdf::PDFiumPage> pPage = pPdfDocument->openPage(0);
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 1
+ // - Actual : 0
+ // i.e. the combo box content control was exported as plain text.
+ CPPUNIT_ASSERT_EQUAL(1, pPage->getAnnotationCount());
+ std::unique_ptr<vcl::pdf::PDFiumAnnotation> pAnnotation = pPage->getAnnotation(0);
+ CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::Widget, pAnnotation->getSubType());
+ CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFFormFieldType::ComboBox,
+ pAnnotation->getFormFieldType(pPdfDocument.get()));
+ // 19th bit: combo box, not dropdown.
+ CPPUNIT_ASSERT(pAnnotation->getFormFieldFlags(pPdfDocument.get()) & 0x00040000);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testRichContentControlPDF)
+{
+ std::shared_ptr<vcl::pdf::PDFium> pPDFium = vcl::pdf::PDFiumLibrary::get();
+ if (!pPDFium)
+ return;
+
+ // Given a file with a rich content control, its value set to "xxx<b>yyy</b>":
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ pWrtShell->InsertContentControl(SwContentControlType::RICH_TEXT);
+ pWrtShell->SttEndDoc(/*bStt=*/true);
+ pWrtShell->Right(SwCursorSkipMode::Chars, /*bSelect=*/false, 1, /*bBasicCall=*/false);
+ sal_Int32 nPlaceHolderLen = SwResId(STR_CONTENT_CONTROL_PLACEHOLDER).getLength();
+ pWrtShell->Right(SwCursorSkipMode::Chars, /*bSelect=*/true, nPlaceHolderLen,
+ /*bBasicCall=*/false);
+ pWrtShell->Insert("xxxyyy");
+ pWrtShell->Left(SwCursorSkipMode::Chars, /*bSelect=*/true, 3, /*bBasicCall=*/false);
+ SfxItemSetFixed<RES_CHRATR_WEIGHT, RES_CHRATR_WEIGHT> aSet(pWrtShell->GetAttrPool());
+ SvxWeightItem aItem(WEIGHT_BOLD, RES_CHRATR_WEIGHT);
+ aSet.Put(aItem);
+ pWrtShell->SetAttrSet(aSet);
+
+ // When exporting to PDF:
+ save("writer_pdf_Export");
+
+ // Then make sure that a single fillable form widget is emitted:
+ std::unique_ptr<vcl::pdf::PDFiumDocument> pPdfDocument = parsePDFExport();
+ std::unique_ptr<vcl::pdf::PDFiumPage> pPage = pPdfDocument->openPage(0);
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 1
+ // - Actual : 2
+ // i.e. "xxx<b>yyy</b>" was exported as 2 widgets, not 1.
+ CPPUNIT_ASSERT_EQUAL(1, pPage->getAnnotationCount());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testPlaceholderFieldPDF)
+{
+ std::shared_ptr<vcl::pdf::PDFium> pPDFium = vcl::pdf::PDFiumLibrary::get();
+ if (!pPDFium)
+ return;
+
+ // Given a file with a text-type placeholder field:
+ createSwDoc("placeholder.fodt");
+
+ // When exporting to PDF (default setting is "create a PDF form"):
+ save("writer_pdf_Export");
+
+ // Then make sure that a fillable form widget is emitted:
+ std::unique_ptr<vcl::pdf::PDFiumDocument> pPdfDocument = parsePDFExport();
+ std::unique_ptr<vcl::pdf::PDFiumPage> pPage = pPdfDocument->openPage(0);
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 1
+ // - Actual : 0
+ // i.e. the placeholder field was just exported as normal text.
+ CPPUNIT_ASSERT_EQUAL(1, pPage->getAnnotationCount());
+ std::unique_ptr<vcl::pdf::PDFiumAnnotation> pAnnotation = pPage->getAnnotation(0);
+ CPPUNIT_ASSERT_EQUAL(vcl::pdf::PDFAnnotationSubType::Widget, pAnnotation->getSubType());
+
+ // Also verify that the widget description is correct:
+ CPPUNIT_ASSERT_EQUAL(OUString("reference text"),
+ pAnnotation->getFormFieldAlternateName(pPdfDocument.get()));
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testNumberPortionFormat)
+{
+ // Given a document with a single paragraph, direct formatting asks 24pt font size for the
+ // numbering and the text portion:
+ createSwDoc("number-portion-format.odt");
+
+ // When laying out that document:
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+
+ // Then make sure that the numbering portion has the correct font size:
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 480
+ // - Actual : 240
+ // i.e. the numbering portion font size was 12pt, not 24pt (but only when the doc had a
+ // bookmark).
+ assertXPath(pXmlDoc,
+ "//SwParaPortion/SwLineLayout/child::*[@type='PortionType::Number']/SwFont"_ostr,
+ "height"_ostr, "480");
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testNumberPortionNoformat)
+{
+ // Given a document with a numbering and a single paragraph, the entire run is red:
+ createSwDoc("number-portion-noformat.docx");
+
+ // When laying out that document:
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+
+ // Then make sure that just because the entire run is red, the numbering portion is not red:
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: ffffffff (COL_AUTO)
+ // - Actual : 00ff0000 (COL_LIGHTRED)
+ // i.e. the run color affected the color of the number portion in Writer, but not in Word.
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("ffffffff"),
+ getXPath(pXmlDoc, "//SwParaPortion/SwLineLayout/SwFieldPortion/SwFont"_ostr, "color"_ostr));
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testTdf41652NBSPWidth)
+{
+ sal_Int32 nSectionAfterNBSPX_legacy_leftAligned;
+ sal_Int32 nSectionAfterNBSPX_legacy_justified;
+ sal_Int32 nSectionAfterNBSPX_optionDisabled_leftAligned;
+ sal_Int32 nSectionAfterNBSPX_optionDisabled_justified;
+ sal_Int32 nSectionAfterNBSPX_optionEnabled_leftAligned;
+ sal_Int32 nSectionAfterNBSPX_optionEnabled_justified;
+
+ // Measure the X position of sections after NBSPs in a legacy file (no option value set)
+ {
+ createSwDoc("tdf41652_legacy.fodt");
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ SwDocShell* pShell = pTextDoc->GetDocShell();
+ std::shared_ptr<GDIMetaFile> xMetaFile = pShell->GetPreviewMetaFile();
+ MetafileXmlDump aDumper;
+ xmlDocUniquePtr pXmlDoc = dumpAndParse(aDumper, *xMetaFile);
+
+ nSectionAfterNBSPX_legacy_leftAligned
+ = getXPath(pXmlDoc, "//textarray[4]"_ostr, "x"_ostr).toInt32();
+ nSectionAfterNBSPX_legacy_justified
+ = getXPath(pXmlDoc, "//textarray[10]"_ostr, "x"_ostr).toInt32();
+ }
+
+ // Measure the X of sections after NBSPs in a file with the option enabled
+ {
+ createSwDoc("tdf41652_variableNBSPdisabled.fodt");
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ SwDocShell* pShell = pTextDoc->GetDocShell();
+ std::shared_ptr<GDIMetaFile> xMetaFile = pShell->GetPreviewMetaFile();
+ MetafileXmlDump aDumper;
+ xmlDocUniquePtr pXmlDoc = dumpAndParse(aDumper, *xMetaFile);
+
+ nSectionAfterNBSPX_optionDisabled_leftAligned
+ = getXPath(pXmlDoc, "//textarray[4]"_ostr, "x"_ostr).toInt32();
+ nSectionAfterNBSPX_optionDisabled_justified
+ = getXPath(pXmlDoc, "//textarray[10]"_ostr, "x"_ostr).toInt32();
+ }
+
+ // Measure the X of the sections after NBSPs in a file with the option enabled
+ {
+ createSwDoc("tdf41652_variableNBSPenabled.fodt");
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ SwDocShell* pShell = pTextDoc->GetDocShell();
+ std::shared_ptr<GDIMetaFile> xMetaFile = pShell->GetPreviewMetaFile();
+ MetafileXmlDump aDumper;
+ xmlDocUniquePtr pXmlDoc = dumpAndParse(aDumper, *xMetaFile);
+
+ nSectionAfterNBSPX_optionEnabled_leftAligned
+ = getXPath(pXmlDoc, "//textarray[4]"_ostr, "x"_ostr).toInt32();
+ nSectionAfterNBSPX_optionEnabled_justified
+ = getXPath(pXmlDoc, "//textarray[10]"_ostr, "x"_ostr).toInt32();
+ }
+
+ // Assert left aligned NBSP for the legacy file is larger than zero
+ CPPUNIT_ASSERT_GREATER(sal_Int32(0), nSectionAfterNBSPX_legacy_leftAligned);
+ // Assert both NBSPs have same width for the legacy file
+ CPPUNIT_ASSERT_EQUAL(nSectionAfterNBSPX_legacy_leftAligned,
+ nSectionAfterNBSPX_legacy_justified);
+ // Assert left aligned NBSP is same width for legacy file as for the disabled file
+ CPPUNIT_ASSERT_EQUAL(nSectionAfterNBSPX_legacy_leftAligned,
+ nSectionAfterNBSPX_optionDisabled_leftAligned);
+ // Assert justified NBSP is same width for legacy file as for the disabled file
+ CPPUNIT_ASSERT_EQUAL(nSectionAfterNBSPX_legacy_justified,
+ nSectionAfterNBSPX_optionDisabled_justified);
+ // Assert left aligned NBSP is same width for the disabled file as for the enabled file
+ CPPUNIT_ASSERT_EQUAL(nSectionAfterNBSPX_optionDisabled_leftAligned,
+ nSectionAfterNBSPX_optionEnabled_leftAligned);
+ // Assert justified NBSP is wider for the enabled file
+ CPPUNIT_ASSERT_GREATER(nSectionAfterNBSPX_optionDisabled_justified,
+ nSectionAfterNBSPX_optionEnabled_justified);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testFloattableOverlap)
+{
+ // Given a document with 2 floating tables, not overlapping in Word's "Word 2010" compat mode,
+ // because the first empty paragraph is below the first floating table:
+ createSwDoc("floattable-overlap.docx");
+
+ // When laying out that document:
+ calcLayout();
+
+ // Then make sure they don't overlap in Writer, either:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage1);
+ CPPUNIT_ASSERT(pPage1->GetSortedObjs());
+ const SwSortedObjs& rPage1Objs = *pPage1->GetSortedObjs();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), rPage1Objs.size());
+ SwAnchoredObject* pPage1Obj1 = rPage1Objs[0];
+ const SwRect& rRect1 = pPage1Obj1->GetObjRectWithSpaces();
+ SwAnchoredObject* pPage1Obj2 = rPage1Objs[1];
+ const SwRect& rRect2 = pPage1Obj2->GetObjRectWithSpaces();
+ // Without the accompanying fix in place, this test would have failed, the empty paragraph,
+ // which is after the floating table in the document model went above the floating table in the
+ // layout, which resulted in an overlap.
+ CPPUNIT_ASSERT(!rRect1.Overlaps(rRect2));
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testFloattableAnchorNextPage)
+{
+ // Given a document with 3 floating tables, the last one has a negative vertical offset, so the
+ // floating table is on page 1, but its anchor frame is effectively on page 2:
+ createSwDoc("floattable-anchor-next-page.docx");
+
+ // When laying out that document:
+ calcLayout();
+
+ // Then make sure all 3 floating tables are on page 1:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = dynamic_cast<SwPageFrame*>(pLayout->Lower());
+ CPPUNIT_ASSERT(pPage1);
+ CPPUNIT_ASSERT(pPage1->GetSortedObjs());
+ const SwSortedObjs& rPage1Objs = *pPage1->GetSortedObjs();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 3
+ // - Actual : 2
+ // i.e. the last floating table was on the wrong page (page 2).
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(3), rPage1Objs.size());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testTdf89288)
+{
+ // Given a document with 2 paragraphs of mixed Complex and Western text,
+ // and 2 other paragraphs of mixed Western and Asian text:
+ createSwDoc("tdf89288.fodt");
+
+ // When laying out that document:
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+
+ // Then make sure there is no kern portions between the Western and Complex
+ // portions:
+ assertXPath(pXmlDoc, "//body/txt[1]/SwParaPortion/SwLineLayout/SwLinePortion"_ostr, 3);
+ assertXPath(pXmlDoc,
+ "//body/txt[1]/SwParaPortion/SwLineLayout/child::*[@type='PortionType::Text']"_ostr,
+ 3);
+ assertXPath(pXmlDoc,
+ "//body/txt[1]/SwParaPortion/SwLineLayout/child::*[@type='PortionType::Kern']"_ostr,
+ 0);
+
+ assertXPath(pXmlDoc, "//body/txt[2]/SwParaPortion/SwLineLayout/SwLinePortion"_ostr, 3);
+ assertXPath(pXmlDoc,
+ "//body/txt[2]/SwParaPortion/SwLineLayout/child::*[@type='PortionType::Text']"_ostr,
+ 3);
+ assertXPath(pXmlDoc,
+ "//body/txt[2]/SwParaPortion/SwLineLayout/child::*[@type='PortionType::Kern']"_ostr,
+ 0);
+
+ // But also make sure there is a kern portion between each Western and Asian
+ // portion:
+ assertXPath(pXmlDoc, "//body/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion"_ostr, 5);
+ assertXPath(pXmlDoc,
+ "//body/txt[3]/SwParaPortion/SwLineLayout/child::*[@type='PortionType::Text']"_ostr,
+ 3);
+ assertXPath(pXmlDoc,
+ "//body/txt[3]/SwParaPortion/SwLineLayout/child::*[@type='PortionType::Kern']"_ostr,
+ 2);
+ assertXPath(pXmlDoc, "//body/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[2]"_ostr,
+ "type"_ostr, "PortionType::Kern");
+ assertXPath(pXmlDoc, "//body/txt[3]/SwParaPortion/SwLineLayout/SwLinePortion[4]"_ostr,
+ "type"_ostr, "PortionType::Kern");
+
+ assertXPath(pXmlDoc, "//body/txt[4]/SwParaPortion/SwLineLayout/SwLinePortion"_ostr, 5);
+ assertXPath(pXmlDoc,
+ "//body/txt[4]/SwParaPortion/SwLineLayout/child::*[@type='PortionType::Text']"_ostr,
+ 3);
+ assertXPath(pXmlDoc,
+ "//body/txt[4]/SwParaPortion/SwLineLayout/child::*[@type='PortionType::Kern']"_ostr,
+ 2);
+ assertXPath(pXmlDoc, "//body/txt[4]/SwParaPortion/SwLineLayout/SwLinePortion[2]"_ostr,
+ "type"_ostr, "PortionType::Kern");
+ assertXPath(pXmlDoc, "//body/txt[4]/SwParaPortion/SwLineLayout/SwLinePortion[4]"_ostr,
+ "type"_ostr, "PortionType::Kern");
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testTdf139863)
+{
+ // Given a document with 2 paragraphs of mixed Complex scripts:
+ createSwDoc("tdf139863.fodt");
+
+ // When laying out that document:
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+
+ // Then make sure the text is not split into multiple portions.
+ // Without the fix we don’t even reach here, as the old code resulted in a
+ // lone surrogate which can’t be converted to UTF-8 for the layout dump and
+ // we get an assert in OString::toUtf8().
+ assertXPath(pXmlDoc, "//body/txt[1]/SwParaPortion/SwLineLayout/child::*"_ostr, 1);
+ assertXPath(pXmlDoc, "//body/txt[2]/SwParaPortion/SwLineLayout/child::*"_ostr, 1);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testParaUpperMarginFlyIntersect)
+{
+ // Given a document with 2 paragraphs, the paragraphs have both upper and lower spacing of 567
+ // twips:
+ createSwDoc("para-upper-margin-fly-intersect.docx");
+
+ // When laying out that document:
+ calcLayout();
+
+ // Then make sure that we shift down the text in the second paragraph only based on the 2nd para
+ // upper margin, not based on the 1st para lower margin:
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+ int nFlyCount
+ = getXPathContent(
+ pXmlDoc,
+ "count(//SwParaPortion/SwLineLayout/child::*[@type='PortionType::Fly'])"_ostr)
+ .toInt32();
+ int nHeight = 0;
+ for (int i = 1; i <= nFlyCount; ++i)
+ {
+ OString xPath = "(//SwParaPortion/SwLineLayout/child::*[@type='PortionType::Fly'])["
+ + OString::number(i) + "]";
+ nHeight += getXPath(pXmlDoc, xPath, "height"_ostr).toInt32();
+ }
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 521 (~500)
+ // - Actual : 857 (~1000)
+ // I.e. both upper and lower margin was taken into account.
+ CPPUNIT_ASSERT_EQUAL(521, nHeight);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testTdf129810)
+{
+ // Load the document.
+ // The document embeds a subset of "Source Han Serif SC" so that it works
+ // even when the font is not installed.
+ //
+ // Font subset created with:
+ //
+ // hb-subset SourceHanSerif.ttc -y 12 -u '20,3002,4FE1,540C,5E76,606F,610F,6237,6536,65B9,65E0,6B3E,6C42,7684,786E,8981,8BA4,8BEF,8D26,8D35,FF0C' -o SourceHanSerif.ttf
+ createSwDoc("tdf129810.odt");
+
+ // Render the document to a metafile.
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ SwDocShell* pShell = pTextDoc->GetDocShell();
+ std::shared_ptr<GDIMetaFile> xMetaFile = pShell->GetPreviewMetaFile();
+ CPPUNIT_ASSERT(xMetaFile);
+
+ // Find the fist text array action
+ for (size_t nAction = 0; nAction < xMetaFile->GetActionSize(); nAction++)
+ {
+ auto pAction = xMetaFile->GetAction(nAction);
+ if (pAction->GetType() == MetaActionType::TEXTARRAY)
+ {
+ auto pTextArrayAction = static_cast<MetaTextArrayAction*>(pAction);
+ auto pDXArray = pTextArrayAction->GetDXArray();
+
+ // There should be 14 chars on the first line
+ CPPUNIT_ASSERT_EQUAL(size_t(14), pDXArray.size());
+
+ // Assert we are using the expected width for uncompressed chars
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(720), pDXArray[0]);
+ // Assert we are using the expected width for compressed chars
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(500), pDXArray[6] - pDXArray[5]);
+ break;
+ }
+ }
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testScriptinfosurrogatePairs)
+{
+ createSwDoc("scriptinfo-surrogate-pairs.fodt");
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+
+ // Test that a dotted circle is grouped with the mark after it, even if the
+ // mark is outside Unicode’s Basic Multilingual Plan (i.e. a surrogate pair
+ // in UTF-8)
+ //
+ // Without the fix it fails with:
+ // - Expected: 11
+ // - Actual : 11◌
+ assertXPath(pXmlDoc, "//txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[1]"_ostr,
+ "portion"_ostr, u"11"_ustr);
+ assertXPath(pXmlDoc, "//txt[1]/SwParaPortion/SwLineLayout/SwLinePortion[2]"_ostr,
+ "portion"_ostr, u"\u25CC\U00010A01"_ustr);
+
+ // Without the fix this would crash because we got a lone surrogate that
+ // can’t be converted to UTF-8, but if it were not for that it might fail
+ // with something like:
+ // - Expected: 11
+ // - Actual : 11ð€
+ assertXPath(pXmlDoc, "//txt[2]/SwParaPortion/SwLineLayout/SwLinePortion[1]"_ostr,
+ "portion"_ostr, u"11"_ustr);
+ assertXPath(pXmlDoc, "//txt[2]/SwParaPortion/SwLineLayout/SwLinePortion[2]"_ostr,
+ "portion"_ostr, u"\U0001D400\u064E"_ustr);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTextTest, testTdf112594)
+{
+ createSwDoc("tdf112594.fodt");
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+
+ // Test that a NNBSP is grouped with the Mongolian characters after it
+ //
+ // Without the fix it fails with:
+ // - Expected: 11
+ // - Actual : 11\u202F
+ // (U+020F is a space, so might not be visible)
+ assertXPath(pXmlDoc, "//SwParaPortion/SwLineLayout/SwLinePortion[1]"_ostr, "portion"_ostr,
+ u"11"_ustr);
+ assertXPath(pXmlDoc, "//SwParaPortion/SwLineLayout/SwLinePortion[2]"_ostr, "portion"_ostr,
+ u"\u202F\u1824"_ustr);
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/theme/ThemeTest.cxx b/sw/qa/core/theme/ThemeTest.cxx
new file mode 100644
index 0000000000..4be895dd3f
--- /dev/null
+++ b/sw/qa/core/theme/ThemeTest.cxx
@@ -0,0 +1,486 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <swmodeltestbase.hxx>
+
+#include <memory>
+#include <docsh.hxx>
+#include <unotxdoc.hxx>
+#include <wrtsh.hxx>
+#include <drawdoc.hxx>
+#include <IDocumentDrawModelAccess.hxx>
+#include <svx/svdpage.hxx>
+#include <docmodel/uno/UnoComplexColor.hxx>
+#include <docmodel/theme/Theme.hxx>
+#include <ThemeColorChanger.hxx>
+#include <svx/ColorSets.hxx>
+
+using namespace css;
+
+namespace
+{
+class SwCoreThemeTest : public SwModelTestBase
+{
+public:
+ SwCoreThemeTest()
+ : SwModelTestBase("/sw/qa/core/theme/data/")
+ {
+ }
+};
+
+CPPUNIT_TEST_FIXTURE(SwCoreThemeTest, testThemeColorInHeading)
+{
+ createSwDoc("ThemeColorInHeading.docx");
+ SwDoc* pDoc = getSwDoc();
+ CPPUNIT_ASSERT(pDoc);
+
+ auto xComplexColor
+ = getProperty<uno::Reference<util::XComplexColor>>(getParagraph(1), "CharComplexColor");
+ auto aComplexColor = model::color::getFromXComplexColor(xComplexColor);
+ CPPUNIT_ASSERT_EQUAL(model::ThemeColorType::Accent1, aComplexColor.getThemeColorType());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreThemeTest, testThemeColorInHeadingODT)
+{
+ createSwDoc("ThemeColorInHeading.fodt");
+ SwDoc* pDoc = getSwDoc();
+ CPPUNIT_ASSERT(pDoc);
+
+ auto xComplexColor
+ = getProperty<uno::Reference<util::XComplexColor>>(getParagraph(1), "CharComplexColor");
+ auto aComplexColor = model::color::getFromXComplexColor(xComplexColor);
+ CPPUNIT_ASSERT_EQUAL(model::ThemeColorType::Accent1, aComplexColor.getThemeColorType());
+}
+
+void checkFillStyles(std::vector<model::FillStyle> const& rStyleList)
+{
+ CPPUNIT_ASSERT_EQUAL(size_t(3), rStyleList.size());
+ // Fill style 1
+ {
+ model::FillStyle const& rFillStyle = rStyleList.at(0);
+ CPPUNIT_ASSERT(rFillStyle.mpFill);
+ CPPUNIT_ASSERT_EQUAL(model::FillType::Solid, rFillStyle.mpFill->meType);
+ auto* pSolidFill = static_cast<model::SolidFill*>(rFillStyle.mpFill.get());
+ CPPUNIT_ASSERT_EQUAL(model::ColorType::Placeholder, pSolidFill->maColor.getType());
+ CPPUNIT_ASSERT_EQUAL(size_t(0), pSolidFill->maColor.getTransformations().size());
+ }
+
+ // Fill style 2
+ {
+ model::FillStyle const& rFillStyle = rStyleList.at(1);
+ CPPUNIT_ASSERT(rFillStyle.mpFill);
+ CPPUNIT_ASSERT_EQUAL(model::FillType::Gradient, rFillStyle.mpFill->meType);
+ auto* pGradientFill = static_cast<model::GradientFill*>(rFillStyle.mpFill.get());
+
+ // Gradient Properties
+ CPPUNIT_ASSERT_EQUAL(model::GradientType::Linear, pGradientFill->meGradientType);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5400000), pGradientFill->maLinearGradient.mnAngle);
+ CPPUNIT_ASSERT_EQUAL(false, pGradientFill->maLinearGradient.mbScaled);
+
+ // Gradient stops
+ CPPUNIT_ASSERT_EQUAL(size_t(3), pGradientFill->maGradientStops.size());
+ {
+ auto const& rGradientStop = pGradientFill->maGradientStops[0];
+ CPPUNIT_ASSERT_EQUAL(0.0, rGradientStop.mfPosition);
+ CPPUNIT_ASSERT_EQUAL(model::ColorType::Placeholder, rGradientStop.maColor.getType());
+ CPPUNIT_ASSERT_EQUAL(size_t(3), rGradientStop.maColor.getTransformations().size());
+
+ {
+ auto const& rTrasnsformation = rGradientStop.maColor.getTransformations()[0];
+ CPPUNIT_ASSERT_EQUAL(model::TransformationType::LumMod, rTrasnsformation.meType);
+ CPPUNIT_ASSERT_EQUAL(sal_Int16(11000), rTrasnsformation.mnValue);
+ }
+ {
+ auto const& rTrasnsformation = rGradientStop.maColor.getTransformations()[1];
+ CPPUNIT_ASSERT_EQUAL(model::TransformationType::SatMod, rTrasnsformation.meType);
+ CPPUNIT_ASSERT_EQUAL(sal_Int16(10500), rTrasnsformation.mnValue);
+ }
+ {
+ auto const& rTrasnsformation = rGradientStop.maColor.getTransformations()[2];
+ CPPUNIT_ASSERT_EQUAL(model::TransformationType::Tint, rTrasnsformation.meType);
+ CPPUNIT_ASSERT_EQUAL(sal_Int16(6700), rTrasnsformation.mnValue);
+ }
+ }
+ {
+ auto const& rGradientStop = pGradientFill->maGradientStops[1];
+ CPPUNIT_ASSERT_EQUAL(0.5, rGradientStop.mfPosition);
+ CPPUNIT_ASSERT_EQUAL(model::ColorType::Placeholder, rGradientStop.maColor.getType());
+ CPPUNIT_ASSERT_EQUAL(size_t(3), rGradientStop.maColor.getTransformations().size());
+
+ {
+ auto const& rTrasnsformation = rGradientStop.maColor.getTransformations()[0];
+ CPPUNIT_ASSERT_EQUAL(model::TransformationType::LumMod, rTrasnsformation.meType);
+ CPPUNIT_ASSERT_EQUAL(sal_Int16(10500), rTrasnsformation.mnValue);
+ }
+ {
+ auto const& rTrasnsformation = rGradientStop.maColor.getTransformations()[1];
+ CPPUNIT_ASSERT_EQUAL(model::TransformationType::SatMod, rTrasnsformation.meType);
+ CPPUNIT_ASSERT_EQUAL(sal_Int16(10300), rTrasnsformation.mnValue);
+ }
+ {
+ auto const& rTrasnsformation = rGradientStop.maColor.getTransformations()[2];
+ CPPUNIT_ASSERT_EQUAL(model::TransformationType::Tint, rTrasnsformation.meType);
+ CPPUNIT_ASSERT_EQUAL(sal_Int16(7300), rTrasnsformation.mnValue);
+ }
+ }
+ {
+ auto const& rGradientStop = pGradientFill->maGradientStops[2];
+ CPPUNIT_ASSERT_EQUAL(1.0, rGradientStop.mfPosition);
+ CPPUNIT_ASSERT_EQUAL(model::ColorType::Placeholder, rGradientStop.maColor.getType());
+ CPPUNIT_ASSERT_EQUAL(size_t(3), rGradientStop.maColor.getTransformations().size());
+
+ {
+ auto const& rTrasnsformation = rGradientStop.maColor.getTransformations()[0];
+ CPPUNIT_ASSERT_EQUAL(model::TransformationType::LumMod, rTrasnsformation.meType);
+ CPPUNIT_ASSERT_EQUAL(sal_Int16(10500), rTrasnsformation.mnValue);
+ }
+ {
+ auto const& rTrasnsformation = rGradientStop.maColor.getTransformations()[1];
+ CPPUNIT_ASSERT_EQUAL(model::TransformationType::SatMod, rTrasnsformation.meType);
+ CPPUNIT_ASSERT_EQUAL(sal_Int16(10900), rTrasnsformation.mnValue);
+ }
+ {
+ auto const& rTrasnsformation = rGradientStop.maColor.getTransformations()[2];
+ CPPUNIT_ASSERT_EQUAL(model::TransformationType::Tint, rTrasnsformation.meType);
+ CPPUNIT_ASSERT_EQUAL(sal_Int16(8100), rTrasnsformation.mnValue);
+ }
+ }
+ }
+
+ // Fill style 3
+ {
+ model::FillStyle const& rFillStyle = rStyleList.at(2);
+ CPPUNIT_ASSERT(rFillStyle.mpFill);
+ CPPUNIT_ASSERT_EQUAL(model::FillType::Gradient, rFillStyle.mpFill->meType);
+ auto* pGradientFill = static_cast<model::GradientFill*>(rFillStyle.mpFill.get());
+
+ // Gradient Properties
+ CPPUNIT_ASSERT_EQUAL(model::GradientType::Linear, pGradientFill->meGradientType);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5400000), pGradientFill->maLinearGradient.mnAngle);
+ CPPUNIT_ASSERT_EQUAL(false, pGradientFill->maLinearGradient.mbScaled);
+
+ // Gradient Stops
+ CPPUNIT_ASSERT_EQUAL(size_t(3), pGradientFill->maGradientStops.size());
+ {
+ auto const& rGradientStop = pGradientFill->maGradientStops[0];
+ CPPUNIT_ASSERT_EQUAL(0.0, rGradientStop.mfPosition);
+ CPPUNIT_ASSERT_EQUAL(model::ColorType::Placeholder, rGradientStop.maColor.getType());
+ CPPUNIT_ASSERT_EQUAL(size_t(3), rGradientStop.maColor.getTransformations().size());
+ {
+ auto const& rTrasnsformation = rGradientStop.maColor.getTransformations()[0];
+ CPPUNIT_ASSERT_EQUAL(model::TransformationType::SatMod, rTrasnsformation.meType);
+ CPPUNIT_ASSERT_EQUAL(sal_Int16(10300), rTrasnsformation.mnValue);
+ }
+ {
+ auto const& rTrasnsformation = rGradientStop.maColor.getTransformations()[1];
+ CPPUNIT_ASSERT_EQUAL(model::TransformationType::LumMod, rTrasnsformation.meType);
+ CPPUNIT_ASSERT_EQUAL(sal_Int16(10200), rTrasnsformation.mnValue);
+ }
+ {
+ auto const& rTrasnsformation = rGradientStop.maColor.getTransformations()[2];
+ CPPUNIT_ASSERT_EQUAL(model::TransformationType::Tint, rTrasnsformation.meType);
+ CPPUNIT_ASSERT_EQUAL(sal_Int16(9400), rTrasnsformation.mnValue);
+ }
+ }
+ {
+ auto const& rGradientStop = pGradientFill->maGradientStops[1];
+ CPPUNIT_ASSERT_EQUAL(0.5, rGradientStop.mfPosition);
+ CPPUNIT_ASSERT_EQUAL(model::ColorType::Placeholder, rGradientStop.maColor.getType());
+ CPPUNIT_ASSERT_EQUAL(size_t(3), rGradientStop.maColor.getTransformations().size());
+ {
+ auto const& rTrasnsformation = rGradientStop.maColor.getTransformations()[0];
+ CPPUNIT_ASSERT_EQUAL(model::TransformationType::SatMod, rTrasnsformation.meType);
+ CPPUNIT_ASSERT_EQUAL(sal_Int16(11000), rTrasnsformation.mnValue);
+ }
+ {
+ auto const& rTrasnsformation = rGradientStop.maColor.getTransformations()[1];
+ CPPUNIT_ASSERT_EQUAL(model::TransformationType::LumMod, rTrasnsformation.meType);
+ CPPUNIT_ASSERT_EQUAL(sal_Int16(10000), rTrasnsformation.mnValue);
+ }
+ {
+ auto const& rTrasnsformation = rGradientStop.maColor.getTransformations()[2];
+ CPPUNIT_ASSERT_EQUAL(model::TransformationType::Shade, rTrasnsformation.meType);
+ CPPUNIT_ASSERT_EQUAL(sal_Int16(10000), rTrasnsformation.mnValue);
+ }
+ }
+ {
+ auto const& rGradientStop = pGradientFill->maGradientStops[2];
+ CPPUNIT_ASSERT_EQUAL(1.0, rGradientStop.mfPosition);
+ CPPUNIT_ASSERT_EQUAL(model::ColorType::Placeholder, rGradientStop.maColor.getType());
+ CPPUNIT_ASSERT_EQUAL(size_t(3), rGradientStop.maColor.getTransformations().size());
+ {
+ auto const& rTrasnsformation = rGradientStop.maColor.getTransformations()[0];
+ CPPUNIT_ASSERT_EQUAL(model::TransformationType::LumMod, rTrasnsformation.meType);
+ CPPUNIT_ASSERT_EQUAL(sal_Int16(9900), rTrasnsformation.mnValue);
+ }
+ {
+ auto const& rTrasnsformation = rGradientStop.maColor.getTransformations()[1];
+ CPPUNIT_ASSERT_EQUAL(model::TransformationType::SatMod, rTrasnsformation.meType);
+ CPPUNIT_ASSERT_EQUAL(sal_Int16(12000), rTrasnsformation.mnValue);
+ }
+ {
+ auto const& rTrasnsformation = rGradientStop.maColor.getTransformations()[2];
+ CPPUNIT_ASSERT_EQUAL(model::TransformationType::Shade, rTrasnsformation.meType);
+ CPPUNIT_ASSERT_EQUAL(sal_Int16(7800), rTrasnsformation.mnValue);
+ }
+ }
+ }
+}
+
+void checkLineStyles(std::vector<model::LineStyle> const& rStyleList)
+{
+ CPPUNIT_ASSERT_EQUAL(size_t(3), rStyleList.size());
+ // Line style 1
+ {
+ model::LineStyle const& rLineStyle = rStyleList.at(0);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(6350), rLineStyle.mnWidth);
+ CPPUNIT_ASSERT_EQUAL(model::CapType::Flat, rLineStyle.meCapType);
+ CPPUNIT_ASSERT_EQUAL(model::PenAlignmentType::Center, rLineStyle.mePenAlignment);
+ CPPUNIT_ASSERT_EQUAL(model::CompoundLineType::Single, rLineStyle.meCompoundLineType);
+ CPPUNIT_ASSERT_EQUAL(model::PresetDashType::Solid, rLineStyle.maLineDash.mePresetType);
+ CPPUNIT_ASSERT_EQUAL(model::LineJoinType::Miter, rLineStyle.maLineJoin.meType);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(800000), rLineStyle.maLineJoin.mnMiterLimit);
+
+ model::FillStyle const& rFillStyle = rLineStyle.maLineFillStyle;
+ CPPUNIT_ASSERT(rFillStyle.mpFill);
+ CPPUNIT_ASSERT_EQUAL(model::FillType::Solid, rFillStyle.mpFill->meType);
+ auto* pSolidFill = static_cast<model::SolidFill*>(rFillStyle.mpFill.get());
+ CPPUNIT_ASSERT_EQUAL(model::ColorType::Placeholder, pSolidFill->maColor.getType());
+ CPPUNIT_ASSERT_EQUAL(size_t(0), pSolidFill->maColor.getTransformations().size());
+ }
+
+ // Line style 2
+ {
+ model::LineStyle const& rLineStyle = rStyleList.at(1);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(12700), rLineStyle.mnWidth);
+ CPPUNIT_ASSERT_EQUAL(model::CapType::Flat, rLineStyle.meCapType);
+ CPPUNIT_ASSERT_EQUAL(model::PenAlignmentType::Center, rLineStyle.mePenAlignment);
+ CPPUNIT_ASSERT_EQUAL(model::CompoundLineType::Single, rLineStyle.meCompoundLineType);
+ CPPUNIT_ASSERT_EQUAL(model::PresetDashType::Solid, rLineStyle.maLineDash.mePresetType);
+ CPPUNIT_ASSERT_EQUAL(model::LineJoinType::Miter, rLineStyle.maLineJoin.meType);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(800000), rLineStyle.maLineJoin.mnMiterLimit);
+
+ model::FillStyle const& rFillStyle = rLineStyle.maLineFillStyle;
+ CPPUNIT_ASSERT(rFillStyle.mpFill);
+ CPPUNIT_ASSERT_EQUAL(model::FillType::Solid, rFillStyle.mpFill->meType);
+ auto* pSolidFill = static_cast<model::SolidFill*>(rFillStyle.mpFill.get());
+ CPPUNIT_ASSERT_EQUAL(model::ColorType::Placeholder, pSolidFill->maColor.getType());
+ CPPUNIT_ASSERT_EQUAL(size_t(0), pSolidFill->maColor.getTransformations().size());
+ }
+
+ // Line style 3
+ {
+ model::LineStyle const& rLineStyle = rStyleList.at(2);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(19050), rLineStyle.mnWidth);
+ CPPUNIT_ASSERT_EQUAL(model::CapType::Flat, rLineStyle.meCapType);
+ CPPUNIT_ASSERT_EQUAL(model::PenAlignmentType::Center, rLineStyle.mePenAlignment);
+ CPPUNIT_ASSERT_EQUAL(model::CompoundLineType::Single, rLineStyle.meCompoundLineType);
+ CPPUNIT_ASSERT_EQUAL(model::PresetDashType::Solid, rLineStyle.maLineDash.mePresetType);
+ CPPUNIT_ASSERT_EQUAL(model::LineJoinType::Miter, rLineStyle.maLineJoin.meType);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(800000), rLineStyle.maLineJoin.mnMiterLimit);
+
+ model::FillStyle const& rFillStyle = rLineStyle.maLineFillStyle;
+ CPPUNIT_ASSERT(rFillStyle.mpFill);
+ CPPUNIT_ASSERT_EQUAL(model::FillType::Solid, rFillStyle.mpFill->meType);
+ auto* pSolidFill = static_cast<model::SolidFill*>(rFillStyle.mpFill.get());
+ CPPUNIT_ASSERT_EQUAL(model::ColorType::Placeholder, pSolidFill->maColor.getType());
+ CPPUNIT_ASSERT_EQUAL(size_t(0), pSolidFill->maColor.getTransformations().size());
+ }
+}
+
+void checkEffects(std::vector<model::EffectStyle> const& rEffectStyleList)
+{
+ CPPUNIT_ASSERT_EQUAL(size_t(3), rEffectStyleList.size());
+ {
+ model::EffectStyle rEffectStyle = rEffectStyleList[0];
+ CPPUNIT_ASSERT_EQUAL(size_t(0), rEffectStyle.maEffectList.size());
+ }
+
+ {
+ model::EffectStyle rEffectStyle = rEffectStyleList[1];
+ CPPUNIT_ASSERT_EQUAL(size_t(0), rEffectStyle.maEffectList.size());
+ }
+
+ {
+ model::EffectStyle rEffectStyle = rEffectStyleList[2];
+ CPPUNIT_ASSERT_EQUAL(size_t(1), rEffectStyle.maEffectList.size());
+ model::Effect const& rEffect = rEffectStyle.maEffectList[0];
+
+ CPPUNIT_ASSERT_EQUAL(model::EffectType::OuterShadow, rEffect.meType);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(57150), rEffect.mnBlurRadius);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(19050), rEffect.mnDistance);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(5400000), rEffect.mnDirection);
+ CPPUNIT_ASSERT_EQUAL(model::RectangleAlignment::Center, rEffect.meAlignment);
+ CPPUNIT_ASSERT_EQUAL(false, rEffect.mbRotateWithShape);
+
+ CPPUNIT_ASSERT_EQUAL(model::ColorType::RGB, rEffect.maColor.getType());
+ CPPUNIT_ASSERT_EQUAL(Color(0x000000), rEffect.maColor.getRGB());
+
+ CPPUNIT_ASSERT_EQUAL(size_t(1), rEffect.maColor.getTransformations().size());
+ CPPUNIT_ASSERT_EQUAL(model::TransformationType::Alpha,
+ rEffect.maColor.getTransformations()[0].meType);
+ CPPUNIT_ASSERT_EQUAL(sal_Int16(6300), rEffect.maColor.getTransformations()[0].mnValue);
+ }
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreThemeTest, testDrawPageThemeExistsDOCX)
+{
+ createSwDoc("ThemeColorInHeading.docx");
+ SwDoc* pDoc = getSwDoc();
+ CPPUNIT_ASSERT(pDoc);
+
+ SdrModel* pModel = pDoc->getIDocumentDrawModelAccess().GetDrawModel();
+ CPPUNIT_ASSERT(pModel);
+ auto const& pTheme = pModel->getTheme();
+ CPPUNIT_ASSERT(pTheme);
+ CPPUNIT_ASSERT_EQUAL(u"Office Theme"_ustr, pTheme->GetName());
+
+ auto pColorSet = pTheme->getColorSet();
+ CPPUNIT_ASSERT(pColorSet);
+ CPPUNIT_ASSERT_EQUAL(u"Orange"_ustr, pColorSet->getName());
+
+ CPPUNIT_ASSERT_EQUAL(Color(0xE48312), pTheme->GetColor(model::ThemeColorType::Accent1));
+ CPPUNIT_ASSERT_EQUAL(Color(0xBD582C), pTheme->GetColor(model::ThemeColorType::Accent2));
+ CPPUNIT_ASSERT_EQUAL(Color(0x865640), pTheme->GetColor(model::ThemeColorType::Accent3));
+ CPPUNIT_ASSERT_EQUAL(Color(0x9B8357), pTheme->GetColor(model::ThemeColorType::Accent4));
+ CPPUNIT_ASSERT_EQUAL(Color(0xC2BC80), pTheme->GetColor(model::ThemeColorType::Accent5));
+ CPPUNIT_ASSERT_EQUAL(Color(0x94A088), pTheme->GetColor(model::ThemeColorType::Accent6));
+ CPPUNIT_ASSERT_EQUAL(Color(0x000000), pTheme->GetColor(model::ThemeColorType::Dark1));
+ CPPUNIT_ASSERT_EQUAL(Color(0x637052), pTheme->GetColor(model::ThemeColorType::Dark2));
+ CPPUNIT_ASSERT_EQUAL(Color(0xFFFFFF), pTheme->GetColor(model::ThemeColorType::Light1));
+ CPPUNIT_ASSERT_EQUAL(Color(0xCCDDEA), pTheme->GetColor(model::ThemeColorType::Light2));
+
+ model::FontScheme const& rFontScheme = pTheme->getFontScheme();
+ CPPUNIT_ASSERT_EQUAL(u"Calibri Light"_ustr, rFontScheme.getMajorLatin().maTypeface);
+ CPPUNIT_ASSERT_EQUAL(u"Calibri"_ustr, rFontScheme.getMinorLatin().maTypeface);
+ CPPUNIT_ASSERT_EQUAL(true, rFontScheme.getMajorAsian().maTypeface.isEmpty());
+ CPPUNIT_ASSERT_EQUAL(true, rFontScheme.getMinorAsian().maTypeface.isEmpty());
+ CPPUNIT_ASSERT_EQUAL(true, rFontScheme.getMajorComplex().maTypeface.isEmpty());
+ CPPUNIT_ASSERT_EQUAL(true, rFontScheme.getMinorComplex().maTypeface.isEmpty());
+ CPPUNIT_ASSERT_EQUAL(size_t(47), rFontScheme.getMajorSupplementalFontList().size());
+ CPPUNIT_ASSERT_EQUAL(size_t(47), rFontScheme.getMinorSupplementalFontList().size());
+ CPPUNIT_ASSERT_EQUAL(u"Angsana New"_ustr, rFontScheme.findMajorSupplementalTypeface(u"Thai"));
+ CPPUNIT_ASSERT_EQUAL(u"Cordia New"_ustr, rFontScheme.findMinorSupplementalTypeface(u"Thai"));
+
+ model::FormatScheme const& rFormatScheme = pTheme->getFormatScheme();
+ checkFillStyles(rFormatScheme.getFillStyleList());
+ checkLineStyles(rFormatScheme.getLineStyleList());
+ checkEffects(rFormatScheme.getEffectStyleList());
+ CPPUNIT_ASSERT_EQUAL(size_t(3), rFormatScheme.getBackgroundFillStyleList().size());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreThemeTest, testDrawPageThemeExistsODT)
+{
+ createSwDoc("ThemeColorInHeading.fodt");
+ SwDoc* pDoc = getSwDoc();
+ CPPUNIT_ASSERT(pDoc);
+
+ SdrModel* pModel = pDoc->getIDocumentDrawModelAccess().GetDrawModel();
+ CPPUNIT_ASSERT(pModel);
+ auto const& pTheme = pModel->getTheme();
+ CPPUNIT_ASSERT(pTheme);
+ CPPUNIT_ASSERT_EQUAL(u"Office Theme"_ustr, pTheme->GetName());
+
+ auto pColorSet = pTheme->getColorSet();
+ CPPUNIT_ASSERT(pColorSet);
+ CPPUNIT_ASSERT_EQUAL(u"Orange"_ustr, pColorSet->getName());
+
+ CPPUNIT_ASSERT_EQUAL(Color(0xE48312), pTheme->GetColor(model::ThemeColorType::Accent1));
+ CPPUNIT_ASSERT_EQUAL(Color(0xBD582C), pTheme->GetColor(model::ThemeColorType::Accent2));
+ CPPUNIT_ASSERT_EQUAL(Color(0x865640), pTheme->GetColor(model::ThemeColorType::Accent3));
+ CPPUNIT_ASSERT_EQUAL(Color(0x9B8357), pTheme->GetColor(model::ThemeColorType::Accent4));
+ CPPUNIT_ASSERT_EQUAL(Color(0xC2BC80), pTheme->GetColor(model::ThemeColorType::Accent5));
+ CPPUNIT_ASSERT_EQUAL(Color(0x94A088), pTheme->GetColor(model::ThemeColorType::Accent6));
+ CPPUNIT_ASSERT_EQUAL(Color(0x000000), pTheme->GetColor(model::ThemeColorType::Dark1));
+ CPPUNIT_ASSERT_EQUAL(Color(0x637052), pTheme->GetColor(model::ThemeColorType::Dark2));
+ CPPUNIT_ASSERT_EQUAL(Color(0xFFFFFF), pTheme->GetColor(model::ThemeColorType::Light1));
+ CPPUNIT_ASSERT_EQUAL(Color(0xCCDDEA), pTheme->GetColor(model::ThemeColorType::Light2));
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreThemeTest, testThemeChanging)
+{
+ createSwDoc("ThemeColorInHeading.docx");
+ SwDoc* pDoc = getSwDoc();
+ CPPUNIT_ASSERT(pDoc);
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ CPPUNIT_ASSERT(pWrtShell);
+ SdrModel* pModel = pDoc->getIDocumentDrawModelAccess().GetDrawModel();
+ CPPUNIT_ASSERT(pModel);
+
+ // Check current theme colors
+ {
+ auto const& pTheme = pModel->getTheme();
+ CPPUNIT_ASSERT(pTheme);
+ CPPUNIT_ASSERT_EQUAL(u"Office Theme"_ustr, pTheme->GetName());
+
+ auto pColorSet = pTheme->getColorSet();
+ CPPUNIT_ASSERT(pColorSet);
+ CPPUNIT_ASSERT_EQUAL(u"Orange"_ustr, pColorSet->getName());
+ CPPUNIT_ASSERT_EQUAL(Color(0xE48312), pTheme->GetColor(model::ThemeColorType::Accent1));
+ }
+
+ // Change theme colors
+ {
+ auto const& rColorSets = svx::ColorSets::get();
+ auto pNewColorSet = std::make_shared<model::ColorSet>(rColorSets.getColorSet(0));
+ // check that the theme colors are as expected
+ CPPUNIT_ASSERT_EQUAL(u"LibreOffice"_ustr, pNewColorSet->getName());
+
+ sw::ThemeColorChanger aChanger(pDoc->GetDocShell());
+ aChanger.apply(pNewColorSet);
+ }
+
+ // Check new theme colors
+ {
+ auto const& pTheme = pModel->getTheme();
+ CPPUNIT_ASSERT(pTheme);
+ CPPUNIT_ASSERT_EQUAL(u"Office Theme"_ustr, pTheme->GetName());
+
+ auto pColorSet = pTheme->getColorSet();
+ CPPUNIT_ASSERT(pColorSet);
+ CPPUNIT_ASSERT_EQUAL(u"LibreOffice"_ustr, pColorSet->getName());
+ CPPUNIT_ASSERT_EQUAL(Color(0x18A303), pTheme->GetColor(model::ThemeColorType::Accent1));
+ }
+
+ // Undo
+ pWrtShell->Undo();
+
+ // Check theme colors have been reverted
+ {
+ auto const& pTheme = pModel->getTheme();
+ CPPUNIT_ASSERT(pTheme);
+ CPPUNIT_ASSERT_EQUAL(u"Office Theme"_ustr, pTheme->GetName());
+
+ auto pColorSet = pTheme->getColorSet();
+ CPPUNIT_ASSERT(pColorSet);
+ CPPUNIT_ASSERT_EQUAL(u"Orange"_ustr, pColorSet->getName());
+ CPPUNIT_ASSERT_EQUAL(Color(0xE48312), pTheme->GetColor(model::ThemeColorType::Accent1));
+ }
+
+ // Redo
+ pWrtShell->Redo();
+
+ // Check theme colors have been applied again
+ {
+ auto const& pTheme = pModel->getTheme();
+ CPPUNIT_ASSERT(pTheme);
+ CPPUNIT_ASSERT_EQUAL(u"Office Theme"_ustr, pTheme->GetName());
+
+ auto pColorSet = pTheme->getColorSet();
+ CPPUNIT_ASSERT(pColorSet);
+ CPPUNIT_ASSERT_EQUAL(u"LibreOffice"_ustr, pColorSet->getName());
+ CPPUNIT_ASSERT_EQUAL(Color(0x18A303), pTheme->GetColor(model::ThemeColorType::Accent1));
+ }
+}
+
+} // end anonymous namnespace
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/theme/data/ThemeColorInHeading.docx b/sw/qa/core/theme/data/ThemeColorInHeading.docx
new file mode 100644
index 0000000000..e350c2676d
--- /dev/null
+++ b/sw/qa/core/theme/data/ThemeColorInHeading.docx
Binary files differ
diff --git a/sw/qa/core/theme/data/ThemeColorInHeading.fodt b/sw/qa/core/theme/data/ThemeColorInHeading.fodt
new file mode 100644
index 0000000000..943a654623
--- /dev/null
+++ b/sw/qa/core/theme/data/ThemeColorInHeading.fodt
@@ -0,0 +1,391 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<office:document xmlns:css3t="http://www.w3.org/TR/css3-text/" xmlns:grddl="http://www.w3.org/2003/g/data-view#" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:drawooo="http://openoffice.org/2010/draw" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:calcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" xmlns:tableooo="http://openoffice.org/2009/table" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:rpt="http://openoffice.org/2005/report" xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:officeooo="http://openoffice.org/2009/office" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:meta><meta:initial-creator>Jan Holesovsky</meta:initial-creator><dc:creator>Jan Holesovsky</dc:creator><meta:editing-cycles>3</meta:editing-cycles><meta:creation-date>2021-04-01T13:52:00</meta:creation-date><dc:date>2021-04-01T14:06:00</dc:date><meta:editing-duration>PT3M</meta:editing-duration><meta:generator>LibreOfficeDev/7.6.0.0.alpha1$Linux_X86_64 LibreOffice_project/b1e712ba064530512e77a40bc354d8de9eb483e6</meta:generator><meta:document-statistic meta:table-count="0" meta:image-count="0" meta:object-count="0" meta:page-count="1" meta:paragraph-count="3" meta:word-count="13" meta:character-count="64" meta:non-whitespace-character-count="54"/><meta:user-defined meta:name="AppVersion">16.0000</meta:user-defined><meta:template xlink:type="simple" xlink:actuate="onRequest" xlink:title="Normal" xlink:href=""/></office:meta>
+ <office:settings>
+ <config:config-item-set config:name="ooo:view-settings">
+ <config:config-item config:name="ViewAreaTop" config:type="long">0</config:config-item>
+ <config:config-item config:name="ViewAreaLeft" config:type="long">0</config:config-item>
+ <config:config-item config:name="ViewAreaWidth" config:type="long">23255</config:config-item>
+ <config:config-item config:name="ViewAreaHeight" config:type="long">12584</config:config-item>
+ <config:config-item config:name="ShowRedlineChanges" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="InBrowseMode" config:type="boolean">false</config:config-item>
+ <config:config-item-map-indexed config:name="Views">
+ <config:config-item-map-entry>
+ <config:config-item config:name="ViewId" config:type="string">view2</config:config-item>
+ <config:config-item config:name="ViewLeft" config:type="long">3667</config:config-item>
+ <config:config-item config:name="ViewTop" config:type="long">3464</config:config-item>
+ <config:config-item config:name="VisibleLeft" config:type="long">0</config:config-item>
+ <config:config-item config:name="VisibleTop" config:type="long">0</config:config-item>
+ <config:config-item config:name="VisibleRight" config:type="long">23253</config:config-item>
+ <config:config-item config:name="VisibleBottom" config:type="long">12582</config:config-item>
+ <config:config-item config:name="ZoomType" config:type="short">0</config:config-item>
+ <config:config-item config:name="ViewLayoutColumns" config:type="short">1</config:config-item>
+ <config:config-item config:name="ViewLayoutBookMode" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ZoomFactor" config:type="short">180</config:config-item>
+ <config:config-item config:name="IsSelectedFrame" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="KeepRatio" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AnchoredTextOverflowLegacy" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="LegacySingleLineFontwork" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ConnectorUseSnapRect" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IgnoreBreakAfterMultilineField" config:type="boolean">false</config:config-item>
+ </config:config-item-map-entry>
+ </config:config-item-map-indexed>
+ </config:config-item-set>
+ <config:config-item-set config:name="ooo:configuration-settings">
+ <config:config-item config:name="PrintRightPages" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintProspectRTL" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintLeftPages" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintPaperFromSetup" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintControls" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintProspect" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintBlackFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintEmptyPages" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintSingleJobs" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintAnnotationMode" config:type="short">0</config:config-item>
+ <config:config-item config:name="WordLikeWrapForAsCharFlys" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AutoFirstLineIndentDisregardLineSpace" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="HeaderSpacingBelowLastPara" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ProtectBookmarks" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ContinuousEndnotes" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="DisableOffPagePositioning" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintTables" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="SubtractFlysAnchoredAtFlys" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ApplyParagraphMarkFormatToNumbering" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintFaxName" config:type="string"/>
+ <config:config-item config:name="SurroundTextWrapSmall" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="TreatSingleColumnBreakAsPageBreak" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PropLineSpacingShrinksFirstLine" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="TabOverSpacing" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="TabOverMargin" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedComplexScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmbedLatinScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmbedOnlyUsedFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="EmbedFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ClippedPictures" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="FrameAutowidthWithMorePara" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="FloattableNomargins" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="UnbreakableNumberings" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AllowPrintJobCancel" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="UseVariableWidthNBSP" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UseFormerObjectPositioning" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UseOldNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="RsidRoot" config:type="int">1826887</config:config-item>
+ <config:config-item config:name="PrinterPaperFromSetup" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="CurrentDatabaseDataSource" config:type="string"/>
+ <config:config-item config:name="UpdateFromTemplate" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AddFrameOffsets" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="LoadReadonly" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="Rsid" config:type="int">1826887</config:config-item>
+ <config:config-item config:name="FootnoteInColumnToPageEnd" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ProtectFields" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="SaveGlobalDocumentLinks" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ClipAsCharacterAnchoredWriterFlyFrames" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="LinkUpdateMode" config:type="short">1</config:config-item>
+ <config:config-item config:name="AddExternalLeading" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrintGraphics" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmbedSystemFonts" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IsLabelDocument" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AddParaLineSpacingToTableCells" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="UseFormerTextWrapping" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="HyphenateURLs" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AddParaTableSpacingAtStart" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="TabsRelativeToIndent" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="FieldAutoUpdate" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="SaveVersionOnClose" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="ChartAutoUpdate" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ImagePreferredDPI" config:type="int">0</config:config-item>
+ <config:config-item config:name="PrinterSetup" config:type="base64Binary"/>
+ <config:config-item config:name="SmallCapsPercentage66" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="AlignTabStopPosition" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="DropCapPunctuation" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="MathBaselineAlignment" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="PrinterName" config:type="string"/>
+ <config:config-item config:name="CharacterCompressionType" config:type="short">0</config:config-item>
+ <config:config-item config:name="AddParaTableSpacing" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="DoNotJustifyLinesWithManualBreak" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintHiddenText" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IsKernAsianPunctuation" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrinterIndependentLayout" config:type="string">high-resolution</config:config-item>
+ <config:config-item config:name="TabOverflow" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AddParaSpacingToTableCells" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="AddVerticalFrameOffsets" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="TabAtLeftIndentForParagraphsInList" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ApplyUserData" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="MsWordCompMinLineHeightByFly" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintTextPlaceholder" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="IgnoreFirstLineIndentInNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UseFormerLineSpacing" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintPageBackground" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="RedlineProtectionKey" config:type="base64Binary"/>
+ <config:config-item config:name="EmbedAsianScriptFonts" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="BackgroundParaOverDrawings" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="SaveThumbnail" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="ConsiderTextWrapOnObjPos" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmbeddedDatabaseName" config:type="string"/>
+ <config:config-item config:name="ProtectForm" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="DoNotResetParaAttrsForNumFont" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="MsWordCompTrailingBlanks" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="EmptyDbFieldHidesPara" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="TableRowKeep" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="NoNumberingShowFollowBy" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="InvertBorderSpacing" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="IgnoreTabsAndBlanksForLineCalculation" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="DoNotCaptureDrawObjsOnPage" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="GutterAtTop" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="StylesNoDefault" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UnxForceZeroExtLeading" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="PrintReversed" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="UseOldPrinterMetrics" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="CurrentDatabaseCommandType" config:type="int">0</config:config-item>
+ <config:config-item config:name="PrintDrawings" config:type="boolean">true</config:config-item>
+ <config:config-item config:name="OutlineLevelYieldsNumbering" config:type="boolean">false</config:config-item>
+ <config:config-item config:name="CurrentDatabaseCommand" config:type="string"/>
+ <config:config-item config:name="CollapseEmptyCellPara" config:type="boolean">true</config:config-item>
+ </config:config-item-set>
+ </office:settings>
+ <office:scripts>
+ <office:script script:language="ooo:Basic">
+ <ooo:libraries xmlns:ooo="http://openoffice.org/2004/office" xmlns:xlink="http://www.w3.org/1999/xlink"/>
+ </office:script>
+ </office:scripts>
+ <office:font-face-decls>
+ <style:font-face style:name="Calibri" svg:font-family="Calibri" style:font-family-generic="roman" style:font-pitch="variable"/>
+ <style:font-face style:name="Calibri Light" svg:font-family="&apos;Calibri Light&apos;" style:font-family-generic="roman" style:font-pitch="variable"/>
+ <style:font-face style:name="Calibri1" svg:font-family="Calibri" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="F" svg:font-family="" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="Liberation Sans" svg:font-family="&apos;Liberation Sans&apos;" style:font-family-generic="swiss" style:font-pitch="variable"/>
+ <style:font-face style:name="Lohit Devanagari" svg:font-family="&apos;Lohit Devanagari&apos;"/>
+ <style:font-face style:name="Lohit Devanagari1" svg:font-family="&apos;Lohit Devanagari&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ <style:font-face style:name="Noto Sans CJK SC" svg:font-family="&apos;Noto Sans CJK SC&apos;" style:font-family-generic="system" style:font-pitch="variable"/>
+ </office:font-face-decls>
+ <office:styles>
+ <style:default-style style:family="graphic">
+ <style:graphic-properties svg:stroke-color="#3465a4" draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:flow-with-text="false"/>
+ <style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" loext:tab-stop-distance="0cm" style:writing-mode="lr-tb" style:font-independent-line-spacing="false">
+ <style:tab-stops/>
+ </style:paragraph-properties>
+ <style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Calibri" fo:font-size="11pt" fo:language="cs" fo:country="CZ" style:letter-kerning="false" style:font-name-asian="Calibri1" style:font-size-asian="11pt" style:language-asian="en" style:country-asian="US" style:font-name-complex="F" style:font-size-complex="11pt" style:language-complex="ar" style:country-complex="SA"/>
+ </style:default-style>
+ <style:default-style style:family="paragraph">
+ <style:paragraph-properties fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="1.249cm" style:writing-mode="page"/>
+ <style:text-properties style:use-window-font-color="true" loext:opacity="0%" style:font-name="Calibri" fo:font-size="11pt" fo:language="cs" fo:country="CZ" style:letter-kerning="false" style:font-name-asian="Calibri1" style:font-size-asian="11pt" style:language-asian="en" style:country-asian="US" style:font-name-complex="F" style:font-size-complex="11pt" style:language-complex="ar" style:country-complex="SA" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2" loext:hyphenation-no-caps="false" loext:hyphenation-no-last-word="false" loext:hyphenation-word-char-count="5" loext:hyphenation-zone="no-limit"/>
+ </style:default-style>
+ <style:default-style style:family="table">
+ <style:table-properties table:border-model="collapsing"/>
+ </style:default-style>
+ <style:default-style style:family="table-row">
+ <style:table-row-properties fo:keep-together="auto"/>
+ </style:default-style>
+ <style:style style:name="Standard" style:family="paragraph" style:class="text">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.282cm" style:contextual-spacing="false" fo:line-height="108%" fo:text-align="start" style:justify-single-word="false" fo:orphans="2" fo:widows="2" style:writing-mode="lr-tb"/>
+ </style:style>
+ <style:style style:name="Heading" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text_20_body" style:class="text">
+ <style:paragraph-properties fo:margin-top="0.423cm" fo:margin-bottom="0.212cm" style:contextual-spacing="false" fo:keep-with-next="always"/>
+ <style:text-properties style:font-name="Liberation Sans" fo:font-family="&apos;Liberation Sans&apos;" style:font-family-generic="swiss" style:font-pitch="variable" fo:font-size="14pt" style:font-name-asian="Noto Sans CJK SC" style:font-family-asian="&apos;Noto Sans CJK SC&apos;" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="14pt" style:font-name-complex="Lohit Devanagari1" style:font-family-complex="&apos;Lohit Devanagari&apos;" style:font-family-generic-complex="system" style:font-pitch-complex="variable" style:font-size-complex="14pt"/>
+ </style:style>
+ <style:style style:name="Text_20_body" style:display-name="Text body" style:family="paragraph" style:parent-style-name="Standard" style:class="text">
+ <style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.247cm" style:contextual-spacing="false" fo:line-height="115%"/>
+ </style:style>
+ <style:style style:name="List" style:family="paragraph" style:parent-style-name="Text_20_body" style:class="list">
+ <style:text-properties style:font-size-asian="12pt" style:font-name-complex="Lohit Devanagari" style:font-family-complex="&apos;Lohit Devanagari&apos;"/>
+ </style:style>
+ <style:style style:name="Caption" style:family="paragraph" style:parent-style-name="Standard" style:class="extra">
+ <style:paragraph-properties fo:margin-top="0.212cm" fo:margin-bottom="0.212cm" style:contextual-spacing="false" text:number-lines="false" text:line-number="0"/>
+ <style:text-properties fo:font-size="12pt" fo:font-style="italic" style:font-size-asian="12pt" style:font-style-asian="italic" style:font-name-complex="Lohit Devanagari" style:font-family-complex="&apos;Lohit Devanagari&apos;" style:font-size-complex="12pt" style:font-style-complex="italic"/>
+ </style:style>
+ <style:style style:name="Index" style:family="paragraph" style:parent-style-name="Standard" style:class="index">
+ <style:paragraph-properties text:number-lines="false" text:line-number="0"/>
+ <style:text-properties style:font-size-asian="12pt" style:font-name-complex="Lohit Devanagari" style:font-family-complex="&apos;Lohit Devanagari&apos;"/>
+ </style:style>
+ <style:style style:name="Heading_20_1" style:display-name="Heading 1" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Standard" loext:linked-style-name="Heading_20_1_20_Char" style:default-outline-level="1" style:list-style-name="" style:class="text">
+ <style:paragraph-properties fo:margin-top="0.423cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:keep-together="always" fo:keep-with-next="always"/>
+ <style:text-properties fo:color="#aa610d" loext:opacity="100%" style:font-name="Calibri Light" fo:font-family="&apos;Calibri Light&apos;" style:font-family-generic="roman" style:font-pitch="variable" fo:font-size="16pt" style:font-name-asian="F" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="16pt" style:font-name-complex="F" style:font-family-generic-complex="system" style:font-pitch-complex="variable" style:font-size-complex="16pt">
+ <loext:char-complex-color loext:theme-type="accent1">
+ <loext:transformation loext:type="shade" loext:value="2539"/>
+ </loext:char-complex-color>
+ </style:text-properties>
+ </style:style>
+ <style:style style:name="Heading_20_2" style:display-name="Heading 2" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Standard" loext:linked-style-name="Heading_20_2_20_Char" style:default-outline-level="2" style:list-style-name="" style:class="text">
+ <style:paragraph-properties fo:margin-top="0.071cm" fo:margin-bottom="0cm" style:contextual-spacing="false" fo:keep-together="always" fo:keep-with-next="always"/>
+ <style:text-properties fo:color="#aa610d" loext:opacity="100%" style:font-name="Calibri Light" fo:font-family="&apos;Calibri Light&apos;" style:font-family-generic="roman" style:font-pitch="variable" fo:font-size="13pt" style:font-name-asian="F" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="13pt" style:font-name-complex="F" style:font-family-generic-complex="system" style:font-pitch-complex="variable" style:font-size-complex="13pt">
+ <loext:char-complex-color loext:theme-type="accent1">
+ <loext:transformation loext:type="shade" loext:value="2539"/>
+ </loext:char-complex-color>
+ </style:text-properties>
+ </style:style>
+ <style:style style:name="Default_20_Paragraph_20_Font_20__28_WW_29_" style:display-name="Default Paragraph Font (WW)" style:family="text"/>
+ <style:style style:name="Heading_20_1_20_Char" style:display-name="Heading 1 Char" style:family="text" style:parent-style-name="Default_20_Paragraph_20_Font_20__28_WW_29_" loext:linked-style-name="Heading_20_1">
+ <style:text-properties fo:color="#aa610d" loext:opacity="100%" style:font-name="Calibri Light" fo:font-family="&apos;Calibri Light&apos;" style:font-family-generic="roman" style:font-pitch="variable" fo:font-size="16pt" style:font-name-asian="F" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="16pt" style:font-name-complex="F" style:font-family-generic-complex="system" style:font-pitch-complex="variable" style:font-size-complex="16pt">
+ <loext:char-complex-color loext:theme-type="accent1">
+ <loext:transformation loext:type="shade" loext:value="2539"/>
+ </loext:char-complex-color>
+ </style:text-properties>
+ </style:style>
+ <style:style style:name="Heading_20_2_20_Char" style:display-name="Heading 2 Char" style:family="text" style:parent-style-name="Default_20_Paragraph_20_Font_20__28_WW_29_" loext:linked-style-name="Heading_20_2">
+ <style:text-properties fo:color="#aa610d" loext:opacity="100%" style:font-name="Calibri Light" fo:font-family="&apos;Calibri Light&apos;" style:font-family-generic="roman" style:font-pitch="variable" fo:font-size="13pt" style:font-name-asian="F" style:font-family-generic-asian="system" style:font-pitch-asian="variable" style:font-size-asian="13pt" style:font-name-complex="F" style:font-family-generic-complex="system" style:font-pitch-complex="variable" style:font-size-complex="13pt">
+ <loext:char-complex-color loext:theme-type="accent1">
+ <loext:transformation loext:type="shade" loext:value="2539"/>
+ </loext:char-complex-color>
+ </style:text-properties>
+ </style:style>
+ <text:outline-style style:name="Outline">
+ <text:outline-level-style text:level="1" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="2" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="3" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="4" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="5" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="6" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="7" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="8" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="9" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ <text:outline-level-style text:level="10" style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab"/>
+ </style:list-level-properties>
+ </text:outline-level-style>
+ </text:outline-style>
+ <text:list-style style:name="No_20_List_20__28_WW_29_" style:display-name="No List (WW)">
+ <text:list-level-style-number text:level="1" loext:num-list-format="%1%." style:num-suffix="." style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.27cm" fo:text-indent="-0.635cm" fo:margin-left="1.27cm"/>
+ </style:list-level-properties>
+ </text:list-level-style-number>
+ <text:list-level-style-number text:level="2" loext:num-list-format="%2%." style:num-suffix="." style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="1.905cm" fo:text-indent="-0.635cm" fo:margin-left="1.905cm"/>
+ </style:list-level-properties>
+ </text:list-level-style-number>
+ <text:list-level-style-number text:level="3" loext:num-list-format="%3%." style:num-suffix="." style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="2.54cm" fo:text-indent="-0.635cm" fo:margin-left="2.54cm"/>
+ </style:list-level-properties>
+ </text:list-level-style-number>
+ <text:list-level-style-number text:level="4" loext:num-list-format="%4%." style:num-suffix="." style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.175cm" fo:text-indent="-0.635cm" fo:margin-left="3.175cm"/>
+ </style:list-level-properties>
+ </text:list-level-style-number>
+ <text:list-level-style-number text:level="5" loext:num-list-format="%5%." style:num-suffix="." style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="3.81cm" fo:text-indent="-0.635cm" fo:margin-left="3.81cm"/>
+ </style:list-level-properties>
+ </text:list-level-style-number>
+ <text:list-level-style-number text:level="6" loext:num-list-format="%6%." style:num-suffix="." style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="4.445cm" fo:text-indent="-0.635cm" fo:margin-left="4.445cm"/>
+ </style:list-level-properties>
+ </text:list-level-style-number>
+ <text:list-level-style-number text:level="7" loext:num-list-format="%7%." style:num-suffix="." style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="5.08cm" fo:text-indent="-0.635cm" fo:margin-left="5.08cm"/>
+ </style:list-level-properties>
+ </text:list-level-style-number>
+ <text:list-level-style-number text:level="8" loext:num-list-format="%8%." style:num-suffix="." style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="5.715cm" fo:text-indent="-0.635cm" fo:margin-left="5.715cm"/>
+ </style:list-level-properties>
+ </text:list-level-style-number>
+ <text:list-level-style-number text:level="9" loext:num-list-format="%9%." style:num-suffix="." style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="6.35cm" fo:text-indent="-0.635cm" fo:margin-left="6.35cm"/>
+ </style:list-level-properties>
+ </text:list-level-style-number>
+ <text:list-level-style-number text:level="10" loext:num-list-format="%10%." style:num-suffix="." style:num-format="">
+ <style:list-level-properties text:list-level-position-and-space-mode="label-alignment">
+ <style:list-level-label-alignment text:label-followed-by="listtab" text:list-tab-stop-position="6.985cm" fo:text-indent="-0.635cm" fo:margin-left="6.985cm"/>
+ </style:list-level-properties>
+ </text:list-level-style-number>
+ </text:list-style>
+ <text:notes-configuration text:note-class="footnote" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/>
+ <text:notes-configuration text:note-class="endnote" style:num-format="i" text:start-value="0"/>
+ <text:linenumbering-configuration text:number-lines="false" text:offset="0.499cm" style:num-format="1" text:number-position="left" text:increment="5"/>
+ <style:default-page-layout>
+ <style:page-layout-properties style:layout-grid-standard-mode="true"/>
+ </style:default-page-layout>
+ <loext:theme loext:name="Office Theme">
+ <loext:theme-colors loext:name="Orange">
+ <loext:color loext:name="dark1" loext:color="#000000"/>
+ <loext:color loext:name="light1" loext:color="#ffffff"/>
+ <loext:color loext:name="dark2" loext:color="#637052"/>
+ <loext:color loext:name="light2" loext:color="#ccddea"/>
+ <loext:color loext:name="accent1" loext:color="#e48312"/>
+ <loext:color loext:name="accent2" loext:color="#bd582c"/>
+ <loext:color loext:name="accent3" loext:color="#865640"/>
+ <loext:color loext:name="accent4" loext:color="#9b8357"/>
+ <loext:color loext:name="accent5" loext:color="#c2bc80"/>
+ <loext:color loext:name="accent6" loext:color="#94a088"/>
+ <loext:color loext:name="hyperlink" loext:color="#2998e3"/>
+ <loext:color loext:name="followed-hyperlink" loext:color="#8c8c8c"/>
+ </loext:theme-colors>
+ </loext:theme>
+ </office:styles>
+ <office:automatic-styles>
+ <style:style style:name="T1" style:family="text">
+ <style:text-properties fo:language="en" fo:country="US"/>
+ </style:style>
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-width="21.001cm" fo:page-height="29.7cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2.54cm" fo:margin-bottom="2.54cm" fo:margin-left="2.54cm" fo:margin-right="2.54cm" style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" style:layout-grid-lines="38" style:layout-grid-base-height="0.635cm" style:layout-grid-ruby-height="0cm" style:layout-grid-mode="none" style:layout-grid-ruby-below="false" style:layout-grid-print="false" style:layout-grid-display="false" style:layout-grid-base-width="0.423cm" style:layout-grid-snap-to="true" style:footnote-max-height="0cm" loext:margin-gutter="0cm">
+ <style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:line-style="solid" style:adjustment="left" style:rel-width="25%" style:color="#000000"/>
+ </style:page-layout-properties>
+ <style:header-style/>
+ <style:footer-style/>
+ </style:page-layout>
+ <style:style style:name="dp1" style:family="drawing-page">
+ <style:drawing-page-properties draw:background-size="full"/>
+ </style:style>
+ </office:automatic-styles>
+ <office:master-styles>
+ <style:master-page style:name="Standard" style:page-layout-name="pm1" draw:style-name="dp1"/>
+ </office:master-styles>
+ <office:body>
+ <office:text>
+ <text:sequence-decls>
+ <text:sequence-decl text:display-outline-level="0" text:name="Illustration"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Table"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Text"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>
+ <text:sequence-decl text:display-outline-level="0" text:name="Figure"/>
+ </text:sequence-decls>
+ <text:h text:style-name="Heading_20_1" text:outline-level="1" loext:marker-style-name="T1"><text:span text:style-name="T1">Heading 1</text:span><text:span text:style-name="T1"/></text:h>
+ <text:h text:style-name="Heading_20_2" text:outline-level="2" loext:marker-style-name="T1"><text:span text:style-name="T1">Heading 2</text:span><text:span text:style-name="T1"/></text:h>
+ <text:p text:style-name="Standard" loext:marker-style-name="T1"><text:span text:style-name="T1">This is a test document in the “Orange†theme.</text:span></text:p>
+ </office:text>
+ </office:body>
+</office:document> \ No newline at end of file
diff --git a/sw/qa/core/tox/tox.cxx b/sw/qa/core/tox/tox.cxx
new file mode 100644
index 0000000000..89fc71a7eb
--- /dev/null
+++ b/sw/qa/core/tox/tox.cxx
@@ -0,0 +1,258 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <swmodeltestbase.hxx>
+
+#include <com/sun/star/frame/XStorable.hpp>
+#include <com/sun/star/text/BibliographyDataType.hpp>
+#include <com/sun/star/text/ControlCharacter.hpp>
+#include <com/sun/star/text/XDocumentIndex.hpp>
+#include <com/sun/star/text/XTextDocument.hpp>
+
+#include <comphelper/propertyvalue.hxx>
+
+#include <IDocumentFieldsAccess.hxx>
+#include <authfld.hxx>
+#include <fmtfld.hxx>
+
+namespace
+{
+/// Covers sw/source/core/tox/ fixes.
+class Test : public SwModelTestBase
+{
+};
+
+CPPUNIT_TEST_FIXTURE(Test, testAuthorityLinkClick)
+{
+ // Create a document with a bibliography reference (of type WWW) in it.
+ createSwDoc();
+ uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xField(
+ xFactory->createInstance("com.sun.star.text.TextField.Bibliography"), uno::UNO_QUERY);
+ uno::Sequence<beans::PropertyValue> aFields = {
+ comphelper::makePropertyValue("BibiliographicType", text::BibliographyDataType::WWW),
+ comphelper::makePropertyValue("Identifier", OUString("ARJ00")),
+ comphelper::makePropertyValue("Author", OUString("Ar, J")),
+ comphelper::makePropertyValue("Title", OUString("mytitle")),
+ comphelper::makePropertyValue("Year", OUString("2020")),
+ comphelper::makePropertyValue("URL", OUString("http://www.example.com/test.pdf")),
+ };
+ xField->setPropertyValue("Fields", uno::Any(aFields));
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xTextDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ uno::Reference<text::XTextContent> xContent(xField, uno::UNO_QUERY);
+ xText->insertTextContent(xCursor, xContent, /*bAbsorb=*/false);
+ // Create a bibliography table.
+ uno::Reference<text::XTextContent> xTable(
+ xFactory->createInstance("com.sun.star.text.Bibliography"), uno::UNO_QUERY);
+ xCursor->gotoEnd(/*bExpand=*/false);
+ xText->insertControlCharacter(xCursor, text::ControlCharacter::APPEND_PARAGRAPH,
+ /*bAbsorb=*/false);
+ xText->insertTextContent(xCursor, xTable, /*bAbsorb=*/false);
+
+ // Update it.
+ uno::Reference<text::XDocumentIndex> xTableIndex(xTable, uno::UNO_QUERY);
+ xTableIndex->update();
+
+ // Paragraph index: Reference, table header, table row.
+ // Portion index: ID, etc; then the URL.
+ auto aActual = getProperty<OUString>(getRun(getParagraph(3), 2), "HyperLinkURL");
+ // Without the accompanying fix in place, this test would have failed with:
+ // An uncaught exception of type com.sun.star.container.NoSuchElementException
+ // i.e. the URL was not clickable and the table row was a single text portion.
+ CPPUNIT_ASSERT_EQUAL(OUString("http://www.example.com/test.pdf"), aActual);
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testAuthorityTableEntryURL)
+{
+ // Given a document with a bibliography reference (of type WWW) in it:
+ createSwDoc();
+ uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xField(
+ xFactory->createInstance("com.sun.star.text.TextField.Bibliography"), uno::UNO_QUERY);
+ uno::Sequence<beans::PropertyValue> aFields = {
+ comphelper::makePropertyValue("BibiliographicType", text::BibliographyDataType::WWW),
+ comphelper::makePropertyValue("Identifier", OUString("AT")),
+ comphelper::makePropertyValue("Author", OUString("Author")),
+ comphelper::makePropertyValue("Title", OUString("Title")),
+ comphelper::makePropertyValue("URL", OUString("http://www.example.com/test.pdf#page=1")),
+ };
+ xField->setPropertyValue("Fields", uno::Any(aFields));
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xTextDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ uno::Reference<text::XTextContent> xContent(xField, uno::UNO_QUERY);
+ xText->insertTextContent(xCursor, xContent, /*bAbsorb=*/false);
+ // Create a bibliography table.
+ uno::Reference<text::XTextContent> xTable(
+ xFactory->createInstance("com.sun.star.text.Bibliography"), uno::UNO_QUERY);
+ xCursor->gotoEnd(/*bExpand=*/false);
+ xText->insertControlCharacter(xCursor, text::ControlCharacter::APPEND_PARAGRAPH,
+ /*bAbsorb=*/false);
+ xText->insertTextContent(xCursor, xTable, /*bAbsorb=*/false);
+
+ // When updating that table:
+ uno::Reference<text::XDocumentIndex> xTableIndex(xTable, uno::UNO_QUERY);
+ xTableIndex->update();
+
+ // Then the page number from the source's URL should be stripped:
+ // Paragraph index: Reference, table header, table row.
+ // Portion index: ID, etc; then the URL.
+ auto aActual = getProperty<OUString>(getRun(getParagraph(3), 2), "HyperLinkURL");
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: http://www.example.com/test.pdf
+ // - Actual : http://www.example.com/test.pdf#page=1
+ // i.e. the page number was still part of the bibliography table.
+ CPPUNIT_ASSERT_EQUAL(OUString("http://www.example.com/test.pdf"), aActual);
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testAuthorityTableEntryClick)
+{
+ // Given an empty document:
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+
+ // When inserting a biblio entry field with an URL:
+ uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xField(
+ xFactory->createInstance("com.sun.star.text.TextField.Bibliography"), uno::UNO_QUERY);
+ uno::Sequence<beans::PropertyValue> aFields = {
+ comphelper::makePropertyValue("BibiliographicType", text::BibliographyDataType::WWW),
+ comphelper::makePropertyValue("Identifier", OUString("AT")),
+ comphelper::makePropertyValue("Author", OUString("Author")),
+ comphelper::makePropertyValue("Title", OUString("Title")),
+ comphelper::makePropertyValue("URL", OUString("http://www.example.com/test.pdf#page=1")),
+ };
+ xField->setPropertyValue("Fields", uno::Any(aFields));
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xTextDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ uno::Reference<text::XTextContent> xContent(xField, uno::UNO_QUERY);
+ xText->insertTextContent(xCursor, xContent, /*bAbsorb=*/false);
+
+ // Then make sure that the field is clickable, since the page part will not be part of the
+ // bibliography table:
+ const SwFieldTypes* pTypes = pDoc->getIDocumentFieldsAccess().GetFieldTypes();
+ auto it = std::find_if(pTypes->begin(), pTypes->end(),
+ [](const std::unique_ptr<SwFieldType>& pType) {
+ return pType->Which() == SwFieldIds::TableOfAuthorities;
+ });
+ CPPUNIT_ASSERT(it != pTypes->end());
+ const SwFieldType* pType = it->get();
+ std::vector<SwFormatField*> aFormatFields;
+ pType->GatherFields(aFormatFields);
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), aFormatFields.size());
+ SwField* pField = aFormatFields[0]->GetField();
+ // Without the accompanying fix in place, this test would have failed, as the field was not
+ // clickable.
+ CPPUNIT_ASSERT(pField->IsClickable());
+ // This is needed, so the mouse has the correct RefHand pointer style.
+ CPPUNIT_ASSERT(pField->HasClickHdl());
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testAuthorityTableEntryRelClick)
+{
+ // Given an empty document with a file:// base URL:
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ uno::Reference<frame::XStorable> xStorable(mxComponent, uno::UNO_QUERY);
+ uno::Sequence<beans::PropertyValue> aArgs = {
+ comphelper::makePropertyValue("FilterName", OUString("writer8")),
+ };
+ xStorable->storeAsURL(maTempFile.GetURL(), aArgs);
+
+ // When inserting a biblio entry field with a relative URL:
+ uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xField(
+ xFactory->createInstance("com.sun.star.text.TextField.Bibliography"), uno::UNO_QUERY);
+ uno::Sequence<beans::PropertyValue> aFields = {
+ comphelper::makePropertyValue("BibiliographicType", text::BibliographyDataType::WWW),
+ comphelper::makePropertyValue("Identifier", OUString("AT")),
+ comphelper::makePropertyValue("Author", OUString("Author")),
+ comphelper::makePropertyValue("Title", OUString("Title")),
+ comphelper::makePropertyValue("URL", OUString("test.pdf#page=1")),
+ };
+ xField->setPropertyValue("Fields", uno::Any(aFields));
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xTextDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ uno::Reference<text::XTextContent> xContent(xField, uno::UNO_QUERY);
+ xText->insertTextContent(xCursor, xContent, /*bAbsorb=*/false);
+
+ // Then make sure that the field is clickable:
+ const SwFieldTypes* pTypes = pDoc->getIDocumentFieldsAccess().GetFieldTypes();
+ auto it = std::find_if(pTypes->begin(), pTypes->end(),
+ [](const std::unique_ptr<SwFieldType>& pType) {
+ return pType->Which() == SwFieldIds::TableOfAuthorities;
+ });
+ CPPUNIT_ASSERT(it != pTypes->end());
+ const SwFieldType* pType = it->get();
+ std::vector<SwFormatField*> aFormatFields;
+ pType->GatherFields(aFormatFields);
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), aFormatFields.size());
+ auto pField = static_cast<SwAuthorityField*>(aFormatFields[0]->GetField());
+ CPPUNIT_ASSERT(pField->GetAbsoluteURL().startsWith("file://"));
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testAuthorityTableURLDeduplication)
+{
+ // Given a document with 3 bibliography references (of type WWW) in it:
+ static const std::initializer_list<std::u16string_view> aURLs = {
+ u"http://www.example.com/test.pdf#page=1",
+ u"http://www.example.com/test.pdf#page=2",
+ u"http://www.example.com/test2.pdf",
+ };
+ createSwDoc();
+ uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xTextDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ for (const auto& rURL : aURLs)
+ {
+ uno::Reference<beans::XPropertySet> xField(
+ xFactory->createInstance("com.sun.star.text.TextField.Bibliography"), uno::UNO_QUERY);
+ uno::Sequence<beans::PropertyValue> aFields = {
+ comphelper::makePropertyValue("BibiliographicType", text::BibliographyDataType::WWW),
+ comphelper::makePropertyValue("Identifier", OUString("AT")),
+ comphelper::makePropertyValue("Author", OUString("Author")),
+ comphelper::makePropertyValue("Title", OUString("Title")),
+ comphelper::makePropertyValue("URL", OUString(rURL)),
+ };
+ xField->setPropertyValue("Fields", uno::Any(aFields));
+ uno::Reference<text::XTextContent> xContent(xField, uno::UNO_QUERY);
+ xText->insertTextContent(xCursor, xContent, /*bAbsorb=*/false);
+ }
+ // Create a bibliography table.
+ uno::Reference<text::XTextContent> xTable(
+ xFactory->createInstance("com.sun.star.text.Bibliography"), uno::UNO_QUERY);
+ xCursor->gotoEnd(/*bExpand=*/false);
+ xText->insertControlCharacter(xCursor, text::ControlCharacter::APPEND_PARAGRAPH,
+ /*bAbsorb=*/false);
+ xText->insertTextContent(xCursor, xTable, /*bAbsorb=*/false);
+
+ // When updating that table:
+ uno::Reference<text::XDocumentIndex> xTableIndex(xTable, uno::UNO_QUERY);
+ xTableIndex->update();
+
+ // Then the first two fields should be merged to a single source, but not the third.
+ CPPUNIT_ASSERT_EQUAL(OUString("AT: Author, Title, , http://www.example.com/test.pdf"),
+ getParagraph(3)->getString());
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: AT: Author, Title, , http://www.example.com/test2.pdf
+ // - Actual : AT: Author, Title, , http://www.example.com/test.pdf
+ // i.e. test.pdf was mentioned twice, without deduplication.
+ CPPUNIT_ASSERT_EQUAL(OUString("AT: Author, Title, , http://www.example.com/test2.pdf"),
+ getParagraph(4)->getString());
+}
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/txtnode/data/btlr-cell-chinese.doc b/sw/qa/core/txtnode/data/btlr-cell-chinese.doc
new file mode 100644
index 0000000000..a4a70f6779
--- /dev/null
+++ b/sw/qa/core/txtnode/data/btlr-cell-chinese.doc
Binary files differ
diff --git a/sw/qa/core/txtnode/data/floattable-anchor-split.docx b/sw/qa/core/txtnode/data/floattable-anchor-split.docx
new file mode 100644
index 0000000000..a5dcdb28eb
--- /dev/null
+++ b/sw/qa/core/txtnode/data/floattable-anchor-split.docx
Binary files differ
diff --git a/sw/qa/core/txtnode/data/fly-anchor-undo.odt b/sw/qa/core/txtnode/data/fly-anchor-undo.odt
new file mode 100644
index 0000000000..dd2093161f
--- /dev/null
+++ b/sw/qa/core/txtnode/data/fly-anchor-undo.odt
Binary files differ
diff --git a/sw/qa/core/txtnode/data/special-insert-after-merged-cells.fodt b/sw/qa/core/txtnode/data/special-insert-after-merged-cells.fodt
new file mode 100644
index 0000000000..55ba746b66
--- /dev/null
+++ b/sw/qa/core/txtnode/data/special-insert-after-merged-cells.fodt
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<office:document xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:body>
+ <office:text>
+ <table:table table:name="Table1">
+ <table:table-column table:number-columns-repeated="2"/>
+ <table:table-row>
+ <table:table-cell>
+ <text:p/>
+ </table:table-cell>
+ <table:table-cell table:number-rows-spanned="2">
+ <text:p/>
+ </table:table-cell>
+ </table:table-row>
+ <table:table-row>
+ <table:table-cell>
+ <text:p/>
+ </table:table-cell>
+ <table:covered-table-cell/>
+ </table:table-row>
+ </table:table>
+ <text:p/>
+ </office:text>
+ </office:body>
+</office:document>
diff --git a/sw/qa/core/txtnode/data/tdf157287.odt b/sw/qa/core/txtnode/data/tdf157287.odt
new file mode 100644
index 0000000000..3ff6c4c6b9
--- /dev/null
+++ b/sw/qa/core/txtnode/data/tdf157287.odt
Binary files differ
diff --git a/sw/qa/core/txtnode/data/textbox-copy-anchor.docx b/sw/qa/core/txtnode/data/textbox-copy-anchor.docx
new file mode 100644
index 0000000000..b835097f1b
--- /dev/null
+++ b/sw/qa/core/txtnode/data/textbox-copy-anchor.docx
Binary files differ
diff --git a/sw/qa/core/txtnode/data/textbox-node-split.docx b/sw/qa/core/txtnode/data/textbox-node-split.docx
new file mode 100644
index 0000000000..5760ee6e2d
--- /dev/null
+++ b/sw/qa/core/txtnode/data/textbox-node-split.docx
Binary files differ
diff --git a/sw/qa/core/txtnode/data/title-field-invalidate.fodt b/sw/qa/core/txtnode/data/title-field-invalidate.fodt
new file mode 100644
index 0000000000..e7d07cab7b
--- /dev/null
+++ b/sw/qa/core/txtnode/data/title-field-invalidate.fodt
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<office:document xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" office:mimetype="application/vnd.oasis.opendocument.text">
+ <office:meta>
+ <dc:subject>mysubject</dc:subject>
+ <dc:title>mytitle</dc:title>
+ <meta:user-defined meta:name="Version" meta:value-type="string">1.1</meta:user-defined>
+ </office:meta>
+ <office:automatic-styles>
+ <style:page-layout style:name="pm1">
+ <style:page-layout-properties fo:page-width="14.8cm" fo:page-height="21.0cm" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm"/>
+ </style:page-layout>
+ </office:automatic-styles>
+ <office:master-styles>
+ <style:master-page style:name="Standard" style:display-name="Standard" style:page-layout-name="pm1" style:next-style-name="Standard">
+ <style:footer>
+ <text:p><text:subject>mysubject</text:subject> <text:title>mytitle</text:title> <text:user-defined text:name="Version">1.1</text:user-defined> <text:modification-date>May 18, 2021</text:modification-date></text:p>
+ </style:footer>
+ </style:master-page>
+ </office:master-styles>
+ <office:body>
+ <office:text>
+ <text:p>body text</text:p>
+ </office:text>
+ </office:body>
+</office:document>
diff --git a/sw/qa/core/txtnode/justify.cxx b/sw/qa/core/txtnode/justify.cxx
new file mode 100644
index 0000000000..f8f178543a
--- /dev/null
+++ b/sw/qa/core/txtnode/justify.cxx
@@ -0,0 +1,185 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <swmodeltestbase.hxx>
+#include <justify.hxx>
+#include <cstddef>
+#include <vector>
+
+namespace
+{
+/// Covers sw/source/core/txtnode/justify fixes.
+class SwCoreJustifyTest : public SwModelTestBase
+{
+};
+
+/// CharWidthArray: store char widths because they are more readable.
+class CharWidthArray
+{
+public:
+ KernArray maArray;
+ template <typename... Args> CharWidthArray(Args&&... args)
+ {
+ for (auto arg : { args... })
+ maArray.push_back(arg);
+ }
+ template <typename Function> void InvokeWithKernArray(Function f);
+ void ConvertToKernArray();
+ void ConvertToCharWidths();
+};
+
+inline bool operator==(const CharWidthArray& lhs, const CharWidthArray& rhs)
+{
+ return lhs.maArray == rhs.maArray;
+}
+
+std::ostream& operator<<(std::ostream& rStrm, const CharWidthArray& rCharWidthArray)
+{
+ const KernArray& rArray(rCharWidthArray.maArray);
+ sal_Int32 nLen = rArray.size();
+ rStrm << "{ ";
+ for (sal_Int32 i = 0; i < nLen; ++i)
+ {
+ rStrm << rArray[i];
+ rStrm << (i < nLen - 1 ? ", " : " ");
+ }
+ rStrm << "}";
+ return rStrm;
+}
+
+void CharWidthArray::ConvertToKernArray()
+{
+ for (std::size_t i = 1; i < maArray.size(); ++i)
+ maArray.adjust(i, maArray[i - 1]);
+}
+
+void CharWidthArray::ConvertToCharWidths()
+{
+ for (sal_Int32 i = maArray.size() - 1; i > 0; --i)
+ maArray.adjust(i, -maArray[i - 1]);
+}
+
+/// Convert maArray to kern array values, then invoke the function, and convert it back.
+template <typename Function> void CharWidthArray::InvokeWithKernArray(Function f)
+{
+ ConvertToKernArray();
+ f();
+ ConvertToCharWidths();
+}
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreJustifyTest, testSpaceDistributionHalfSpace)
+{
+ // Related to: tdf#149017
+ static constexpr OUStringLiteral aText = u"ne del pro";
+ CharWidthArray aActual{ 720, 639, 360, 720, 639, 400, 360, 720, 480, 720 };
+ CharWidthArray aExpected{ 720, 851, 573, 720, 639, 612, 573, 720, 480, 720 };
+
+ aActual.InvokeWithKernArray(
+ [&] { sw::Justify::SpaceDistribution(aActual.maArray, aText, 0, 10, 425, 0, false); });
+ CPPUNIT_ASSERT_EQUAL(aExpected, aActual);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreJustifyTest, testSpaceDistributionNoHalfSpace)
+{
+ // Related to: tdf#149017
+ static constexpr OUStringLiteral aText = u"ne del pro";
+ CharWidthArray aActual{ 720, 639, 360, 720, 639, 400, 360, 720, 480, 720 };
+ CharWidthArray aExpected{ 720, 639, 785, 720, 639, 400, 785, 720, 480, 720 };
+
+ aActual.InvokeWithKernArray(
+ [&] { sw::Justify::SpaceDistribution(aActual.maArray, aText, 0, 10, 425, 0, true); });
+ CPPUNIT_ASSERT_EQUAL(aExpected, aActual);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreJustifyTest, testSpaceDistributionUnicodeIVS)
+{
+ // Related to: tdf#148594
+ static constexpr OUStringLiteral aText
+ = u"\u9B54\u9AD8\u4E00\U000E01E1\u4E08\u4F55\u9B54\u9AD8\u4E00\U000E01E1";
+ CharWidthArray aActual{ 1600, 1600, 1600, 0, 0, 1600, 1600, 1600, 1600, 1600, 0, 0 };
+ CharWidthArray aExpected{ 1800, 1800, 1800, 0, 0, 1800, 1800, 1800, 1800, 1800, 0, 0 };
+ aActual.InvokeWithKernArray(
+ [&] { sw::Justify::SpaceDistribution(aActual.maArray, aText, 0, 12, 0, 200, false); });
+ CPPUNIT_ASSERT_EQUAL(aExpected, aActual);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreJustifyTest, testSnapToGrid)
+{
+ tools::Long nDelta = 0;
+ // "曰〈é“高一尺化太平〉云云"
+ static constexpr OUStringLiteral aText
+ = u"\u66f0\u3008\u9053\u9ad8\u4e00\u5c3a\u5316\u592a\u5e73\u3009\u4e91\u4e91";
+ CharWidthArray aActual{ 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880, 880 };
+ CharWidthArray aExpected{
+ 1360, 1040, 1200, 1200, 1200, 1200, 1200, 1200, 1040, 1360, 1200, 1040
+ };
+ aActual.InvokeWithKernArray(
+ [&] { nDelta = sw::Justify::SnapToGrid(aActual.maArray, aText, 0, 12, 400, false); });
+ CPPUNIT_ASSERT_EQUAL(aExpected, aActual);
+ CPPUNIT_ASSERT_EQUAL(tools::Long(160), nDelta);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreJustifyTest, testSnapToGridMixWidth)
+{
+ // Related to: tdf#149365
+ tools::Long nDelta = 0;
+ // "中中中ケコサシスセソカケコ" ( mixing fullwidth ideograph and half-width kana )
+ static constexpr OUStringLiteral aText
+ = u"\u4e2d\u4e2d\u4e2d\uff79\uff7a\uff7b\uff7c\uff7d\uff7e\uff7f\uff76\uff79\uff7a";
+ CharWidthArray aActual{ 640, 640, 640, 320, 320, 320, 320, 320, 320, 320, 320, 320, 320 };
+ CharWidthArray aExpected{ 800, 800, 760, 400, 400, 400, 400, 400, 400, 400, 400, 400, 360 };
+ aActual.InvokeWithKernArray(
+ [&] { nDelta = sw::Justify::SnapToGrid(aActual.maArray, aText, 0, 13, 400, false); });
+ CPPUNIT_ASSERT_EQUAL(aExpected, aActual);
+ CPPUNIT_ASSERT_EQUAL(tools::Long(80), nDelta);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreJustifyTest, testSnapToGridIVS)
+{
+ // Related to: tdf#149214
+ tools::Long nDelta = 0;
+ static constexpr OUStringLiteral aText = u"\u9053\u9ad8\u4e00\U000E01E2\u5c3a\u5316";
+
+ CharWidthArray aActual{ 800, 800, 800, 0, 0, 800, 800 };
+ CharWidthArray aExpected{ 800, 800, 800, 0, 0, 800, 800 };
+ aActual.InvokeWithKernArray(
+ [&] { nDelta = sw::Justify::SnapToGrid(aActual.maArray, aText, 0, 7, 400, false); });
+ CPPUNIT_ASSERT_EQUAL(aExpected, aActual);
+ CPPUNIT_ASSERT_EQUAL(tools::Long(0), nDelta);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreJustifyTest, testSnapToGridEdge1)
+{
+ CharWidthArray aActual{ 640, 640, 640, 640, 640, 640, 320, 960 };
+ CharWidthArray aExpected{ 840, 840, 840, 840, 840, 840, 440, 1240 };
+ aActual.InvokeWithKernArray(
+ [&] { sw::Justify::SnapToGridEdge(aActual.maArray, 8, 400, 40, 0); });
+ CPPUNIT_ASSERT_EQUAL(aExpected, aActual);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreJustifyTest, testSnapToGridEdge2)
+{
+ CharWidthArray aActual{ 640, 640, 640, 640, 640, 640, 320, 640 };
+ CharWidthArray aExpected{ 840, 840, 840, 840, 840, 840, 440, 840 };
+ aActual.InvokeWithKernArray(
+ [&] { sw::Justify::SnapToGridEdge(aActual.maArray, 8, 100, 40, 80); });
+ CPPUNIT_ASSERT_EQUAL(aExpected, aActual);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreJustifyTest, testSnapToGridEdgeIVS)
+{
+ CharWidthArray aActual{ 640, 0, 0, 640, 640, 640, 640, 640 };
+ CharWidthArray aExpected{ 840, 0, 0, 840, 840, 840, 840, 840 };
+ aActual.InvokeWithKernArray(
+ [&] { sw::Justify::SnapToGridEdge(aActual.maArray, 8, 400, 40, 0); });
+ CPPUNIT_ASSERT_EQUAL(aExpected, aActual);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/txtnode/txtnode.cxx b/sw/qa/core/txtnode/txtnode.cxx
new file mode 100644
index 0000000000..c2df8a407e
--- /dev/null
+++ b/sw/qa/core/txtnode/txtnode.cxx
@@ -0,0 +1,544 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <swmodeltestbase.hxx>
+
+#include <LibreOfficeKit/LibreOfficeKitEnums.h>
+#include <comphelper/lok.hxx>
+#include <comphelper/propertyvalue.hxx>
+#include <com/sun/star/text/XTextTable.hpp>
+#include <sfx2/viewsh.hxx>
+#include <vcl/gdimtf.hxx>
+#include <vcl/scheduler.hxx>
+#include <sfx2/lokhelper.hxx>
+#include <test/lokcallback.hxx>
+#include <editeng/escapementitem.hxx>
+
+#include <IDocumentStatistics.hxx>
+#include <IDocumentLayoutAccess.hxx>
+#include <fmtanchr.hxx>
+#include <frameformats.hxx>
+#include <wrtsh.hxx>
+#include <unotxdoc.hxx>
+#include <docsh.hxx>
+#include <formatcontentcontrol.hxx>
+#include <view.hxx>
+#include <edtwin.hxx>
+#include <txatbase.hxx>
+#include <ndtxt.hxx>
+#include <textcontentcontrol.hxx>
+#include <swdtflvr.hxx>
+#include <txtrfmrk.hxx>
+#include <frmmgr.hxx>
+#include <formatflysplit.hxx>
+#include <ftnidx.hxx>
+#include <rootfrm.hxx>
+#include <pagefrm.hxx>
+#include <txtfrm.hxx>
+
+/// Covers sw/source/core/txtnode/ fixes.
+class SwCoreTxtnodeTest : public SwModelTestBase
+{
+public:
+ SwCoreTxtnodeTest()
+ : SwModelTestBase("/sw/qa/core/txtnode/data/")
+ {
+ }
+};
+
+CPPUNIT_TEST_FIXTURE(SwCoreTxtnodeTest, testBtlrCellChinese)
+{
+ // Load a document with a table cell, with btlr cell direction. The cell has text which is
+ // classified as vertical, i.e. the glyph has the same direction in both the lrtb ("Latin") and
+ // tbrl ("Chinese") directions. Make sure that Chinese text is handled the same way in the btlr
+ // case as it's handled in the Latin case.
+ createSwDoc("btlr-cell-chinese.doc");
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ SwDocShell* pShell = pTextDoc->GetDocShell();
+ std::shared_ptr<GDIMetaFile> xMetaFile = pShell->GetPreviewMetaFile();
+ MetafileXmlDump dumper;
+ xmlDocUniquePtr pXmlDoc = dumpAndParse(dumper, *xMetaFile);
+ assertXPath(pXmlDoc, "//font[1]"_ostr, "orientation"_ostr, "900");
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: false
+ // - Actual : true
+ // i.e. the glyph was rotated further, so it was upside down.
+ assertXPath(pXmlDoc, "//font[1]"_ostr, "vertical"_ostr, "false");
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTxtnodeTest, testSpecialInsertAfterMergedCells)
+{
+ // Load a document with a table with bottom right cells merged vertically.
+ // SpecialInsert with alt-Enter must work here, too.
+ createSwDoc("special-insert-after-merged-cells.fodt");
+ SwDoc* pDoc = getSwDoc();
+ SwNodeOffset const nNodes(pDoc->GetNodes().Count());
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ SwDocShell* pShell = pTextDoc->GetDocShell();
+ SwWrtShell* pWrtShell = pShell->GetWrtShell();
+ // go to the merged cell
+ pWrtShell->Right(SwCursorSkipMode::Chars, /*bSelect=*/false, 1, /*bBasicCall=*/false);
+
+ // When pressing alt-Enter on the keyboard:
+ SwEditWin& rEditWin = pWrtShell->GetView().GetEditWin();
+ vcl::KeyCode aKeyCode(KEY_RETURN, KEY_MOD2);
+ KeyEvent aKeyEvent(' ', aKeyCode);
+ rEditWin.KeyInput(aKeyEvent);
+
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: nNodes + 1
+ // - Actual : nNodes
+ // i.e. new empty paragraph wasn't inserted under the table
+ CPPUNIT_ASSERT_EQUAL(nNodes + 1, pDoc->GetNodes().Count());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTxtnodeTest, testTextBoxCopyAnchor)
+{
+ createSwDoc("textbox-copy-anchor.docx");
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ SwDocShell* pShell = pTextDoc->GetDocShell();
+ SwWrtShell* pWrtShell = pShell->GetWrtShell();
+ SwDoc aClipboard;
+ pWrtShell->SelAll();
+ pWrtShell->Copy(aClipboard);
+ pWrtShell->SttEndDoc(/*bStart=*/false);
+ pWrtShell->Paste(aClipboard);
+
+ const auto& rFormats = *pShell->GetDoc()->GetSpzFrameFormats();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 4
+ // - Actual : 6
+ // i.e. 2 fly frames were copied twice.
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(4), rFormats.size());
+
+ SwPosition aDrawAnchor1 = *rFormats[0]->GetAnchor().GetContentAnchor();
+ SwPosition aFlyAnchor1 = *rFormats[1]->GetAnchor().GetContentAnchor();
+ CPPUNIT_ASSERT_EQUAL(aFlyAnchor1.GetNodeIndex(), aDrawAnchor1.GetNodeIndex());
+ SwPosition aDrawAnchor2 = *rFormats[2]->GetAnchor().GetContentAnchor();
+ SwPosition aFlyAnchor2 = *rFormats[3]->GetAnchor().GetContentAnchor();
+ // This also failed, aFlyAnchor2 was wrong, as it got out of sync with aDrawAnchor2.
+ CPPUNIT_ASSERT_EQUAL(aFlyAnchor2.GetNodeIndex(), aDrawAnchor2.GetNodeIndex());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTxtnodeTest, testTextBoxNodeSplit)
+{
+ createSwDoc("textbox-node-split.docx");
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ SwDocShell* pShell = pTextDoc->GetDocShell();
+ SwWrtShell* pWrtShell = pShell->GetWrtShell();
+ pWrtShell->SttEndDoc(/*bStart=*/false);
+ // Without the accompanying fix in place, this would have crashed in
+ // SwFlyAtContentFrame::SwClientNotify().
+ pWrtShell->SplitNode();
+}
+
+namespace
+{
+struct ViewCallback
+{
+ int m_nInvalidations = 0;
+
+ static void callback(int nType, const char* pPayload, void* pData);
+ void callbackImpl(int nType, const char* pPayload);
+};
+
+void ViewCallback::callback(int nType, const char* pPayload, void* pData)
+{
+ static_cast<ViewCallback*>(pData)->callbackImpl(nType, pPayload);
+}
+
+void ViewCallback::callbackImpl(int nType, const char* /*pPayload*/)
+{
+ switch (nType)
+ {
+ case LOK_CALLBACK_INVALIDATE_TILES:
+ {
+ ++m_nInvalidations;
+ }
+ break;
+ }
+}
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTxtnodeTest, testTitleFieldInvalidate)
+{
+ // Set up LOK to track invalidations.
+ comphelper::LibreOfficeKit::setActive(true);
+
+ // Given a document with a title field:
+ createSwDoc("title-field-invalidate.fodt");
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ pTextDoc->initializeForTiledRendering({});
+ SwDocShell* pShell = pTextDoc->GetDocShell();
+ SwDoc* pDoc = pShell->GetDoc();
+ SwWrtShell* pWrtShell = pShell->GetWrtShell();
+ pWrtShell->SttEndDoc(/*bStt=*/false);
+ ViewCallback aCallback;
+ TestLokCallbackWrapper aCallbackWrapper(&ViewCallback::callback, &aCallback);
+ pWrtShell->GetSfxViewShell()->setLibreOfficeKitViewCallback(&aCallbackWrapper);
+ aCallbackWrapper.setLOKViewId(SfxLokHelper::getView(pWrtShell->GetSfxViewShell()));
+ Scheduler::ProcessEventsToIdle();
+ aCallback.m_nInvalidations = 0;
+
+ // When typing to the document:
+ pWrtShell->Insert("x");
+ pWrtShell->GetSfxViewShell()->flushPendingLOKInvalidateTiles();
+
+ // Then make sure that only the text frame at the cursor is invalidated:
+ pDoc->getIDocumentStatistics().GetUpdatedDocStat(/*bCompleteAsync=*/true, /*bFields=*/false);
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 1
+ // - Actual : 2
+ // i.e. the footer was also invalidated on each keypress.
+ CPPUNIT_ASSERT_EQUAL(1, aCallback.m_nInvalidations);
+
+ // Tear down LOK.
+ pWrtShell->GetSfxViewShell()->setLibreOfficeKitViewCallback(nullptr);
+ mxComponent->dispose();
+ mxComponent.clear();
+ comphelper::LibreOfficeKit::setActive(false);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTxtnodeTest, testFlyAnchorUndo)
+{
+ // Given a document with a fly frame, anchored after the last char of the document:
+ createSwDoc("fly-anchor-undo.odt");
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ SwDocShell* pShell = pTextDoc->GetDocShell();
+ SwDoc* pDoc = pShell->GetDoc();
+ const auto& rSpz = *pDoc->GetSpzFrameFormats();
+ sal_Int32 nExpected = rSpz[0]->GetAnchor().GetAnchorContentOffset();
+
+ // When deleting that last character and undoing it:
+ SwWrtShell* pWrtShell = pShell->GetWrtShell();
+ pWrtShell->SttEndDoc(/*bStt=*/false);
+ pWrtShell->DelLeft();
+ pWrtShell->Undo();
+
+ // Then make sure the anchor position after the undo is the same as the original:
+ sal_Int32 nActual = rSpz[0]->GetAnchor().GetAnchorContentOffset();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 3
+ // - Actual : 2
+ // i.e. the anchor position was left unchanged by the undo.
+ CPPUNIT_ASSERT_EQUAL(nExpected, nActual);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTxtnodeTest, testSplitNodeSuperscriptCopy)
+{
+ // Given a document with superscript text at the end of a paragraph:
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ pWrtShell->Insert("1st");
+ pWrtShell->Left(SwCursorSkipMode::Chars, /*bSelect=*/true, 2, /*bBasicCall=*/false);
+ SfxItemSetFixed<RES_CHRATR_ESCAPEMENT, RES_CHRATR_ESCAPEMENT> aSet(pWrtShell->GetAttrPool());
+ SvxEscapementItem aItem(SvxEscapement::Superscript, RES_CHRATR_ESCAPEMENT);
+ aSet.Put(aItem);
+ pWrtShell->SetAttrSet(aSet);
+
+ // When hitting enter at the end of the paragraph:
+ pWrtShell->SttEndDoc(/*bStt=*/false);
+ pWrtShell->SplitNode(/*bAutoFormat=*/true);
+
+ // Then make sure that the superscript formatting doesn't appear on the next paragraph:
+ aSet.ClearItem(RES_CHRATR_ESCAPEMENT);
+ pWrtShell->GetCurAttr(aSet);
+ // Without the accompanying fix in place, this test would have failed, the unexpected
+ // superscript appeared in the next paragraph.
+ CPPUNIT_ASSERT(!aSet.HasItem(RES_CHRATR_ESCAPEMENT));
+}
+
+/* FIXME: behavior change reverted due to regression;
+ * see sw/source/core/txtnode/atrref.cxx
+ *CPPUNIT_TEST_FIXTURE(SwCoreTxtnodeTest, testDontExpandRefmark)
+ *{
+ * // Given a document with a refmark:
+ * createSwDoc();
+ *
+ * uno::Sequence<css::beans::PropertyValue> aArgs = {
+ * comphelper::makePropertyValue("TypeName", uno::Any(OUString("SetRef"))),
+ * comphelper::makePropertyValue(
+ * "Name", uno::Any(OUString("ZOTERO_ITEM CSL_CITATION {} RNDpyJknp173F"))),
+ * comphelper::makePropertyValue("Content", uno::Any(OUString("foo"))),
+ * };
+ * dispatchCommand(mxComponent, ".uno:InsertField", aArgs);
+ *
+ * SwDoc* pDoc = getSwDoc();
+ * SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ * SwPosition& rCursor = *pWrtShell->GetCursor()->GetPoint();
+ * SwTextNode* pTextNode = rCursor.GetNode().GetTextNode();
+ * std::vector<SwTextAttr*> aAttrs
+ * = pTextNode->GetTextAttrsAt(rCursor.GetContentIndex(), RES_TXTATR_REFMARK);
+ *
+ * auto& rRefmark = const_cast<SwFormatRefMark&>(aAttrs[0]->GetRefMark());
+ * auto pTextRefMark = const_cast<SwTextRefMark*>(rRefmark.GetTextRefMark());
+ *
+ * // When typing after the refmark...
+ * pWrtShell->SttEndDoc(true);
+ * pWrtShell->Right(SwCursorSkipMode::Chars, false, 3, false);
+ * pWrtShell->Insert(" bar");
+ *
+ * // and skipping back to insert a comma after the refmark
+ * pWrtShell->Left(SwCursorSkipMode::Chars, false, 4, false);
+ * pWrtShell->Insert(",");
+ *
+ * // Without the accompanying fix in place, this test would have failed with:
+ * // - Expected: 3
+ * // - Actual : 4
+ * // i.e. the reference mark expanded
+ * CPPUNIT_ASSERT_EQUAL(3, static_cast<int>(*pTextRefMark->End()));
+ *}
+ */
+
+CPPUNIT_TEST_FIXTURE(SwCoreTxtnodeTest, testInsertDropDownContentControlTwice)
+{
+ // Given an already selected dropdown content control:
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ pWrtShell->InsertContentControl(SwContentControlType::DROP_DOWN_LIST);
+
+ // When trying to insert an inner one, make sure that we don't crash:
+ pWrtShell->InsertContentControl(SwContentControlType::DROP_DOWN_LIST);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTxtnodeTest, testCheckboxContentControlKeyboard)
+{
+ // Given an already selected checkbox content control:
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ pWrtShell->InsertContentControl(SwContentControlType::CHECKBOX);
+ SwEditWin& rEditWin = pWrtShell->GetView().GetEditWin();
+
+ // When pressing space on the keyboard:
+ KeyEvent aKeyEvent(' ', KEY_SPACE);
+ rEditWin.KeyInput(aKeyEvent);
+
+ // Then make sure the state is toggled:
+ SwTextNode* pTextNode = pWrtShell->GetCursor()->GetPointNode().GetTextNode();
+ SwTextAttr* pAttr = pTextNode->GetTextAttrForCharAt(0, RES_TXTATR_CONTENTCONTROL);
+ auto pTextContentControl = static_txtattr_cast<SwTextContentControl*>(pAttr);
+ auto& rFormatContentControl
+ = static_cast<SwFormatContentControl&>(pTextContentControl->GetAttr());
+ std::shared_ptr<SwContentControl> pContentControl = rFormatContentControl.GetContentControl();
+ // Without the accompanying fix in place, this test would have failed, because the state
+ // remained unchanged.
+ CPPUNIT_ASSERT(pContentControl->GetChecked());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTxtnodeTest, testDropdownContentControlKeyboard)
+{
+ // Given an already selected dropdown content control:
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ pWrtShell->InsertContentControl(SwContentControlType::DROP_DOWN_LIST);
+
+ // When checking if alt-down should open a popup:
+ SwTextContentControl* pTextContentControl = pWrtShell->CursorInsideContentControl();
+ auto& rFormatContentControl
+ = static_cast<SwFormatContentControl&>(pTextContentControl->GetAttr());
+ std::shared_ptr<SwContentControl> pContentControl = rFormatContentControl.GetContentControl();
+ vcl::KeyCode aKeyCode(KEY_DOWN, KEY_MOD2);
+ bool bShouldOpen = pContentControl->ShouldOpenPopup(aKeyCode);
+
+ // Then make sure that the answer is yes for dropdowns:
+ // Without the accompanying fix in place, this test would have failed, the dropdown popup was
+ // mouse-only.
+ CPPUNIT_ASSERT(bShouldOpen);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTxtnodeTest, testPictureContentControlKeyboard)
+{
+ // Given an already selected picture content control:
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ pWrtShell->InsertContentControl(SwContentControlType::PICTURE);
+ pWrtShell->GotoObj(/*bNext=*/true, GotoObjFlags::Any);
+
+ // When checking if enter should trigger the file picker:
+ const SwFrameFormat* pFlyFormat = pWrtShell->GetFlyFrameFormat();
+ const SwFormatAnchor& rFormatAnchor = pFlyFormat->GetAnchor();
+ SwNode* pAnchorNode = rFormatAnchor.GetAnchorNode();
+ SwTextNode* pTextNode = pAnchorNode->GetTextNode();
+ SwTextAttr* pAttr
+ = pTextNode->GetTextAttrAt(rFormatAnchor.GetAnchorContentOffset(),
+ RES_TXTATR_CONTENTCONTROL, ::sw::GetTextAttrMode::Parent);
+ auto pTextContentControl = static_txtattr_cast<SwTextContentControl*>(pAttr);
+ auto& rFormatContentControl
+ = static_cast<SwFormatContentControl&>(pTextContentControl->GetAttr());
+ std::shared_ptr<SwContentControl> pContentControl = rFormatContentControl.GetContentControl();
+ bool bIsInteracting = pContentControl->IsInteractingCharacter('\r');
+
+ // Then make sure that the answer is yes for pictures:
+ // Without the accompanying fix in place, this test would have failed, the picture replacement
+ // file-picker was mouse-only.
+ CPPUNIT_ASSERT(bIsInteracting);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTxtnodeTest, testDateContentControlKeyboard)
+{
+ // Given an already selected date content control:
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ pWrtShell->InsertContentControl(SwContentControlType::DATE);
+
+ // When checking if alt-down should open a popup:
+ SwTextContentControl* pTextContentControl = pWrtShell->CursorInsideContentControl();
+ auto& rFormatContentControl
+ = static_cast<SwFormatContentControl&>(pTextContentControl->GetAttr());
+ std::shared_ptr<SwContentControl> pContentControl = rFormatContentControl.GetContentControl();
+ vcl::KeyCode aKeyCode(KEY_DOWN, KEY_MOD2);
+ bool bShouldOpen = pContentControl->ShouldOpenPopup(aKeyCode);
+
+ // Then make sure that the answer is yes for date:
+ // Without the accompanying fix in place, this test would have failed, the date popup was
+ // mouse-only.
+ CPPUNIT_ASSERT(bShouldOpen);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTxtnodeTest, testContentControlCopy)
+{
+ // Given a document with a content control:
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ pWrtShell->InsertContentControl(SwContentControlType::CHECKBOX);
+
+ // When copying that content control:
+ pWrtShell->SelAll();
+ rtl::Reference<SwTransferable> xTransfer = new SwTransferable(*pWrtShell);
+ xTransfer->Copy();
+ // Kill the selection, go to the end of the document:
+ pWrtShell->EndOfSection();
+ TransferableDataHelper aHelper(xTransfer);
+ SwTransferable::Paste(*pWrtShell, aHelper);
+
+ // Then make sure that the copy is also a checkbox:
+ SwContentControlManager& rManager = pDoc->GetContentControlManager();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), rManager.GetCount());
+ const SwFormatContentControl& rFormat1 = rManager.Get(0)->GetContentControl();
+ CPPUNIT_ASSERT_EQUAL(SwContentControlType::CHECKBOX, rFormat1.GetContentControl()->GetType());
+ const SwFormatContentControl& rFormat2 = rManager.Get(1)->GetContentControl();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 1 (CHECKBOX)
+ // - Actual : 0 (RICH_TEXT)
+ // i.e. properties were not copied from the source to the destination content control.
+ CPPUNIT_ASSERT_EQUAL(SwContentControlType::CHECKBOX, rFormat2.GetContentControl()->GetType());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTxtnodeTest, testTdf157287)
+{
+ createSwDoc("tdf157287.odt");
+ uno::Reference<text::XTextFieldsSupplier> xTextFieldsSupplier(mxComponent, uno::UNO_QUERY);
+ auto xFieldsAccess(xTextFieldsSupplier->getTextFields());
+ uno::Reference<container::XEnumeration> xFields(xFieldsAccess->createEnumeration());
+ uno::Reference<text::XTextField> xField(xFields->nextElement(), uno::UNO_QUERY);
+
+ CPPUNIT_ASSERT_EQUAL(OUString("30"), xField->getPresentation(false));
+
+ uno::Reference<text::XTextTablesSupplier> xTextTablesSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xIndexAccess(xTextTablesSupplier->getTextTables(),
+ uno::UNO_QUERY);
+ uno::Reference<text::XTextTable> xTextTable(xIndexAccess->getByIndex(0), uno::UNO_QUERY);
+
+ uno::Reference<text::XTextRange> xCellA1(xTextTable->getCellByName("B1"), uno::UNO_QUERY);
+ xCellA1->setString("100");
+
+ dispatchCommand(mxComponent, ".uno:UpdateFields", {});
+
+ // Without the fix in place, this test would have failed with
+ // - Expected: 120
+ // - Actual :
+ CPPUNIT_ASSERT_EQUAL(OUString("120"), xField->getPresentation(false));
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTxtnodeTest, testFlySplitFootnote)
+{
+ // Given a document with a split fly (to host a table):
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
+ SwFlyFrameAttrMgr aMgr(true, pWrtShell, Frmmgr_Type::TEXT, nullptr);
+ RndStdIds eAnchor = RndStdIds::FLY_AT_PARA;
+ pWrtShell->StartAllAction();
+ aMgr.InsertFlyFrame(eAnchor, aMgr.GetPos(), aMgr.GetSize());
+ pWrtShell->EndAllAction();
+ pWrtShell->StartAllAction();
+ sw::FrameFormats<sw::SpzFrameFormat*>& rFlys = *pDoc->GetSpzFrameFormats();
+ sw::SpzFrameFormat* pFly = rFlys[0];
+ SwAttrSet aSet(pFly->GetAttrSet());
+ aSet.Put(SwFormatFlySplit(true));
+ pDoc->SetAttr(aSet, *pFly);
+ pWrtShell->EndAllAction();
+ pWrtShell->UnSelectFrame();
+ pWrtShell->LeaveSelFrameMode();
+ pWrtShell->GetView().AttrChangedNotify(nullptr);
+ pWrtShell->MoveSection(GoCurrSection, fnSectionEnd);
+
+ // When inserting a footnote:
+ pWrtShell->InsertFootnote(OUString());
+
+ // Then make sure the footnote gets inserted to the doc model.
+ // Without the accompanying fix in place, this test would have failed, insert code refused to
+ // have footnotes in all fly frames.
+ CPPUNIT_ASSERT(!pDoc->GetFootnoteIdxs().empty());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreTxtnodeTest, testSplitFlyAnchorSplit)
+{
+ // Given a document with a 2 pages long floating table:
+ createSwDoc("floattable-anchor-split.docx");
+
+ // When splitting the "AB" anchor text into "A" (remains as anchor text) and "B" (new text node
+ // after it):
+ SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
+ pWrtShell->SttEndDoc(/*bStt=*/false);
+ pWrtShell->Left(SwCursorSkipMode::Chars, /*bSelect=*/false, 1, /*bBasicCall=*/false);
+ // Without the accompanying fix in place, this test would have failed with a layout loop.
+ pWrtShell->SplitNode();
+
+ // Then make sure the resulting layout is what we want:
+ SwDoc* pDoc = getSwDoc();
+ SwRootFrame* pLayout = pDoc->getIDocumentLayoutAccess().GetCurrentLayout();
+ auto pPage1 = pLayout->Lower()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage1);
+ // Page 1 has the master fly:
+ CPPUNIT_ASSERT(pPage1->GetSortedObjs());
+ auto pPage2 = pPage1->GetNext()->DynCastPageFrame();
+ CPPUNIT_ASSERT(pPage2);
+ // Page 2 has the follow fly:
+ CPPUNIT_ASSERT(pPage2->GetSortedObjs());
+ // Anchor text is now just "A":
+ auto pText1 = pPage2->FindFirstBodyContent()->DynCastTextFrame();
+ CPPUNIT_ASSERT_EQUAL(OUString("A"), pText1->GetText());
+ // New text frame is just "B":
+ auto pText2 = pText1->GetNext()->DynCastTextFrame();
+ CPPUNIT_ASSERT_EQUAL(OUString("B"), pText2->GetText());
+
+ // Also test that the new follow anchor text frame still has a fly portion, otherwise the anchor
+ // text and the floating table would overlap:
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+ OUString aPortionType
+ = getXPath(pXmlDoc, "//page[2]/body/txt[1]/SwParaPortion/SwLineLayout[1]/child::*[1]"_ostr,
+ "type"_ostr);
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: PortionType::Fly
+ // - Actual : PortionType::Para
+ // i.e. the fly portion was missing, text overlapped.
+ CPPUNIT_ASSERT_EQUAL(OUString("PortionType::Fly"), aPortionType);
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/undo/data/anchor-type-change-position.docx b/sw/qa/core/undo/data/anchor-type-change-position.docx
new file mode 100644
index 0000000000..1a5d27b3f4
--- /dev/null
+++ b/sw/qa/core/undo/data/anchor-type-change-position.docx
Binary files differ
diff --git a/sw/qa/core/undo/data/image-as-character.odt b/sw/qa/core/undo/data/image-as-character.odt
new file mode 100644
index 0000000000..0b1aa6a21f
--- /dev/null
+++ b/sw/qa/core/undo/data/image-as-character.odt
Binary files differ
diff --git a/sw/qa/core/undo/data/table-copy-redline.odt b/sw/qa/core/undo/data/table-copy-redline.odt
new file mode 100644
index 0000000000..f391687823
--- /dev/null
+++ b/sw/qa/core/undo/data/table-copy-redline.odt
Binary files differ
diff --git a/sw/qa/core/undo/data/textbox-cut-save.docx b/sw/qa/core/undo/data/textbox-cut-save.docx
new file mode 100644
index 0000000000..a1a350d08a
--- /dev/null
+++ b/sw/qa/core/undo/data/textbox-cut-save.docx
Binary files differ
diff --git a/sw/qa/core/undo/data/textbox-cut-undo.docx b/sw/qa/core/undo/data/textbox-cut-undo.docx
new file mode 100644
index 0000000000..35f0e85717
--- /dev/null
+++ b/sw/qa/core/undo/data/textbox-cut-undo.docx
Binary files differ
diff --git a/sw/qa/core/undo/undo.cxx b/sw/qa/core/undo/undo.cxx
new file mode 100644
index 0000000000..7b68e1b3b2
--- /dev/null
+++ b/sw/qa/core/undo/undo.cxx
@@ -0,0 +1,181 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <swmodeltestbase.hxx>
+
+#include <unotools/mediadescriptor.hxx>
+
+#include <unotxdoc.hxx>
+#include <docsh.hxx>
+#include <wrtsh.hxx>
+#include <swdtflvr.hxx>
+#include <frameformats.hxx>
+#include <fmtcntnt.hxx>
+
+/// Covers sw/source/core/undo/ fixes.
+class SwCoreUndoTest : public SwModelTestBase
+{
+public:
+ SwCoreUndoTest()
+ : SwModelTestBase("/sw/qa/core/undo/data/")
+ {
+ }
+};
+
+CPPUNIT_TEST_FIXTURE(SwCoreUndoTest, testTextboxCutSave)
+{
+ // Load the document and select all.
+ createSwDoc("textbox-cut-save.docx");
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ SwDocShell* pDocShell = pTextDoc->GetDocShell();
+ SwWrtShell* pWrtShell = pDocShell->GetWrtShell();
+ pWrtShell->SelAll();
+
+ // Cut.
+ rtl::Reference<SwTransferable> pTransfer = new SwTransferable(*pWrtShell);
+ pTransfer->Cut();
+
+ // Undo.
+ pWrtShell->Undo();
+
+ // Save.
+ uno::Reference<frame::XStorable> xStorable(mxComponent, uno::UNO_QUERY);
+ utl::MediaDescriptor aMediaDescriptor;
+ aMediaDescriptor["FilterName"] <<= OUString("Office Open XML Text");
+
+ // Without the accompanying fix in place, this test would have failed with:
+ // void sax_fastparser::FastSaxSerializer::endDocument(): Assertion `mbMarkStackEmpty && maMarkStack.empty()' failed.
+ // i.e. failed to save because we tried to write not-well-formed XML.
+ xStorable->storeToURL(maTempFile.GetURL(), aMediaDescriptor.getAsConstPropertyValueList());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreUndoTest, testTextboxCutUndo)
+{
+ createSwDoc("textbox-cut-undo.docx");
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ SwDocShell* pDocShell = pTextDoc->GetDocShell();
+ SwWrtShell* pWrtShell = pDocShell->GetWrtShell();
+ SwDoc* pDoc = pDocShell->GetDoc();
+
+ selectShape(1);
+ rtl::Reference<SwTransferable> pTransfer = new SwTransferable(*pWrtShell);
+ pTransfer->Cut();
+ auto& rSpzFrameFormats = *pDoc->GetSpzFrameFormats();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(0), rSpzFrameFormats.size());
+
+ pWrtShell->Undo();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), rSpzFrameFormats.size());
+
+ const SwNodeIndex* pIndex1 = rSpzFrameFormats[0]->GetContent().GetContentIdx();
+ const SwNodeIndex* pIndex2 = rSpzFrameFormats[1]->GetContent().GetContentIdx();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 5
+ // - Actual : 8
+ // i.e. the draw frame format had a wrong node index in its content.
+ CPPUNIT_ASSERT_EQUAL(pIndex1->GetIndex(), pIndex2->GetIndex());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreUndoTest, testTableCopyRedline)
+{
+ // Given a document with two table cells and redlining enabled:
+ createSwDoc("table-copy-redline.odt");
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ SwDocShell* pDocShell = pTextDoc->GetDocShell();
+ SwWrtShell* pWrtShell = pDocShell->GetWrtShell();
+
+ // When doing select-all, copy, paste and undo:
+ pWrtShell->SelAll();
+ rtl::Reference<SwTransferable> pTransfer = new SwTransferable(*pWrtShell);
+ pTransfer->Copy();
+ TransferableDataHelper aHelper(pTransfer);
+ SwTransferable::Paste(*pWrtShell, aHelper);
+
+ // Without the accompanying fix in place, this test would have crashed.
+ pWrtShell->Undo();
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreUndoTest, testImagePropsCreateUndoAndModifyDoc)
+{
+ createSwDoc("image-as-character.odt");
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ SwDocShell* pDocShell = pTextDoc->GetDocShell();
+ SwWrtShell* pWrtShell = pDocShell->GetWrtShell();
+ css::uno::Reference<css::beans::XPropertySet> xImage(
+ pTextDoc->getGraphicObjects()->getByName("Image1"), css::uno::UNO_QUERY_THROW);
+
+ CPPUNIT_ASSERT(pTextDoc->isSetModifiedEnabled());
+ CPPUNIT_ASSERT(!pTextDoc->isModified());
+ CPPUNIT_ASSERT(!pWrtShell->GetLastUndoInfo(nullptr, nullptr, nullptr));
+
+ // Check that modifications of the geometry mark document dirty, and create an undo
+
+ xImage->setPropertyValue("RelativeWidth", css::uno::Any(sal_Int16(80)));
+
+ // Without the fix, this would fail
+ CPPUNIT_ASSERT(pTextDoc->isModified());
+ CPPUNIT_ASSERT(pWrtShell->GetLastUndoInfo(nullptr, nullptr, nullptr));
+
+ pWrtShell->Undo();
+ CPPUNIT_ASSERT(!pTextDoc->isModified());
+ CPPUNIT_ASSERT(!pWrtShell->GetLastUndoInfo(nullptr, nullptr, nullptr));
+
+ // Check that modifications of anchor mark document dirty, and create an undo
+
+ xImage->setPropertyValue("AnchorType",
+ css::uno::Any(css::text::TextContentAnchorType_AT_PARAGRAPH));
+
+ CPPUNIT_ASSERT(pTextDoc->isModified());
+ CPPUNIT_ASSERT(pWrtShell->GetLastUndoInfo(nullptr, nullptr, nullptr));
+
+ pWrtShell->Undo();
+ CPPUNIT_ASSERT(!pTextDoc->isModified());
+ CPPUNIT_ASSERT(!pWrtShell->GetLastUndoInfo(nullptr, nullptr, nullptr));
+
+ // Check that setting the same values do not make it dirty and do not add undo
+
+ xImage->setPropertyValue("RelativeWidth", xImage->getPropertyValue("RelativeWidth"));
+ xImage->setPropertyValue("AnchorType", xImage->getPropertyValue("AnchorType"));
+
+ CPPUNIT_ASSERT(!pTextDoc->isModified());
+ CPPUNIT_ASSERT(!pWrtShell->GetLastUndoInfo(nullptr, nullptr, nullptr));
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreUndoTest, testAnchorTypeChangePosition)
+{
+ // Given a document with a textbox (draw + fly format pair) + an inner image:
+ createSwDoc("anchor-type-change-position.docx");
+ selectShape(1);
+ SwDoc* pDoc = getSwDoc();
+ const auto& rFormats = *pDoc->GetSpzFrameFormats();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(3), rFormats.size());
+ Point aOldPos;
+ {
+ const SwFormatHoriOrient& rHoriOrient = rFormats[0]->GetHoriOrient();
+ const SwFormatVertOrient& rVertOrient = rFormats[0]->GetVertOrient();
+ aOldPos = Point(rHoriOrient.GetPos(), rVertOrient.GetPos());
+ }
+
+ // When changing the anchor type + undo:
+ dispatchCommand(mxComponent, ".uno:SetAnchorToChar", {});
+ dispatchCommand(mxComponent, ".uno:Undo", {});
+
+ // Then make sure the old position is also restored:
+ const SwFormatHoriOrient& rHoriOrient = rFormats[0]->GetHoriOrient();
+ const SwFormatVertOrient& rVertOrient = rFormats[0]->GetVertOrient();
+ Point aNewPos(rHoriOrient.GetPos(), rVertOrient.GetPos());
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 789,213
+ // - Actual : 1578,3425
+ // i.e. there was a big, unexpected increase in the vertical position after undo.
+ CPPUNIT_ASSERT_EQUAL(aOldPos, aNewPos);
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/unocore/data/broken-embedded-object.odt b/sw/qa/core/unocore/data/broken-embedded-object.odt
new file mode 100644
index 0000000000..94a0809235
--- /dev/null
+++ b/sw/qa/core/unocore/data/broken-embedded-object.odt
Binary files differ
diff --git a/sw/qa/core/unocore/data/floattable-outer-nonsplit-inner.docx b/sw/qa/core/unocore/data/floattable-outer-nonsplit-inner.docx
new file mode 100644
index 0000000000..dc213b1b0d
--- /dev/null
+++ b/sw/qa/core/unocore/data/floattable-outer-nonsplit-inner.docx
Binary files differ
diff --git a/sw/qa/core/unocore/data/floattable-split.docx b/sw/qa/core/unocore/data/floattable-split.docx
new file mode 100644
index 0000000000..2e2c9c705d
--- /dev/null
+++ b/sw/qa/core/unocore/data/floattable-split.docx
Binary files differ
diff --git a/sw/qa/core/unocore/data/graphic.png b/sw/qa/core/unocore/data/graphic.png
new file mode 100644
index 0000000000..fdad35484e
--- /dev/null
+++ b/sw/qa/core/unocore/data/graphic.png
Binary files differ
diff --git a/sw/qa/core/unocore/data/paragraph-marker-formatted-run.docx b/sw/qa/core/unocore/data/paragraph-marker-formatted-run.docx
new file mode 100644
index 0000000000..c0635c157c
--- /dev/null
+++ b/sw/qa/core/unocore/data/paragraph-marker-formatted-run.docx
Binary files differ
diff --git a/sw/qa/core/unocore/data/paragraph-marker.docx b/sw/qa/core/unocore/data/paragraph-marker.docx
new file mode 100644
index 0000000000..8dac2d96c7
--- /dev/null
+++ b/sw/qa/core/unocore/data/paragraph-marker.docx
Binary files differ
diff --git a/sw/qa/core/unocore/data/tdf108272-1-minimal.docx b/sw/qa/core/unocore/data/tdf108272-1-minimal.docx
new file mode 100644
index 0000000000..28efdf65b9
--- /dev/null
+++ b/sw/qa/core/unocore/data/tdf108272-1-minimal.docx
Binary files differ
diff --git a/sw/qa/core/unocore/data/tdf119081.odt b/sw/qa/core/unocore/data/tdf119081.odt
new file mode 100644
index 0000000000..a9b479dd59
--- /dev/null
+++ b/sw/qa/core/unocore/data/tdf119081.odt
Binary files differ
diff --git a/sw/qa/core/unocore/data/tdf149555.docx b/sw/qa/core/unocore/data/tdf149555.docx
new file mode 100644
index 0000000000..b1f983c340
--- /dev/null
+++ b/sw/qa/core/unocore/data/tdf149555.docx
Binary files differ
diff --git a/sw/qa/core/unocore/unocore.cxx b/sw/qa/core/unocore/unocore.cxx
new file mode 100644
index 0000000000..381fe0dab3
--- /dev/null
+++ b/sw/qa/core/unocore/unocore.cxx
@@ -0,0 +1,1063 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <swmodeltestbase.hxx>
+
+#include <com/sun/star/text/BibliographyDataType.hpp>
+#include <com/sun/star/text/XTextAppend.hpp>
+#include <com/sun/star/text/XTextFrame.hpp>
+#include <com/sun/star/text/XTextViewCursorSupplier.hpp>
+#include <com/sun/star/text/XDependentTextField.hpp>
+#include <com/sun/star/document/XDocumentInsertable.hpp>
+#include <com/sun/star/view/XSelectionSupplier.hpp>
+#include <com/sun/star/text/XTextViewCursorSupplier.hpp>
+#include <com/sun/star/text/XPageCursor.hpp>
+
+#include <comphelper/propertyvalue.hxx>
+#include <comphelper/sequenceashashmap.hxx>
+#include <vcl/errinf.hxx>
+#include <editeng/wghtitem.hxx>
+
+#include <wrtsh.hxx>
+#include <unotextrange.hxx>
+#include <unotxdoc.hxx>
+#include <docsh.hxx>
+#include <ndtxt.hxx>
+#include <textlinebreak.hxx>
+#include <textcontentcontrol.hxx>
+#include <frmmgr.hxx>
+#include <fmtcntnt.hxx>
+
+using namespace ::com::sun::star;
+
+/// Covers sw/source/core/unocore/ fixes.
+class SwCoreUnocoreTest : public SwModelTestBase
+{
+public:
+ SwCoreUnocoreTest()
+ : SwModelTestBase("/sw/qa/core/unocore/data/")
+ {
+ }
+};
+
+CPPUNIT_TEST_FIXTURE(SwCoreUnocoreTest, testTdf119081)
+{
+ // Load a doc with a nested table in it.
+ createSwDoc("tdf119081.odt");
+ SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ CPPUNIT_ASSERT(pTextDoc);
+ SwDocShell* pDocShell = pTextDoc->GetDocShell();
+ SwWrtShell* pWrtShell = pDocShell->GetWrtShell();
+
+ // Enter outer A1.
+ pWrtShell->Down(/*bSelect=*/false, /*nCount=*/3);
+ // Enter inner A1.
+ pWrtShell->Right(SwCursorSkipMode::Cells, /*bSelect=*/false, /*nCount=*/1, /*bBasicCall=*/false,
+ /*bVisual=*/true);
+ // Enter outer B1.
+ pWrtShell->Down(/*bSelect=*/false, /*nCount=*/2);
+
+ SwDoc* pDoc = pDocShell->GetDoc();
+ SwPaM& rCursor = pWrtShell->GetCurrentShellCursor();
+ rtl::Reference<SwXTextRange> xInsertPosition
+ = SwXTextRange::CreateXTextRange(*pDoc, *rCursor.GetPoint(), nullptr);
+ uno::Reference<text::XTextAppend> xTextAppend(xInsertPosition->getText(), uno::UNO_QUERY);
+ // Without the accompanying fix in place, this test would have failed with:
+ // An uncaught exception of type com.sun.star.uno.RuntimeException
+ xTextAppend->insertTextPortion("x", {}, xInsertPosition);
+
+ // Verify that the string is indeed inserted.
+ pWrtShell->Left(SwCursorSkipMode::Cells, /*bSelect=*/true, /*nCount=*/1, /*bBasicCall=*/false,
+ /*bVisual=*/true);
+ CPPUNIT_ASSERT_EQUAL(OUString("x"), pWrtShell->GetCurrentShellCursor().GetText());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreUnocoreTest, flyAtParaAnchor)
+{
+ createSwDoc();
+ uno::Reference<lang::XMultiServiceFactory> const xMSF(mxComponent, uno::UNO_QUERY_THROW);
+ uno::Reference<text::XTextDocument> const xTD(mxComponent, uno::UNO_QUERY_THROW);
+ uno::Reference<text::XTextFrame> const xTextFrame(
+ xMSF->createInstance("com.sun.star.text.TextFrame"), uno::UNO_QUERY_THROW);
+ uno::Reference<beans::XPropertySet> const xFrameProps(xTextFrame, uno::UNO_QUERY_THROW);
+ xFrameProps->setPropertyValue("AnchorType", uno::Any(text::TextContentAnchorType_AT_PARAGRAPH));
+ auto const xText = xTD->getText();
+ auto const xTextCursor = xText->createTextCursor();
+ CPPUNIT_ASSERT(xTextCursor.is());
+ xText->insertTextContent(xTextCursor, xTextFrame, false);
+ auto const xAnchor = xTextFrame->getAnchor();
+ uno::Reference<text::XTextContent> const xFieldmark(
+ xMSF->createInstance("com.sun.star.text.Fieldmark"), uno::UNO_QUERY_THROW);
+ // this crashed because the anchor didn't have SwContentIndex
+ xText->insertTextContent(xAnchor, xFieldmark, false);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreUnocoreTest, testRtlGutter)
+{
+ createSwDoc();
+ uno::Reference<beans::XPropertySet> xPageStyle(getStyles("PageStyles")->getByName("Standard"),
+ uno::UNO_QUERY);
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Unknown property: RtlGutter
+ auto bRtlGutter = getProperty<bool>(xPageStyle, "RtlGutter");
+ CPPUNIT_ASSERT(!bRtlGutter);
+ xPageStyle->setPropertyValue("RtlGutter", uno::Any(true));
+ bRtlGutter = getProperty<bool>(xPageStyle, "RtlGutter");
+ CPPUNIT_ASSERT(bRtlGutter);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreUnocoreTest, testBiblioLocalCopy)
+{
+ // Given an empty document:
+ createSwDoc();
+
+ // When setting the LocalURL of a biblio field:
+ uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xField(
+ xFactory->createInstance("com.sun.star.text.TextField.Bibliography"), uno::UNO_QUERY);
+ uno::Sequence<beans::PropertyValue> aFields = {
+ comphelper::makePropertyValue("BibiliographicType", text::BibliographyDataType::WWW),
+ comphelper::makePropertyValue("Identifier", OUString("ARJ00")),
+ comphelper::makePropertyValue("Author", OUString("Me")),
+ comphelper::makePropertyValue("Title", OUString("mytitle")),
+ comphelper::makePropertyValue("Year", OUString("2020")),
+ comphelper::makePropertyValue("URL", OUString("http://www.example.com/test.pdf")),
+ comphelper::makePropertyValue("LocalURL", OUString("file:///home/me/test.pdf")),
+ };
+ xField->setPropertyValue("Fields", uno::Any(aFields));
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xTextDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ uno::Reference<text::XTextContent> xContent(xField, uno::UNO_QUERY);
+ xText->insertTextContent(xCursor, xContent, /*bAbsorb=*/false);
+
+ // Then make sure we get that LocalURL back:
+ comphelper::SequenceAsHashMap aMap(xField->getPropertyValue("Fields"));
+ // Without the accompanying fix in place, this test would have failed, there was no LocalURL key
+ // in the map.
+ CPPUNIT_ASSERT(aMap.find("LocalURL") != aMap.end());
+ auto aActual = aMap["LocalURL"].get<OUString>();
+ CPPUNIT_ASSERT_EQUAL(OUString("file:///home/me/test.pdf"), aActual);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreUnocoreTest, testLinkedStyles)
+{
+ // Given an empty document:
+ createSwDoc();
+
+ // When defining a linked style for a para style:
+ uno::Reference<container::XNameAccess> xParaStyles = getStyles("ParagraphStyles");
+ uno::Reference<beans::XPropertySet> xParaStyle(xParaStyles->getByName("Caption"),
+ uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(OUString(), getProperty<OUString>(xParaStyle, "LinkStyle"));
+ xParaStyle->setPropertyValue("LinkStyle", uno::Any(OUString("Emphasis")));
+ // Then make sure we get the linked char style back:
+ CPPUNIT_ASSERT_EQUAL(OUString("Emphasis"), getProperty<OUString>(xParaStyle, "LinkStyle"));
+
+ // When defining a linked style for a char style:
+ uno::Reference<container::XNameAccess> xCharStyles = getStyles("CharacterStyles");
+ uno::Reference<beans::XPropertySet> xCharStyle(xCharStyles->getByName("Emphasis"),
+ uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(OUString(), getProperty<OUString>(xCharStyle, "LinkStyle"));
+ xCharStyle->setPropertyValue("LinkStyle", uno::Any(OUString("Caption")));
+ // Then make sure we get the linked para style back:
+ CPPUNIT_ASSERT_EQUAL(OUString("Caption"), getProperty<OUString>(xCharStyle, "LinkStyle"));
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreUnocoreTest, testViewCursorTextFrame)
+{
+ // Given a document with a graphic and holding a reference to that graphic frame:
+ createSwDoc();
+ uno::Sequence<beans::PropertyValue> aInsertArgs
+ = { comphelper::makePropertyValue("FileName", createFileURL(u"graphic.png")) };
+ dispatchCommand(mxComponent, ".uno:InsertGraphic", aInsertArgs);
+ uno::Reference<frame::XModel> xModel(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextViewCursorSupplier> xTextViewCursorSupplier(
+ xModel->getCurrentController(), uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xViewCursor(xTextViewCursorSupplier->getViewCursor(),
+ uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xFrame;
+ xViewCursor->getPropertyValue("TextFrame") >>= xFrame;
+
+ // When saving to ODT, then make sure the store doesn't fail:
+ uno::Reference<frame::XStorable> xStorable(xModel, uno::UNO_QUERY);
+ uno::Sequence<beans::PropertyValue> aStoreArgs
+ = { comphelper::makePropertyValue("FilterName", OUString("writer8")) };
+ // Without the accompanying fix in place, this test would have failed with:
+ // uno.RuntimeException: "SwXParagraph: disposed or invalid ..."
+ xStorable->storeToURL(maTempFile.GetURL(), aStoreArgs);
+}
+
+/// Fails the test if an error popup would be presented.
+static void BasicDisplayErrorHandler(const OUString& /*rErr*/, const OUString& /*rAction*/)
+{
+ CPPUNIT_ASSERT(false);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreUnocoreTest, testBrokenEmbeddedObject)
+{
+ // Given a document with a broken embedded object (the XML markup is not well-formed):
+ createSwDoc("broken-embedded-object.odt");
+ uno::Reference<text::XTextEmbeddedObjectsSupplier> xSupplier(mxComponent, uno::UNO_QUERY);
+ uno::Reference<container::XIndexAccess> xObjects(xSupplier->getEmbeddedObjects(),
+ uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xObject(xObjects->getByIndex(0), uno::UNO_QUERY);
+ uno::Reference<lang::XServiceInfo> xEmbeddedObject;
+ // Get the property first, which initializes Draw, which would overwrite our error handler.
+ xObject->getPropertyValue("EmbeddedObject") >>= xEmbeddedObject;
+ ErrorRegistry::RegisterDisplay(&BasicDisplayErrorHandler);
+
+ // When trying to load that embedded object:
+ xObject->getPropertyValue("EmbeddedObject") >>= xEmbeddedObject;
+
+ // Then make sure we get a non-empty reference and an error popup it not shown:
+ CPPUNIT_ASSERT(xEmbeddedObject.is());
+ // Without the accompanying fix in place, we got this reference, but first an error popup was
+ // shown to the user.
+ CPPUNIT_ASSERT(
+ xEmbeddedObject->supportsService("com.sun.star.comp.embed.OCommonEmbeddedObject"));
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreUnocoreTest, testLineBreakInsert)
+{
+ // Given an empty document:
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+
+ // When inserting a line-break with properties:
+ uno::Reference<lang::XMultiServiceFactory> xMSF(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextContent> xLineBreak(
+ xMSF->createInstance("com.sun.star.text.LineBreak"), uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xLineBreakProps(xLineBreak, uno::UNO_QUERY);
+ auto eClear = static_cast<sal_Int16>(SwLineBreakClear::ALL);
+ xLineBreakProps->setPropertyValue("Clear", uno::Any(eClear));
+ uno::Reference<text::XText> xText = xTextDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ xText->insertTextContent(xCursor, xLineBreak, /*bAbsorb=*/false);
+
+ // Then make sure that both the line break and its matching text attribute is inserted:
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ SwNodeOffset nIndex = pWrtShell->GetCursor()->GetPointNode().GetIndex();
+ SwTextNode* pTextNode = pDoc->GetNodes()[nIndex]->GetTextNode();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: "\n" (newline)
+ // - Actual : "" (empty string)
+ // i.e. SwXLineBreak::attach() did not insert the newline + its text attribute.
+ CPPUNIT_ASSERT_EQUAL(OUString("\n"), pTextNode->GetText());
+ SwTextAttr* pAttr = pTextNode->GetTextAttrForCharAt(0, RES_TXTATR_LINEBREAK);
+ CPPUNIT_ASSERT(pAttr);
+ auto pTextLineBreak = static_cast<SwTextLineBreak*>(pAttr);
+ auto& rFormatLineBreak = static_cast<SwFormatLineBreak&>(pTextLineBreak->GetAttr());
+ CPPUNIT_ASSERT_EQUAL(SwLineBreakClear::ALL, rFormatLineBreak.GetValue());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreUnocoreTest, testLineBreakTextPortionEnum)
+{
+ // Given a document with a clearing break:
+ createSwDoc();
+ uno::Reference<lang::XMultiServiceFactory> xMSF(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextContent> xLineBreak(
+ xMSF->createInstance("com.sun.star.text.LineBreak"), uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xLineBreakProps(xLineBreak, uno::UNO_QUERY);
+ auto eClear = static_cast<sal_Int16>(SwLineBreakClear::ALL);
+ xLineBreakProps->setPropertyValue("Clear", uno::Any(eClear));
+ uno::Reference<text::XText> xText = xTextDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ xText->insertTextContent(xCursor, xLineBreak, /*bAbsorb=*/false);
+
+ // When enumerating the text portions of the only paragraph in the document:
+ uno::Reference<css::text::XTextRange> xTextPortion = getRun(getParagraph(1), 1);
+
+ // Then make sure that the text portion type is correct + the clear type can be read:
+ auto aPortionType = getProperty<OUString>(xTextPortion, "TextPortionType");
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: LineBreak
+ // - Actual : Text
+ // i.e. a line break with properties was part of the normal Text portion, making it impossible
+ // to get those properties.
+ CPPUNIT_ASSERT_EQUAL(OUString("LineBreak"), aPortionType);
+ xLineBreak = getProperty<uno::Reference<text::XTextContent>>(xTextPortion, "LineBreak");
+ eClear = getProperty<sal_Int16>(xLineBreak, "Clear");
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int16>(SwLineBreakClear::ALL), eClear);
+}
+
+CPPUNIT_TEST_FIXTURE(SwModelTestBase, testUserFieldTooltip)
+{
+ // Given a document with a user field:
+ createSwDoc();
+ uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XDependentTextField> xField(
+ xFactory->createInstance("com.sun.star.text.TextField.User"), uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xMaster(
+ xFactory->createInstance("com.sun.star.text.FieldMaster.User"), uno::UNO_QUERY);
+ xMaster->setPropertyValue("Name", uno::Any(OUString("a_user_field")));
+ xField->attachTextFieldMaster(xMaster);
+ xField->getTextFieldMaster()->setPropertyValue("Content", uno::Any(OUString("42")));
+ uno::Reference<text::XTextDocument> xDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xDocument->getText();
+ xText->insertTextContent(xText->createTextCursor(), xField, /*bAbsorb=*/false);
+ uno::Reference<beans::XPropertySet> xFieldProps(xField, uno::UNO_QUERY);
+
+ // When setting a tooltip on the field:
+ OUString aExpected("first line\nsecond line");
+ xFieldProps->setPropertyValue("Title", uno::Any(aExpected));
+
+ // Then make sure that the tooltip we read back matches the one previously specified:
+ // Without the accompanying fix in place, this test would have failed with:
+ // - the property is of unexpected type or void: Title
+ // i.e. reading of the tooltip was broken.
+ CPPUNIT_ASSERT_EQUAL(aExpected, getProperty<OUString>(xFieldProps, "Title"));
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreUnocoreTest, testContentControlInsert)
+{
+ // Given an empty document:
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+
+ // When inserting a content control around one or more text portions:
+ uno::Reference<lang::XMultiServiceFactory> xMSF(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xTextDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ xText->insertString(xCursor, "test", /*bAbsorb=*/false);
+ xCursor->gotoStart(/*bExpand=*/false);
+ xCursor->gotoEnd(/*bExpand=*/true);
+ uno::Reference<text::XTextContent> xContentControl(
+ xMSF->createInstance("com.sun.star.text.ContentControl"), uno::UNO_QUERY);
+ // Set a custom property on the content control:
+ uno::Reference<beans::XPropertySet> xContentControlProps(xContentControl, uno::UNO_QUERY);
+ xContentControlProps->setPropertyValue("ShowingPlaceHolder", uno::Any(true));
+ xText->insertTextContent(xCursor, xContentControl, /*bAbsorb=*/true);
+
+ // Then make sure that the text attribute is inserted:
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ SwNodeOffset nIndex = pWrtShell->GetCursor()->GetPointNode().GetIndex();
+ SwTextNode* pTextNode = pDoc->GetNodes()[nIndex]->GetTextNode();
+ SwTextAttr* pAttr = pTextNode->GetTextAttrForCharAt(0, RES_TXTATR_CONTENTCONTROL);
+ // Without the accompanying fix in place, this test would have failed, as the
+ // SwXContentControl::attach() implementation was missing.
+ CPPUNIT_ASSERT(pAttr);
+ // Also verify that the custom property was set:
+ auto pTextContentControl = static_txtattr_cast<SwTextContentControl*>(pAttr);
+ auto& rFormatContentControl
+ = static_cast<SwFormatContentControl&>(pTextContentControl->GetAttr());
+ std::shared_ptr<SwContentControl> pContentControl = rFormatContentControl.GetContentControl();
+ CPPUNIT_ASSERT(pContentControl->GetShowingPlaceHolder());
+
+ // Also verify that setText() and getText() works:
+ uno::Reference<text::XText> xContentControlText(xContentControl, uno::UNO_QUERY);
+ xContentControlText->setString("new");
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: new
+ // - Actual :
+ // i.e. getString() always returned an empty string.
+ CPPUNIT_ASSERT_EQUAL(OUString("new"), xContentControlText->getString());
+}
+
+CPPUNIT_TEST_FIXTURE(SwModelTestBase, testImageTooltip)
+{
+ // Given a document with an image and a hyperlink on it:
+ createSwDoc();
+ uno::Reference<lang::XMultiServiceFactory> xFactory(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextDocument> xDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ uno::Reference<text::XTextContent> xImage(
+ xFactory->createInstance("com.sun.star.text.TextGraphicObject"), uno::UNO_QUERY);
+ xText->insertTextContent(xCursor, xImage, /*bAbsorb=*/false);
+ uno::Reference<beans::XPropertySet> xImageProps(xImage, uno::UNO_QUERY);
+ xImageProps->setPropertyValue("HyperLinkURL", uno::Any(OUString("http://www.example.com")));
+
+ // When setting a tooltip on the image:
+ OUString aExpected("first line\nsecond line");
+ xImageProps->setPropertyValue("Tooltip", uno::Any(aExpected));
+
+ // Then make sure that the tooltip we read back matches the one previously specified:
+ // Without the accompanying fix in place, this test would have failed with:
+ // An uncaught exception of type com.sun.star.beans.UnknownPropertyException
+ // i.e. reading/writing of the tooltip was broken.
+ CPPUNIT_ASSERT_EQUAL(aExpected, getProperty<OUString>(xImageProps, "Tooltip"));
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreUnocoreTest, testContentControlTextPortionEnum)
+{
+ // Given a document with a content control around one or more text portions:
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+ uno::Reference<lang::XMultiServiceFactory> xMSF(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xTextDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ xText->insertString(xCursor, "test", /*bAbsorb=*/false);
+ xCursor->gotoStart(/*bExpand=*/false);
+ xCursor->gotoEnd(/*bExpand=*/true);
+ uno::Reference<text::XTextContent> xContentControl(
+ xMSF->createInstance("com.sun.star.text.ContentControl"), uno::UNO_QUERY);
+ xText->insertTextContent(xCursor, xContentControl, /*bAbsorb=*/true);
+
+ // When enumerating the text portions of the only paragraph in the document:
+ uno::Reference<css::text::XTextRange> xTextPortion = getRun(getParagraph(1), 1);
+
+ // Then make sure that the text portion type is correct + the content can be read:
+ auto aPortionType = getProperty<OUString>(xTextPortion, "TextPortionType");
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: ContentControl
+ // - Actual : Text
+ // i.e. the content control text attribute was ignored.
+ CPPUNIT_ASSERT_EQUAL(OUString("ContentControl"), aPortionType);
+ xContentControl
+ = getProperty<uno::Reference<text::XTextContent>>(xTextPortion, "ContentControl");
+ uno::Reference<text::XTextRange> xContentControlRange(xContentControl, uno::UNO_QUERY);
+ xText = xContentControlRange->getText();
+ uno::Reference<container::XEnumerationAccess> xContentEnumAccess(xText, uno::UNO_QUERY);
+ uno::Reference<container::XEnumeration> xContentEnum = xContentEnumAccess->createEnumeration();
+ uno::Reference<text::XTextRange> xContent(xContentEnum->nextElement(), uno::UNO_QUERY);
+ CPPUNIT_ASSERT_EQUAL(OUString("test"), xContent->getString());
+
+ // Also test the generated layout:
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+ assertXPath(pXmlDoc, "//SwParaPortion/SwLineLayout/SwFieldPortion"_ostr, "expand"_ostr, "");
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: PortionType::ContentControl
+ // - Actual : PortionType::Text
+ // i.e. SwContentControl generated a plain text portion, not a dedicated content control
+ // portion.
+ assertXPath(pXmlDoc, "//SwParaPortion/SwLineLayout/SwLinePortion"_ostr, "type"_ostr,
+ "PortionType::ContentControl");
+ assertXPath(pXmlDoc, "//SwParaPortion/SwLineLayout/SwLinePortion"_ostr, "portion"_ostr,
+ "test*");
+
+ // Also test the doc model, make sure that there is a dummy character at the start and end, so
+ // the user can explicitly decide if they want to expand the content control or not:
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ OUString aText = pWrtShell->GetCursor()->GetPointNode().GetTextNode()->GetText();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: ^Atest^A
+ // - Actual : ^Atest
+ // i.e. there was no dummy character at the end.
+ CPPUNIT_ASSERT_EQUAL(OUString("\x0001test\x0001"), aText);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreUnocoreTest, testContentControlCheckbox)
+{
+ // Given an empty document:
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+
+ // When inserting a checkbox content control:
+ uno::Reference<lang::XMultiServiceFactory> xMSF(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xTextDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ xText->insertString(xCursor, "test", /*bAbsorb=*/false);
+ xCursor->gotoStart(/*bExpand=*/false);
+ xCursor->gotoEnd(/*bExpand=*/true);
+ uno::Reference<text::XTextContent> xContentControl(
+ xMSF->createInstance("com.sun.star.text.ContentControl"), uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xContentControlProps(xContentControl, uno::UNO_QUERY);
+ // Without the accompanying fix in place, this test would have failed with:
+ // An uncaught exception of type com.sun.star.beans.UnknownPropertyException
+ xContentControlProps->setPropertyValue("Checkbox", uno::Any(true));
+ xContentControlProps->setPropertyValue("Checked", uno::Any(true));
+ xContentControlProps->setPropertyValue("CheckedState", uno::Any(u"☒"_ustr));
+ xContentControlProps->setPropertyValue("UncheckedState", uno::Any(u"â˜"_ustr));
+ xText->insertTextContent(xCursor, xContentControl, /*bAbsorb=*/true);
+
+ // Then make sure that the specified properties are set:
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ SwTextNode* pTextNode = pWrtShell->GetCursor()->GetPointNode().GetTextNode();
+ SwTextAttr* pAttr = pTextNode->GetTextAttrForCharAt(0, RES_TXTATR_CONTENTCONTROL);
+ auto pTextContentControl = static_txtattr_cast<SwTextContentControl*>(pAttr);
+ auto& rFormatContentControl
+ = static_cast<SwFormatContentControl&>(pTextContentControl->GetAttr());
+ std::shared_ptr<SwContentControl> pContentControl = rFormatContentControl.GetContentControl();
+ CPPUNIT_ASSERT(pContentControl->GetCheckbox());
+ CPPUNIT_ASSERT(pContentControl->GetChecked());
+ CPPUNIT_ASSERT_EQUAL(u"☒"_ustr, pContentControl->GetCheckedState());
+ CPPUNIT_ASSERT_EQUAL(u"â˜"_ustr, pContentControl->GetUncheckedState());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreUnocoreTest, testContentControlDropdown)
+{
+ // Given an empty document:
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+
+ // When inserting a dropdown content control:
+ uno::Reference<lang::XMultiServiceFactory> xMSF(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xTextDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ xText->insertString(xCursor, "test", /*bAbsorb=*/false);
+ xCursor->gotoStart(/*bExpand=*/false);
+ xCursor->gotoEnd(/*bExpand=*/true);
+ uno::Reference<text::XTextContent> xContentControl(
+ xMSF->createInstance("com.sun.star.text.ContentControl"), uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xContentControlProps(xContentControl, uno::UNO_QUERY);
+ {
+ uno::Sequence<beans::PropertyValues> aListItems = {
+ {
+ comphelper::makePropertyValue("DisplayText", uno::Any(OUString("red"))),
+ comphelper::makePropertyValue("Value", uno::Any(OUString("R"))),
+ },
+ {
+ comphelper::makePropertyValue("DisplayText", uno::Any(OUString("green"))),
+ comphelper::makePropertyValue("Value", uno::Any(OUString("G"))),
+ },
+ {
+ comphelper::makePropertyValue("DisplayText", uno::Any(OUString("blue"))),
+ comphelper::makePropertyValue("Value", uno::Any(OUString("B"))),
+ },
+ };
+ // Without the accompanying fix in place, this test would have failed with:
+ // An uncaught exception of type com.sun.star.beans.UnknownPropertyException
+ xContentControlProps->setPropertyValue("ListItems", uno::Any(aListItems));
+ }
+ xText->insertTextContent(xCursor, xContentControl, /*bAbsorb=*/true);
+
+ // Then make sure that the specified properties are set:
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ SwTextNode* pTextNode = pWrtShell->GetCursor()->GetPointNode().GetTextNode();
+ SwTextAttr* pAttr = pTextNode->GetTextAttrForCharAt(0, RES_TXTATR_CONTENTCONTROL);
+ auto pTextContentControl = static_txtattr_cast<SwTextContentControl*>(pAttr);
+ auto& rFormatContentControl
+ = static_cast<SwFormatContentControl&>(pTextContentControl->GetAttr());
+ std::shared_ptr<SwContentControl> pContentControl = rFormatContentControl.GetContentControl();
+ std::vector<SwContentControlListItem> aListItems = pContentControl->GetListItems();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(3), aListItems.size());
+ CPPUNIT_ASSERT_EQUAL(OUString("red"), aListItems[0].m_aDisplayText);
+ CPPUNIT_ASSERT_EQUAL(OUString("R"), aListItems[0].m_aValue);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreUnocoreTest, testInsertFileInContentControlException)
+{
+ // Given a document with a content control:
+ createSwDoc();
+ uno::Reference<lang::XMultiServiceFactory> xMSF(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xTextDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ xText->insertString(xCursor, "test", /*bAbsorb=*/false);
+ xCursor->gotoStart(/*bExpand=*/false);
+ xCursor->gotoEnd(/*bExpand=*/true);
+ uno::Reference<text::XTextContent> xContentControl(
+ xMSF->createInstance("com.sun.star.text.ContentControl"), uno::UNO_QUERY);
+ xText->insertTextContent(xCursor, xContentControl, /*bAbsorb=*/true);
+
+ // Reject inserting a document inside the content control:
+ xCursor->goLeft(1, false);
+ OUString aURL(createFileURL(u"tdf119081.odt"));
+ uno::Reference<document::XDocumentInsertable> xInsertable(xCursor, uno::UNO_QUERY);
+ CPPUNIT_ASSERT_THROW(xInsertable->insertDocumentFromURL(aURL, {}), uno::RuntimeException);
+
+ // Accept inserting a document outside the content control:
+ xCursor->goRight(1, false);
+ xInsertable->insertDocumentFromURL(aURL, {});
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreUnocoreTest, testContentControlPicture)
+{
+ // Given an empty document:
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+
+ // When inserting a picture content control:
+ uno::Reference<lang::XMultiServiceFactory> xMSF(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xTextDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ uno::Reference<beans::XPropertySet> xTextGraphic(
+ xMSF->createInstance("com.sun.star.text.TextGraphicObject"), uno::UNO_QUERY);
+ xTextGraphic->setPropertyValue("AnchorType",
+ uno::Any(text::TextContentAnchorType_AS_CHARACTER));
+ uno::Reference<text::XTextContent> xTextContent(xTextGraphic, uno::UNO_QUERY);
+ xText->insertTextContent(xCursor, xTextContent, false);
+ xCursor->gotoStart(/*bExpand=*/false);
+ xCursor->gotoEnd(/*bExpand=*/true);
+ uno::Reference<text::XTextContent> xContentControl(
+ xMSF->createInstance("com.sun.star.text.ContentControl"), uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xContentControlProps(xContentControl, uno::UNO_QUERY);
+ // Without the accompanying fix in place, this test would have failed with:
+ // An uncaught exception of type com.sun.star.beans.UnknownPropertyException
+ xContentControlProps->setPropertyValue("Picture", uno::Any(true));
+ xText->insertTextContent(xCursor, xContentControl, /*bAbsorb=*/true);
+
+ // Then make sure that the specified properties are set:
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ SwTextNode* pTextNode = pWrtShell->GetCursor()->GetPointNode().GetTextNode();
+ SwTextAttr* pAttr = pTextNode->GetTextAttrForCharAt(0, RES_TXTATR_CONTENTCONTROL);
+ auto pTextContentControl = static_txtattr_cast<SwTextContentControl*>(pAttr);
+ auto& rFormatContentControl
+ = static_cast<SwFormatContentControl&>(pTextContentControl->GetAttr());
+ std::shared_ptr<SwContentControl> pContentControl = rFormatContentControl.GetContentControl();
+ CPPUNIT_ASSERT(pContentControl->GetPicture());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreUnocoreTest, testContentControlDate)
+{
+ // Given an empty document:
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+
+ // When inserting a date content control:
+ uno::Reference<lang::XMultiServiceFactory> xMSF(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xTextDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ xText->insertString(xCursor, "test", /*bAbsorb=*/false);
+ xCursor->gotoStart(/*bExpand=*/false);
+ xCursor->gotoEnd(/*bExpand=*/true);
+ uno::Reference<text::XTextContent> xContentControl(
+ xMSF->createInstance("com.sun.star.text.ContentControl"), uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xContentControlProps(xContentControl, uno::UNO_QUERY);
+ // Without the accompanying fix in place, this test would have failed with:
+ // An uncaught exception of type com.sun.star.beans.UnknownPropertyException
+ xContentControlProps->setPropertyValue("Date", uno::Any(true));
+ xContentControlProps->setPropertyValue("DateFormat", uno::Any(OUString("M/d/yyyy")));
+ xContentControlProps->setPropertyValue("DateLanguage", uno::Any(OUString("en-US")));
+ xContentControlProps->setPropertyValue("CurrentDate",
+ uno::Any(OUString("2022-05-25T00:00:00Z")));
+ xContentControlProps->setPropertyValue("PlaceholderDocPart",
+ uno::Any(OUString("DefaultPlaceholder_-1854013437")));
+ xContentControlProps->setPropertyValue(
+ "DataBindingPrefixMappings",
+ uno::Any(OUString("xmlns:ns0='http://schemas.microsoft.com/vsto/samples' ")));
+ xContentControlProps->setPropertyValue(
+ "DataBindingXpath",
+ uno::Any(OUString("/ns0:employees[1]/ns0:employee[1]/ns0:hireDate[1]")));
+ xContentControlProps->setPropertyValue(
+ "DataBindingStoreItemID", uno::Any(OUString("{241A8A02-7FFD-488D-8827-63FBE74E8BC9}")));
+ xContentControlProps->setPropertyValue("Color", uno::Any(OUString("008000")));
+ xContentControlProps->setPropertyValue("Alias", uno::Any(OUString("myalias")));
+ xContentControlProps->setPropertyValue("Tag", uno::Any(OUString("mytag")));
+ xContentControlProps->setPropertyValue("Id", uno::Any(static_cast<sal_Int32>(123)));
+ xContentControlProps->setPropertyValue("TabIndex", uno::Any(sal_uInt32(1)));
+ xContentControlProps->setPropertyValue("Lock", uno::Any(OUString("sdtContentLocked")));
+ xText->insertTextContent(xCursor, xContentControl, /*bAbsorb=*/true);
+
+ // Then make sure that the specified properties are set:
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ SwTextNode* pTextNode = pWrtShell->GetCursor()->GetPointNode().GetTextNode();
+ SwTextAttr* pAttr = pTextNode->GetTextAttrForCharAt(0, RES_TXTATR_CONTENTCONTROL);
+ auto pTextContentControl = static_txtattr_cast<SwTextContentControl*>(pAttr);
+ auto& rFormatContentControl
+ = static_cast<SwFormatContentControl&>(pTextContentControl->GetAttr());
+ std::shared_ptr<SwContentControl> pContentControl = rFormatContentControl.GetContentControl();
+ CPPUNIT_ASSERT(pContentControl->GetDate());
+ CPPUNIT_ASSERT_EQUAL(OUString("M/d/yyyy"), pContentControl->GetDateFormat());
+ CPPUNIT_ASSERT_EQUAL(OUString("en-US"), pContentControl->GetDateLanguage());
+ CPPUNIT_ASSERT_EQUAL(OUString("2022-05-25T00:00:00Z"), pContentControl->GetCurrentDate());
+ CPPUNIT_ASSERT_EQUAL(OUString("DefaultPlaceholder_-1854013437"),
+ pContentControl->GetPlaceholderDocPart());
+ CPPUNIT_ASSERT_EQUAL(OUString("xmlns:ns0='http://schemas.microsoft.com/vsto/samples' "),
+ pContentControl->GetDataBindingPrefixMappings());
+ CPPUNIT_ASSERT_EQUAL(OUString("/ns0:employees[1]/ns0:employee[1]/ns0:hireDate[1]"),
+ pContentControl->GetDataBindingXpath());
+ CPPUNIT_ASSERT_EQUAL(OUString("{241A8A02-7FFD-488D-8827-63FBE74E8BC9}"),
+ pContentControl->GetDataBindingStoreItemID());
+ CPPUNIT_ASSERT_EQUAL(OUString("008000"), pContentControl->GetColor());
+ CPPUNIT_ASSERT_EQUAL(OUString("myalias"), pContentControl->GetAlias());
+ CPPUNIT_ASSERT_EQUAL(OUString("mytag"), pContentControl->GetTag());
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(123), pContentControl->GetId());
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt32>(1), pContentControl->GetTabIndex());
+ CPPUNIT_ASSERT_EQUAL(OUString("sdtContentLocked"), pContentControl->GetLock());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreUnocoreTest, testContentControlPlainText)
+{
+ // Given an empty document:
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+
+ // When inserting a plain text content control around a text portion:
+ uno::Reference<lang::XMultiServiceFactory> xMSF(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xTextDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ xText->insertString(xCursor, "test", /*bAbsorb=*/false);
+ xCursor->gotoStart(/*bExpand=*/false);
+ xCursor->gotoEnd(/*bExpand=*/true);
+ uno::Reference<text::XTextContent> xContentControl(
+ xMSF->createInstance("com.sun.star.text.ContentControl"), uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xContentControlProps(xContentControl, uno::UNO_QUERY);
+ xContentControlProps->setPropertyValue("PlainText", uno::Any(true));
+ xText->insertTextContent(xCursor, xContentControl, /*bAbsorb=*/true);
+
+ // Then make sure that the text attribute is inserted:
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ SwNodeOffset nIndex = pWrtShell->GetCursor()->GetPointNode().GetIndex();
+ SwTextNode* pTextNode = pDoc->GetNodes()[nIndex]->GetTextNode();
+ SwTextAttr* pAttr = pTextNode->GetTextAttrForCharAt(0, RES_TXTATR_CONTENTCONTROL);
+ CPPUNIT_ASSERT(pAttr);
+ // Also verify that the type if plain text:
+ auto pTextContentControl = static_txtattr_cast<SwTextContentControl*>(pAttr);
+ auto& rFormatContentControl
+ = static_cast<SwFormatContentControl&>(pTextContentControl->GetAttr());
+ std::shared_ptr<SwContentControl> pContentControl = rFormatContentControl.GetContentControl();
+ CPPUNIT_ASSERT(pContentControl->GetPlainText());
+
+ // Now check if the char index range 2-4 is extended to 0-6 when we apply formatting:
+ pWrtShell->SttEndDoc(/*bStt=*/true);
+ // Select "es" from "<dummy>test<dummy>".
+ pWrtShell->Right(SwCursorSkipMode::Chars, /*bSelect=*/false, 2, /*bBasicCall=*/false);
+ pWrtShell->Right(SwCursorSkipMode::Chars, /*bSelect=*/true, 2, /*bBasicCall=*/false);
+ SfxItemSetFixed<RES_CHRATR_WEIGHT, RES_CHRATR_WEIGHT> aSet(pWrtShell->GetAttrPool());
+ SvxWeightItem aItem(WEIGHT_BOLD, RES_CHRATR_WEIGHT);
+ aSet.Put(aItem);
+ pWrtShell->SetAttrSet(aSet);
+ pAttr = pTextNode->GetTextAttrAt(2, RES_TXTATR_AUTOFMT);
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 0
+ // - Actual : 2
+ // i.e. the plain text content control now had 3 portions (<dummy>t<b>es</b>t<dummy>), instead
+ // of one (<b><dummy>test<dummy></b>).
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), pAttr->GetStart());
+ CPPUNIT_ASSERT(pAttr->End());
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(6), *pAttr->End());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreUnocoreTest, testContentControlComboBox)
+{
+ // Given an empty document:
+ createSwDoc();
+ SwDoc* pDoc = getSwDoc();
+
+ // When inserting a combobox content control:
+ uno::Reference<lang::XMultiServiceFactory> xMSF(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xTextDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ xText->insertString(xCursor, "test", /*bAbsorb=*/false);
+ xCursor->gotoStart(/*bExpand=*/false);
+ xCursor->gotoEnd(/*bExpand=*/true);
+ uno::Reference<text::XTextContent> xContentControl(
+ xMSF->createInstance("com.sun.star.text.ContentControl"), uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xContentControlProps(xContentControl, uno::UNO_QUERY);
+ {
+ uno::Sequence<beans::PropertyValues> aListItems = {
+ {
+ comphelper::makePropertyValue("DisplayText", uno::Any(OUString("red"))),
+ comphelper::makePropertyValue("Value", uno::Any(OUString("R"))),
+ },
+ {
+ comphelper::makePropertyValue("DisplayText", uno::Any(OUString("green"))),
+ comphelper::makePropertyValue("Value", uno::Any(OUString("G"))),
+ },
+ {
+ comphelper::makePropertyValue("DisplayText", uno::Any(OUString("blue"))),
+ comphelper::makePropertyValue("Value", uno::Any(OUString("B"))),
+ },
+ };
+ xContentControlProps->setPropertyValue("ListItems", uno::Any(aListItems));
+ // Without the accompanying fix in place, this test would have failed with:
+ // An uncaught exception of type com.sun.star.beans.UnknownPropertyException
+ xContentControlProps->setPropertyValue("ComboBox", uno::Any(true));
+ }
+ xText->insertTextContent(xCursor, xContentControl, /*bAbsorb=*/true);
+
+ // Then make sure that the specified properties are set:
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+ SwTextNode* pTextNode = pWrtShell->GetCursor()->GetPointNode().GetTextNode();
+ SwTextAttr* pAttr = pTextNode->GetTextAttrForCharAt(0, RES_TXTATR_CONTENTCONTROL);
+ auto pTextContentControl = static_txtattr_cast<SwTextContentControl*>(pAttr);
+ auto& rFormatContentControl
+ = static_cast<SwFormatContentControl&>(pTextContentControl->GetAttr());
+ std::shared_ptr<SwContentControl> pContentControl = rFormatContentControl.GetContentControl();
+ std::vector<SwContentControlListItem> aListItems = pContentControl->GetListItems();
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(3), aListItems.size());
+ CPPUNIT_ASSERT_EQUAL(OUString("red"), aListItems[0].m_aDisplayText);
+ CPPUNIT_ASSERT_EQUAL(OUString("R"), aListItems[0].m_aValue);
+ CPPUNIT_ASSERT(pContentControl->GetComboBox());
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreUnocoreTest, testContentControls)
+{
+ // Given an empty document:
+ createSwDoc();
+ auto pXTextDocument = dynamic_cast<SwXTextDocument*>(mxComponent.get());
+ uno::Reference<container::XIndexAccess> xContentControls = pXTextDocument->getContentControls();
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(0), xContentControls->getCount());
+
+ // When inserting content controls:
+ uno::Reference<lang::XMultiServiceFactory> xMSF(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xTextDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ // First tag1.
+ xText->insertString(xCursor, "test1", /*bAbsorb=*/false);
+ xCursor->gotoStart(/*bExpand=*/false);
+ xCursor->gotoEnd(/*bExpand=*/true);
+ {
+ uno::Reference<text::XTextContent> xContentControl(
+ xMSF->createInstance("com.sun.star.text.ContentControl"), uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xContentControlProps(xContentControl, uno::UNO_QUERY);
+ xContentControlProps->setPropertyValue("Tag", uno::Any(OUString("tag1")));
+ xText->insertTextContent(xCursor, xContentControl, /*bAbsorb=*/true);
+ }
+ xCursor->gotoStart(/*bExpand=*/false);
+ // Then tag2 before tag1.
+ xText->insertString(xCursor, "test2", /*bAbsorb=*/false);
+ xCursor->gotoStart(/*bExpand=*/false);
+ xCursor->goRight(5, /*bExpand=*/true);
+ {
+ uno::Reference<text::XTextContent> xContentControl(
+ xMSF->createInstance("com.sun.star.text.ContentControl"), uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xContentControlProps(xContentControl, uno::UNO_QUERY);
+ xContentControlProps->setPropertyValue("Tag", uno::Any(OUString("tag2")));
+ xText->insertTextContent(xCursor, xContentControl, /*bAbsorb=*/true);
+ }
+
+ // Then make sure that XContentControls contains the items in a correct order:
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(2), xContentControls->getCount());
+ uno::Reference<beans::XPropertySet> xContentControl;
+ xContentControls->getByIndex(0) >>= xContentControl;
+ OUString aTag;
+ xContentControl->getPropertyValue("Tag") >>= aTag;
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: tag2
+ // - Actual : tag1
+ // i.e. the order of the items was sorted by insert time, not by their doc model position.
+ CPPUNIT_ASSERT_EQUAL(OUString("tag2"), aTag);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreUnocoreTest, testParagraphMarkerODFExport)
+{
+ // Given a document with a red numbering portion, from the paragraph marker's format:
+ createSwDoc("paragraph-marker.docx");
+
+ // When saving that as ODT + reload:
+ saveAndReload("writer8");
+
+ // Then make sure that it still has the correct color:
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: 00ff0000 (COL_LIGHTRED)
+ // - Actual : ffffffff (COL_AUTO)
+ // i.e. the custom "red" color was lost as RES_PARATR_LIST_AUTOFMT was not serialized to ODT.
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("00ff0000"),
+ getXPath(pXmlDoc, "//SwParaPortion/SwLineLayout/SwFieldPortion/SwFont"_ostr, "color"_ostr));
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreUnocoreTest, testParagraphMarkerFormattedRun)
+{
+ // Given a document with a bold run and non-bold paragraph marker:
+ createSwDoc("paragraph-marker-formatted-run.docx");
+
+ // When saving that as ODT + reload:
+ saveAndReload("writer8");
+
+ // Then make sure that the numbering portion is still non-bold, matching Word:
+ xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: normal
+ // - Actual : bold
+ // i.e. the numbering portion was bold, while its weight should be normal.
+ CPPUNIT_ASSERT_EQUAL(OUString("normal"),
+ getXPath(pXmlDoc,
+ "//SwParaPortion/SwLineLayout/SwFieldPortion/SwFont"_ostr,
+ "weight"_ostr));
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreUnocoreTest, testFlySplit)
+{
+ // Given a document with a fly frame:
+ createSwDoc();
+ SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
+ SwFlyFrameAttrMgr aMgr(true, pWrtShell, Frmmgr_Type::TEXT, nullptr);
+ RndStdIds eAnchor = RndStdIds::FLY_AT_PARA;
+ aMgr.InsertFlyFrame(eAnchor, aMgr.GetPos(), aMgr.GetSize());
+ uno::Reference<text::XTextFramesSupplier> xDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xFrame(xDocument->getTextFrames()->getByName("Frame1"),
+ uno::UNO_QUERY);
+ bool bIsSplitAllowed{};
+ // Without the accompanying fix in place, this test would have failed with:
+ // An uncaught exception of type com.sun.star.beans.UnknownPropertyException
+ // - Unknown property: IsSplitAllowed
+ // i.e. the property was missing.
+ xFrame->getPropertyValue("IsSplitAllowed") >>= bIsSplitAllowed;
+ CPPUNIT_ASSERT(!bIsSplitAllowed);
+
+ // When marking it as IsSplitAllowed=true:
+ xFrame->setPropertyValue("IsSplitAllowed", uno::Any(true));
+
+ // Then make sure that IsSplitAllowed is true when asking back:
+ xFrame->getPropertyValue("IsSplitAllowed") >>= bIsSplitAllowed;
+ CPPUNIT_ASSERT(bIsSplitAllowed);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreUnocoreTest, testConvertToTextFrame)
+{
+ // Given a document with 2 non-interesting frames, an inner frame and an outer frame:
+ createSwDoc("floattable-outer-nonsplit-inner.docx");
+
+ // When checking the anchor of the inner frame:
+ SwDoc* pDoc = getSwDoc();
+ const sw::FrameFormats<sw::SpzFrameFormat*>& rFrames = *pDoc->GetSpzFrameFormats();
+ sw::SpzFrameFormat* pFrame3 = rFrames.FindFrameFormatByName("Frame3");
+ SwNodeIndex aFrame3Anchor = pFrame3->GetAnchor().GetContentAnchor()->nNode;
+
+ // Then make sure it's anchored in the outer frame's last content node:
+ sw::SpzFrameFormat* pFrame4 = rFrames.FindFrameFormatByName("Frame4");
+ SwPaM aPaM(*pFrame4->GetContent().GetContentIdx()->GetNode().EndOfSectionNode());
+ aPaM.Move(fnMoveBackward, GoInContent);
+ // Without the accompanying fix in place, this test would have failed with:
+ // - Expected: SwNodeIndex (node 27)
+ // - Actual : SwNodeIndex (node 49)
+ // i.e. Frame3 was anchored much later, in the body text, not in Frame4.
+ CPPUNIT_ASSERT_EQUAL(aPaM.GetPoint()->nNode, aFrame3Anchor);
+}
+
+namespace
+{
+/// This selection listener calls XTextRange::getString() on a selection change, which triggered
+/// a new selection change event by accident, resulting infinite recursion and crash
+struct SelectionChangeListener : public cppu::WeakImplHelper<view::XSelectionChangeListener>
+{
+public:
+ SelectionChangeListener();
+ // view::XSelectionChangeListener
+ void SAL_CALL selectionChanged(const lang::EventObject& rEvent) override;
+
+ // lang::XEventListener
+ void SAL_CALL disposing(const lang::EventObject& rSource) override;
+};
+}
+
+SelectionChangeListener::SelectionChangeListener() {}
+
+void SelectionChangeListener::selectionChanged(const lang::EventObject& rEvent)
+{
+ uno::Reference<view::XSelectionSupplier> xSelectionSupplier(rEvent.Source, uno::UNO_QUERY);
+ css::uno::Reference<css::container::XIndexAccess> xSelection(xSelectionSupplier->getSelection(),
+ css::uno::UNO_QUERY_THROW);
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(1), xSelection->getCount());
+ css::uno::Reference<css::text::XTextRange> xTextRange(xSelection->getByIndex(0),
+ css::uno::UNO_QUERY_THROW);
+ CPPUNIT_ASSERT(xTextRange->getString().startsWith("test"));
+}
+
+void SelectionChangeListener::disposing(const lang::EventObject& /*rSource*/) {}
+
+CPPUNIT_TEST_FIXTURE(SwCoreUnocoreTest, testTdf155951)
+{
+ createSwDoc();
+ uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XText> xText = xTextDocument->getText();
+ uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
+ xText->insertString(xCursor, "test", /*bAbsorb=*/false);
+
+ uno::Reference<frame::XModel> xModel(mxComponent, uno::UNO_QUERY);
+ uno::Reference<view::XSelectionSupplier> xController(xModel->getCurrentController(),
+ uno::UNO_QUERY);
+ xController->addSelectionChangeListener(new SelectionChangeListener());
+
+ // This crashed here because of infinite recursion
+ dispatchCommand(mxComponent, ".uno:WordLeftSel", {});
+
+ // this needs to wait for dispatching (trigger also a second selection change)
+ xText->insertString(xCursor, "test", /*bAbsorb=*/false);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreUnocoreTest, testCollectFrameAtNodeWithLayout)
+{
+ // Given a document with a floating table on 2 pages, with a calculated layout:
+ createSwDoc("floattable-split.docx");
+ calcLayout();
+
+ // When saving to ODT:
+ save("writer8");
+
+ // Then make sure the output is valid and hasa 1 <draw:frame>:
+ // Without the accompanying fix in place, this test would have failed with:
+ // Error: uncompleted content model.
+ // i.e. the output was not valid, the second <draw:frame> has an empty <table:table> as a child
+ // element.
+ xmlDocUniquePtr pXmlDoc = parseExport("content.xml");
+ // Also make sure that we don't have multiple <draw:frame> elements in the first place.
+ assertXPath(pXmlDoc, "//draw:frame"_ostr, 1);
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreUnocoreTest, testTdf149555)
+{
+ createSwDoc("tdf149555.docx");
+
+ uno::Reference<frame::XModel> xModel(mxComponent, uno::UNO_QUERY);
+ uno::Reference<text::XTextViewCursorSupplier> xTextViewCursorSupplier(
+ xModel->getCurrentController(), uno::UNO_QUERY);
+ uno::Reference<text::XPageCursor> xCursor(xTextViewCursorSupplier->getViewCursor(),
+ uno::UNO_QUERY);
+
+ xCursor->jumpToFirstPage();
+ OUString sPageStyleName = getProperty<OUString>(xCursor, "PageStyleName");
+ uno::Reference<text::XText> xHeaderText = getProperty<uno::Reference<text::XText>>(
+ getStyles("PageStyles")->getByName(sPageStyleName), "HeaderText");
+ CPPUNIT_ASSERT_EQUAL(OUString("HEADER 1"), xHeaderText->getString());
+
+ // Without the fix in place, this test would have failed with
+ // - Expected: HEADER 2
+ // - Actual: HEADER 1
+ xCursor->jumpToPage(2);
+ sPageStyleName = getProperty<OUString>(xCursor, "PageStyleName");
+ xHeaderText = getProperty<uno::Reference<text::XText>>(
+ getStyles("PageStyles")->getByName(sPageStyleName), "HeaderText");
+ CPPUNIT_ASSERT_EQUAL(OUString("HEADER 2"), xHeaderText->getString());
+
+ xCursor->jumpToPage(3);
+ sPageStyleName = getProperty<OUString>(xCursor, "PageStyleName");
+ xHeaderText = getProperty<uno::Reference<text::XText>>(
+ getStyles("PageStyles")->getByName(sPageStyleName), "HeaderText");
+ CPPUNIT_ASSERT_EQUAL(OUString("HEADER 2"), xHeaderText->getString());
+
+ xCursor->jumpToPage(4);
+ sPageStyleName = getProperty<OUString>(xCursor, "PageStyleName");
+ xHeaderText = getProperty<uno::Reference<text::XText>>(
+ getStyles("PageStyles")->getByName(sPageStyleName), "HeaderText");
+ CPPUNIT_ASSERT_EQUAL(OUString("HEADER 2"), xHeaderText->getString());
+}
+
+// just care that it doesn't crash/assert
+CPPUNIT_TEST_FIXTURE(SwCoreUnocoreTest, testTdf108272Crash)
+{
+ createSwDoc("tdf108272-1-minimal.docx");
+}
+
+CPPUNIT_TEST_FIXTURE(SwCoreUnocoreTest, testWrapTextAtFlyStart)
+{
+ // Given a document with a fly frame:
+ createSwDoc();
+ SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
+ SwFlyFrameAttrMgr aMgr(true, pWrtShell, Frmmgr_Type::TEXT, nullptr);
+ RndStdIds eAnchor = RndStdIds::FLY_AT_PARA;
+ aMgr.InsertFlyFrame(eAnchor, aMgr.GetPos(), aMgr.GetSize());
+ uno::Reference<text::XTextFramesSupplier> xDocument(mxComponent, uno::UNO_QUERY);
+ uno::Reference<beans::XPropertySet> xFrame(xDocument->getTextFrames()->getByName("Frame1"),
+ uno::UNO_QUERY);
+ bool bWrapTextAtFlyStart{};
+ // Without the accompanying fix in place, this test would have failed with:
+ // An uncaught exception of type com.sun.star.beans.UnknownPropertyException
+ // - Unknown property: WrapTextAtFlyStart
+ // i.e. the property was missing.
+ xFrame->getPropertyValue("WrapTextAtFlyStart") >>= bWrapTextAtFlyStart;
+ CPPUNIT_ASSERT(!bWrapTextAtFlyStart);
+
+ // When marking it as WrapTextAtFlyStart=true:
+ xFrame->setPropertyValue("WrapTextAtFlyStart", uno::Any(true));
+
+ // Then make sure that WrapTextAtFlyStart is true when asking back:
+ xFrame->getPropertyValue("WrapTextAtFlyStart") >>= bWrapTextAtFlyStart;
+ CPPUNIT_ASSERT(bWrapTextAtFlyStart);
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/uwriter.cxx b/sw/qa/core/uwriter.cxx
new file mode 100644
index 0000000000..58308fce6c
--- /dev/null
+++ b/sw/qa/core/uwriter.cxx
@@ -0,0 +1,1933 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <sal/config.h>
+#include <test/bootstrapfixture.hxx>
+
+#include <com/sun/star/i18n/WordType.hpp>
+
+#include <comphelper/processfactory.hxx>
+#include <i18nutil/transliteration.hxx>
+#include <editeng/adjustitem.hxx>
+#include <editeng/boxitem.hxx>
+#include <editeng/brushitem.hxx>
+#include <editeng/colritem.hxx>
+#include <editeng/contouritem.hxx>
+#include <editeng/crossedoutitem.hxx>
+#include <editeng/fhgtitem.hxx>
+#include <editeng/fontitem.hxx>
+#include <editeng/justifyitem.hxx>
+#include <editeng/lineitem.hxx>
+#include <editeng/postitem.hxx>
+#include <editeng/shdditem.hxx>
+#include <editeng/udlnitem.hxx>
+#include <editeng/wghtitem.hxx>
+#include <svl/intitem.hxx>
+#include <svx/algitem.hxx>
+#include <svx/rotmodit.hxx>
+#include <tools/urlobj.hxx>
+#include <unotools/tempfile.hxx>
+#include <unotools/transliterationwrapper.hxx>
+
+#include <editeng/langitem.hxx>
+#include <editeng/charhiddenitem.hxx>
+
+#include <sfx2/docfilt.hxx>
+#include <sfx2/docfile.hxx>
+
+#include <xmloff/odffields.hxx>
+
+#include <breakit.hxx>
+#include <doc.hxx>
+#include <IDocumentRedlineAccess.hxx>
+#include <IDocumentFieldsAccess.hxx>
+#include <IDocumentStatistics.hxx>
+#include <cellfml.hxx>
+#include <docsh.hxx>
+#include <docstat.hxx>
+#include <docufld.hxx>
+#include <fmtanchr.hxx>
+#include <ndtxt.hxx>
+#include <shellres.hxx>
+#include <swscanner.hxx>
+#include <swdll.hxx>
+#include <swtypes.hxx>
+#include <fmtftn.hxx>
+#include <fmtrfmrk.hxx>
+#include <fmtinfmt.hxx>
+#include <fchrfmt.hxx>
+#include <fmtfld.hxx>
+#include <redline.hxx>
+#include <docary.hxx>
+#include <modeltoviewhelper.hxx>
+#include <IMark.hxx>
+#include <ring.hxx>
+#include <calbck.hxx>
+#include <pagedesc.hxx>
+#include <calc.hxx>
+
+#include <tblafmt.hxx>
+#include <unotbl.hxx>
+#include <IDocumentMarkAccess.hxx>
+#include <itabenum.hxx>
+
+typedef tools::SvRef<SwDocShell> SwDocShellRef;
+
+using namespace ::com::sun::star;
+
+/* Implementation of Swdoc-Test class */
+
+class SwDocTest : public test::BootstrapFixture
+{
+public:
+ SwDocTest()
+ : m_pDoc(nullptr)
+ {
+ }
+
+ virtual void setUp() override;
+ virtual void tearDown() override;
+
+ void testTableAutoFormats();
+ void testPageDescName();
+ void testFileNameFields();
+ void testDocStat();
+ void testModelToViewHelperPassthrough();
+ void testModelToViewHelperExpandFieldsExpandFootnote();
+ void testModelToViewHelperExpandFieldsExpandFootnoteReplaceMode();
+ void testModelToViewHelperExpandFields();
+ void testModelToViewHelperExpandFieldsReplaceMode();
+ void testModelToViewHelperExpandFieldsHideInvisible();
+ void testModelToViewHelperExpandFieldsHideRedlined();
+ void testModelToViewHelperExpandFieldsHideInvisibleExpandFootnote();
+ void testModelToViewHelperExpandFieldsHideInvisibleExpandFootnoteReplaceMode();
+ void testModelToViewHelperExpandFieldsHideHideRedlinedExpandFootnote();
+ void testModelToViewHelperExpandFieldsHideHideRedlinedExpandFootnoteReplaceMode();
+ void testModelToViewHelperHideInvisibleHideRedlined();
+ void testModelToViewHelperExpandFieldsHideInvisibleHideRedlinedExpandFootnote();
+ void testModelToViewHelperExpandFieldsHideInvisibleHideRedlinedExpandFootnoteReplaceMode();
+ void testModelToViewHelperExpandFieldsExpandFootnote2();
+ void testModelToViewHelperExpandFieldsExpandFootnoteReplaceMode2();
+ void testSwScanner();
+ void testUserPerceivedCharCount();
+ void testMergePortionsDeleteNotSorted();
+ void testGraphicAnchorDeletion();
+ void testTransliterate();
+ void testMarkMove();
+ void testFormulas();
+ void testIntrusiveRing();
+ void testClientModify();
+ void testBroadcastingModify();
+ void testWriterMultiListener();
+ void test64kPageDescs();
+ void testTdf92308();
+ void testTableCellComparison();
+
+ CPPUNIT_TEST_SUITE(SwDocTest);
+
+ CPPUNIT_TEST(testTransliterate);
+ CPPUNIT_TEST(testTableAutoFormats);
+ CPPUNIT_TEST(testPageDescName);
+ CPPUNIT_TEST(testFileNameFields);
+ CPPUNIT_TEST(testDocStat);
+ CPPUNIT_TEST(testModelToViewHelperPassthrough);
+ CPPUNIT_TEST(testModelToViewHelperExpandFieldsExpandFootnote);
+ CPPUNIT_TEST(testModelToViewHelperExpandFieldsExpandFootnoteReplaceMode);
+ CPPUNIT_TEST(testModelToViewHelperExpandFields);
+ CPPUNIT_TEST(testModelToViewHelperExpandFieldsReplaceMode);
+ CPPUNIT_TEST(testModelToViewHelperExpandFieldsHideInvisible);
+ CPPUNIT_TEST(testModelToViewHelperExpandFieldsHideRedlined);
+ CPPUNIT_TEST(testModelToViewHelperExpandFieldsHideInvisibleExpandFootnote);
+ CPPUNIT_TEST(testModelToViewHelperExpandFieldsHideInvisibleExpandFootnoteReplaceMode);
+ CPPUNIT_TEST(testModelToViewHelperExpandFieldsHideHideRedlinedExpandFootnote);
+ CPPUNIT_TEST(testModelToViewHelperExpandFieldsHideHideRedlinedExpandFootnoteReplaceMode);
+ CPPUNIT_TEST(testModelToViewHelperHideInvisibleHideRedlined);
+ CPPUNIT_TEST(testModelToViewHelperExpandFieldsHideInvisibleHideRedlinedExpandFootnote);
+ CPPUNIT_TEST(testModelToViewHelperExpandFieldsHideInvisibleHideRedlinedExpandFootnoteReplaceMode);
+ CPPUNIT_TEST(testModelToViewHelperExpandFieldsExpandFootnote2);
+ CPPUNIT_TEST(testModelToViewHelperExpandFieldsExpandFootnoteReplaceMode2);
+ CPPUNIT_TEST(testSwScanner);
+ CPPUNIT_TEST(testUserPerceivedCharCount);
+ CPPUNIT_TEST(testMergePortionsDeleteNotSorted);
+ CPPUNIT_TEST(testGraphicAnchorDeletion);
+ CPPUNIT_TEST(testMarkMove);
+ CPPUNIT_TEST(testFormulas);
+ CPPUNIT_TEST(testIntrusiveRing);
+ CPPUNIT_TEST(testClientModify);
+ CPPUNIT_TEST(testBroadcastingModify);
+ CPPUNIT_TEST(testWriterMultiListener);
+ CPPUNIT_TEST(test64kPageDescs);
+ CPPUNIT_TEST(testTdf92308);
+ CPPUNIT_TEST(testTableCellComparison);
+ CPPUNIT_TEST_SUITE_END();
+
+private:
+ SwDoc *m_pDoc;
+ SwDocShellRef m_xDocShRef;
+};
+
+void SwDocTest::testPageDescName()
+{
+ ShellResource aShellResources;
+
+ std::vector<OUString> aResults;
+
+ //These names must be unique for each different combination, otherwise
+ //duplicate page description names may exist, which will causes lookup
+ //by name to be incorrect, and so the corresponding export to .odt
+ aResults.push_back(aShellResources.GetPageDescName(1, ShellResource::NORMAL_PAGE));
+ aResults.push_back(aShellResources.GetPageDescName(1, ShellResource::FIRST_PAGE));
+ aResults.push_back(aShellResources.GetPageDescName(1, ShellResource::FOLLOW_PAGE));
+
+ std::sort(aResults.begin(), aResults.end());
+ aResults.erase(std::unique(aResults.begin(), aResults.end()), aResults.end());
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("GetPageDescName results must be unique", static_cast<size_t>(3), aResults.size());
+}
+
+//See https://bugs.libreoffice.org/show_bug.cgi?id=32463
+void SwDocTest::testFileNameFields()
+{
+ //Here's a file name with some chars in it that will be %% encoded, when expanding
+ //SwFileNameFields we want to restore the original readable filename
+ utl::TempFileNamed aTempFile(u"demo [name]");
+ aTempFile.EnableKillingFile();
+
+ INetURLObject aTempFileURL(aTempFile.GetURL());
+ OUString sFileURL = aTempFileURL.GetMainURL(INetURLObject::DecodeMechanism::NONE);
+ SfxMedium aDstMed(sFileURL, StreamMode::STD_READWRITE);
+
+ auto pFilter = std::make_shared<SfxFilter>(
+ "Text",
+ OUString(), SfxFilterFlags::NONE, SotClipboardFormatId::NONE, OUString(), OUString(),
+ "TEXT", OUString() );
+ aDstMed.SetFilter(pFilter);
+
+ m_xDocShRef->DoSaveAs(aDstMed);
+ m_xDocShRef->DoSaveCompleted(&aDstMed);
+
+ const INetURLObject &rUrlObj = m_xDocShRef->GetMedium()->GetURLObject();
+
+ SwFileNameFieldType aNameField(*m_pDoc);
+
+ {
+ OUString sResult(aNameField.Expand(FF_NAME));
+ OUString sExpected(rUrlObj.getName(INetURLObject::LAST_SEGMENT,
+ true,INetURLObject::DecodeMechanism::WithCharset));
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Expected Readable FileName", sExpected, sResult);
+ }
+
+ {
+ OUString sResult(aNameField.Expand(FF_PATHNAME));
+ OUString sExpected(rUrlObj.GetFull());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Expected Readable FileName", sExpected, sResult);
+ }
+
+ {
+ OUString sResult(aNameField.Expand(FF_PATH));
+ INetURLObject aTemp(rUrlObj);
+ aTemp.removeSegment();
+ OUString sExpected(aTemp.PathToFileName());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Expected Readable FileName", sExpected, sResult);
+ }
+
+ {
+ OUString sResult(aNameField.Expand(FF_NAME_NOEXT));
+ OUString sExpected(rUrlObj.getName(INetURLObject::LAST_SEGMENT,
+ true,INetURLObject::DecodeMechanism::WithCharset));
+ //Chop off .tmp
+ sExpected = sExpected.copy(0, sExpected.getLength() - 4);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Expected Readable FileName", sExpected, sResult);
+ }
+
+ m_xDocShRef->DoInitNew();
+}
+
+//See http://lists.freedesktop.org/archives/libreoffice/2011-August/016666.html
+//Remove unnecessary parameter to IDocumentStatistics::UpdateDocStat for
+//motivation
+void SwDocTest::testDocStat()
+{
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Expected initial 0 count", static_cast<sal_uLong>(0), m_pDoc->getIDocumentStatistics().GetDocStat().nChar);
+
+ SwNodeIndex aIdx(m_pDoc->GetNodes().GetEndOfContent(), -1);
+ SwPaM aPaM(aIdx);
+
+ OUString sText("Hello World");
+ m_pDoc->getIDocumentContentOperations().InsertString(aPaM, sText);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Should still be non-updated 0 count", static_cast<sal_uLong>(0), m_pDoc->getIDocumentStatistics().GetDocStat().nChar);
+
+ SwDocStat aDocStat = m_pDoc->getIDocumentStatistics().GetUpdatedDocStat( false, true );
+ sal_uLong nLen = static_cast<sal_uLong>(sText.getLength());
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Should now have updated count", nLen, aDocStat.nChar);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("And cache is updated too", nLen, m_pDoc->getIDocumentStatistics().GetDocStat().nChar);
+}
+
+//For UI character counts we should follow UAX#29 and display the user
+//perceived characters, not the number of codepoints, nor the number of code
+//units http://unicode.org/reports/tr29/
+void SwDocTest::testUserPerceivedCharCount()
+{
+ SwBreakIt *pBreakIter = SwBreakIt::Get();
+
+ //Grapheme example, two different unicode code-points perceived by the user as a single
+ //glyph
+ static constexpr OUStringLiteral sALEF_QAMATS = u"\u05D0\u05B8";
+ sal_Int32 nGraphemeCount = pBreakIter->getGraphemeCount(sALEF_QAMATS);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Grapheme Count should be 1", static_cast<sal_Int32>(1), nGraphemeCount);
+
+ //Surrogate pair example, one single unicode code-point (U+1D11E)
+ //represented as two code units in UTF-16
+ static constexpr OUStringLiteral sGCLEF = u"\U0001D11E";
+ sal_Int32 nCount = pBreakIter->getGraphemeCount(sGCLEF);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Surrogate Pair should be counted as single character", static_cast<sal_Int32>(1), nCount);
+}
+
+static SwTextNode* getModelToViewTestDocument(SwDoc *pDoc)
+{
+ SwNodeIndex aIdx(pDoc->GetNodes().GetEndOfContent(), -1);
+ SwPaM aPaM(aIdx);
+
+ SwFormatFootnote aFootnote;
+ aFootnote.SetNumStr("foo");
+
+ pDoc->getIDocumentContentOperations().AppendTextNode(*aPaM.GetPoint());
+ pDoc->getIDocumentContentOperations().InsertString(aPaM, "AAAAA BBBBB ");
+ SwTextNode* pTextNode = aPaM.GetPointNode().GetTextNode();
+ sal_Int32 nPos = aPaM.GetPoint()->GetContentIndex();
+ pTextNode->InsertItem(aFootnote, nPos, nPos);
+ pDoc->getIDocumentContentOperations().InsertString(aPaM, " CCCCC ");
+ nPos = aPaM.GetPoint()->GetContentIndex();
+ pTextNode->InsertItem(aFootnote, nPos, nPos);
+ pDoc->getIDocumentContentOperations().InsertString(aPaM, " DDDDD");
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>((4*5) + 5 + 2), pTextNode->GetText().getLength());
+
+ //set start of selection to first B
+ aPaM.GetPoint()->nContent.Assign(aPaM.GetPointContentNode(), 6);
+ aPaM.SetMark();
+ //set end of selection to last C
+ aPaM.GetPoint()->nContent.Assign(aPaM.GetPointContentNode(), 14);
+ //set character attribute hidden on range
+ SvxCharHiddenItem aHidden(true, RES_CHRATR_HIDDEN);
+ pDoc->getIDocumentContentOperations().InsertPoolItem(aPaM, aHidden );
+ aPaM.DeleteMark();
+
+ //turn on red-lining and show changes
+ pDoc->getIDocumentRedlineAccess().SetRedlineFlags(RedlineFlags::On | RedlineFlags::ShowDelete|RedlineFlags::ShowInsert);
+ CPPUNIT_ASSERT_MESSAGE("redlining should be on", pDoc->getIDocumentRedlineAccess().IsRedlineOn());
+ CPPUNIT_ASSERT_MESSAGE("redlines should be visible", IDocumentRedlineAccess::IsShowChanges(pDoc->getIDocumentRedlineAccess().GetRedlineFlags()));
+
+ //set start of selection to last A
+ aPaM.GetPoint()->nContent.Assign(aPaM.GetPointContentNode(), 4);
+ aPaM.SetMark();
+ //set end of selection to second last B
+ aPaM.GetPoint()->nContent.Assign(aPaM.GetPointContentNode(), 9);
+ pDoc->getIDocumentContentOperations().DeleteAndJoin(aPaM); //redline-aware deletion api
+ aPaM.DeleteMark();
+
+ return pTextNode;
+}
+
+static SwTextNode* getModelToViewTestDocument2(SwDoc *pDoc)
+{
+ getModelToViewTestDocument(pDoc);
+
+ SwNodeIndex aIdx(pDoc->GetNodes().GetEndOfContent(), -1);
+ SwPaM aPaM(aIdx);
+
+ pDoc->getIDocumentContentOperations().AppendTextNode(*aPaM.GetPoint());
+ pDoc->getIDocumentContentOperations().InsertString(aPaM, "AAAAA");
+ IDocumentMarkAccess* pMarksAccess = pDoc->getIDocumentMarkAccess();
+ sw::mark::IFieldmark *pFieldmark =
+ pMarksAccess->makeNoTextFieldBookmark(aPaM, "test", ODF_FORMDROPDOWN);
+ CPPUNIT_ASSERT(pFieldmark);
+ uno::Sequence< OUString > vListEntries { "BBBBB" };
+ (*pFieldmark->GetParameters())[ODF_FORMDROPDOWN_LISTENTRY] <<= vListEntries;
+ (*pFieldmark->GetParameters())[ODF_FORMDROPDOWN_RESULT] <<= sal_Int32(0);
+ pDoc->getIDocumentContentOperations().InsertString(aPaM, "CCCCC");
+ SwTextNode* pTextNode = aPaM.GetPointNode().GetTextNode();
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(11),
+ pTextNode->GetText().getLength());
+
+ return pTextNode;
+}
+
+void SwDocTest::testModelToViewHelperPassthrough()
+{
+ SwTextNode* pTextNode = getModelToViewTestDocument(m_pDoc);
+
+ ModelToViewHelper aModelToViewHelper(*pTextNode, nullptr, ExpandMode::PassThrough);
+ OUString sViewText = aModelToViewHelper.getViewText();
+ OUString sModelText = pTextNode->GetText();
+ CPPUNIT_ASSERT_EQUAL(sModelText, sViewText);
+}
+
+void SwDocTest::testModelToViewHelperExpandFieldsExpandFootnote()
+{
+ SwTextNode* pTextNode = getModelToViewTestDocument(m_pDoc);
+
+ ModelToViewHelper aModelToViewHelper(*pTextNode, nullptr,
+ ExpandMode::ExpandFields | ExpandMode::ExpandFootnote);
+ OUString sViewText = aModelToViewHelper.getViewText();
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("AAAAA BBBBB foo CCCCC foo DDDDD"), sViewText);
+}
+
+void SwDocTest::testModelToViewHelperExpandFieldsExpandFootnoteReplaceMode()
+{
+ SwTextNode* pTextNode = getModelToViewTestDocument(m_pDoc);
+
+ ModelToViewHelper aModelToViewHelper(*pTextNode, nullptr,
+ ExpandMode::ExpandFields | ExpandMode::ExpandFootnote | ExpandMode::ReplaceMode);
+ OUString sViewText = aModelToViewHelper.getViewText();
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("AAAAA BBBBB " + OUStringChar(CHAR_ZWSP) + " CCCCC " + OUStringChar(CHAR_ZWSP) + " DDDDD"),
+ sViewText);
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2),
+ aModelToViewHelper.getFootnotePositions().size());
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(12),
+ aModelToViewHelper.getFootnotePositions()[0]);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(20),
+ aModelToViewHelper.getFootnotePositions()[1]);
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(0),
+ aModelToViewHelper.getFieldPositions().size());
+}
+
+void SwDocTest::testModelToViewHelperExpandFields()
+{
+ SwTextNode* pTextNode = getModelToViewTestDocument(m_pDoc);
+
+ ModelToViewHelper aModelToViewHelper(*pTextNode, nullptr, ExpandMode::ExpandFields);
+ OUString sViewText = aModelToViewHelper.getViewText();
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("AAAAA BBBBB CCCCC DDDDD"), sViewText);
+}
+
+void SwDocTest::testModelToViewHelperExpandFieldsReplaceMode()
+{
+ SwTextNode* pTextNode = getModelToViewTestDocument(m_pDoc);
+
+ ModelToViewHelper aModelToViewHelper(*pTextNode, nullptr,
+ ExpandMode::ExpandFields | ExpandMode::ReplaceMode);
+ OUString sViewText = aModelToViewHelper.getViewText();
+ CPPUNIT_ASSERT_EQUAL(OUString("AAAAA BBBBB CCCCC DDDDD"),
+ sViewText);
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(0),
+ aModelToViewHelper.getFootnotePositions().size());
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(0),
+ aModelToViewHelper.getFieldPositions().size());
+}
+
+void SwDocTest::testModelToViewHelperExpandFieldsHideInvisible()
+{
+ SwTextNode* pTextNode = getModelToViewTestDocument(m_pDoc);
+
+ ModelToViewHelper aModelToViewHelper(*pTextNode, nullptr, ExpandMode::HideInvisible);
+ OUString sViewText = aModelToViewHelper.getViewText();
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("AAAAA CCCCC " + OUStringChar(CH_TXTATR_BREAKWORD) + " DDDDD"),
+ sViewText);
+}
+
+void SwDocTest::testModelToViewHelperExpandFieldsHideRedlined()
+{
+ SwTextNode* pTextNode = getModelToViewTestDocument(m_pDoc);
+
+ ModelToViewHelper aModelToViewHelper(*pTextNode, nullptr, ExpandMode::HideDeletions);
+ OUString sViewText = aModelToViewHelper.getViewText();
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("AAAABB " + OUStringChar(CH_TXTATR_BREAKWORD) + " CCCCC " + OUStringChar(CH_TXTATR_BREAKWORD) + " DDDDD"),
+ sViewText);
+}
+
+void SwDocTest::testModelToViewHelperExpandFieldsHideInvisibleExpandFootnote()
+{
+ SwTextNode* pTextNode = getModelToViewTestDocument(m_pDoc);
+
+ ModelToViewHelper aModelToViewHelper(*pTextNode, nullptr,
+ ExpandMode::ExpandFields | ExpandMode::HideInvisible | ExpandMode::ExpandFootnote);
+ OUString sViewText = aModelToViewHelper.getViewText();
+ CPPUNIT_ASSERT_EQUAL(OUString("AAAAA CCCCC foo DDDDD"), sViewText);
+}
+
+void SwDocTest::testModelToViewHelperExpandFieldsHideInvisibleExpandFootnoteReplaceMode()
+{
+ SwTextNode* pTextNode = getModelToViewTestDocument(m_pDoc);
+
+ ModelToViewHelper aModelToViewHelper(*pTextNode, nullptr,
+ ExpandMode::ExpandFields | ExpandMode::HideInvisible | ExpandMode::ExpandFootnote | ExpandMode::ReplaceMode);
+ OUString sViewText = aModelToViewHelper.getViewText();
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("AAAAA CCCCC " + OUStringChar(CHAR_ZWSP) + " DDDDD"),
+ sViewText);
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1),
+ aModelToViewHelper.getFootnotePositions().size());
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(12),
+ aModelToViewHelper.getFootnotePositions()[0]);
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(0),
+ aModelToViewHelper.getFieldPositions().size());
+}
+
+void SwDocTest::testModelToViewHelperExpandFieldsHideHideRedlinedExpandFootnote()
+{
+ SwTextNode* pTextNode = getModelToViewTestDocument(m_pDoc);
+
+ ModelToViewHelper aModelToViewHelper(*pTextNode, nullptr,
+ ExpandMode::ExpandFields | ExpandMode::HideDeletions | ExpandMode::ExpandFootnote);
+ OUString sViewText = aModelToViewHelper.getViewText();
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("AAAABB foo CCCCC foo DDDDD"), sViewText);
+}
+
+void SwDocTest::testModelToViewHelperExpandFieldsHideHideRedlinedExpandFootnoteReplaceMode()
+{
+ SwTextNode* pTextNode = getModelToViewTestDocument(m_pDoc);
+
+ ModelToViewHelper aModelToViewHelper(*pTextNode, nullptr,
+ ExpandMode::ExpandFields | ExpandMode::HideDeletions | ExpandMode::ExpandFootnote | ExpandMode::ReplaceMode);
+ OUString sViewText = aModelToViewHelper.getViewText();
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("AAAABB " + OUStringChar(CHAR_ZWSP) + " CCCCC " + OUStringChar(CHAR_ZWSP) + " DDDDD"),
+ sViewText);
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2),
+ aModelToViewHelper.getFootnotePositions().size());
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(7),
+ aModelToViewHelper.getFootnotePositions()[0]);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(15),
+ aModelToViewHelper.getFootnotePositions()[1]);
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(0),
+ aModelToViewHelper.getFieldPositions().size());
+}
+
+void SwDocTest::testModelToViewHelperHideInvisibleHideRedlined()
+{
+ SwTextNode* pTextNode = getModelToViewTestDocument(m_pDoc);
+
+ ModelToViewHelper aModelToViewHelper(*pTextNode, nullptr,
+ ExpandMode::HideInvisible | ExpandMode::HideDeletions);
+ OUString sViewText = aModelToViewHelper.getViewText();
+ OUString aBuffer = "AAAACCCCC " +
+ OUStringChar(CH_TXTATR_BREAKWORD) +
+ " DDDDD";
+ CPPUNIT_ASSERT_EQUAL(aBuffer, sViewText);
+}
+
+void SwDocTest::testModelToViewHelperExpandFieldsHideInvisibleHideRedlinedExpandFootnote()
+{
+ SwTextNode* pTextNode = getModelToViewTestDocument(m_pDoc);
+
+ ModelToViewHelper aModelToViewHelper(*pTextNode, nullptr,
+ ExpandMode::ExpandFields | ExpandMode::HideInvisible | ExpandMode::HideDeletions | ExpandMode::ExpandFootnote);
+ OUString sViewText = aModelToViewHelper.getViewText();
+ CPPUNIT_ASSERT_EQUAL(OUString("AAAACCCCC foo DDDDD"), sViewText);
+}
+
+void SwDocTest::testModelToViewHelperExpandFieldsHideInvisibleHideRedlinedExpandFootnoteReplaceMode()
+{
+ SwTextNode* pTextNode = getModelToViewTestDocument(m_pDoc);
+
+ ModelToViewHelper aModelToViewHelper(*pTextNode, nullptr,
+ ExpandMode::ExpandFields | ExpandMode::HideInvisible | ExpandMode::HideDeletions | ExpandMode::ExpandFootnote | ExpandMode::ReplaceMode);
+ OUString sViewText = aModelToViewHelper.getViewText();
+ CPPUNIT_ASSERT_EQUAL(sViewText,
+ OUString("AAAACCCCC " + OUStringChar(CHAR_ZWSP) + " DDDDD"));
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1),
+ aModelToViewHelper.getFootnotePositions().size());
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(10),
+ aModelToViewHelper.getFootnotePositions()[0]);
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(0),
+ aModelToViewHelper.getFieldPositions().size());
+}
+
+void SwDocTest::testModelToViewHelperExpandFieldsExpandFootnote2()
+{
+ SwTextNode* pTextNode = getModelToViewTestDocument2(m_pDoc);
+
+ ModelToViewHelper aModelToViewHelper(*pTextNode, nullptr,
+ ExpandMode::ExpandFields | ExpandMode::ExpandFootnote);
+ OUString sViewText = aModelToViewHelper.getViewText();
+ CPPUNIT_ASSERT_EQUAL(OUString("AAAAABBBBBCCCCC"), sViewText);
+}
+
+void SwDocTest::testModelToViewHelperExpandFieldsExpandFootnoteReplaceMode2()
+{
+ SwTextNode* pTextNode = getModelToViewTestDocument2(m_pDoc);
+
+ ModelToViewHelper aModelToViewHelper(*pTextNode, nullptr,
+ ExpandMode::ExpandFields | ExpandMode::ExpandFootnote | ExpandMode::ReplaceMode);
+ OUString sViewText = aModelToViewHelper.getViewText();
+ CPPUNIT_ASSERT_EQUAL(
+ OUString("AAAAA" + OUStringChar(CHAR_ZWSP) + "CCCCC"),
+ sViewText);
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(0),
+ aModelToViewHelper.getFootnotePositions().size());
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1),
+ aModelToViewHelper.getFieldPositions().size());
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(5),
+ aModelToViewHelper.getFieldPositions()[0]);
+}
+
+void SwDocTest::testSwScanner()
+{
+ SwNodeIndex aIdx(m_pDoc->GetNodes().GetEndOfContent(), -1);
+ SwPaM aPaM(aIdx);
+
+ SwTextNode* pTextNode = aPaM.GetPointNode().GetTextNode();
+
+ CPPUNIT_ASSERT_MESSAGE("Has Text Node", pTextNode);
+
+ //See https://bugs.libreoffice.org/show_bug.cgi?id=40449
+ //See https://bugs.libreoffice.org/show_bug.cgi?id=39365
+ //Use a temporary OUString as the arg, as that's the trouble behind
+ //fdo#40449 and fdo#39365
+ {
+ SwScanner aScanner(*pTextNode,
+ "Hello World",
+ nullptr, ModelToViewHelper(), i18n::WordType::DICTIONARY_WORD, 0,
+ RTL_CONSTASCII_LENGTH("Hello World"));
+
+ bool bFirstOk = aScanner.NextWord();
+ CPPUNIT_ASSERT_MESSAGE("First Token", bFirstOk);
+ const OUString &rHello = aScanner.GetWord();
+ CPPUNIT_ASSERT_EQUAL(OUString("Hello"), rHello);
+
+ bool bSecondOk = aScanner.NextWord();
+ CPPUNIT_ASSERT_MESSAGE("Second Token", bSecondOk);
+ const OUString &rWorld = aScanner.GetWord();
+ CPPUNIT_ASSERT_EQUAL(OUString("World"), rWorld);
+ }
+
+ //See https://www.libreoffice.org/bugzilla/show_bug.cgi?id=45271
+ {
+ static constexpr OUString IDEOGRAPHICFULLSTOP_D = u"\u3002D"_ustr;
+
+ m_pDoc->getIDocumentContentOperations().InsertString(aPaM, IDEOGRAPHICFULLSTOP_D);
+
+ SvxLanguageItem aCJKLangItem( LANGUAGE_CHINESE_SIMPLIFIED, RES_CHRATR_CJK_LANGUAGE );
+ SvxLanguageItem aWestLangItem( LANGUAGE_ENGLISH_US, RES_CHRATR_LANGUAGE );
+ m_pDoc->getIDocumentContentOperations().InsertPoolItem(aPaM, aCJKLangItem );
+ m_pDoc->getIDocumentContentOperations().InsertPoolItem(aPaM, aWestLangItem );
+
+ SwDocStat aDocStat;
+ pTextNode = aPaM.GetPointNode().GetTextNode();
+ pTextNode->CountWords(aDocStat, 0, IDEOGRAPHICFULLSTOP_D.getLength());
+
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uLong>(2), aDocStat.nChar);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uLong>(2), aDocStat.nCharExcludingSpaces);
+ }
+ {
+ static constexpr OUString test =
+ u"\u3053\u306E\u65E5\u672C\u8A9E\u306F\u6B63\u3057"
+ "\u304F\u6570\u3048\u3089\u308C\u308B\u3067\u3057"
+ "\u3087\u3046\u304B\u3002And "
+ "let's th"
+ "row some"
+ " English"
+ " in to m"
+ "ake it i"
+ "nteresti"
+ "ng. \u305D\u3057\u3066"
+ "\u3001\u307E\u305F\u65E5\u672C\u8A9E\u3000\u3000"
+ "\u3067\u3082\u4ECA\u56DE\u306F\u7A7A\u767D\u3092"
+ "\u3000\u3000\u5165\u308C\u307E\u3057\u305F\u3002"
+ " So how"
+ " does th"
+ "is do? "_ustr;
+ m_pDoc->getIDocumentContentOperations().AppendTextNode(*aPaM.GetPoint());
+ m_pDoc->getIDocumentContentOperations().InsertString(aPaM, test);
+
+ SvxLanguageItem aCJKLangItem( LANGUAGE_JAPANESE, RES_CHRATR_CJK_LANGUAGE );
+ SvxLanguageItem aWestLangItem( LANGUAGE_ENGLISH_US, RES_CHRATR_LANGUAGE );
+ m_pDoc->getIDocumentContentOperations().InsertPoolItem(aPaM, aCJKLangItem );
+ m_pDoc->getIDocumentContentOperations().InsertPoolItem(aPaM, aWestLangItem );
+
+ SwDocStat aDocStat;
+ pTextNode = aPaM.GetPointNode().GetTextNode();
+ pTextNode->CountWords(aDocStat, 0, test.getLength());
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("words", static_cast<sal_uLong>(58), aDocStat.nWord);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Asian characters and Korean syllables", static_cast<sal_uLong>(43), aDocStat.nAsianWord);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("non-whitespace chars", static_cast<sal_uLong>(105), aDocStat.nCharExcludingSpaces);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("characters", static_cast<sal_uLong>(128), aDocStat.nChar);
+ }
+
+ //See https://bz.apache.org/ooo/show_bug.cgi?id=89042
+ //See https://bugs.libreoffice.org/show_bug.cgi?id=53399
+ {
+ SwDocStat aDocStat;
+
+ static constexpr OUString aShouldBeThree =
+ u"Should "
+ "\u2018be thr"
+ "ee\u2019"_ustr;
+
+ m_pDoc->getIDocumentContentOperations().AppendTextNode(*aPaM.GetPoint());
+ m_pDoc->getIDocumentContentOperations().InsertString(aPaM, aShouldBeThree);
+ pTextNode = aPaM.GetPointNode().GetTextNode();
+ pTextNode->CountWords(aDocStat, 0, aShouldBeThree.getLength());
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uLong>(3), aDocStat.nWord);
+
+ static constexpr OUString aShouldBeFive =
+ u"french "
+ // << nbsp
+ "\u00AB\u00A0savoi"
+ // nnbsp
+ "r\u202fcalcu"
+ // idspace >>
+ "ler\u3000\u00BB"_ustr;
+
+ m_pDoc->getIDocumentContentOperations().AppendTextNode(*aPaM.GetPoint());
+ m_pDoc->getIDocumentContentOperations().InsertString(aPaM, aShouldBeFive);
+ pTextNode = aPaM.GetPointNode().GetTextNode();
+ aDocStat.Reset();
+ pTextNode->CountWords(aDocStat, 0, aShouldBeFive.getLength());
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uLong>(5), aDocStat.nWord);
+ }
+
+ //See https://bugs.libreoffice.org/show_bug.cgi?id=49629
+ {
+ SwDocStat aDocStat;
+
+ m_pDoc->getIDocumentContentOperations().AppendTextNode(*aPaM.GetPoint());
+ m_pDoc->getIDocumentContentOperations().InsertString(aPaM, "Apple");
+ pTextNode = aPaM.GetPointNode().GetTextNode();
+ sal_Int32 nPos = aPaM.GetPoint()->GetContentIndex();
+ SwFormatFootnote aFootnote;
+ aFootnote.SetNumStr("banana");
+ SwTextAttr* pTA = pTextNode->InsertItem(aFootnote, nPos, nPos);
+ CPPUNIT_ASSERT(pTA);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(6), pTextNode->Len()); //Apple + 0x02
+ pTextNode->CountWords(aDocStat, 0, pTextNode->Len());
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uLong>(1), aDocStat.nWord);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("footnote should be expanded", static_cast<sal_uLong>(11), aDocStat.nChar);
+
+ const sal_Int32 nNextPos = aPaM.GetPoint()->GetContentIndex();
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(nPos+1), nNextPos);
+ SwFormatRefMark aRef("refmark");
+ pTA = pTextNode->InsertItem(aRef, nNextPos, nNextPos);
+ CPPUNIT_ASSERT(pTA);
+
+ aDocStat.Reset();
+ pTextNode->SetWordCountDirty(true);
+ pTextNode->CountWords(aDocStat, 0, pTextNode->Len());
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uLong>(1), aDocStat.nWord);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("refmark anchor should not be counted", static_cast<sal_uLong>(11), aDocStat.nChar);
+
+ m_pDoc->getIDocumentContentOperations().AppendTextNode(*aPaM.GetPoint());
+ m_pDoc->getIDocumentContentOperations().InsertString(aPaM, "Apple");
+
+ DateTime aDate(DateTime::SYSTEM);
+ SwPostItField aPostIt(
+ static_cast<SwPostItFieldType*>(m_pDoc->getIDocumentFieldsAccess().GetSysFieldType(SwFieldIds::Postit)), "An Author",
+ "Some Text", "Initials", "Name", aDate );
+ m_pDoc->getIDocumentContentOperations().InsertPoolItem(aPaM, SwFormatField(aPostIt));
+
+ m_pDoc->getIDocumentContentOperations().InsertString(aPaM, "Apple");
+ pTextNode = aPaM.GetPointNode().GetTextNode();
+ aDocStat.Reset();
+ pTextNode->CountWords(aDocStat, 0, pTextNode->Len());
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uLong>(1), aDocStat.nWord);
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("postit anchor should effectively not exist", static_cast<sal_uLong>(10), aDocStat.nChar);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_Int32>(11), pTextNode->Len());
+
+ aDocStat.Reset();
+ }
+
+ //See https://bugs.libreoffice.org/show_bug.cgi?id=46757
+ {
+ SwDocStat aDocStat;
+
+ static constexpr OUString aString = u"Lorem ipsum"_ustr;
+ m_pDoc->getIDocumentContentOperations().AppendTextNode(*aPaM.GetPoint());
+ m_pDoc->getIDocumentContentOperations().InsertString(aPaM, aString);
+ pTextNode = aPaM.GetPointNode().GetTextNode();
+ pTextNode->CountWords(aDocStat, 0, pTextNode->Len());
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uLong>(2), aDocStat.nWord);
+
+ //turn on red-lining and show changes
+ m_pDoc->getIDocumentRedlineAccess().SetRedlineFlags(RedlineFlags::On | RedlineFlags::ShowDelete|RedlineFlags::ShowInsert);
+ CPPUNIT_ASSERT_MESSAGE("redlining should be on", m_pDoc->getIDocumentRedlineAccess().IsRedlineOn());
+ CPPUNIT_ASSERT_MESSAGE("redlines should be visible", IDocumentRedlineAccess::IsShowChanges(m_pDoc->getIDocumentRedlineAccess().GetRedlineFlags()));
+
+ //delete everything except the first word
+ aPaM.SetMark(); //set start of selection to current pos
+ aPaM.GetPoint()->nContent.Assign(aPaM.GetPointContentNode(), 5); //set end of selection to fifth char of current node
+ m_pDoc->getIDocumentContentOperations().DeleteAndJoin(aPaM); //redline-aware deletion api
+ //"real underlying text should be the same"
+ CPPUNIT_ASSERT_EQUAL(aString, pTextNode->GetText());
+
+ aDocStat.Reset();
+ pTextNode->SetWordCountDirty(true);
+ pTextNode->CountWords(aDocStat, 0, pTextNode->Len()); //but word-counting the text should only count the non-deleted text
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uLong>(1), aDocStat.nWord);
+
+ pTextNode->SetWordCountDirty(true);
+
+ //keep red-lining on but hide changes
+ m_pDoc->getIDocumentRedlineAccess().SetRedlineFlags(RedlineFlags::On);
+ CPPUNIT_ASSERT_MESSAGE("redlining should be still on", m_pDoc->getIDocumentRedlineAccess().IsRedlineOn());
+ CPPUNIT_ASSERT_MESSAGE("redlines should be invisible", !IDocumentRedlineAccess::IsShowChanges(m_pDoc->getIDocumentRedlineAccess().GetRedlineFlags()));
+
+ aDocStat.Reset();
+ pTextNode->CountWords(aDocStat, 0, pTextNode->Len()); //but word-counting the text should only count the non-deleted text
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uLong>(1), aDocStat.nWord);
+
+ OUString sLorem = pTextNode->GetText();
+ CPPUNIT_ASSERT_EQUAL(OUString("Lorem"), sLorem);
+
+ const SwRedlineTable& rTable = m_pDoc->getIDocumentRedlineAccess().GetRedlineTable();
+
+ SwNodes& rNds = m_pDoc->GetNodes();
+ CPPUNIT_ASSERT_EQUAL(static_cast<SwRedlineTable::size_type>(1), rTable.size());
+
+ const SwNodeIndex* pNodeIdx = rTable[0]->GetContentIdx();
+ CPPUNIT_ASSERT(pNodeIdx);
+
+ pTextNode = rNds[ pNodeIdx->GetIndex() + 1 ]->GetTextNode(); //first deleted txtnode
+ CPPUNIT_ASSERT(pTextNode);
+
+ OUString sIpsum = pTextNode->GetText();
+ CPPUNIT_ASSERT_EQUAL(OUString(" ipsum"), sIpsum);
+
+ aDocStat.Reset();
+ pTextNode->CountWords(aDocStat, 0, pTextNode->Len()); //word-counting the text should only count the non-deleted text, and this whole chunk should be ignored
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uLong>(0), aDocStat.nWord);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uLong>(0), aDocStat.nChar);
+
+ // https://bugs.libreoffice.org/show_bug.cgi?id=68347 we do want to count
+ // redline *added* text though
+ m_pDoc->getIDocumentRedlineAccess().SetRedlineFlags(RedlineFlags::On | RedlineFlags::ShowDelete|RedlineFlags::ShowInsert);
+ aPaM.DeleteMark();
+ aPaM.GetPoint()->nContent.Assign(aPaM.GetPointContentNode(), 0);
+ m_pDoc->getIDocumentContentOperations().InsertString(aPaM, "redline-new-text ");
+ aDocStat.Reset();
+ pTextNode = aPaM.GetPointNode().GetTextNode();
+ pTextNode->SetWordCountDirty(true);
+ pTextNode->CountWords(aDocStat, 0, pTextNode->Len());
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uLong>(2), aDocStat.nWord);
+ //redline-new-text Lorem ipsum
+ //+++++++++++++++++ ------
+ //select start of original text and part of deleted text
+ aDocStat.Reset();
+ pTextNode->CountWords(aDocStat, 17, 25);
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uLong>(5), aDocStat.nChar);
+ }
+
+ //See https://bugs.libreoffice.org/show_bug.cgi?id=38983
+ {
+ SwDocStat aDocStat;
+
+ OUString sTemplate("ThisXis a test.");
+
+ m_pDoc->getIDocumentContentOperations().AppendTextNode(*aPaM.GetPoint());
+ m_pDoc->getIDocumentContentOperations().InsertString(aPaM, sTemplate.replace('X', ' '));
+ pTextNode = aPaM.GetPointNode().GetTextNode();
+ pTextNode->CountWords(aDocStat, 0, pTextNode->Len());
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(4), aDocStat.nWord);
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(12), aDocStat.nCharExcludingSpaces);
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(15), aDocStat.nChar);
+ aDocStat.Reset();
+
+ m_pDoc->getIDocumentContentOperations().AppendTextNode(*aPaM.GetPoint());
+ m_pDoc->getIDocumentContentOperations().InsertString(aPaM, sTemplate.replaceAll("X", " = "));
+ pTextNode = aPaM.GetPointNode().GetTextNode();
+ pTextNode->CountWords(aDocStat, 0, pTextNode->Len());
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(5), aDocStat.nWord);
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(13), aDocStat.nCharExcludingSpaces);
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(17), aDocStat.nChar);
+ aDocStat.Reset();
+
+ m_pDoc->getIDocumentContentOperations().AppendTextNode(*aPaM.GetPoint());
+ m_pDoc->getIDocumentContentOperations().InsertString(aPaM, sTemplate.replaceAll("X", " _ "));
+ pTextNode = aPaM.GetPointNode().GetTextNode();
+ pTextNode->CountWords(aDocStat, 0, pTextNode->Len());
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(5), aDocStat.nWord);
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(13), aDocStat.nCharExcludingSpaces);
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(17), aDocStat.nChar);
+ aDocStat.Reset();
+
+ m_pDoc->getIDocumentContentOperations().AppendTextNode(*aPaM.GetPoint());
+ m_pDoc->getIDocumentContentOperations().InsertString(aPaM, sTemplate.replaceAll("X", " -- "));
+ pTextNode = aPaM.GetPointNode().GetTextNode();
+ pTextNode->CountWords(aDocStat, 0, pTextNode->Len());
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(5), aDocStat.nWord);
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(14), aDocStat.nCharExcludingSpaces);
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(18), aDocStat.nChar);
+ aDocStat.Reset();
+
+ m_pDoc->getIDocumentContentOperations().AppendTextNode(*aPaM.GetPoint());
+ m_pDoc->getIDocumentContentOperations().InsertString(aPaM, sTemplate.replace('X', '_'));
+ pTextNode = aPaM.GetPointNode().GetTextNode();
+ pTextNode->CountWords(aDocStat, 0, pTextNode->Len());
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(3), aDocStat.nWord);
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(13), aDocStat.nCharExcludingSpaces);
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(15), aDocStat.nChar);
+ aDocStat.Reset();
+
+ m_pDoc->getIDocumentContentOperations().AppendTextNode(*aPaM.GetPoint());
+ m_pDoc->getIDocumentContentOperations().InsertString(aPaM, sTemplate.replace('X', '-'));
+ pTextNode = aPaM.GetPointNode().GetTextNode();
+ pTextNode->CountWords(aDocStat, 0, pTextNode->Len());
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(3), aDocStat.nWord);
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(13), aDocStat.nCharExcludingSpaces);
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(15), aDocStat.nChar);
+ aDocStat.Reset();
+
+ m_pDoc->getIDocumentContentOperations().AppendTextNode(*aPaM.GetPoint());
+ m_pDoc->getIDocumentContentOperations().InsertString(aPaM, sTemplate.replace('X', 0x2012));
+ pTextNode = aPaM.GetPointNode().GetTextNode();
+ pTextNode->CountWords(aDocStat, 0, pTextNode->Len());
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(3), aDocStat.nWord);
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(13), aDocStat.nCharExcludingSpaces);
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(15), aDocStat.nChar);
+ aDocStat.Reset();
+
+ m_pDoc->getIDocumentContentOperations().AppendTextNode(*aPaM.GetPoint());
+ m_pDoc->getIDocumentContentOperations().InsertString(aPaM, sTemplate.replace('X', 0x2015));
+ pTextNode = aPaM.GetPointNode().GetTextNode();
+ pTextNode->CountWords(aDocStat, 0, pTextNode->Len());
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(3), aDocStat.nWord);
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(13), aDocStat.nCharExcludingSpaces);
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(15), aDocStat.nChar);
+ aDocStat.Reset();
+
+ //But default configuration should, msword-alike treat emdash
+ //and endash as word separators for word-counting
+ m_pDoc->getIDocumentContentOperations().AppendTextNode(*aPaM.GetPoint());
+ m_pDoc->getIDocumentContentOperations().InsertString(aPaM, sTemplate.replace('X', 0x2013));
+ pTextNode = aPaM.GetPointNode().GetTextNode();
+ pTextNode->CountWords(aDocStat, 0, pTextNode->Len());
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(4), aDocStat.nWord);
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(13), aDocStat.nCharExcludingSpaces);
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(15), aDocStat.nChar);
+ aDocStat.Reset();
+
+ m_pDoc->getIDocumentContentOperations().AppendTextNode(*aPaM.GetPoint());
+ m_pDoc->getIDocumentContentOperations().InsertString(aPaM, sTemplate.replace('X', 0x2014));
+ pTextNode = aPaM.GetPointNode().GetTextNode();
+ pTextNode->CountWords(aDocStat, 0, pTextNode->Len());
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(4), aDocStat.nWord);
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(13), aDocStat.nCharExcludingSpaces);
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(15), aDocStat.nChar);
+ aDocStat.Reset();
+
+ static constexpr OUStringLiteral sChunk = u" \u2013 ";
+ m_pDoc->getIDocumentContentOperations().AppendTextNode(*aPaM.GetPoint());
+ m_pDoc->getIDocumentContentOperations().InsertString(aPaM, sTemplate.replaceAll("X", sChunk));
+ pTextNode = aPaM.GetPointNode().GetTextNode();
+ pTextNode->CountWords(aDocStat, 0, pTextNode->Len());
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(4), aDocStat.nWord);
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(13), aDocStat.nCharExcludingSpaces);
+ CPPUNIT_ASSERT_EQUAL(sal_uLong(17), aDocStat.nChar);
+ aDocStat.Reset();
+ }
+}
+
+void SwDocTest::testMergePortionsDeleteNotSorted()
+{
+ SwNodeIndex aIdx(m_pDoc->GetNodes().GetEndOfContent(), -1);
+ SwPaM aPaM(aIdx);
+ m_pDoc->getIDocumentContentOperations().InsertString(aPaM, " AABBCC");
+
+ SwCharFormat *const pCharFormat(m_pDoc->MakeCharFormat("foo", nullptr));
+ SwFormatCharFormat const charFormat(pCharFormat);
+
+ SwFormatINetFormat const inetFormat("http://example.com", "");
+
+ IDocumentContentOperations & rIDCO(m_pDoc->getIDocumentContentOperations());
+ aPaM.SetMark();
+ aPaM.GetPoint()->nContent = 2;
+ aPaM.GetMark()->nContent = 4;
+ rIDCO.InsertPoolItem(aPaM, charFormat);
+ aPaM.GetPoint()->nContent = 2;
+ aPaM.GetMark()->nContent = 5;
+ rIDCO.InsertPoolItem(aPaM, inetFormat);
+ aPaM.GetPoint()->nContent = 6;
+ aPaM.GetMark()->nContent = 8;
+ rIDCO.InsertPoolItem(aPaM, charFormat);
+ aPaM.GetPoint()->nContent = 4;
+ aPaM.GetMark()->nContent = 6;
+ // this triggered an STL assert in SwpHints::MergePortions()
+ rIDCO.InsertPoolItem(aPaM, charFormat);
+}
+
+//See https://bugs.libreoffice.org/show_bug.cgi?id=40599
+void SwDocTest::testGraphicAnchorDeletion()
+{
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Expected initial 0 count", static_cast<sal_uLong>(0), m_pDoc->getIDocumentStatistics().GetDocStat().nChar);
+
+ SwNodeIndex aIdx(m_pDoc->GetNodes().GetEndOfContent(), -1);
+ SwPaM aPaM(aIdx);
+
+ m_pDoc->getIDocumentContentOperations().InsertString(aPaM, "Paragraph 1");
+ m_pDoc->getIDocumentContentOperations().AppendTextNode(*aPaM.GetPoint());
+
+ m_pDoc->getIDocumentContentOperations().InsertString(aPaM, "graphic anchor>><<graphic anchor");
+ SwNodeIndex nPara2(aPaM.GetPoint()->GetNode());
+ m_pDoc->getIDocumentContentOperations().AppendTextNode(*aPaM.GetPoint());
+
+ m_pDoc->getIDocumentContentOperations().InsertString(aPaM, "Paragraph 3");
+
+ aPaM.GetPoint()->Assign(nPara2);
+ aPaM.GetPoint()->SetContent(RTL_CONSTASCII_LENGTH("graphic anchor>>"));
+
+ //Insert a graphic at X of >>X<< in paragraph 2
+ SfxItemSet aFlySet(m_pDoc->GetAttrPool(), svl::Items<RES_FRMATR_BEGIN, RES_FRMATR_END-1>);
+ SwFormatAnchor aAnchor(RndStdIds::FLY_AS_CHAR);
+ aAnchor.SetAnchor(aPaM.GetPoint());
+ aFlySet.Put(aAnchor);
+ SwFlyFrameFormat *pFrame = m_pDoc->getIDocumentContentOperations().InsertGraphic(aPaM, OUString(), OUString(), nullptr, &aFlySet, nullptr, nullptr);
+ CPPUNIT_ASSERT_MESSAGE("Expected frame", pFrame != nullptr);
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Should be 1 graphic", static_cast<size_t>(1), m_pDoc->GetFlyCount(FLYCNTTYPE_GRF));
+
+ //Delete >X<
+ aPaM.GetPoint()->Assign(nPara2);
+ aPaM.GetPoint()->SetContent(
+ RTL_CONSTASCII_LENGTH("graphic anchor>><")+1);
+ aPaM.SetMark();
+ aPaM.GetPoint()->Assign(nPara2);
+ aPaM.GetPoint()->SetContent(RTL_CONSTASCII_LENGTH("graphic anchor>"));
+ m_pDoc->getIDocumentContentOperations().DeleteRange(aPaM);
+
+#ifdef DEBUG_AS_HTML
+ {
+ SvFileStream aPasteDebug(OUString("cppunitDEBUG.html"), StreamMode::WRITE|StreamMode::TRUNC);
+ WriterRef xWrt;
+ GetHTMLWriter( String(), String(), xWrt );
+ SwWriter aDbgWrt( aPasteDebug, *m_pDoc );
+ aDbgWrt.Write( xWrt );
+ }
+#endif
+
+ CPPUNIT_ASSERT_EQUAL_MESSAGE("Should be 0 graphics", static_cast<size_t>(0), m_pDoc->GetFlyCount(FLYCNTTYPE_GRF));
+
+ //Now, if instead we swap RndStdIds::FLY_AS_CHAR (inline graphic) to RndStdIds::FLY_AT_CHAR (anchored to character)
+ //and repeat the above, graphic is *not* deleted, i.e. it belongs to the paragraph, not the
+ //range to which its anchored, which is annoying.
+}
+
+void SwDocTest::testTableAutoFormats()
+{
+ SwGlobals::ensure();
+
+ //create new AutoFormatTable
+ SwTableAutoFormatTable aTableAFT;
+
+ //check the style size - default is expected
+ CPPUNIT_ASSERT_EQUAL( size_t(1), aTableAFT.size() );
+
+ //create new style
+ SwTableAutoFormat aTableAF( "TestItemStyle" );
+
+ //create new AutoFormat
+ SwBoxAutoFormat aBoxAF;
+
+ //SetFont
+ SvxFontItem aFont( RES_CHRATR_FONT );
+ aFont.SetFamily( FontFamily::FAMILY_DECORATIVE );
+ aFont.SetPitch( FontPitch::PITCH_VARIABLE );
+ aFont.SetCharSet( RTL_TEXTENCODING_MS_1251 );
+ aBoxAF.SetFont( aFont );
+ //SetHeight
+ SvxFontHeightItem aHeight( 280, 120, RES_CHRATR_FONTSIZE );
+ aBoxAF.SetHeight( aHeight );
+ //SetWeight
+ SvxWeightItem aWeight( FontWeight::WEIGHT_BOLD, RES_CHRATR_WEIGHT );
+ aBoxAF.SetWeight( aWeight );
+ //SetPosture
+ SvxPostureItem aPosture( FontItalic::ITALIC_NORMAL, RES_CHRATR_POSTURE );
+ aBoxAF.SetPosture( aPosture );
+ //SetCJKFont
+ SvxFontItem aCJKFont( RES_CHRATR_FONT );
+ aCJKFont.SetFamily( FontFamily::FAMILY_MODERN );
+ aCJKFont.SetPitch( FontPitch::PITCH_FIXED );
+ aCJKFont.SetCharSet( RTL_TEXTENCODING_MS_1251 );
+ aBoxAF.SetCJKFont( aCJKFont );
+ //SetCJKHeight
+ SvxFontHeightItem aCJKHeight( 230, 110, RES_CHRATR_FONTSIZE );
+ aBoxAF.SetCJKHeight( aCJKHeight );
+ //SetCJKWeight
+ SvxWeightItem aCJKWeight( FontWeight::WEIGHT_SEMIBOLD, RES_CHRATR_WEIGHT );
+ aBoxAF.SetCJKWeight( aCJKWeight );
+ //SetCJKPosture
+ SvxPostureItem aCJKPosture( FontItalic::ITALIC_OBLIQUE, RES_CHRATR_POSTURE );
+ aBoxAF.SetCJKPosture( aCJKPosture );
+ //SetCTLFont
+ SvxFontItem aCTLFont( RES_CHRATR_FONT );
+ aCTLFont.SetFamily( FontFamily::FAMILY_ROMAN );
+ aCTLFont.SetPitch( FontPitch::PITCH_FIXED );
+ aCTLFont.SetCharSet( RTL_TEXTENCODING_MS_1251 );
+ aBoxAF.SetCTLFont( aCTLFont );
+ //SetCTLHeight
+ SvxFontHeightItem aCTLHeight( 215, 105, RES_CHRATR_FONTSIZE );
+ aBoxAF.SetCTLHeight( aCTLHeight );
+ //SetCTLWeight
+ SvxWeightItem aCTLWeight( FontWeight::WEIGHT_ULTRABOLD, RES_CHRATR_WEIGHT );
+ aBoxAF.SetCTLWeight( aCTLWeight );
+ //SetCTLPosture
+ SvxPostureItem aCTLPosture( FontItalic::ITALIC_OBLIQUE, RES_CHRATR_POSTURE );
+ aBoxAF.SetCTLPosture( aCTLPosture );
+ //SetUnderline
+ SvxUnderlineItem aUnderline( FontLineStyle::LINESTYLE_DOTTED, RES_CHRATR_UNDERLINE );
+ aBoxAF.SetUnderline( aUnderline );
+ //SetOverline
+ SvxOverlineItem aOverline( FontLineStyle::LINESTYLE_DASH, RES_CHRATR_OVERLINE );
+ aBoxAF.SetOverline( aOverline );
+ //SetCrossedOut
+ SvxCrossedOutItem aCrossedOut( FontStrikeout::STRIKEOUT_BOLD, RES_CHRATR_CROSSEDOUT );
+ aBoxAF.SetCrossedOut( aCrossedOut );
+ //SetContour
+ SvxContourItem aContour( true, RES_CHRATR_CONTOUR );
+ aBoxAF.SetContour( aContour );
+ //SetShadowed
+ SvxShadowedItem aShadowed( false, RES_CHRATR_SHADOWED );
+ aBoxAF.SetShadowed( aShadowed );
+ //SetColor
+ SvxColorItem aColor( Color(0xFF23FF), RES_CHRATR_COLOR );
+ aBoxAF.SetColor( aColor );
+ //SetAdjust
+ SvxAdjustItem aAdjust( SvxAdjust::Center, RES_PARATR_ADJUST );
+ aBoxAF.SetAdjust( aAdjust );
+ //SetTextOrientation
+ SvxFrameDirectionItem aTOrientation( SvxFrameDirection::Vertical_RL_TB, RES_FRAMEDIR );
+ aBoxAF.SetTextOrientation( aTOrientation );
+ //SetVerticalAlignment
+ SwFormatVertOrient aVAlignment( 3, css::text::VertOrientation::CENTER, css::text::RelOrientation::PAGE_LEFT );
+ aBoxAF.SetVerticalAlignment( aVAlignment );
+ //SetBox
+ SvxBoxItem aBox( RES_BOX );
+ aBox.SetAllDistances( 5 );
+ aBoxAF.SetBox( aBox );
+ //SetBackground
+ SvxBrushItem aBackground( Color(0xFF11FF), RES_BACKGROUND );
+ aBoxAF.SetBackground( aBackground );
+ //Set m_aTLBR
+ SvxLineItem aTLBRLine(0); aTLBRLine.ScaleMetrics( 11,12 );
+ aBoxAF.SetTLBR(aTLBRLine);
+ //Set m_aBLTR
+ SvxLineItem aBLTRLine(0); aBLTRLine.ScaleMetrics( 13,14 );
+ aBoxAF.SetBLTR(aBLTRLine);
+ //Set m_aHorJustify
+ SvxHorJustifyItem aHJustify( SvxCellHorJustify::Center, 0 );
+ aBoxAF.SetHorJustify(aHJustify);
+ //Set m_aVerJustify
+ SvxVerJustifyItem aVJustify( SvxCellVerJustify::Center , 0 );
+ aBoxAF.SetVerJustify(aVJustify);
+ //Set m_aStacked
+ SfxBoolItem aStacked(0, true);
+ aBoxAF.SetStacked(aStacked);
+ //Set m_aMargin
+ SvxMarginItem aSvxMarginItem(sal_Int16(4), sal_Int16(2), sal_Int16(3), sal_Int16(3), TypedWhichId<SvxMarginItem>(0));
+ aBoxAF.SetMargin(aSvxMarginItem);
+ //Set m_aLinebreak
+ SfxBoolItem aLBreak(0, true);
+ aBoxAF.SetLinebreak(aLBreak);
+ //Set m_aRotateAngle
+ SfxInt32Item aRAngle(sal_Int32(5));
+ aBoxAF.SetRotateAngle(aRAngle);
+ //Set m_aRotateMode
+ SvxRotateModeItem aSvxRotateModeItem(SVX_ROTATE_MODE_CENTER, TypedWhichId<SvxRotateModeItem>(0));
+ aBoxAF.SetRotateMode(aSvxRotateModeItem);
+ //Set m_sNumFormatString
+ OUString aNFString = "UnitTestFormat";
+ aBoxAF.SetNumFormatString(aNFString);
+ //Set m_eSysLanguage
+ LanguageType aSLang( LANGUAGE_ENGLISH_INDIA );
+ aBoxAF.SetSysLanguage(aSLang);
+ //Set m_eNumFormatLanguage
+ LanguageType aNFLang( LANGUAGE_GERMAN );
+ aBoxAF.SetNumFormatLanguage(aNFLang);
+ //Set m_aKeepWithNextPara
+ SvxFormatKeepItem aKWNPara( true, 0 );
+ aTableAF.SetKeepWithNextPara(aKWNPara);
+ //Set m_aRepeatHeading
+ sal_uInt16 aRHeading = 3;
+ aTableAF.m_aRepeatHeading = aRHeading;
+ //Set m_bLayoutSplit
+ bool aLSplit = false;
+ aTableAF.m_bLayoutSplit = aLSplit;
+ //Set m_bRowSplit
+ bool aRSplit = false;
+ aTableAF.m_bRowSplit = aRSplit;
+ //Set m_bCollapsingBorders
+ bool aCBorders = false;
+ aTableAF.m_bCollapsingBorders = aCBorders;
+ //Set m_aShadow
+ SvxShadowItem aShadow( 0, nullptr, 103, SvxShadowLocation::BottomLeft );
+ aTableAF.SetShadow(aShadow);
+ //Set bInclFont
+ bool aIFont = false;
+ aTableAF.m_bInclFont = aIFont;
+ //Set bInclJustify
+ bool aIJustify = false;
+ aTableAF.m_bInclJustify = aIJustify;
+ //Set bInclFrame
+ bool aIFrame = false;
+ aTableAF.m_bInclFrame = aIFrame;
+ //Set bInclBackground
+ bool aIBackground = false;
+ aTableAF.m_bInclBackground = aIBackground;
+ //Set bInclValueFormat
+ bool aIVFormat = false;
+ aTableAF.m_bInclValueFormat = aIVFormat;
+
+ //set the box format to AutoFormat
+ aTableAF.SetBoxFormat( aBoxAF, sal_uInt8(0) );
+ //add AutoFormat to AutoFormatTable
+ aTableAFT.AddAutoFormat( aTableAF );
+
+ //check the style size
+ CPPUNIT_ASSERT_EQUAL( size_t(2), aTableAFT.size() );
+
+ //save the bInclFontstyles
+ aTableAFT.Save();
+
+ //check the style size after save
+ CPPUNIT_ASSERT_EQUAL( size_t(2), aTableAFT.size() );
+
+ //create new AutoFormatTable
+ SwTableAutoFormatTable aLoadTAFT;
+
+ //check the style size
+ CPPUNIT_ASSERT_EQUAL( size_t(1), aLoadTAFT.size() );
+
+ //load the saved styles
+ aLoadTAFT.Load();
+
+ //check the style size after load
+ CPPUNIT_ASSERT_EQUAL( size_t(2), aLoadTAFT.size() );
+
+ //assert the values
+ SwTableAutoFormat* pLoadAF = aLoadTAFT.FindAutoFormat( u"TestItemStyle" );
+ CPPUNIT_ASSERT( pLoadAF );
+ //GetFont
+ CPPUNIT_ASSERT( bool( pLoadAF->GetBoxFormat(0).GetFont() == aFont ) );
+ //GetHeight
+ CPPUNIT_ASSERT( bool( pLoadAF->GetBoxFormat(0).GetHeight() == aHeight ) );
+ //GetWeight
+ CPPUNIT_ASSERT( bool( pLoadAF->GetBoxFormat(0).GetWeight() == aWeight ) );
+ //GetPosture
+ CPPUNIT_ASSERT( bool( pLoadAF->GetBoxFormat(0).GetPosture() == aPosture ) );
+ //GetCJKFont
+ CPPUNIT_ASSERT( bool( pLoadAF->GetBoxFormat(0).GetCJKFont() == aCJKFont ) );
+ //GetCJKHeight
+ CPPUNIT_ASSERT( bool( pLoadAF->GetBoxFormat(0).GetCJKHeight() == aCJKHeight ) );
+ //GetCJKWeight
+ CPPUNIT_ASSERT( bool( pLoadAF->GetBoxFormat(0).GetCJKWeight() == aCJKWeight ) );
+ //GetCJKPosture
+ CPPUNIT_ASSERT( bool( pLoadAF->GetBoxFormat(0).GetCJKPosture() == aCJKPosture ) );
+ //GetCTLFont
+ CPPUNIT_ASSERT( bool( pLoadAF->GetBoxFormat(0).GetCTLFont() == aCTLFont ) );
+ //GetCTLHeight
+ CPPUNIT_ASSERT( bool( pLoadAF->GetBoxFormat(0).GetCTLHeight() == aCTLHeight ) );
+ //GetCTLWeight
+ CPPUNIT_ASSERT( bool( pLoadAF->GetBoxFormat(0).GetCTLWeight() == aCTLWeight ) );
+ //GetCTLPosture
+ CPPUNIT_ASSERT( bool( pLoadAF->GetBoxFormat(0).GetCTLPosture() == aCTLPosture ) );
+ //GetUnderline
+ CPPUNIT_ASSERT( bool( pLoadAF->GetBoxFormat(0).GetUnderline() == aUnderline ) );
+ //GetOverline
+ CPPUNIT_ASSERT( bool( pLoadAF->GetBoxFormat(0).GetOverline() == aOverline ) );
+ //GetCrossedOut
+ CPPUNIT_ASSERT( bool( pLoadAF->GetBoxFormat(0).GetCrossedOut() == aCrossedOut ) );
+ //GetContour
+ CPPUNIT_ASSERT( bool( pLoadAF->GetBoxFormat(0).GetContour() == aContour ) );
+ //GetShadowed
+ CPPUNIT_ASSERT( bool( pLoadAF->GetBoxFormat(0).GetShadowed() == aShadowed ) );
+ //GetColor
+ CPPUNIT_ASSERT( bool( pLoadAF->GetBoxFormat(0).GetColor() == aColor) );
+ //GetAdjust
+ CPPUNIT_ASSERT( bool( pLoadAF->GetBoxFormat(0).GetAdjust() == aAdjust ) );
+ //GetTextOrientation
+ CPPUNIT_ASSERT( bool( pLoadAF->GetBoxFormat(0).GetTextOrientation() == aTOrientation ) );
+ //GetVerticalAlignment
+ CPPUNIT_ASSERT (bool( pLoadAF->GetBoxFormat(0).GetVerticalAlignment() == aVAlignment ) );
+ //GetBox
+ CPPUNIT_ASSERT( bool( pLoadAF->GetBoxFormat(0).GetBox() == aBox ) );
+ //GetBackground
+ CPPUNIT_ASSERT( bool( pLoadAF->GetBoxFormat(0).GetBackground() == aBackground ) );
+ //Get m_aTLBR
+ CPPUNIT_ASSERT( bool( pLoadAF->GetBoxFormat(0).GetTLBR() == aTLBRLine ) );
+ //Get m_aBLTR
+ CPPUNIT_ASSERT( bool( pLoadAF->GetBoxFormat(0).GetBLTR() == aBLTRLine ) );
+ //Get m_aHorJustify
+ CPPUNIT_ASSERT( bool( pLoadAF->GetBoxFormat(0).GetHorJustify() == aHJustify ) );
+ //Get m_aVerJustify
+ CPPUNIT_ASSERT( bool( pLoadAF->GetBoxFormat(0).GetVerJustify() == aVJustify ) );
+ //Get m_aStacked
+ CPPUNIT_ASSERT( bool( pLoadAF->GetBoxFormat(0).GetStacked() == aStacked ) );
+ //Get m_aMargin
+ CPPUNIT_ASSERT( bool( pLoadAF->GetBoxFormat(0).GetMargin() == aSvxMarginItem ) );
+ //Get m_aLinebreak
+ CPPUNIT_ASSERT( bool( pLoadAF->GetBoxFormat(0).GetLinebreak() == aLBreak ) );
+ //Get m_aRotateAngle
+ CPPUNIT_ASSERT( bool( pLoadAF->GetBoxFormat(0).GetRotateAngle() == aRAngle ) );
+ //Get m_aRotateMode
+ //SvxRotateModeItem aRMode = aBoxAF.m_aRotateMode;GetRotateMode
+ CPPUNIT_ASSERT( bool( pLoadAF->GetBoxFormat(0).GetRotateMode() == aSvxRotateModeItem ) );
+ //Get m_sNumFormatString
+ CPPUNIT_ASSERT( bool( pLoadAF->GetBoxFormat(0).GetNumFormatString() == aNFString ) );
+ //Get m_eSysLanguage
+ CPPUNIT_ASSERT( bool( pLoadAF->GetBoxFormat(0).GetSysLanguage() == aSLang ) );
+ //Get m_eNumFormatLanguage
+ CPPUNIT_ASSERT( bool( pLoadAF->GetBoxFormat(0).GetNumFormatLanguage() == aNFLang ) );
+ //Get m_aKeepWithNextPara
+ CPPUNIT_ASSERT( bool( pLoadAF->GetKeepWithNextPara() == aKWNPara ) );
+ //Get m_aRepeatHeading
+ CPPUNIT_ASSERT( bool( pLoadAF->m_aRepeatHeading == aRHeading ) );
+ //Get m_bLayoutSplit
+ CPPUNIT_ASSERT( bool( pLoadAF->m_bLayoutSplit == aLSplit ) );
+ //Get m_bRowSplit
+ CPPUNIT_ASSERT( bool( pLoadAF->m_bRowSplit == aRSplit ) );
+ //Get m_bCollapsingBorders
+ CPPUNIT_ASSERT( bool( pLoadAF->m_bCollapsingBorders == aCBorders ) );
+ //Get m_aShadow
+ CPPUNIT_ASSERT( bool( pLoadAF->GetShadow() == aShadow ) );
+ //Get bInclFont
+ CPPUNIT_ASSERT( bool( pLoadAF->m_bInclFont == aIFont ) );
+ //Get bInclJustify
+ CPPUNIT_ASSERT( bool( pLoadAF->m_bInclJustify == aIJustify ) );
+ //Get bInclFrame
+ CPPUNIT_ASSERT( bool( pLoadAF->m_bInclFrame == aIFrame ) );
+ //Get bInclBackground
+ CPPUNIT_ASSERT( bool( pLoadAF->m_bInclBackground == aIBackground ) );
+ //Get bInclValueFormat
+ CPPUNIT_ASSERT( bool( pLoadAF->m_bInclValueFormat == aIVFormat ) );
+}
+
+static OUString
+translitTest(SwDoc & rDoc, const SwPaM & rPaM, TransliterationFlags const nType)
+{
+ utl::TransliterationWrapper aTrans(
+ ::comphelper::getProcessComponentContext(), nType);
+ rDoc.getIDocumentContentOperations().TransliterateText(rPaM, aTrans);
+ return rPaM.GetText();
+}
+
+void SwDocTest::testTransliterate()
+{
+ // just some simple test to see if it's totally broken
+ SwNodeIndex aIdx(m_pDoc->GetNodes().GetEndOfContent(), -1);
+ SwPaM aPaM(aIdx);
+ m_pDoc->getIDocumentContentOperations().InsertString(aPaM, "foobar");
+ aPaM.SetMark();
+ aPaM.GetPoint()->nContent = 0;
+ CPPUNIT_ASSERT_EQUAL(OUString("foobar"), aPaM.GetText());
+
+ CPPUNIT_ASSERT_EQUAL(OUString("FOOBAR"),
+ translitTest(*m_pDoc, aPaM,
+ TransliterationFlags::LOWERCASE_UPPERCASE));
+ CPPUNIT_ASSERT_EQUAL(OUString("Foobar"),
+ translitTest(*m_pDoc, aPaM,
+ TransliterationFlags::TITLE_CASE));
+ CPPUNIT_ASSERT_EQUAL(OUString("fOOBAR"),
+ translitTest(*m_pDoc, aPaM,
+ TransliterationFlags::TOGGLE_CASE));
+ CPPUNIT_ASSERT_EQUAL(OUString("foobar"),
+ translitTest(*m_pDoc, aPaM,
+ TransliterationFlags::UPPERCASE_LOWERCASE));
+ CPPUNIT_ASSERT_EQUAL(OUString("Foobar"),
+ translitTest(*m_pDoc, aPaM,
+ TransliterationFlags::SENTENCE_CASE));
+ CPPUNIT_ASSERT_EQUAL(OUString("Foobar"),
+ translitTest(*m_pDoc, aPaM,
+ TransliterationFlags::HIRAGANA_KATAKANA));
+
+ m_pDoc->getIDocumentContentOperations().AppendTextNode(*aPaM.GetPoint());
+ m_pDoc->getIDocumentContentOperations().InsertString(aPaM, "one (two) three");
+ aPaM.SetMark();
+ aPaM.GetMark()->nContent = 0;
+ CPPUNIT_ASSERT_EQUAL(OUString("One (Two) Three"),
+ translitTest(*m_pDoc, aPaM,
+ TransliterationFlags::TITLE_CASE));
+}
+
+namespace
+{
+ class SwTableFormulaTest : public SwTableFormula
+ {
+ SwTableNode *m_pNode;
+ public:
+ SwTableFormulaTest(const OUString &rStr, SwTableNode *pNode)
+ : SwTableFormula(rStr)
+ , m_pNode(pNode)
+ {
+ m_eNmType = INTRNL_NAME;
+ }
+ virtual const SwNode* GetNodeOfFormula() const override
+ {
+ return m_pNode;
+ }
+ };
+}
+
+//tdf#66353 Expression is faulty
+void SwDocTest::testFormulas()
+{
+ SwNodeIndex aIdx(m_pDoc->GetNodes().GetEndOfContent(), -1);
+ SwPosition aPos(aIdx);
+
+ const SwTable *pTable = m_pDoc->InsertTable(
+ SwInsertTableOptions(SwInsertTableFlags::HeadlineNoBorder, 0), aPos, 1, 3, 0);
+ SwTableNode* pTableNode = pTable->GetTableNode();
+ SwTableFormulaTest aFormula("<\x12-1,0>+<Table1.A1>", pTableNode);
+
+ aFormula.PtrToBoxNm(pTable);
+
+ CPPUNIT_ASSERT_EQUAL(OUString("<?>+<Table1.?>"), aFormula.GetFormula());
+
+ // tdf#61228: Evaluating non-defined function should return an error
+ SwCalc aCalc(*m_pDoc);
+ SwSbxValue val = aCalc.Calculate("foobar()");
+ CPPUNIT_ASSERT(aCalc.IsCalcError());
+ CPPUNIT_ASSERT(val.IsVoidValue());
+ CPPUNIT_ASSERT(val.IsDouble());
+ CPPUNIT_ASSERT_EQUAL(DBL_MAX, val.GetDouble());
+ // Evaluating non-defined variable should return 0 without an error
+ val = aCalc.Calculate("foobar");
+ CPPUNIT_ASSERT(!aCalc.IsCalcError());
+ CPPUNIT_ASSERT(val.IsVoidValue());
+ CPPUNIT_ASSERT(val.IsLong());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), val.GetLong());
+}
+
+void SwDocTest::testMarkMove()
+{
+ IDocumentMarkAccess* pMarksAccess = m_pDoc->getIDocumentMarkAccess();
+
+ {
+ SwNodeIndex aIdx(m_pDoc->GetNodes().GetEndOfContent(), -1);
+ SwPaM aPaM(aIdx);
+ m_pDoc->getIDocumentContentOperations().InsertString(aPaM, "Paragraph 1");
+ aPaM.SetMark();
+ aPaM.GetMark()->nContent -= aPaM.GetMark()->GetContentIndex();
+ pMarksAccess->makeMark(aPaM, "Para1",
+ IDocumentMarkAccess::MarkType::BOOKMARK, sw::mark::InsertMode::New);
+
+ m_pDoc->getIDocumentContentOperations().AppendTextNode(*aPaM.GetPoint());
+ m_pDoc->getIDocumentContentOperations().InsertString(aPaM, "Paragraph 2");
+ aPaM.SetMark();
+ aPaM.GetMark()->nContent -= aPaM.GetMark()->GetContentIndex();
+ pMarksAccess->makeMark(aPaM, "Para2",
+ IDocumentMarkAccess::MarkType::BOOKMARK, sw::mark::InsertMode::New);
+
+ m_pDoc->getIDocumentContentOperations().AppendTextNode(*aPaM.GetPoint());
+ m_pDoc->getIDocumentContentOperations().InsertString(aPaM, "Paragraph 3");
+ aPaM.SetMark();
+ aPaM.GetMark()->nContent -= aPaM.GetMark()->GetContentIndex();
+ pMarksAccess->makeMark(aPaM, "Para3",
+ IDocumentMarkAccess::MarkType::BOOKMARK, sw::mark::InsertMode::New);
+ }
+
+ // join paragraph 2 and 3 and check
+ {
+ SwNodeIndex aIdx(m_pDoc->GetNodes().GetEndOfContent(), -2);
+ SwTextNode& rParaNode2 = dynamic_cast<SwTextNode&>(aIdx.GetNode());
+ rParaNode2.JoinNext();
+ }
+ ::sw::mark::IMark* pBM1 = *pMarksAccess->findMark("Para1");
+ ::sw::mark::IMark* pBM2 = *pMarksAccess->findMark("Para2");
+ ::sw::mark::IMark* pBM3 = *pMarksAccess->findMark("Para3");
+
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0) , pBM1->GetMarkStart().GetContentIndex());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(11), pBM1->GetMarkEnd().GetContentIndex());
+ CPPUNIT_ASSERT_EQUAL(
+ pBM1->GetMarkStart().GetNodeIndex(),
+ pBM1->GetMarkEnd().GetNodeIndex());
+
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0) , pBM2->GetMarkStart().GetContentIndex());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(11), pBM2->GetMarkEnd().GetContentIndex());
+ CPPUNIT_ASSERT_EQUAL(
+ pBM2->GetMarkStart().GetNodeIndex(),
+ pBM2->GetMarkEnd().GetNodeIndex());
+
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(11), pBM3->GetMarkStart().GetContentIndex());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(22), pBM3->GetMarkEnd().GetContentIndex());
+ CPPUNIT_ASSERT_EQUAL(
+ pBM3->GetMarkStart().GetNodeIndex(),
+ pBM3->GetMarkEnd().GetNodeIndex());
+
+ CPPUNIT_ASSERT_EQUAL(
+ pBM1->GetMarkStart().GetNodeIndex()+1,
+ pBM2->GetMarkStart().GetNodeIndex());
+ CPPUNIT_ASSERT_EQUAL(
+ pBM2->GetMarkStart().GetNodeIndex(),
+ pBM3->GetMarkStart().GetNodeIndex());
+
+ // cut some text
+ {
+ SwNodeIndex aIdx(m_pDoc->GetNodes().GetEndOfContent(), -1);
+ SwPaM aPaM(aIdx, aIdx, SwNodeOffset(-1));
+ aPaM.GetPoint()->nContent += 5;
+ aPaM.GetMark()->nContent += 6;
+ m_pDoc->getIDocumentContentOperations().DeleteAndJoin(aPaM);
+ }
+ pBM1 = *pMarksAccess->findMark("Para1");
+ pBM2 = *pMarksAccess->findMark("Para2");
+ pBM3 = *pMarksAccess->findMark("Para3");
+
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), pBM1->GetMarkStart().GetContentIndex());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(6), pBM1->GetMarkEnd().GetContentIndex());
+ CPPUNIT_ASSERT_EQUAL(
+ pBM1->GetMarkStart().GetNodeIndex(),
+ pBM1->GetMarkEnd().GetNodeIndex());
+
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(6), pBM2->GetMarkStart().GetContentIndex());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(12), pBM2->GetMarkEnd().GetContentIndex());
+ CPPUNIT_ASSERT_EQUAL(
+ pBM2->GetMarkStart().GetNodeIndex(),
+ pBM2->GetMarkEnd().GetNodeIndex());
+
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(12), pBM3->GetMarkStart().GetContentIndex());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(23), pBM3->GetMarkEnd().GetContentIndex());
+ CPPUNIT_ASSERT_EQUAL(
+ pBM3->GetMarkStart().GetNodeIndex(),
+ pBM3->GetMarkEnd().GetNodeIndex());
+
+ CPPUNIT_ASSERT_EQUAL(
+ pBM1->GetMarkStart().GetNodeIndex(),
+ pBM2->GetMarkStart().GetNodeIndex());
+ CPPUNIT_ASSERT_EQUAL(
+ pBM2->GetMarkStart().GetNodeIndex(),
+ pBM3->GetMarkStart().GetNodeIndex());
+
+ // split the paragraph
+ {
+ SwNodeIndex aIdx(m_pDoc->GetNodes().GetEndOfContent(), -1);
+ SwPosition aPos(aIdx);
+ aPos.nContent += 8;
+ m_pDoc->getIDocumentContentOperations().SplitNode(aPos, false);
+ }
+ pBM1 = *pMarksAccess->findMark("Para1");
+ pBM2 = *pMarksAccess->findMark("Para2");
+ pBM3 = *pMarksAccess->findMark("Para3");
+
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(0), pBM1->GetMarkStart().GetContentIndex());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(6), pBM1->GetMarkEnd().GetContentIndex());
+ CPPUNIT_ASSERT_EQUAL(
+ pBM1->GetMarkStart().GetNodeIndex(),
+ pBM1->GetMarkEnd().GetNodeIndex());
+
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(6), pBM2->GetMarkStart().GetContentIndex());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(4), pBM2->GetMarkEnd().GetContentIndex());
+ CPPUNIT_ASSERT_EQUAL(
+ pBM2->GetMarkStart().GetNodeIndex()+1,
+ pBM2->GetMarkEnd().GetNodeIndex());
+
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(4), pBM3->GetMarkStart().GetContentIndex());
+ CPPUNIT_ASSERT_EQUAL(sal_Int32(15), pBM3->GetMarkEnd().GetContentIndex());
+ CPPUNIT_ASSERT_EQUAL(
+ pBM3->GetMarkStart().GetNodeIndex(),
+ pBM3->GetMarkEnd().GetNodeIndex());
+
+ CPPUNIT_ASSERT_EQUAL(
+ pBM1->GetMarkStart().GetNodeIndex(),
+ pBM2->GetMarkStart().GetNodeIndex());
+ CPPUNIT_ASSERT_EQUAL(
+ pBM2->GetMarkEnd().GetNodeIndex(),
+ pBM3->GetMarkEnd().GetNodeIndex());
+}
+
+namespace
+{
+ struct TestRing : public sw::Ring<TestRing>
+ {
+ TestRing() : sw::Ring<TestRing>() {};
+ TestRing* GetNext()
+ { return GetNextInRing(); }
+ TestRing* GetPrev()
+ { return GetPrevInRing(); }
+ bool lonely() const
+ { return unique(); }
+ };
+}
+
+void SwDocTest::testIntrusiveRing()
+{
+ TestRing aRing1, aRing2, aRing3, aRing4, aRing5;
+ std::vector<TestRing*> vRings
+ {
+ &aRing1,
+ &aRing2,
+ &aRing3,
+ &aRing4,
+ &aRing5
+ };
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), aRing1.GetRingContainer().size());
+ CPPUNIT_ASSERT(aRing1.lonely());
+ CPPUNIT_ASSERT(aRing2.lonely());
+ CPPUNIT_ASSERT(aRing3.lonely());
+ aRing2.MoveTo(&aRing1);
+ aRing3.MoveTo(&aRing1);
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(3), aRing1.GetRingContainer().size());
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(3), aRing2.GetRingContainer().size());
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(3), aRing3.GetRingContainer().size());
+ CPPUNIT_ASSERT(!aRing1.lonely());
+ CPPUNIT_ASSERT(!aRing2.lonely());
+ CPPUNIT_ASSERT(!aRing3.lonely());
+ aRing5.MoveTo(&aRing4);
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), aRing4.GetRingContainer().size());
+ aRing4.GetRingContainer().merge(aRing1.GetRingContainer());
+ for(TestRing* pRing : vRings)
+ {
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(5), pRing->GetRingContainer().size());
+ }
+ for(std::vector<TestRing*>::iterator ppRing = vRings.begin(); ppRing != vRings.end(); ++ppRing)
+ {
+ std::vector<TestRing*>::iterator ppNext = ppRing+1;
+ if(ppNext==vRings.end())
+ ppNext = vRings.begin();
+ CPPUNIT_ASSERT_EQUAL((*ppRing)->GetNext(), *ppNext);
+ CPPUNIT_ASSERT_EQUAL((*ppNext)->GetPrev(), *ppRing);
+ }
+ for(TestRing& r: aRing1.GetRingContainer())
+ {
+ TestRing* pRing = &r;
+ CPPUNIT_ASSERT(pRing);
+ }
+ const TestRing* pConstRing = &aRing1;
+ for(const TestRing& r: pConstRing->GetRingContainer()) // this should fail without r being const
+ {
+ const TestRing* pRing = &r;
+ CPPUNIT_ASSERT(pRing);
+ }
+ TestRing foo, bar;
+ foo.MoveTo(&bar);
+ CPPUNIT_ASSERT_EQUAL(&foo, bar.GetNext());
+ CPPUNIT_ASSERT_EQUAL(&foo, bar.GetPrev());
+ CPPUNIT_ASSERT_EQUAL(&bar, foo.GetNext());
+ CPPUNIT_ASSERT_EQUAL(&bar, foo.GetPrev());
+ foo.MoveTo(&foo);
+ CPPUNIT_ASSERT_EQUAL(&bar, bar.GetNext());
+ CPPUNIT_ASSERT_EQUAL(&bar, bar.GetPrev());
+ CPPUNIT_ASSERT_EQUAL(&foo, foo.GetNext());
+ CPPUNIT_ASSERT_EQUAL(&foo, foo.GetPrev());
+}
+
+namespace
+{
+ struct TestHint final : SfxHint {};
+ struct TestModify : sw::BroadcastingModify
+ {
+ };
+ struct TestClient : SwClient
+ {
+ int m_nModifyCount;
+ int m_nNotifyCount;
+ int m_nModifyChangedCount;
+ const SwModify* m_pLastChangedModify;
+ TestClient() : m_nModifyCount(0), m_nNotifyCount(0), m_nModifyChangedCount(0), m_pLastChangedModify(nullptr) {};
+ virtual void SwClientNotify(const SwModify&, const SfxHint& rHint) override
+ {
+ if(typeid(TestHint) == typeid(rHint))
+ ++m_nNotifyCount;
+ else if(dynamic_cast<const sw::LegacyModifyHint*>(&rHint))
+ ++m_nModifyCount;
+ else if(auto pModifyChangedHint = dynamic_cast<const sw::ModifyChangedHint*>(&rHint))
+ {
+ ++m_nModifyChangedCount;
+ m_pLastChangedModify = pModifyChangedHint->m_pNew;
+ }
+ }
+ };
+ struct OtherTestClient : SwClient
+ {
+ int m_nModifyCount;
+ OtherTestClient() : m_nModifyCount(0) {};
+ virtual void SwClientNotify(const SwModify&, const SfxHint& rHint) override
+ {
+ if(dynamic_cast<const sw::LegacyModifyHint*>(&rHint))
+ ++m_nModifyCount;
+ }
+ };
+ struct TestListener : SvtListener
+ {
+ int m_nNotifyCount;
+ TestListener() : m_nNotifyCount(0) {};
+ virtual void Notify( const SfxHint& ) override
+ {
+ ++m_nNotifyCount;
+ }
+ };
+}
+void SwDocTest::testClientModify()
+{
+ (void) OtherTestClient(); // avoid loplugin:unreffun
+ TestModify aMod;
+ TestClient aClient1, aClient2;
+ OtherTestClient aOtherClient1;
+ // test client registration
+ CPPUNIT_ASSERT(!aMod.HasWriterListeners());
+ CPPUNIT_ASSERT(!aMod.HasOnlyOneListener());
+ CPPUNIT_ASSERT_EQUAL(static_cast<SwModify*>(nullptr),aClient1.GetRegisteredIn());
+ CPPUNIT_ASSERT_EQUAL(static_cast<SwModify*>(nullptr),aClient2.GetRegisteredIn());
+ CPPUNIT_ASSERT_EQUAL(static_cast<SwModify*>(nullptr),aClient2.GetRegisteredIn());
+ aMod.Add(&aClient1);
+ CPPUNIT_ASSERT(aMod.HasWriterListeners());
+ CPPUNIT_ASSERT(aMod.HasOnlyOneListener());
+ aMod.Add(&aClient2);
+ CPPUNIT_ASSERT_EQUAL(static_cast<SwModify*>(&aMod),aClient1.GetRegisteredIn());
+ CPPUNIT_ASSERT_EQUAL(static_cast<SwModify*>(&aMod), aClient2.GetRegisteredIn());
+ CPPUNIT_ASSERT(aMod.HasWriterListeners());
+ CPPUNIT_ASSERT(!aMod.HasOnlyOneListener());
+ // test broadcast
+ aMod.CallSwClientNotify(sw::LegacyModifyHint(nullptr, nullptr));
+ CPPUNIT_ASSERT_EQUAL(1,aClient1.m_nModifyCount);
+ CPPUNIT_ASSERT_EQUAL(1,aClient2.m_nModifyCount);
+ CPPUNIT_ASSERT_EQUAL(0,aClient1.m_nNotifyCount);
+ CPPUNIT_ASSERT_EQUAL(0,aClient2.m_nNotifyCount);
+ aMod.CallSwClientNotify(sw::LegacyModifyHint(nullptr, nullptr));
+ CPPUNIT_ASSERT_EQUAL(2,aClient1.m_nModifyCount);
+ CPPUNIT_ASSERT_EQUAL(2,aClient2.m_nModifyCount);
+ CPPUNIT_ASSERT_EQUAL(0,aClient1.m_nNotifyCount);
+ CPPUNIT_ASSERT_EQUAL(0,aClient2.m_nNotifyCount);
+ // test notify
+ {
+ TestHint aHint;
+ aMod.CallSwClientNotify(aHint);
+ CPPUNIT_ASSERT_EQUAL(2,aClient1.m_nModifyCount);
+ CPPUNIT_ASSERT_EQUAL(2,aClient2.m_nModifyCount);
+ CPPUNIT_ASSERT_EQUAL(1,aClient1.m_nNotifyCount);
+ CPPUNIT_ASSERT_EQUAL(1,aClient2.m_nNotifyCount);
+ }
+ // test typed iteration
+ CPPUNIT_ASSERT(typeid(aClient1) != typeid(OtherTestClient));
+ {
+ SwIterator<OtherTestClient,SwModify> aIter(aMod);
+ for(OtherTestClient* pClient = aIter.First(); pClient ; pClient = aIter.Next())
+ CPPUNIT_ASSERT(false);
+ }
+ {
+ int nCount = 0;
+ SwIterator<TestClient,SwModify> aIter(aMod);
+ for(TestClient* pClient = aIter.First(); pClient ; pClient = aIter.Next())
+ {
+ CPPUNIT_ASSERT_EQUAL(2,pClient->m_nModifyCount);
+ ++nCount;
+ }
+ CPPUNIT_ASSERT_EQUAL(2,nCount);
+ }
+ aMod.Add(&aOtherClient1);
+ CPPUNIT_ASSERT_EQUAL(0,aOtherClient1.m_nModifyCount);
+ {
+ int nCount = 0;
+ SwIterator<TestClient,SwModify> aIter(aMod);
+ for(TestClient* pClient = aIter.First(); pClient ; pClient = aIter.Next())
+ {
+ CPPUNIT_ASSERT_EQUAL(2,pClient->m_nModifyCount);
+ ++nCount;
+ }
+ CPPUNIT_ASSERT_EQUAL(2,nCount);
+ }
+ CPPUNIT_ASSERT_EQUAL(0,aOtherClient1.m_nModifyCount);
+ aMod.Remove(&aOtherClient1);
+ CPPUNIT_ASSERT_EQUAL(static_cast<SwModify*>(&aMod),aClient1.GetRegisteredIn());
+ CPPUNIT_ASSERT_EQUAL(static_cast<SwModify*>(&aMod),aClient2.GetRegisteredIn());
+ CPPUNIT_ASSERT_EQUAL(static_cast<SwModify*>(nullptr),aOtherClient1.GetRegisteredIn());
+ // test client self-deregistration during iteration
+ {
+ int nCount = 0;
+ SwIterator<TestClient,SwModify> aIter(aMod);
+ for(TestClient* pClient = aIter.First(); pClient ; pClient = aIter.Next())
+ {
+ aMod.Remove(pClient);
+ ++nCount;
+ }
+ CPPUNIT_ASSERT_EQUAL(2,nCount);
+ }
+ CPPUNIT_ASSERT_EQUAL(static_cast<SwModify*>(nullptr),aClient1.GetRegisteredIn());
+ CPPUNIT_ASSERT_EQUAL(static_cast<SwModify*>(nullptr),aClient2.GetRegisteredIn());
+ {
+ SwIterator<TestClient,SwModify> aIter(aMod);
+ for(TestClient* pClient = aIter.First(); pClient ; pClient = aIter.Next())
+ {
+ CPPUNIT_ASSERT(false);
+ }
+ }
+ aMod.CallSwClientNotify(sw::LegacyModifyHint(nullptr, nullptr));
+ CPPUNIT_ASSERT_EQUAL(2,aClient1.m_nModifyCount);
+ CPPUNIT_ASSERT_EQUAL(2,aClient2.m_nModifyCount);
+ CPPUNIT_ASSERT_EQUAL(1,aClient1.m_nNotifyCount);
+ CPPUNIT_ASSERT_EQUAL(1,aClient2.m_nNotifyCount);
+}
+void SwDocTest::testBroadcastingModify()
+{
+ sw::BroadcastingModify aMod;
+ TestClient aClient;
+ TestListener aListener;
+
+ aMod.Add(&aClient);
+ aListener.StartListening(aMod.GetNotifier());
+
+ aMod.CallSwClientNotify(sw::LegacyModifyHint(nullptr, nullptr));
+ CPPUNIT_ASSERT_EQUAL(1,aClient.m_nModifyCount);
+ CPPUNIT_ASSERT_EQUAL(1,aClient.m_nModifyCount);
+ CPPUNIT_ASSERT_EQUAL(1,aListener.m_nNotifyCount);
+}
+void SwDocTest::testWriterMultiListener()
+{
+ TestModify aMod;
+ TestClient aClient;
+ sw::WriterMultiListener aMulti(aClient);
+ CPPUNIT_ASSERT(!aMulti.IsListeningTo(&aMod));
+ aMulti.StartListening(&aMod);
+ CPPUNIT_ASSERT(aMulti.IsListeningTo(&aMod));
+ aMulti.EndListeningAll();
+ CPPUNIT_ASSERT(!aMulti.IsListeningTo(&aMod));
+ aMulti.StartListening(&aMod);
+ aMulti.EndListening(&aMod);
+ CPPUNIT_ASSERT(!aMulti.IsListeningTo(&aMod));
+ int nPreDeathChangedCount;
+ {
+ TestModify aTempMod;
+ aMod.Add(&aTempMod);
+ aMulti.StartListening(&aTempMod);
+ nPreDeathChangedCount = aClient.m_nModifyChangedCount;
+ }
+ CPPUNIT_ASSERT(aMulti.IsListeningTo(&aMod));
+ CPPUNIT_ASSERT_EQUAL(nPreDeathChangedCount+1, aClient.m_nModifyChangedCount);
+ CPPUNIT_ASSERT_EQUAL(static_cast<const SwModify*>(&aMod),aClient.m_pLastChangedModify);
+}
+
+void SwDocTest::test64kPageDescs()
+{
+ size_t nPageDescCount = 65536; // USHRT_MAX + 1
+
+ for (size_t i = 0; i < nPageDescCount; ++i)
+ {
+ OUString aName = "Page" + OUString::number(i);
+ m_pDoc->MakePageDesc( aName );
+ }
+
+ size_t nCount = m_pDoc->GetPageDescCnt();
+ // +1 because Writer always creates a dummy page desc
+ // in a new SwDoc
+ CPPUNIT_ASSERT_EQUAL( nPageDescCount + 1, nCount );
+
+ const SwPageDesc &rDesc = m_pDoc->GetPageDesc( nPageDescCount );
+ SwPageDesc &rZeroDesc = m_pDoc->GetPageDesc( 0 );
+ CPPUNIT_ASSERT_EQUAL( OUString("Page65535"), rDesc.GetName() );
+
+ SwPageDesc aDesc( rDesc );
+ static constexpr OUString aChanged(u"Changed01"_ustr);
+ aDesc.SetName( aChanged );
+ m_pDoc->ChgPageDesc( nPageDescCount, aDesc );
+
+ size_t nPos;
+ SwPageDesc *pDesc = m_pDoc->FindPageDesc( aChanged, &nPos );
+ CPPUNIT_ASSERT( pDesc != nullptr );
+ CPPUNIT_ASSERT_EQUAL( nPageDescCount, nPos );
+
+ // check if we didn't mess up PageDesc at pos 0
+ // (happens with 16bit int overflow)
+ OUString aZeroName = rZeroDesc.GetName();
+ rZeroDesc = m_pDoc->GetPageDesc( 0 );
+ CPPUNIT_ASSERT_EQUAL( aZeroName, rZeroDesc.GetName() );
+
+ m_pDoc->DelPageDesc( aChanged, /*bBroadcast*/true );
+ pDesc = m_pDoc->FindPageDesc( aChanged, &nPos );
+ // not there anymore
+ CPPUNIT_ASSERT( !pDesc );
+ CPPUNIT_ASSERT_EQUAL( std::numeric_limits<size_t>::max(), nPos);
+
+ // check if PageDesc at pos 0 is still there
+ pDesc = m_pDoc->FindPageDesc( aZeroName, &nPos );
+ CPPUNIT_ASSERT( pDesc != nullptr );
+ CPPUNIT_ASSERT_EQUAL( static_cast<size_t>(0), nPos );
+}
+
+void SwDocTest::testTdf92308()
+{
+ CPPUNIT_ASSERT_EQUAL(false, m_pDoc->HasInvisibleContent());
+}
+
+void SwDocTest::testTableCellComparison()
+{
+ CPPUNIT_ASSERT_EQUAL( -1, sw_CompareCellsByColFirst(u"A1", u"Z1") );
+ CPPUNIT_ASSERT_EQUAL( +1, sw_CompareCellsByColFirst(u"Z1", u"A1") );
+ CPPUNIT_ASSERT_EQUAL( 0, sw_CompareCellsByColFirst(u"A1", u"A1") );
+
+ CPPUNIT_ASSERT_EQUAL( +1, sw_CompareCellsByColFirst(u"A2", u"A1") );
+ CPPUNIT_ASSERT_EQUAL( +1, sw_CompareCellsByColFirst(u"Z3", u"A2") );
+ CPPUNIT_ASSERT_EQUAL( -1, sw_CompareCellsByColFirst(u"A3", u"Z1") );
+
+ CPPUNIT_ASSERT_EQUAL( -1, sw_CompareCellsByRowFirst(u"A1", u"Z1") );
+ CPPUNIT_ASSERT_EQUAL( +1, sw_CompareCellsByRowFirst(u"Z1", u"A1") );
+ CPPUNIT_ASSERT_EQUAL( 0, sw_CompareCellsByRowFirst(u"A1", u"A1") );
+
+ CPPUNIT_ASSERT_EQUAL( +1, sw_CompareCellsByRowFirst(u"A2", u"A1") );
+ CPPUNIT_ASSERT_EQUAL( +1, sw_CompareCellsByRowFirst(u"Z3", u"A2") );
+ CPPUNIT_ASSERT_EQUAL( +1, sw_CompareCellsByRowFirst(u"A3", u"Z1") );
+
+ CPPUNIT_ASSERT_EQUAL( 0, sw_CompareCellRanges(u"A1", u"A1", u"A1", u"A1", true) );
+ CPPUNIT_ASSERT_EQUAL( 0, sw_CompareCellRanges(u"A1", u"Z1", u"A1", u"Z1", true) );
+ CPPUNIT_ASSERT_EQUAL( 0, sw_CompareCellRanges(u"A1", u"Z1", u"A1", u"Z1", false) );
+
+ CPPUNIT_ASSERT_EQUAL( -1, sw_CompareCellRanges(u"A1", u"Z1", u"B1", u"Z1", true) );
+ CPPUNIT_ASSERT_EQUAL( -1, sw_CompareCellRanges(u"A1", u"Z1", u"A2", u"Z2", false) );
+ CPPUNIT_ASSERT_EQUAL( -1, sw_CompareCellRanges(u"A1", u"Z1", u"A2", u"Z2", true) );
+ CPPUNIT_ASSERT_EQUAL( -1, sw_CompareCellRanges(u"A1", u"Z1", u"A6", u"Z2", true) );
+
+ CPPUNIT_ASSERT_EQUAL( +1, sw_CompareCellRanges(u"B1", u"Z1", u"A1", u"Z1", true) );
+ CPPUNIT_ASSERT_EQUAL( +1, sw_CompareCellRanges(u"A2", u"Z2", u"A1", u"Z1", false) );
+ CPPUNIT_ASSERT_EQUAL( +1, sw_CompareCellRanges(u"A2", u"Z2", u"A1", u"Z1", true) );
+ CPPUNIT_ASSERT_EQUAL( +1, sw_CompareCellRanges(u"A6", u"Z2", u"A1", u"Z1", true) );
+
+ OUString rCell1("A1");
+ OUString rCell2("C5");
+
+ sw_NormalizeRange(rCell1, rCell2);
+ CPPUNIT_ASSERT_EQUAL( OUString("A1"), rCell1 );
+ CPPUNIT_ASSERT_EQUAL( OUString("C5"), rCell2 );
+
+ sw_NormalizeRange(rCell2, rCell1);
+ CPPUNIT_ASSERT_EQUAL( OUString("C5"), rCell1 );
+ CPPUNIT_ASSERT_EQUAL( OUString("A1"), rCell2 );
+
+ rCell1 = OUString("A5");
+ rCell2 = OUString("C1");
+
+ sw_NormalizeRange(rCell1, rCell2);
+ CPPUNIT_ASSERT_EQUAL( OUString("A1"), rCell1 );
+ CPPUNIT_ASSERT_EQUAL( OUString("C5"), rCell2 );
+
+ sw_NormalizeRange(rCell2, rCell1);
+ CPPUNIT_ASSERT_EQUAL( OUString("C5"), rCell1 );
+ CPPUNIT_ASSERT_EQUAL( OUString("A1"), rCell2 );
+
+ CPPUNIT_ASSERT_EQUAL( OUString(), sw_GetCellName(-1, -1) );
+}
+
+void SwDocTest::setUp()
+{
+ BootstrapFixture::setUp();
+
+ SwGlobals::ensure();
+ m_pDoc = new SwDoc;
+ m_xDocShRef = new SwDocShell(*m_pDoc, SfxObjectCreateMode::EMBEDDED);
+ m_xDocShRef->DoInitNew();
+}
+
+void SwDocTest::tearDown()
+{
+ m_pDoc = nullptr; // deleted by DoClose()
+ m_xDocShRef->DoClose();
+ m_xDocShRef.clear();
+
+ BootstrapFixture::tearDown();
+}
+
+CPPUNIT_TEST_SUITE_REGISTRATION(SwDocTest);
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/core/view/data/update-ole-object-previews.odt b/sw/qa/core/view/data/update-ole-object-previews.odt
new file mode 100644
index 0000000000..e6004afcb8
--- /dev/null
+++ b/sw/qa/core/view/data/update-ole-object-previews.odt
Binary files differ
diff --git a/sw/qa/core/view/view.cxx b/sw/qa/core/view/view.cxx
new file mode 100644
index 0000000000..576095c7f4
--- /dev/null
+++ b/sw/qa/core/view/view.cxx
@@ -0,0 +1,72 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include <swmodeltestbase.hxx>
+
+#include <svtools/embedhlp.hxx>
+#include <vcl/graph.hxx>
+
+#include <doc.hxx>
+#include <docsh.hxx>
+#include <fmtcntnt.hxx>
+#include <frameformats.hxx>
+#include <frmfmt.hxx>
+#include <ndarr.hxx>
+#include <ndindex.hxx>
+#include <ndole.hxx>
+#include <node.hxx>
+#include <nodeoffset.hxx>
+#include <wrtsh.hxx>
+
+namespace
+{
+/// Covers sw/source/core/view/ fixes.
+class Test : public SwModelTestBase
+{
+public:
+ Test()
+ : SwModelTestBase("/sw/qa/core/view/data/")
+ {
+ }
+};
+}
+
+CPPUNIT_TEST_FIXTURE(Test, testUpdateOleObjectPreviews)
+{
+ // Given a document with two embedded objects, both with broken native data:
+ createSwDoc("update-ole-object-previews.odt");
+ SwDoc* pDoc = getSwDoc();
+ SwWrtShell* pWrtShell = pDoc->GetDocShell()->GetWrtShell();
+
+ // When updating the previews of those embedded objects (right after document load, before
+ // painting the OLE objects):
+ pWrtShell->UpdateOleObjectPreviews();
+
+ // Then make sure that the working preview of those objects are not lost:
+ const auto pFormats = pDoc->GetSpzFrameFormats();
+ CPPUNIT_ASSERT(pFormats);
+ CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), pFormats->size());
+ for (auto pFormat : *pFormats)
+ {
+ const SwNodeIndex* pNodeIndex = pFormat->GetContent().GetContentIdx();
+ CPPUNIT_ASSERT(pNodeIndex);
+ SwNode* pNode = pDoc->GetNodes()[pNodeIndex->GetIndex() + 1];
+ SwOLENode* pOleNode = pNode->GetOLENode();
+ CPPUNIT_ASSERT(pOleNode);
+ SwOLEObj& rOleObj = pOleNode->GetOLEObj();
+ svt::EmbeddedObjectRef& rObject = rOleObj.GetObject();
+ // Without the accompanying fix in place, this test would have failed, the update broke the
+ // preview of the second embedded object.
+ CPPUNIT_ASSERT(!rObject.GetGraphic()->IsNone());
+ }
+}
+
+CPPUNIT_PLUGIN_IMPLEMENT();
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */